From 403e0a894b10783a8ab1407880e1d1e49c56ef26 Mon Sep 17 00:00:00 2001 From: Exitare Date: Fri, 20 Dec 2024 08:28:01 -0800 Subject: [PATCH 01/74] fix(DB/Loot)Add missing heavy stone loot entries (#20971) --- .../rev_1734571285903931000.sql | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1734571285903931000.sql diff --git a/data/sql/updates/pending_db_world/rev_1734571285903931000.sql b/data/sql/updates/pending_db_world/rev_1734571285903931000.sql new file mode 100644 index 000000000..104d6c0e5 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1734571285903931000.sql @@ -0,0 +1,22 @@ +-- +DELETE FROM `creature_loot_template` WHERE (`Entry` IN (2359, 4120, 6073, 4499, 824, 624, 2450, 4113, 2269, 4844, 4846, 623, 674, 1094, 4849, 3586, 1167, 1393, 14427)) AND (`Item` IN (2838)); +INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES +(2359, 2838, 0, 25, 0, 1, 0, 1, 2, 'Heavy Stone -- Elemental Slave'), +(4120, 2838, 0, 25, 0, 1, 0, 1, 2, 'Heavy Stone -- Thundering Boulderkin'), +(6073, 2838, 0, 25, 0, 1, 0, 1, 2, 'Heavy Stone -- Searing Infernal'), +(4499, 2838, 0, 4, 0, 1, 0, 1, 1, 'Heavy Stone -- Defias Worker'), +(824, 2838, 0, 4, 0, 1, 0, 1, 1, 'Defias Digger'), +(624, 2838, 0, 3, 0, 1, 0, 1, 1, 'Heavy Stone -- Undead Excavator'), +(2450, 2838, 0, 2, 0, 1, 0, 1, 3, 'Heavy Stone -- Miner Hackett'), +(4113, 2838, 0, 2.66, 0, 1, 0, 1, 3, 'Heavy Stone -- Gravelsnout Digger'), +(2269, 2838, 0, 1.44, 0, 1, 0, 1, 3, 'Heavy Stone -- Hillsbrad Miner'), +(4844, 2838, 0, 1.1, 0, 1, 0, 1, 3, 'Heavy Stone -- Shadowforge Surveyor'), +(4846, 2838, 0, 1.1, 0, 1, 0, 1, 3, 'Heavy Stone -- Shadowforge Digger'), +(623, 2838, 0, 1, 0, 1, 0, 1, 1, 'Heavy Stone -- Skeletal Miner'), +(674, 2838, 0, 0.9, 0, 1, 0, 1, 3, 'Heavy Stone -- Venture CO Stripminer'), +(1094, 2838, 0, 0.9, 0, 1, 0, 1, 3, 'Heavy Stone -- Venture CO Miner'), +(4849, 2838, 0, 0.81, 0, 1, 0, 1, 3, 'Heavy Stone -- Shadowforge Archaeologist'), +(3586, 2838, 0, 0.8, 0, 1, 0, 1, 1, 'Heavy Stone -- Miner Johnson'), +(1167, 2838, 0, 0.8, 0, 1, 0, 1, 1, 'Heavy Stone -- Stonesplinter Digger'), +(1393, 2838, 0, 0.6, 0, 1, 0, 1, 1, 'Heavy Stone -- Beserk Trogg'), +(14427, 2838, 0, 0.4, 0, 1, 0, 3, 3, 'Heavy Stone -- Gibblesnik'); \ No newline at end of file From 77a6a5b815f7d5ec359804cf6e6136b65b6951e6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 20 Dec 2024 16:29:05 +0000 Subject: [PATCH 02/74] chore(DB): import pending files Referenced commit(s): 403e0a894b10783a8ab1407880e1d1e49c56ef26 --- .../rev_1734571285903931000.sql => db_world/2024_12_20_01.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1734571285903931000.sql => db_world/2024_12_20_01.sql} (97%) diff --git a/data/sql/updates/pending_db_world/rev_1734571285903931000.sql b/data/sql/updates/db_world/2024_12_20_01.sql similarity index 97% rename from data/sql/updates/pending_db_world/rev_1734571285903931000.sql rename to data/sql/updates/db_world/2024_12_20_01.sql index 104d6c0e5..5a6f0b6dc 100644 --- a/data/sql/updates/pending_db_world/rev_1734571285903931000.sql +++ b/data/sql/updates/db_world/2024_12_20_01.sql @@ -1,3 +1,4 @@ +-- DB update 2024_12_20_00 -> 2024_12_20_01 -- DELETE FROM `creature_loot_template` WHERE (`Entry` IN (2359, 4120, 6073, 4499, 824, 624, 2450, 4113, 2269, 4844, 4846, 623, 674, 1094, 4849, 3586, 1167, 1393, 14427)) AND (`Item` IN (2838)); INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES From 9524e48c0f65191ff9db555766fde0cdd3383f46 Mon Sep 17 00:00:00 2001 From: Rocco Silipo <108557877+Rorschach91@users.noreply.github.com> Date: Fri, 20 Dec 2024 17:36:18 +0100 Subject: [PATCH 03/74] fix(DB/Object) Add Saronite Arrows in Phase 2. (#20975) --- .../pending_db_world/P2_Saronite_Arrows.sql | 201 ++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 data/sql/updates/pending_db_world/P2_Saronite_Arrows.sql diff --git a/data/sql/updates/pending_db_world/P2_Saronite_Arrows.sql b/data/sql/updates/pending_db_world/P2_Saronite_Arrows.sql new file mode 100644 index 000000000..d4ddb67a3 --- /dev/null +++ b/data/sql/updates/pending_db_world/P2_Saronite_Arrows.sql @@ -0,0 +1,201 @@ + +-- Add Arrows for Phase 2( Sniffed Position/Orientation) + +DELETE FROM `gameobject` WHERE (`id` = 190691) AND (`guid` IN (66234, 66236, 66237, 66238, 66239, 66240, 66241, 66242, 66243, 66244, 66256, 66257, 66314, 66320, 66327, 66333, 66337, 66350, 66386, 66387, 66388, 66390, 66391, 66394, 66395, 66398, 66399, 66400, 66402, 66416, 66417, 66418, 66419, 66433, 66434, 66435, 66459, 66460, 66461, 66462, 66463, 66464, 66465, 66466, 66467, 66468, 66469, 66470, 66474, 66477, 66478, 66479, 66484, 66491, 66499, 66505, 66509, 66516, 66518, 66520, 66521, 66600, 66601, 66602, 66603, 66604, 66605, 66606, 66607, 66608, 66609, 66610, 66636, 66637, 66638, 66674, 66675, 66676, 66677, 66680, 66690, 66692, 66694, 66707, 66714, 66716, 66718, 66719, 66720, 66721, 66722, 66723, 66724)); +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 +(66234, 190691, 609, 0, 0, 1, 2, 2123.6387, -5795.0356, 99.31831, 2.5747137, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66236, 190691, 609, 0, 0, 1, 2, 2085.0884, -5771.0396, 99.24098, 2.633809, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66237, 190691, 609, 0, 0, 1, 2, 2128.4812, -5861.964, 101.79257, 3.62098, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66238, 190691, 609, 0, 0, 1, 2, 2073.94, -5764.836, 99.47543, 2.6338243, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66239, 190691, 609, 0, 0, 1, 2, 2073.94, -5764.836, 99.47543, 2.6338243, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66240, 190691, 609, 0, 0, 1, 2, 1992.3824, -5784.0103, 100.81239, 2.879789, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66241, 190691, 609, 0, 0, 1, 2, 2002.1233, -5827.6704, 100.67761, 5.811947, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66242, 190691, 609, 0, 0, 1, 2, 2049.2368, -5845.334, 101.28788, 5.637414, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66243, 190691, 609, 0, 0, 1, 2, 2034.7698, -5849.362, 100.38089, 2.5830808, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66244, 190691, 609, 0, 0, 1, 2, 1992.5942, -5751.844, 101.293106, 3.2041564, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66256, 190691, 609, 0, 0, 1, 2, 2013.6654, -5757.4614, 100.92543, 3.0024395, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66257, 190691, 609, 0, 0, 1, 2, 2002.2798, -5751.238, 100.28231, 3.2041564, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66314, 190691, 609, 0, 0, 1, 2, 2056.2092, -5842.4326, 101.40695, 3.2728686, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66320, 190691, 609, 0, 0, 1, 2, 2025.1902, -5758.892, 100.18037, 3.02026, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66327, 190691, 609, 0, 0, 1, 2, 1996.4088, -5842.396, 100.7364, 3.38594, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66333, 190691, 609, 0, 0, 1, 2, 1961.3948, -5841.2725, 100.61539, 4.729844, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66337, 190691, 609, 0, 0, 1, 2, 1976.885, -5839.7812, 100.62573, 5.742135, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66350, 190691, 609, 0, 0, 1, 2, 1974.1791, -5808.8125, 101.05456, 3.9793549, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66386, 190691, 609, 0, 0, 1, 2, 1985.0178, -5824.089, 100.68411, 0.7155849, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66387, 190691, 609, 0, 0, 1, 2, 1986.0759, -5871.829, 100.72707, 1.2217293, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66388, 190691, 609, 0, 0, 1, 2, 1945.2169, -5809.99, 100.691086, 3.0966272, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66390, 190691, 609, 0, 0, 1, 2, 2063.1917, -5895.5386, 104.93898, 3.6205218, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66391, 190691, 609, 0, 0, 1, 2, 1978.1747, -5783.0503, 100.62018, 3.9401047, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66394, 190691, 609, 0, 0, 1, 2, 1960.6509, -5801.0396, 100.910286, 3.9401195, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66395, 190691, 609, 0, 0, 1, 2, 1986.6428, -5754.4897, 100.53683, 3.8135912, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66398, 190691, 609, 0, 0, 1, 2, 1953.3904, -5808.4883, 101.01305, 3.9396384, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66399, 190691, 609, 0, 0, 1, 2, 1946.0336, -5804.907, 100.59292, 3.3263502, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66400, 190691, 609, 0, 0, 1, 2, 2071.2483, -5763.3384, 99.87121, 2.6338243, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66402, 190691, 609, 0, 0, 1, 2, 2039.7643, -5906.7046, 105.286224, 3.0888205, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66416, 190691, 609, 0, 0, 1, 2, 1914.6744, -5834.2173, 100.37152, 1.3788092, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66417, 190691, 609, 0, 0, 1, 2, 1923.315, -5758.0312, 104.27794, 3.1205564, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66418, 190691, 609, 0, 0, 1, 2, 1899.3794, -5812.606, 100.99758, 3.3401446, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66419, 190691, 609, 0, 0, 1, 2, 1884.8516, -5835.8506, 101.27435, 2.6517444, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66433, 190691, 609, 0, 0, 1, 2, 1988.2023, -5905.0737, 103.40784, 3.1032207, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66434, 190691, 609, 0, 0, 1, 2, 1931.1116, -5911.1626, 101.47496, 3.736739, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66435, 190691, 609, 0, 0, 1, 2, 1901.2823, -5812.689, 100.86143, 4.4730635, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66459, 190691, 609, 0, 0, 1, 2, 1891.7834, -5822.647, 101.85674, 3.8966174, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66460, 190691, 609, 0, 0, 1, 2, 1965.7274, -5888.079, 102.252785, 4.5017023, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66461, 190691, 609, 0, 0, 1, 2, 1830.0138, -5818.806, 101.60298, 3.2022355, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66462, 190691, 609, 0, 0, 1, 2, 1861.3954, -5816.548, 100.18983, 3.21982, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66463, 190691, 609, 0, 0, 1, 2, 1862.0533, -5816.496, 100.23323, 3.21982, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66464, 190691, 609, 0, 0, 1, 2, 1830.64, -5924.63, 110.22774, 3.289136, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66465, 190691, 609, 0, 0, 1, 2, 1763.368, -5820.3086, 116.104294, 3.1376865, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66466, 190691, 609, 0, 0, 1, 2, 1771.0873, -5819.0786, 115.86837, 3.0985346, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66467, 190691, 609, 0, 0, 1, 2, 1765.3804, -5818.8335, 116.053604, 3.0986233, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66468, 190691, 609, 0, 0, 1, 2, 1805.0223, -5819.572, 108.09984, 3.151552, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66469, 190691, 609, 0, 0, 1, 2, 1799.2496, -5933.987, 115.95625, 3.4376955, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66470, 190691, 609, 0, 0, 1, 2, 1769.0741, -5931.673, 116.12647, 3.7480195, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66474, 190691, 609, 0, 0, 1, 2, 1755.3187, -5914.201, 116.09173, 2.6930852, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66477, 190691, 609, 0, 0, 1, 2, 1762.1227, -5817.0615, 116.05869, 3.156972, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66478, 190691, 609, 0, 0, 1, 2, 1756.3352, -5918.8296, 116.11929, 2.8022978, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66479, 190691, 609, 0, 0, 1, 2, 1671.5592, -5832.219, 116.33441, 1.8693184, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66484, 190691, 609, 0, 0, 1, 2, 1670.8466, -5829.9033, 116.656975, 1.8693184, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66491, 190691, 609, 0, 0, 1, 2, 1670.9194, -5830.1406, 116.62397, 1.8693184, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66499, 190691, 609, 0, 0, 1, 2, 1686.0815, -5851.0234, 116.54051, 1.9317135, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66505, 190691, 609, 0, 0, 1, 2, 1799.1763, -5819.629, 109.430016, 3.151552, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66509, 190691, 609, 0, 0, 1, 2, 1621.61, -5777.791, 116.11258, 2.9898148, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66516, 190691, 609, 0, 0, 1, 2, 1686.0815, -5851.0234, 116.54051, 1.9317135, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66518, 190691, 609, 0, 0, 1, 2, 1895.4905, -5819.1587, 101.21664, 3.8966174, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66520, 190691, 609, 0, 0, 1, 2, 1988.2023, -5905.0737, 103.40784, 3.1032207, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66521, 190691, 609, 0, 0, 1, 2, 2053.2026, -5842.8286, 101.24179, 3.2728686, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66600, 190691, 609, 0, 0, 1, 2, 1872.2634, -5874.153, 103.00137, 4.8772182, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66601, 190691, 609, 0, 0, 1, 2, 1940.7761, -5760.287, 103.94605, 3.3662097, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66602, 190691, 609, 0, 0, 1, 2, 1909.5654, -5778.5405, 101.86263, 4.4749866, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66603, 190691, 609, 0, 0, 1, 2, 2014.339, -5845.0737, 100.55747, 3.077108, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66604, 190691, 609, 0, 0, 1, 2, 1914.3354, -5768.8657, 103.23533, 3.4553163, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66605, 190691, 609, 0, 0, 1, 2, 1977.5481, -5783.6934, 100.627785, 3.9401047, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66606, 190691, 609, 0, 0, 1, 2, 1782.5889, -5819.573, 113.970634, 3.0985346, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66607, 190691, 609, 0, 0, 1, 2, 1757.7054, -5818.5005, 116.115585, 3.0980937, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66608, 190691, 609, 0, 0, 1, 2, 1665.2799, -5811.8164, 116.37822, 1.8693665, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66609, 190691, 609, 0, 0, 1, 2, 1575.1832, -5725.3354, 120.891266, 3.5115445, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66610, 190691, 609, 0, 0, 1, 2, 1756.3352, -5918.8296, 116.11929, 2.8022978, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66636, 190691, 609, 0, 0, 1, 2, 1770.0385, -5931.004, 116.12563, 3.7480195, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66637, 190691, 609, 0, 0, 1, 2, 1695.5388, -5833.481, 116.13345, 3.605054, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66638, 190691, 609, 0, 0, 1, 2, 1871.0338, -5866.7603, 103.05682, 4.8772182, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66674, 190691, 609, 0, 0, 1, 2, 1890.5739, -5910.3853, 102.459816, 3.1498792, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66675, 190691, 609, 0, 0, 1, 2, 1846.8546, -5821.57, 100.19991, 2.898973, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66676, 190691, 609, 0, 0, 1, 2, 1898.5533, -5816.2764, 100.98018, 3.896659, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66677, 190691, 609, 0, 0, 1, 2, 2080.05, -5886.793, 104.1466, 3.611832, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66680, 190691, 609, 0, 0, 1, 2, 2096.4055, -5878.481, 103.70926, 3.611791, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66690, 190691, 609, 0, 0, 1, 2, 2008.9229, -5756.7974, 100.806335, 3.0024395, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66692, 190691, 609, 0, 0, 1, 2, 1913.4982, -5771.6924, 102.54244, 4.4242997, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66694, 190691, 609, 0, 0, 1, 2, 2066.1157, -5894.036, 104.78343, 3.62098, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66707, 190691, 609, 0, 0, 1, 2, 1819.651, -5817.104, 104.0777, 3.1086764, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66714, 190691, 609, 0, 0, 1, 2, 1819.8297, -5819.427, 103.93707, 3.151928, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66716, 190691, 609, 0, 0, 1, 2, 1791.1454, -5930.194, 116.10103, 2.9340632, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66718, 190691, 609, 0, 0, 1, 2, 1756.3352, -5918.8296, 116.11929, 2.8022978, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66719, 190691, 609, 0, 0, 1, 2, 1766.993, -5933.116, 116.12829, 3.7480195, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66720, 190691, 609, 0, 0, 1, 2, 1755.1458, -5818.4126, 116.12125, 3.4063463, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66721, 190691, 609, 0, 0, 1, 2, 1746.2467, -5817.258, 116.121925, 0.3406124, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66722, 190691, 609, 0, 0, 1, 2, 1870.158, -5861.495, 103.20275, 4.8772182, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66723, 190691, 609, 0, 0, 1, 2, 1892.2543, -5839.8213, 101.16684, 2.6779408, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL), +(66724, 190691, 609, 0, 0, 1, 2, 1764.6449, -5934.745, 116.13034, 3.7480066, 0, 0, 0, 1, 180, 0, 1, '', 58158, NULL); + + +-- Create group + +DELETE FROM `pool_template` WHERE (`entry` IN (22384)); +INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES +(22384, 50, 'Saronite Arrows (Phase 2)'); + +DELETE FROM `pool_gameobject` WHERE (`pool_entry` IN (22384)); +INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES +(66234, 22384, 0, 'Saronite Arrow (190691)'), +(66236, 22384, 0, 'Saronite Arrow (190691)'), +(66237, 22384, 0, 'Saronite Arrow (190691)'), +(66238, 22384, 0, 'Saronite Arrow (190691)'), +(66239, 22384, 0, 'Saronite Arrow (190691)'), +(66240, 22384, 0, 'Saronite Arrow (190691)'), +(66241, 22384, 0, 'Saronite Arrow (190691)'), +(66242, 22384, 0, 'Saronite Arrow (190691)'), +(66243, 22384, 0, 'Saronite Arrow (190691)'), +(66244, 22384, 0, 'Saronite Arrow (190691)'), +(66256, 22384, 0, 'Saronite Arrow (190691)'), +(66257, 22384, 0, 'Saronite Arrow (190691)'), +(66314, 22384, 0, 'Saronite Arrow (190691)'), +(66320, 22384, 0, 'Saronite Arrow (190691)'), +(66327, 22384, 0, 'Saronite Arrow (190691)'), +(66333, 22384, 0, 'Saronite Arrow (190691)'), +(66337, 22384, 0, 'Saronite Arrow (190691)'), +(66350, 22384, 0, 'Saronite Arrow (190691)'), +(66386, 22384, 0, 'Saronite Arrow (190691)'), +(66387, 22384, 0, 'Saronite Arrow (190691)'), +(66388, 22384, 0, 'Saronite Arrow (190691)'), +(66390, 22384, 0, 'Saronite Arrow (190691)'), +(66391, 22384, 0, 'Saronite Arrow (190691)'), +(66394, 22384, 0, 'Saronite Arrow (190691)'), +(66395, 22384, 0, 'Saronite Arrow (190691)'), +(66398, 22384, 0, 'Saronite Arrow (190691)'), +(66399, 22384, 0, 'Saronite Arrow (190691)'), +(66400, 22384, 0, 'Saronite Arrow (190691)'), +(66402, 22384, 0, 'Saronite Arrow (190691)'), +(66416, 22384, 0, 'Saronite Arrow (190691)'), +(66417, 22384, 0, 'Saronite Arrow (190691)'), +(66418, 22384, 0, 'Saronite Arrow (190691)'), +(66419, 22384, 0, 'Saronite Arrow (190691)'), +(66433, 22384, 0, 'Saronite Arrow (190691)'), +(66434, 22384, 0, 'Saronite Arrow (190691)'), +(66435, 22384, 0, 'Saronite Arrow (190691)'), +(66459, 22384, 0, 'Saronite Arrow (190691)'), +(66460, 22384, 0, 'Saronite Arrow (190691)'), +(66461, 22384, 0, 'Saronite Arrow (190691)'), +(66462, 22384, 0, 'Saronite Arrow (190691)'), +(66463, 22384, 0, 'Saronite Arrow (190691)'), +(66464, 22384, 0, 'Saronite Arrow (190691)'), +(66465, 22384, 0, 'Saronite Arrow (190691)'), +(66466, 22384, 0, 'Saronite Arrow (190691)'), +(66467, 22384, 0, 'Saronite Arrow (190691)'), +(66468, 22384, 0, 'Saronite Arrow (190691)'), +(66469, 22384, 0, 'Saronite Arrow (190691)'), +(66470, 22384, 0, 'Saronite Arrow (190691)'), +(66474, 22384, 0, 'Saronite Arrow (190691)'), +(66477, 22384, 0, 'Saronite Arrow (190691)'), +(66478, 22384, 0, 'Saronite Arrow (190691)'), +(66479, 22384, 0, 'Saronite Arrow (190691)'), +(66484, 22384, 0, 'Saronite Arrow (190691)'), +(66491, 22384, 0, 'Saronite Arrow (190691)'), +(66499, 22384, 0, 'Saronite Arrow (190691)'), +(66505, 22384, 0, 'Saronite Arrow (190691)'), +(66509, 22384, 0, 'Saronite Arrow (190691)'), +(66516, 22384, 0, 'Saronite Arrow (190691)'), +(66518, 22384, 0, 'Saronite Arrow (190691)'), +(66520, 22384, 0, 'Saronite Arrow (190691)'), +(66521, 22384, 0, 'Saronite Arrow (190691)'), +(66600, 22384, 0, 'Saronite Arrow (190691)'), +(66601, 22384, 0, 'Saronite Arrow (190691)'), +(66602, 22384, 0, 'Saronite Arrow (190691)'), +(66603, 22384, 0, 'Saronite Arrow (190691)'), +(66604, 22384, 0, 'Saronite Arrow (190691)'), +(66605, 22384, 0, 'Saronite Arrow (190691)'), +(66606, 22384, 0, 'Saronite Arrow (190691)'), +(66607, 22384, 0, 'Saronite Arrow (190691)'), +(66608, 22384, 0, 'Saronite Arrow (190691)'), +(66609, 22384, 0, 'Saronite Arrow (190691)'), +(66610, 22384, 0, 'Saronite Arrow (190691)'), +(66636, 22384, 0, 'Saronite Arrow (190691)'), +(66637, 22384, 0, 'Saronite Arrow (190691)'), +(66638, 22384, 0, 'Saronite Arrow (190691)'), +(66674, 22384, 0, 'Saronite Arrow (190691)'), +(66675, 22384, 0, 'Saronite Arrow (190691)'), +(66676, 22384, 0, 'Saronite Arrow (190691)'), +(66677, 22384, 0, 'Saronite Arrow (190691)'), +(66680, 22384, 0, 'Saronite Arrow (190691)'), +(66690, 22384, 0, 'Saronite Arrow (190691)'), +(66692, 22384, 0, 'Saronite Arrow (190691)'), +(66694, 22384, 0, 'Saronite Arrow (190691)'), +(66707, 22384, 0, 'Saronite Arrow (190691)'), +(66714, 22384, 0, 'Saronite Arrow (190691)'), +(66716, 22384, 0, 'Saronite Arrow (190691)'), +(66718, 22384, 0, 'Saronite Arrow (190691)'), +(66719, 22384, 0, 'Saronite Arrow (190691)'), +(66720, 22384, 0, 'Saronite Arrow (190691)'), +(66721, 22384, 0, 'Saronite Arrow (190691)'), +(66722, 22384, 0, 'Saronite Arrow (190691)'), +(66723, 22384, 0, 'Saronite Arrow (190691)'), +(66724, 22384, 0, 'Saronite Arrow (190691)'); From b8aacb990dc208ad407c92620ae08a43e9c2a6c4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 20 Dec 2024 16:37:20 +0000 Subject: [PATCH 04/74] chore(DB): import pending files Referenced commit(s): 9524e48c0f65191ff9db555766fde0cdd3383f46 --- .../P2_Saronite_Arrows.sql => db_world/2024_12_20_02.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/P2_Saronite_Arrows.sql => db_world/2024_12_20_02.sql} (99%) diff --git a/data/sql/updates/pending_db_world/P2_Saronite_Arrows.sql b/data/sql/updates/db_world/2024_12_20_02.sql similarity index 99% rename from data/sql/updates/pending_db_world/P2_Saronite_Arrows.sql rename to data/sql/updates/db_world/2024_12_20_02.sql index d4ddb67a3..42d9af501 100644 --- a/data/sql/updates/pending_db_world/P2_Saronite_Arrows.sql +++ b/data/sql/updates/db_world/2024_12_20_02.sql @@ -1,3 +1,4 @@ +-- DB update 2024_12_20_01 -> 2024_12_20_02 -- Add Arrows for Phase 2( Sniffed Position/Orientation) From 08d5861a519a0dc85269f76458b55dbcb77bcda0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francesco=20Borz=C3=AC?= Date: Fri, 20 Dec 2024 23:42:45 +0100 Subject: [PATCH 05/74] Revert "chore(Licence): Add an agreement to relicense for futur PRs" (#20986) Revert "chore(Licence): Add an agreement to relicense for futur PRs (#20910)" This reverts commit 70b8b6f47ae891a0f0f996438174c6b671e9fecc. --- pull_request_template.md | 7 ------- 1 file changed, 7 deletions(-) diff --git a/pull_request_template.md b/pull_request_template.md index 2465f0e7a..b62291ba4 100644 --- a/pull_request_template.md +++ b/pull_request_template.md @@ -56,10 +56,3 @@ http://www.azerothcore.org/wiki/How-to-test-a-PR **REMEMBER**: when testing a PR that changes something **generic** (i.e. a part of code that handles more than one specific thing), the tester should not only check that the PR does its job (e.g. fixing spell XXX) but **especially** check that the PR does not cause any regression (i.e. introducing new bugs). **For example**: if a PR fixes spell X by changing a part of code that handles spells X, Y, and Z, we should not only test X, but **we should test Y and Z as well**. - -## Licence consent: -In the spirit of collaboration with other projects in the emulation scene, we encourage all new PRs to authorize sharing on GPLv2- based projects. - -- [X] I agree with sharing my contributions with GPLv2-based projects. - -Further information, here: https://github.com/azerothcore/azerothcore-wotlk/discussions/19868 From d2b88bdc1e851bc758cbf0fbd79ea742e29417a0 Mon Sep 17 00:00:00 2001 From: Kitzunu <24550914+Kitzunu@users.noreply.github.com> Date: Sat, 21 Dec 2024 22:19:49 +0100 Subject: [PATCH 06/74] feat(CI/Codestyle); Check for double semicolons (#20996) --- apps/codestyle/codestyle.py | 8 ++++++++ src/server/game/Entities/Player/Player.h | 2 +- src/server/game/Entities/Player/PlayerSettings.cpp | 2 +- src/server/game/Handlers/MiscHandler.cpp | 2 +- src/server/game/Instances/InstanceSaveMgr.h | 2 +- 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/apps/codestyle/codestyle.py b/apps/codestyle/codestyle.py index 5cbf1691a..27f273799 100644 --- a/apps/codestyle/codestyle.py +++ b/apps/codestyle/codestyle.py @@ -222,6 +222,9 @@ def misc_codestyle_check(file: io, file_path: str) -> None: # used to check for "if/else (...) {" "} else" ignores "if/else (...) {...}" "#define ... if/else (...) {" ifelse_curlyregex = r"^[^#define].*\s+(if|else)(\s*\(.*\))?\s*{[^}]*$|}\s*else(\s*{[^}]*$)" + # used to catch double semicolons ";;" ignores "(;;)" + double_semiregex = r"[^(];;[^)]" + # Parse all the file for line_number, line in enumerate(file, start = 1): if 'const auto&' in line: @@ -240,6 +243,11 @@ def misc_codestyle_check(file: io, file_path: str) -> None: print( f"Curly brackets are not allowed to be leading or trailing if/else statements. Place it on a new line: {file_path} at line {line_number}") check_failed = True + if re.match(double_semiregex, line): + print( + f"Double semicolon (;;) found in {file_path} at line {line_number}") + check_failed = True + # Handle the script error and update the result output if check_failed: error_handler = True diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 3460058e0..5e955a06f 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -444,7 +444,7 @@ struct Runes struct EnchantDuration { - EnchantDuration() = default;; + EnchantDuration() = default; EnchantDuration(Item* _item, EnchantmentSlot _slot, uint32 _leftduration) : item(_item), slot(_slot), leftduration(_leftduration) { ASSERT(item); }; diff --git a/src/server/game/Entities/Player/PlayerSettings.cpp b/src/server/game/Entities/Player/PlayerSettings.cpp index 7e45d03db..0c25361dd 100644 --- a/src/server/game/Entities/Player/PlayerSettings.cpp +++ b/src/server/game/Entities/Player/PlayerSettings.cpp @@ -38,7 +38,7 @@ void Player::_LoadCharacterSettings(PreparedQueryResult result) { Field* fields = result->Fetch(); - std::string source = fields[0].Get();; + std::string source = fields[0].Get(); std::string data = fields[1].Get(); std::vector tokens = Acore::Tokenize(data, ' ', false); diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index e248575a6..6fe94f321 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -268,7 +268,7 @@ void WorldSession::HandleWhoOpcode(WorldPacket& recvData) return; wstrToLower(wpacketPlayerName); - wstrToLower(wpacketGuildName);; + wstrToLower(wpacketGuildName); // client send in case not set max level value 100 but Acore supports 255 max level, // update it to show GMs with characters after 100 level diff --git a/src/server/game/Instances/InstanceSaveMgr.h b/src/server/game/Instances/InstanceSaveMgr.h index 7c6f18371..686a6fe72 100644 --- a/src/server/game/Instances/InstanceSaveMgr.h +++ b/src/server/game/Instances/InstanceSaveMgr.h @@ -108,7 +108,7 @@ class InstanceSaveMgr friend class InstanceSave; private: - InstanceSaveMgr() = default;; + InstanceSaveMgr() = default; ~InstanceSaveMgr(); public: From 99e5d73beb6fa03c0f78fda978a61e1e7a33c1a7 Mon Sep 17 00:00:00 2001 From: sudlud Date: Sat, 21 Dec 2024 22:44:12 +0100 Subject: [PATCH 07/74] feat(CI/modules_build): trigger on file change instead label (#20997) --- .github/workflows/core_modules_build.yml | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/.github/workflows/core_modules_build.yml b/.github/workflows/core_modules_build.yml index a0381601d..2516de27e 100644 --- a/.github/workflows/core_modules_build.yml +++ b/.github/workflows/core_modules_build.yml @@ -4,11 +4,16 @@ on: branches: - 'master' pull_request: - types: - - labeled - - opened - - reopened - - synchronize + paths: + - 'src/*' + - 'src/common/**/*' + - 'src/genrev/**/*' + - 'src/server/*' + - 'src/server/apps/**/*' + - 'src/server/database/**/*' + - 'src/server/game/**/*' + - 'src/server/shared/**/*' + - 'src/tools/**/*' concurrency: group: ${{ github.head_ref }} || concat(${{ github.ref }}, ${{ github.workflow }}) @@ -27,14 +32,6 @@ jobs: runs-on: ${{ matrix.os }} name: ${{ matrix.os }}-${{ matrix.compiler.CC }}-nopch-modules if: github.repository == 'azerothcore/azerothcore-wotlk' - && !github.event.pull_request.draft - && ( - github.ref_name == 'master' - || contains(github.event.pull_request.labels.*.name, 'file-cpp' - || github.event.label.name == 'file-cpp' - || contains(github.event.pull_request.labels.*.name, 'run-build') - || github.event.label.name == 'run-build') - ) steps: - uses: actions/checkout@v4 # This script installs a general list of modules to compile with From 2c20c9463a87701697790c8801a9481c8b8b5f37 Mon Sep 17 00:00:00 2001 From: Kitzunu <24550914+Kitzunu@users.noreply.github.com> Date: Sun, 22 Dec 2024 00:43:23 +0100 Subject: [PATCH 08/74] feat(CI/Codestyle): Check for tabs (#20998) --- apps/codestyle/codestyle.py | 6 ++++++ src/cmake/macros/FindMySQL.cmake | 18 +++++++++--------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/apps/codestyle/codestyle.py b/apps/codestyle/codestyle.py index 27f273799..77ff3f376 100644 --- a/apps/codestyle/codestyle.py +++ b/apps/codestyle/codestyle.py @@ -224,6 +224,8 @@ def misc_codestyle_check(file: io, file_path: str) -> None: ifelse_curlyregex = r"^[^#define].*\s+(if|else)(\s*\(.*\))?\s*{[^}]*$|}\s*else(\s*{[^}]*$)" # used to catch double semicolons ";;" ignores "(;;)" double_semiregex = r"[^(];;[^)]" + # used to catch tabs + tab_regex = r"\t" # Parse all the file for line_number, line in enumerate(file, start = 1): @@ -247,6 +249,10 @@ def misc_codestyle_check(file: io, file_path: str) -> None: print( f"Double semicolon (;;) found in {file_path} at line {line_number}") check_failed = True + if re.match(tab_regex, line): + print( + f"Tab found! Replace it to 4 spaces: {file_path} at line {line_number}") + check_failed = True # Handle the script error and update the result output if check_failed: diff --git a/src/cmake/macros/FindMySQL.cmake b/src/cmake/macros/FindMySQL.cmake index b78dfc2d8..2a8de7e7a 100644 --- a/src/cmake/macros/FindMySQL.cmake +++ b/src/cmake/macros/FindMySQL.cmake @@ -161,7 +161,7 @@ if(WIN32) set(_MYSQL_ROOT_PATHS ${_MYSQL_ROOT_PATHS} - ${_MYSQL_ROOT_PATHS_VERSION_SUBDIRECTORIES} + ${_MYSQL_ROOT_PATHS_VERSION_SUBDIRECTORIES} "${PROGRAM_FILES_64}/MySQL" "${PROGRAM_FILES_32}/MySQL" "$ENV{SystemDrive}/MySQL" @@ -180,7 +180,7 @@ find_path(MYSQL_INCLUDE_DIR /usr/local/include /usr/local/include/mysql /usr/local/mysql/include - ${_MYSQL_ROOT_PATHS} + ${_MYSQL_ROOT_PATHS} PATH_SUFFIXES include include/mysql @@ -270,10 +270,10 @@ set(MYSQL_REQUIRED_VARS "") foreach(_comp IN LISTS MySQL_FIND_COMPONENTS) if(_comp STREQUAL "lib") set(MySQL_${_comp}_WANTED TRUE) - if(MySQL_FIND_REQUIRED_${_comp}) - list(APPEND MYSQL_REQUIRED_VARS "MYSQL_LIBRARY") - list(APPEND MYSQL_REQUIRED_VARS "MYSQL_INCLUDE_DIR") - endif() + if(MySQL_FIND_REQUIRED_${_comp}) + list(APPEND MYSQL_REQUIRED_VARS "MYSQL_LIBRARY") + list(APPEND MYSQL_REQUIRED_VARS "MYSQL_INCLUDE_DIR") + endif() if(EXISTS "${MYSQL_LIBRARY}" AND EXISTS "${MYSQL_INCLUDE_DIR}") set(MySQL_${_comp}_FOUND TRUE) else() @@ -281,9 +281,9 @@ foreach(_comp IN LISTS MySQL_FIND_COMPONENTS) endif() elseif(_comp STREQUAL "binary") set(MySQL_${_comp}_WANTED TRUE) - if(MySQL_FIND_REQUIRED_${_comp}) - list(APPEND MYSQL_REQUIRED_VARS "MYSQL_EXECUTABLE") - endif() + if(MySQL_FIND_REQUIRED_${_comp}) + list(APPEND MYSQL_REQUIRED_VARS "MYSQL_EXECUTABLE") + endif() if(EXISTS "${MYSQL_EXECUTABLE}" ) set(MySQL_${_comp}_FOUND TRUE) else() From d278266b56f3e2a8ca131c11f49c1dab61cbf343 Mon Sep 17 00:00:00 2001 From: Rocco Silipo <108557877+Rorschach91@users.noreply.github.com> Date: Sun, 22 Dec 2024 08:43:56 +0100 Subject: [PATCH 09/74] fix(Creature/Loot) Remove Black Pearl item from all creatures. (#20988) --- data/sql/updates/pending_db_world/remove_black_pearl.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 data/sql/updates/pending_db_world/remove_black_pearl.sql diff --git a/data/sql/updates/pending_db_world/remove_black_pearl.sql b/data/sql/updates/pending_db_world/remove_black_pearl.sql new file mode 100644 index 000000000..725ddfd54 --- /dev/null +++ b/data/sql/updates/pending_db_world/remove_black_pearl.sql @@ -0,0 +1,4 @@ + +-- Remove Black Pearl Item from all creature loot tables. + +DELETE FROM `creature_loot_template` WHERE (`Entry` IN (6347, 6348, 6349, 6350, 6351, 6352, 6369, 6370, 6371, 6372, 6649, 7246, 7864, 7885, 7886, 7977, 8136, 8408, 8716, 8761, 8905, 11741, 11783, 11793, 12207, 12397, 13599, 13896, 14123, 14446, 14638, 14639, 15206, 504, 595, 747, 750, 751, 752, 922, 950, 979, 1729, 1791, 1809, 1907, 2043, 2255, 2408, 2505, 2544, 2574, 2583, 2659, 2680, 2701, 2715, 2718, 2791, 2793, 2817, 2926, 3715, 4096, 4374, 4467, 4648, 4663, 4687, 5232, 5238, 5268, 5269, 5286, 5307, 5308, 5328, 5331, 5332, 5333, 5334, 5335, 5336, 5337, 5343, 5423, 5431, 5432, 5461, 5462, 5466, 5615, 5616, 5618, 5623, 5843, 5856, 5974, 6116, 6117, 6135, 6136, 6137, 6138, 6140, 6143, 6144, 6147, 6190, 6193, 6194, 6195, 6196, 6199, 6202)) AND (`Item` IN (7971)); From dc79f26e0464fe63e1bcd78fd5c3bd8ade0b299a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 22 Dec 2024 07:44:54 +0000 Subject: [PATCH 10/74] chore(DB): import pending files Referenced commit(s): d278266b56f3e2a8ca131c11f49c1dab61cbf343 --- .../remove_black_pearl.sql => db_world/2024_12_22_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/remove_black_pearl.sql => db_world/2024_12_22_00.sql} (94%) diff --git a/data/sql/updates/pending_db_world/remove_black_pearl.sql b/data/sql/updates/db_world/2024_12_22_00.sql similarity index 94% rename from data/sql/updates/pending_db_world/remove_black_pearl.sql rename to data/sql/updates/db_world/2024_12_22_00.sql index 725ddfd54..4d1c8d5f1 100644 --- a/data/sql/updates/pending_db_world/remove_black_pearl.sql +++ b/data/sql/updates/db_world/2024_12_22_00.sql @@ -1,3 +1,4 @@ +-- DB update 2024_12_20_02 -> 2024_12_22_00 -- Remove Black Pearl Item from all creature loot tables. From f011cbb60284109c2a66f042f34caa110cd961f3 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Sun, 22 Dec 2024 08:56:54 +0100 Subject: [PATCH 11/74] refactor(Core/Unit): Add naming for all ShapeshiftFlags (#20989) --- src/server/game/Entities/Unit/Unit.cpp | 2 +- src/server/game/Entities/Unit/UnitDefines.h | 21 +++++++++++++++++++++ src/server/game/Spells/Spell.cpp | 2 +- src/server/game/Spells/SpellInfo.cpp | 4 ++-- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index c5cc5b808..2f7d6275b 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -21276,7 +21276,7 @@ bool Unit::IsInDisallowedMountForm() const return true; } - if (!(shapeshift->flags1 & 0x1)) + if (!(shapeshift->flags1 & SHAPESHIFT_FLAG_STANCE)) { return true; } diff --git a/src/server/game/Entities/Unit/UnitDefines.h b/src/server/game/Entities/Unit/UnitDefines.h index b694bbcd9..040e2c89f 100644 --- a/src/server/game/Entities/Unit/UnitDefines.h +++ b/src/server/game/Entities/Unit/UnitDefines.h @@ -99,6 +99,27 @@ enum ShapeshiftForm FORM_SPIRITOFREDEMPTION = 0x20 }; +enum ShapeshiftFlags +{ + SHAPESHIFT_FLAG_STANCE = 0x00000001, // Form allows various player activities, which normally cause "You can't X while shapeshifted." errors (npc/go interaction, item use, etc) + SHAPESHIFT_FLAG_NOT_TOGGLEABLE = 0x00000002, // NYI + SHAPESHIFT_FLAG_PERSIST_ON_DEATH = 0x00000004, // NYI + SHAPESHIFT_FLAG_CAN_NPC_INTERACT = 0x00000008, // Form unconditionally allows talking to NPCs while shapeshifted (even if other activities are disabled) + SHAPESHIFT_FLAG_DONT_USE_WEAPON = 0x00000010, // NYI + SHAPESHIFT_FLAG_AGILITY_ATTACK_BONUS = 0x00000020, // Druid Cat form + SHAPESHIFT_FLAG_CAN_USE_EQUIPPED_ITEMS = 0x00000040, // NYI + SHAPESHIFT_FLAG_CAN_USE_ITEMS = 0x00000080, // NYI + SHAPESHIFT_FLAG_DONT_AUTO_UNSHIFT = 0x00000100, // Handled at client side + SHAPESHIFT_FLAG_CONSIDERED_DEAD = 0x00000200, // NYI + SHAPESHIFT_FLAG_CAN_ONLY_CAST_SHAPESHIFT_SPELLS = 0x00000400, // NYI + SHAPESHIFT_FLAG_STANCE_CANCEL_AT_FLIGHTMASTER = 0x00000800, // NYI + SHAPESHIFT_FLAG_NO_EMOTE_SOUNDS = 0x00001000, // NYI + SHAPESHIFT_FLAG_NO_TRIGGER_TELEPORT = 0x00002000, // NYI + SHAPESHIFT_FLAG_CANNOT_CHANGE_EQUIPPED_ITEMS = 0x00004000, // NYI + SHAPESHIFT_FLAG_RESUMMON_PETS_ON_UNSHIFT = 0x00008000, // NYI + SHAPESHIFT_FLAG_CANNOT_USE_GAME_OBJECTS = 0x00010000, // NYI +}; + // low byte (0 from 0..3) of UNIT_FIELD_BYTES_2 enum SheathState { diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 7e70af2be..c3d8fac76 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -5832,7 +5832,7 @@ SpellCastResult Spell::CheckCast(bool strict) if (effInfo->ApplyAuraName == SPELL_AURA_MOD_SHAPESHIFT) { SpellShapeshiftFormEntry const* shapeShiftEntry = sSpellShapeshiftFormStore.LookupEntry(effInfo->MiscValue); - if (shapeShiftEntry && (shapeShiftEntry->flags1 & 1) == 0) // unk flag + if (shapeShiftEntry && (shapeShiftEntry->flags1 & SHAPESHIFT_FLAG_STANCE) == 0) checkMask |= VEHICLE_SEAT_FLAG_UNCONTROLLED; break; } diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 9716102a5..421f96a5d 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -1457,7 +1457,7 @@ SpellCastResult SpellInfo::CheckShapeshift(uint32 form) const LOG_ERROR("spells", "GetErrorAtShapeshiftedCast: unknown shapeshift {}", form); return SPELL_CAST_OK; } - actAsShifted = !(shapeInfo->flags1 & 1); // shapeshift acts as normal form for spells + actAsShifted = !(shapeInfo->flags1 & SHAPESHIFT_FLAG_STANCE); // shapeshift acts as normal form for spells } if (actAsShifted) @@ -1477,7 +1477,7 @@ SpellCastResult SpellInfo::CheckShapeshift(uint32 form) const // Check if stance disables cast of not-stance spells // Example: cannot cast any other spells in zombie or ghoul form /// @todo: Find a way to disable use of these spells clientside - if (shapeInfo && shapeInfo->flags1 & 0x400) + if (shapeInfo && (shapeInfo->flags1 & SHAPESHIFT_FLAG_CAN_ONLY_CAST_SHAPESHIFT_SPELLS)) { if (!(stanceMask & Stances)) return SPELL_FAILED_ONLY_SHAPESHIFT; From ebf7f7583bb32d03e120208a87d4092f462aa0f2 Mon Sep 17 00:00:00 2001 From: sudlud Date: Sun, 22 Dec 2024 09:02:15 +0100 Subject: [PATCH 12/74] fix(CI): do not run on draft PRs (#21009) --- .github/workflows/codestyle.yml | 2 +- .github/workflows/core-build-nopch.yml | 2 +- .github/workflows/core_modules_build.yml | 2 +- .github/workflows/pr_labeler.yml | 2 +- .github/workflows/sql-codestyle.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/codestyle.yml b/.github/workflows/codestyle.yml index 74f932050..f30e53375 100644 --- a/.github/workflows/codestyle.yml +++ b/.github/workflows/codestyle.yml @@ -10,7 +10,7 @@ jobs: triage: runs-on: ubuntu-latest name: C++ - if: github.repository == 'azerothcore/azerothcore-wotlk' + if: github.repository == 'azerothcore/azerothcore-wotlk' && !github.event.pull_request.draft steps: - uses: actions/checkout@v4 - name: Setup python diff --git a/.github/workflows/core-build-nopch.yml b/.github/workflows/core-build-nopch.yml index a72f9c6cc..e64fbffcc 100644 --- a/.github/workflows/core-build-nopch.yml +++ b/.github/workflows/core-build-nopch.yml @@ -33,7 +33,7 @@ jobs: CXX: g++-14 runs-on: ${{ matrix.os }} name: ${{ matrix.os }}-${{ matrix.compiler.CC }}-nopch - if: github.repository == 'azerothcore/azerothcore-wotlk' + if: github.repository == 'azerothcore/azerothcore-wotlk' && !github.event.pull_request.draft steps: - uses: actions/checkout@v4 - uses: ./.github/actions/linux-build diff --git a/.github/workflows/core_modules_build.yml b/.github/workflows/core_modules_build.yml index 2516de27e..440225a08 100644 --- a/.github/workflows/core_modules_build.yml +++ b/.github/workflows/core_modules_build.yml @@ -31,7 +31,7 @@ jobs: CXX: clang++-18 runs-on: ${{ matrix.os }} name: ${{ matrix.os }}-${{ matrix.compiler.CC }}-nopch-modules - if: github.repository == 'azerothcore/azerothcore-wotlk' + if: github.repository == 'azerothcore/azerothcore-wotlk' && !github.event.pull_request.draft steps: - uses: actions/checkout@v4 # This script installs a general list of modules to compile with diff --git a/.github/workflows/pr_labeler.yml b/.github/workflows/pr_labeler.yml index 21b73fc84..1c3632972 100644 --- a/.github/workflows/pr_labeler.yml +++ b/.github/workflows/pr_labeler.yml @@ -6,7 +6,7 @@ jobs: triage: runs-on: ubuntu-24.04 permissions: write-all - if: github.repository == 'azerothcore/azerothcore-wotlk' + if: github.repository == 'azerothcore/azerothcore-wotlk' && !github.event.pull_request.draft steps: - uses: actions/checkout@v4 with: diff --git a/.github/workflows/sql-codestyle.yml b/.github/workflows/sql-codestyle.yml index cfd83fe07..a02088716 100644 --- a/.github/workflows/sql-codestyle.yml +++ b/.github/workflows/sql-codestyle.yml @@ -10,7 +10,7 @@ jobs: triage: runs-on: ubuntu-latest name: SQL - if: github.repository == 'azerothcore/azerothcore-wotlk' + if: github.repository == 'azerothcore/azerothcore-wotlk' && !github.event.pull_request.draft steps: - uses: actions/checkout@v4 - name: Check pending SQL From 2110f7cc84759d9c2beb4025eec620f84b722ed2 Mon Sep 17 00:00:00 2001 From: EricksOliveira Date: Sun, 22 Dec 2024 08:03:28 +0000 Subject: [PATCH 13/74] Core/TempSummons: avoid use MoveInLineOfSight before InitSummon (#20999) --- src/server/game/Entities/Creature/TemporarySummon.cpp | 5 +++++ src/server/game/Entities/Creature/TemporarySummon.h | 1 + src/server/game/Entities/Object/Object.cpp | 4 +++- src/server/game/Entities/Object/Object.h | 1 + src/server/game/Maps/Map.cpp | 2 +- 5 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/server/game/Entities/Creature/TemporarySummon.cpp b/src/server/game/Entities/Creature/TemporarySummon.cpp index 9513d1fc9..28b923d1e 100644 --- a/src/server/game/Entities/Creature/TemporarySummon.cpp +++ b/src/server/game/Entities/Creature/TemporarySummon.cpp @@ -274,6 +274,11 @@ void TempSummon::InitSummon() } } +void TempSummon::UpdateObjectVisibilityOnCreate() +{ + WorldObject::UpdateObjectVisibility(true); +} + void TempSummon::SetTempSummonType(TempSummonType type) { m_type = type; diff --git a/src/server/game/Entities/Creature/TemporarySummon.h b/src/server/game/Entities/Creature/TemporarySummon.h index e5bc369bd..18cc72979 100644 --- a/src/server/game/Entities/Creature/TemporarySummon.h +++ b/src/server/game/Entities/Creature/TemporarySummon.h @@ -45,6 +45,7 @@ public: virtual void InitStats(uint32 lifetime); virtual void InitSummon(); virtual void UnSummon(uint32 msTime = 0); + void UpdateObjectVisibilityOnCreate() override; void RemoveFromWorld() override; void SetTempSummonType(TempSummonType type); void SaveToDB(uint32 /*mapid*/, uint8 /*spawnMask*/, uint32 /*phaseMask*/) override {} diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 317b3441c..fe37ea46c 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -2274,7 +2274,9 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert summon->InitSummon(); - //ObjectAccessor::UpdateObjectVisibility(summon); + // call MoveInLineOfSight for nearby creatures + Acore::AIRelocationNotifier notifier(*summon); + Cell::VisitAllObjects(summon, notifier, GetVisibilityRange()); return summon; } diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index 2fe73c1ae..043a34d6d 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -558,6 +558,7 @@ public: void DestroyForNearbyPlayers(); virtual void UpdateObjectVisibility(bool forced = true, bool fromUpdate = false); + virtual void UpdateObjectVisibilityOnCreate() { UpdateObjectVisibility(true); } void BuildUpdate(UpdateDataMapType& data_map, UpdatePlayerSet& player_set) override; void GetCreaturesWithEntryInRange(std::list& creatureList, float radius, uint32 entry); diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 0dac0aed7..ccf24f0a3 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -561,7 +561,7 @@ bool Map::AddToMap(T* obj, bool checkTransport) if (obj->IsInWorld()) { ASSERT(obj->IsInGrid()); - obj->UpdateObjectVisibility(true); + obj->UpdateObjectVisibilityOnCreate(); return true; } From 1462d1ae39e4b68e934ae32527cb47d57cb5ce68 Mon Sep 17 00:00:00 2001 From: Kitzunu <24550914+Kitzunu@users.noreply.github.com> Date: Sun, 22 Dec 2024 09:42:21 +0100 Subject: [PATCH 14/74] fix(Script/Command): Allow guid for npc move and delete (#21008) --- src/server/scripts/Commands/cs_npc.cpp | 38 +++++++++++++++++--------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp index 2cc199bd0..c8bc8d917 100644 --- a/src/server/scripts/Commands/cs_npc.cpp +++ b/src/server/scripts/Commands/cs_npc.cpp @@ -373,20 +373,24 @@ public: return true; } - static bool HandleNpcDeleteCommand(ChatHandler* handler) + static bool HandleNpcDeleteCommand(ChatHandler* handler, Optional lowGuid) { - Creature* unit = handler->getSelectedCreature(); + Creature* creature; + if (lowGuid.has_value()) + creature = handler->GetCreatureFromPlayerMapByDbGuid(*lowGuid); + else + creature = handler->getSelectedCreature(); - if (!unit || unit->IsPet() || unit->IsTotem()) + if (!creature || creature->IsPet() || creature->IsTotem()) { handler->SendErrorMessage(LANG_SELECT_CREATURE); return false; } // Delete the creature - unit->CombatStop(); - unit->DeleteFromDB(); - unit->AddObjectToRemoveList(); + creature->CombatStop(); + creature->DeleteFromDB(); + creature->AddObjectToRemoveList(); handler->SendSysMessage(LANG_COMMAND_DELCREATMESSAGE); @@ -711,25 +715,33 @@ public: } //move selected creature - static bool HandleNpcMoveCommand(ChatHandler* handler) + static bool HandleNpcMoveCommand(ChatHandler* handler, Optional guid) { - Creature* creature = handler->getSelectedCreature(); + Creature* creature; + if (guid.has_value()) + creature = handler->GetCreatureFromPlayerMapByDbGuid(*guid); + else + creature = handler->getSelectedCreature(); if (!creature) return false; - ObjectGuid::LowType lowguid = creature->GetSpawnId(); + ObjectGuid::LowType lowGuid; + if (guid.has_value()) + lowGuid = *guid; + else + lowGuid = creature->GetSpawnId(); - CreatureData const* data = sObjectMgr->GetCreatureData(lowguid); + CreatureData const* data = sObjectMgr->GetCreatureData(lowGuid); if (!data) { - handler->SendErrorMessage(LANG_COMMAND_CREATGUIDNOTFOUND, lowguid); + handler->SendErrorMessage(LANG_COMMAND_CREATGUIDNOTFOUND, lowGuid); return false; } if (handler->GetSession()->GetPlayer()->GetMapId() != data->mapid) { - handler->SendErrorMessage(LANG_COMMAND_CREATUREATSAMEMAP, lowguid); + handler->SendErrorMessage(LANG_COMMAND_CREATUREATSAMEMAP, lowGuid); return false; } @@ -763,7 +775,7 @@ public: stmt->SetData(1, y); stmt->SetData(2, z); stmt->SetData(3, o); - stmt->SetData(4, lowguid); + stmt->SetData(4, lowGuid); WorldDatabase.Execute(stmt); From 7714ca31a253981d354a452001cca4d3792ab2f5 Mon Sep 17 00:00:00 2001 From: Kitzunu <24550914+Kitzunu@users.noreply.github.com> Date: Sun, 22 Dec 2024 09:42:39 +0100 Subject: [PATCH 15/74] =?UTF-8?q?refactor(Core/Time):=20Introduce=20GetExp?= =?UTF-8?q?irationTime=20instead=20of=20calculati=E2=80=A6=20(#21006)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/Asio/SteadyTimer.h | 31 ++++++++++++++++++++++++++ src/common/Metric/Metric.cpp | 9 +++----- src/server/apps/authserver/Main.cpp | 17 +++++--------- src/server/apps/worldserver/Main.cpp | 9 +++----- src/server/shared/Realms/RealmList.cpp | 7 +++--- 5 files changed, 45 insertions(+), 28 deletions(-) create mode 100644 src/common/Asio/SteadyTimer.h diff --git a/src/common/Asio/SteadyTimer.h b/src/common/Asio/SteadyTimer.h new file mode 100644 index 000000000..2c5a6fd7f --- /dev/null +++ b/src/common/Asio/SteadyTimer.h @@ -0,0 +1,31 @@ +/* + * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by the + * Free Software Foundation; either version 3 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#ifndef _STEADYTIMER_H +#define _STEADYTIMER_H + +#include + +namespace Acore::Asio::SteadyTimer +{ + inline auto GetExpirationTime(int32 seconds) + { + return std::chrono::steady_clock::now() + std::chrono::seconds(seconds); + } +} + +#endif // _STEADYTIMER_H diff --git a/src/common/Metric/Metric.cpp b/src/common/Metric/Metric.cpp index a6cd4b1f2..7c4771dca 100644 --- a/src/common/Metric/Metric.cpp +++ b/src/common/Metric/Metric.cpp @@ -18,6 +18,7 @@ #include "Metric.h" #include "Config.h" #include "Log.h" +#include "SteadyTimer.h" #include "Strand.h" #include "Tokenize.h" #include @@ -246,9 +247,7 @@ void Metric::ScheduleSend() { if (_enabled) { - // Calculate the expiration time - auto expirationTime = std::chrono::steady_clock::now() + std::chrono::seconds(_updateInterval); - _batchTimer->expires_at(expirationTime); + _batchTimer->expires_at(Acore::Asio::SteadyTimer::GetExpirationTime(_updateInterval)); _batchTimer->async_wait(std::bind(&Metric::SendBatch, this)); } else @@ -281,9 +280,7 @@ void Metric::ScheduleOverallStatusLog() { if (_enabled) { - // Calculate the expiration time _overallStatusTimerInterval from now - auto expirationTime = std::chrono::steady_clock::now() + std::chrono::seconds(_overallStatusTimerInterval); - _overallStatusTimer->expires_at(expirationTime); + _overallStatusTimer->expires_at(Acore::Asio::SteadyTimer::GetExpirationTime(_overallStatusTimerInterval)); _overallStatusTimer->async_wait([this](const boost::system::error_code&) { _overallStatusTimerTriggered = true; diff --git a/src/server/apps/authserver/Main.cpp b/src/server/apps/authserver/Main.cpp index 6030d9114..903a12134 100644 --- a/src/server/apps/authserver/Main.cpp +++ b/src/server/apps/authserver/Main.cpp @@ -38,6 +38,7 @@ #include "RealmList.h" #include "SecretMgr.h" #include "SharedDefines.h" +#include "SteadyTimer.h" #include "Util.h" #include #include @@ -179,17 +180,13 @@ int main(int argc, char** argv) int32 dbPingInterval = sConfigMgr->GetOption("MaxPingTime", 30); std::shared_ptr dbPingTimer = std::make_shared(*ioContext); - // Calculate the expiration time - auto expirationTime = std::chrono::steady_clock::now() + std::chrono::seconds(dbPingInterval); - dbPingTimer->expires_at(expirationTime); + dbPingTimer->expires_at(Acore::Asio::SteadyTimer::GetExpirationTime(dbPingInterval * MINUTE)); dbPingTimer->async_wait(std::bind(&KeepDatabaseAliveHandler, std::weak_ptr(dbPingTimer), dbPingInterval, std::placeholders::_1)); int32 banExpiryCheckInterval = sConfigMgr->GetOption("BanExpiryCheckInterval", 60); std::shared_ptr banExpiryCheckTimer = std::make_shared(*ioContext); - // Calculate the expiration time - auto expirationTimeBanExpiry = std::chrono::steady_clock::now() + std::chrono::seconds(banExpiryCheckInterval); - banExpiryCheckTimer->expires_at(expirationTimeBanExpiry); + banExpiryCheckTimer->expires_at(Acore::Asio::SteadyTimer::GetExpirationTime(banExpiryCheckInterval)); banExpiryCheckTimer->async_wait(std::bind(&BanExpiryHandler, std::weak_ptr(banExpiryCheckTimer), banExpiryCheckInterval, std::placeholders::_1)); // Start the io service worker loop @@ -252,9 +249,7 @@ void KeepDatabaseAliveHandler(std::weak_ptr dbPingTim LOG_INFO("server.authserver", "Ping MySQL to keep connection alive"); LoginDatabase.KeepAlive(); - // Calculate the expiration time - auto expirationTime = std::chrono::steady_clock::now() + std::chrono::seconds(dbPingInterval); - dbPingTimer->expires_at(expirationTime); + dbPingTimer->expires_at(Acore::Asio::SteadyTimer::GetExpirationTime(dbPingInterval)); dbPingTimer->async_wait(std::bind(&KeepDatabaseAliveHandler, dbPingTimerRef, dbPingInterval, std::placeholders::_1)); } } @@ -269,9 +264,7 @@ void BanExpiryHandler(std::weak_ptr banExpiryCheckTim LoginDatabase.Execute(LoginDatabase.GetPreparedStatement(LOGIN_DEL_EXPIRED_IP_BANS)); LoginDatabase.Execute(LoginDatabase.GetPreparedStatement(LOGIN_UPD_EXPIRED_ACCOUNT_BANS)); - // Calculate the expiration time - auto expirationTime = std::chrono::steady_clock::now() + std::chrono::seconds(banExpiryCheckInterval); - banExpiryCheckTimer->expires_at(expirationTime); + banExpiryCheckTimer->expires_at(Acore::Asio::SteadyTimer::GetExpirationTime(banExpiryCheckInterval)); banExpiryCheckTimer->async_wait(std::bind(&BanExpiryHandler, banExpiryCheckTimerRef, banExpiryCheckInterval, std::placeholders::_1)); } } diff --git a/src/server/apps/worldserver/Main.cpp b/src/server/apps/worldserver/Main.cpp index e95aadc7b..0f5a96208 100644 --- a/src/server/apps/worldserver/Main.cpp +++ b/src/server/apps/worldserver/Main.cpp @@ -47,6 +47,7 @@ #include "ScriptMgr.h" #include "SecretMgr.h" #include "SharedDefines.h" +#include "SteadyTimer.h" #include "World.h" #include "WorldSocket.h" #include "WorldSocketMgr.h" @@ -90,9 +91,7 @@ public: static void Start(std::shared_ptr const& freezeDetector) { - // Calculate the expiration time 5seconds from now - auto expirationTime = std::chrono::steady_clock::now() + std::chrono::seconds(5); - freezeDetector->_timer.expires_at(expirationTime); + freezeDetector->_timer.expires_at(Acore::Asio::SteadyTimer::GetExpirationTime(5)); freezeDetector->_timer.async_wait(std::bind(&FreezeDetector::Handler, std::weak_ptr(freezeDetector), std::placeholders::_1)); } @@ -632,9 +631,7 @@ void FreezeDetector::Handler(std::weak_ptr freezeDetectorRef, bo } } - // Calculate the expiration time - auto expirationTime = std::chrono::steady_clock::now() + std::chrono::seconds(1); - freezeDetector->_timer.expires_at(expirationTime); + freezeDetector->_timer.expires_at(Acore::Asio::SteadyTimer::GetExpirationTime(1)); freezeDetector->_timer.async_wait(std::bind(&FreezeDetector::Handler, freezeDetectorRef, std::placeholders::_1)); } } diff --git a/src/server/shared/Realms/RealmList.cpp b/src/server/shared/Realms/RealmList.cpp index a1c258edd..b3b3f7656 100644 --- a/src/server/shared/Realms/RealmList.cpp +++ b/src/server/shared/Realms/RealmList.cpp @@ -18,8 +18,9 @@ #include "RealmList.h" #include "DatabaseEnv.h" #include "Log.h" -#include "Resolver.h" #include "QueryResult.h" +#include "Resolver.h" +#include "SteadyTimer.h" #include "Util.h" #include #include @@ -227,9 +228,7 @@ void RealmList::UpdateRealms(boost::system::error_code const& error) if (_updateInterval) { - // Calculate the expiration time _updateInterval from now - auto expiration_time = std::chrono::steady_clock::now() + std::chrono::seconds(_updateInterval); - _updateTimer->expires_at(expiration_time); + _updateTimer->expires_at(Acore::Asio::SteadyTimer::GetExpirationTime(_updateInterval)); _updateTimer->async_wait([this](boost::system::error_code const& errorCode){ UpdateRealms(errorCode); }); } } From b4d04b1af1b9e4ead50b874aa28ae7197f3a3f9f Mon Sep 17 00:00:00 2001 From: Exitare Date: Sun, 22 Dec 2024 00:44:50 -0800 Subject: [PATCH 16/74] refactor(Core/Event): Load event vendors seperatly (#20906) --- .../rev_1734055142233360300.sql | 3 + .../Database/Implementation/WorldDatabase.cpp | 1 + .../Database/Implementation/WorldDatabase.h | 1 + src/server/game/Events/GameEventMgr.cpp | 150 ++++++++++-------- src/server/game/Events/GameEventMgr.h | 2 + src/server/scripts/Commands/cs_reload.cpp | 9 ++ 6 files changed, 103 insertions(+), 63 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1734055142233360300.sql diff --git a/data/sql/updates/pending_db_world/rev_1734055142233360300.sql b/data/sql/updates/pending_db_world/rev_1734055142233360300.sql new file mode 100644 index 000000000..b9bb38aab --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1734055142233360300.sql @@ -0,0 +1,3 @@ +-- +DELETE FROM `command` where `name` = 'reload game_event_npc_vendor'; +INSERT INTO `command` (`name`, `security`, `help`) VALUES ('reload game_event_npc_vendor', 3, 'Syntax: .reload game_event_npc_vendor\r Reload game_event_npc_vendor table.'); diff --git a/src/server/database/Database/Implementation/WorldDatabase.cpp b/src/server/database/Database/Implementation/WorldDatabase.cpp index 323f4ccbd..d6081c983 100644 --- a/src/server/database/Database/Implementation/WorldDatabase.cpp +++ b/src/server/database/Database/Implementation/WorldDatabase.cpp @@ -86,6 +86,7 @@ void WorldDatabaseConnection::DoPrepareStatements() PrepareStatement(WORLD_INS_CREATURE, "INSERT INTO creature (guid, id1, id2, id3, map, spawnMask, phaseMask, equipment_id, position_x, position_y, position_z, orientation, spawntimesecs, wander_distance, currentwaypoint, curhealth, curmana, MovementType, npcflag, unit_flags, dynamicflags) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(WORLD_DEL_GAME_EVENT_CREATURE, "DELETE FROM game_event_creature WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(WORLD_DEL_GAME_EVENT_MODEL_EQUIP, "DELETE FROM game_event_model_equip WHERE guid = ?", CONNECTION_ASYNC); + PrepareStatement(WORLD_SEL_GAME_EVENT_NPC_VENDOR, "SELECT eventEntry, guid, item, maxcount, incrtime, ExtendedCost FROM game_event_npc_vendor ORDER BY guid, slot ASC", CONNECTION_SYNCH); PrepareStatement(WORLD_INS_GAMEOBJECT, "INSERT INTO gameobject (guid, id, map, spawnMask, phaseMask, position_x, position_y, position_z, orientation, rotation0, rotation1, rotation2, rotation3, spawntimesecs, animprogress, state) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(WORLD_INS_DISABLES, "INSERT INTO disables (entry, sourceType, flags, comment) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(WORLD_SEL_DISABLES, "SELECT entry FROM disables WHERE entry = ? AND sourceType = ?", CONNECTION_SYNCH); diff --git a/src/server/database/Database/Implementation/WorldDatabase.h b/src/server/database/Database/Implementation/WorldDatabase.h index ebfdcfe07..049766725 100644 --- a/src/server/database/Database/Implementation/WorldDatabase.h +++ b/src/server/database/Database/Implementation/WorldDatabase.h @@ -92,6 +92,7 @@ enum WorldDatabaseStatements : uint32 WORLD_INS_CREATURE, WORLD_DEL_GAME_EVENT_CREATURE, WORLD_DEL_GAME_EVENT_MODEL_EQUIP, + WORLD_SEL_GAME_EVENT_NPC_VENDOR, WORLD_INS_GAMEOBJECT, WORLD_SEL_DISABLES, WORLD_INS_DISABLES, diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp index a914182c8..0909ae7db 100644 --- a/src/server/game/Events/GameEventMgr.cpp +++ b/src/server/game/Events/GameEventMgr.cpp @@ -236,6 +236,92 @@ void GameEventMgr::StopEvent(uint16 event_id, bool overwrite) sScriptMgr->OnGameEventStop(event_id); } +void GameEventMgr::LoadEventVendors() +{ + uint32 oldMSTime = getMSTime(); + WorldDatabasePreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_GAME_EVENT_NPC_VENDOR); + PreparedQueryResult result = WorldDatabase.Query(stmt); + + if (!result) + { + LOG_WARN("server.loading", ">> Loaded 0 Vendor Additions In Game Events. DB Table `game_event_npc_vendor` Is Empty."); + LOG_INFO("server.loading", " "); + return; + } + + uint32 count = 0; + std::unordered_set processedEvents; + + do + { + Field* fields = result->Fetch(); + uint8 eventId = fields[0].Get(); + ObjectGuid::LowType guid = fields[1].Get(); + + if (eventId >= mGameEventVendors.size()) + { + LOG_ERROR("sql.sql", "Table `game_event_npc_vendor` has invalid eventEntry ({}) for GUID ({}), skipped.", eventId, guid); + continue; + } + + // Clear existing vendors for this event only once + if (processedEvents.find(eventId) == processedEvents.end()) + { + // Remove vendor items from in-memory data + for (auto& entry : mGameEventVendors[eventId]) + { + sObjectMgr->RemoveVendorItem(entry.entry, entry.item, false); + } + mGameEventVendors[eventId].clear(); + processedEvents.insert(eventId); + } + + NPCVendorList& vendors = mGameEventVendors[eventId]; + NPCVendorEntry newEntry; + newEntry.item = fields[2].Get(); + newEntry.maxcount = fields[3].Get(); + newEntry.incrtime = fields[4].Get(); + newEntry.ExtendedCost = fields[5].Get(); + + // Get the event NPC flag for validity check + uint32 event_npc_flag = 0; + NPCFlagList& flist = mGameEventNPCFlags[eventId]; + for (NPCFlagList::const_iterator itr = flist.begin(); itr != flist.end(); ++itr) + { + if (itr->first == guid) + { + event_npc_flag = itr->second; + break; + } + } + + // Get creature entry + newEntry.entry = 0; + if (CreatureData const* data = sObjectMgr->GetCreatureData(guid)) + newEntry.entry = data->id1; + + // Validate vendor item + if (!sObjectMgr->IsVendorItemValid(newEntry.entry, newEntry.item, newEntry.maxcount, newEntry.incrtime, newEntry.ExtendedCost, nullptr, nullptr, event_npc_flag)) + { + LOG_ERROR("sql.sql", "Table `game_event_npc_vendor` has invalid item ({}) for guid ({}) for event ({}), skipped.", + newEntry.item, newEntry.entry, eventId); + continue; + } + + // Add the item to the vendor if event is active + if (IsEventActive(eventId)) + sObjectMgr->AddVendorItem(newEntry.entry, newEntry.item, newEntry.maxcount, newEntry.incrtime, newEntry.ExtendedCost, false); + + vendors.push_back(newEntry); + + ++count; + } while (result->NextRow()); + + LOG_INFO("server.loading", ">> Loaded {} Vendor Additions In Game Events in {} ms", count, GetMSTimeDiffToNow(oldMSTime)); + LOG_INFO("server.loading", " "); + +} + void GameEventMgr::LoadFromDB() { { @@ -852,69 +938,7 @@ void GameEventMgr::LoadFromDB() } LOG_INFO("server.loading", "Loading Game Event Vendor Additions Data..."); - { - uint32 oldMSTime = getMSTime(); - - // 0 1 2 3 4 5 - QueryResult result = WorldDatabase.Query("SELECT eventEntry, guid, item, maxcount, incrtime, ExtendedCost FROM game_event_npc_vendor ORDER BY guid, slot ASC"); - - if (!result) - { - LOG_WARN("server.loading", ">> Loaded 0 Vendor Additions In Game Events. DB Table `game_event_npc_vendor` Is Empty."); - LOG_INFO("server.loading", " "); - } - else - { - uint32 count = 0; - do - { - Field* fields = result->Fetch(); - - uint8 event_id = fields[0].Get(); - - if (event_id >= mGameEventVendors.size()) - { - LOG_ERROR("sql.sql", "`game_event_npc_vendor` game event id ({}) is out of range compared to max event id in `game_event`", event_id); - continue; - } - - NPCVendorList& vendors = mGameEventVendors[event_id]; - NPCVendorEntry newEntry; - ObjectGuid::LowType guid = fields[1].Get(); - newEntry.item = fields[2].Get(); - newEntry.maxcount = fields[3].Get(); - newEntry.incrtime = fields[4].Get(); - newEntry.ExtendedCost = fields[5].Get(); - // get the event npc flag for checking if the npc will be vendor during the event or not - uint32 event_npc_flag = 0; - NPCFlagList& flist = mGameEventNPCFlags[event_id]; - for (NPCFlagList::const_iterator itr = flist.begin(); itr != flist.end(); ++itr) - { - if (itr->first == guid) - { - event_npc_flag = itr->second; - break; - } - } - // get creature entry - newEntry.entry = 0; - - if (CreatureData const* data = sObjectMgr->GetCreatureData(guid)) - newEntry.entry = data->id1; - - // check validity with event's npcflag - if (!sObjectMgr->IsVendorItemValid(newEntry.entry, newEntry.item, newEntry.maxcount, newEntry.incrtime, newEntry.ExtendedCost, nullptr, nullptr, event_npc_flag)) - continue; - - vendors.push_back(newEntry); - - ++count; - } while (result->NextRow()); - - LOG_INFO("server.loading", ">> Loaded {} Vendor Additions In Game Events in {} ms", count, GetMSTimeDiffToNow(oldMSTime)); - LOG_INFO("server.loading", " "); - } - } + LoadEventVendors(); LOG_INFO("server.loading", "Loading Game Event Battleground Data..."); { diff --git a/src/server/game/Events/GameEventMgr.h b/src/server/game/Events/GameEventMgr.h index c251cf803..b997efe06 100644 --- a/src/server/game/Events/GameEventMgr.h +++ b/src/server/game/Events/GameEventMgr.h @@ -121,6 +121,8 @@ public: void StopEvent(uint16 event_id, bool overwrite = false); void HandleQuestComplete(uint32 quest_id); // called on world event type quest completions uint32 GetNPCFlag(Creature* cr); + // Load the game event npc vendor table from the DB + void LoadEventVendors(); [[nodiscard]] uint32 GetHolidayEventId(uint32 holidayId) const; private: void SendWorldStateUpdate(Player* player, uint16 event_id); diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp index a8544c218..b11eb2c1e 100644 --- a/src/server/scripts/Commands/cs_reload.cpp +++ b/src/server/scripts/Commands/cs_reload.cpp @@ -135,6 +135,7 @@ public: { "npc_spellclick_spells", HandleReloadSpellClickSpellsCommand, SEC_ADMINISTRATOR, Console::Yes }, { "npc_trainer", HandleReloadNpcTrainerCommand, SEC_ADMINISTRATOR, Console::Yes }, { "npc_vendor", HandleReloadNpcVendorCommand, SEC_ADMINISTRATOR, Console::Yes }, + { "game_event_npc_vendor", HandleReloadGameEventNPCVendorCommand, SEC_ADMINISTRATOR, Console::Yes }, { "page_text", HandleReloadPageTextsCommand, SEC_ADMINISTRATOR, Console::Yes }, { "pickpocketing_loot_template", HandleReloadLootTemplatesPickpocketingCommand, SEC_ADMINISTRATOR, Console::Yes }, { "points_of_interest", HandleReloadPointsOfInterestCommand, SEC_ADMINISTRATOR, Console::Yes }, @@ -765,6 +766,14 @@ public: return true; } + static bool HandleReloadGameEventNPCVendorCommand(ChatHandler* handler) + { + LOG_INFO("server.loading", "Reloading `game_event_npc_vendor` Table!"); + sGameEventMgr->LoadEventVendors(); + handler->SendGlobalGMSysMessage("DB table `game_event_npc_vendor` reloaded."); + return true; + } + static bool HandleReloadPointsOfInterestCommand(ChatHandler* handler) { LOG_INFO("server.loading", "Reloading `points_of_interest` Table!"); From 7be3c82505ed9a35fcd770f48643b300ef4ccd37 Mon Sep 17 00:00:00 2001 From: Exitare Date: Sun, 22 Dec 2024 00:45:39 -0800 Subject: [PATCH 17/74] feat(Core/Creature): Add new config option for npc speeds (#20617) --- .../apps/worldserver/worldserver.conf.dist | 13 +++++++++--- src/server/game/World/IWorld.h | 3 ++- src/server/game/World/World.cpp | 21 ++++++++++++++----- 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/server/apps/worldserver/worldserver.conf.dist b/src/server/apps/worldserver/worldserver.conf.dist index f3754ca07..0041bf486 100644 --- a/src/server/apps/worldserver/worldserver.conf.dist +++ b/src/server/apps/worldserver/worldserver.conf.dist @@ -2045,11 +2045,18 @@ WaterBreath.Timer = 180000 EnableLowLevelRegenBoost = 1 # -# Rate.MoveSpeed -# Description: Movement speed rate. +# Rate.MoveSpeed.Player +# Description: Movement speed rate for players. # Default: 1 -Rate.MoveSpeed = 1 +Rate.MoveSpeed.Player = 1 + +# +# Rate.MoveSpeed.NPC +# Description: Movement speed rate for NPCs. +# Default: 1 + +Rate.MoveSpeed.NPC = 1 # # Rate.Damage.Fall diff --git a/src/server/game/World/IWorld.h b/src/server/game/World/IWorld.h index 6bae57661..ef64ee73e 100644 --- a/src/server/game/World/IWorld.h +++ b/src/server/game/World/IWorld.h @@ -517,7 +517,8 @@ enum Rates RATE_DURABILITY_LOSS_PARRY, RATE_DURABILITY_LOSS_ABSORB, RATE_DURABILITY_LOSS_BLOCK, - RATE_MOVESPEED, + RATE_MOVESPEED_PLAYER, + RATE_MOVESPEED_NPC, RATE_MISS_CHANCE_MULTIPLIER_TARGET_CREATURE, RATE_MISS_CHANCE_MULTIPLIER_TARGET_PLAYER, MAX_RATES diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 01aebe618..e04627c0a 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -575,13 +575,24 @@ void World::LoadConfigSettings(bool reload) LOG_ERROR("server.loading", "Rate.Talent.Pet ({}) must be > 0. Using 1 instead.", _rate_values[RATE_TALENT_PET]); _rate_values[RATE_TALENT_PET] = 1.0f; } - _rate_values[RATE_MOVESPEED] = sConfigMgr->GetOption("Rate.MoveSpeed", 1.0f); - if (_rate_values[RATE_MOVESPEED] < 0) + // Controls Player movespeed rate. + _rate_values[RATE_MOVESPEED_PLAYER] = sConfigMgr->GetOption("Rate.MoveSpeed.Player", 1.0f); + if (_rate_values[RATE_MOVESPEED_PLAYER] < 0) { - LOG_ERROR("server.loading", "Rate.MoveSpeed ({}) must be > 0. Using 1 instead.", _rate_values[RATE_MOVESPEED]); - _rate_values[RATE_MOVESPEED] = 1.0f; + LOG_ERROR("server.loading", "Rate.MoveSpeed.Player ({}) must be > 0. Using 1 instead.", _rate_values[RATE_MOVESPEED_PLAYER]); + _rate_values[RATE_MOVESPEED_PLAYER] = 1.0f; } - for (uint8 i = 0; i < MAX_MOVE_TYPE; ++i) playerBaseMoveSpeed[i] = baseMoveSpeed[i] * _rate_values[RATE_MOVESPEED]; + for (uint8 i = 0; i < MAX_MOVE_TYPE; ++i) playerBaseMoveSpeed[i] = baseMoveSpeed[i] * _rate_values[RATE_MOVESPEED_PLAYER]; + + // Controls all npc movespeed rate. + _rate_values[RATE_MOVESPEED_NPC] = sConfigMgr->GetOption("Rate.MoveSpeed.NPC", 1.0f); + if (_rate_values[RATE_MOVESPEED_NPC] < 0) + { + LOG_ERROR("server.loading", "Rate.MoveSpeed.NPC ({}) must be > 0. Using 1 instead.", _rate_values[RATE_MOVESPEED_NPC]); + _rate_values[RATE_MOVESPEED_NPC] = 1.0f; + } + for (uint8 i = 0; i < MAX_MOVE_TYPE; ++i) baseMoveSpeed[i] *= _rate_values[RATE_MOVESPEED_NPC]; + _rate_values[RATE_CORPSE_DECAY_LOOTED] = sConfigMgr->GetOption("Rate.Corpse.Decay.Looted", 0.5f); _rate_values[RATE_DURABILITY_LOSS_ON_DEATH] = sConfigMgr->GetOption("DurabilityLoss.OnDeath", 10.0f); From 0d6a0f8441daada7fe3502c7a935f6e3c636af7a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 22 Dec 2024 08:45:52 +0000 Subject: [PATCH 18/74] chore(DB): import pending files Referenced commit(s): b4d04b1af1b9e4ead50b874aa28ae7197f3a3f9f --- .../rev_1734055142233360300.sql => db_world/2024_12_22_01.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1734055142233360300.sql => db_world/2024_12_22_01.sql} (84%) diff --git a/data/sql/updates/pending_db_world/rev_1734055142233360300.sql b/data/sql/updates/db_world/2024_12_22_01.sql similarity index 84% rename from data/sql/updates/pending_db_world/rev_1734055142233360300.sql rename to data/sql/updates/db_world/2024_12_22_01.sql index b9bb38aab..236f140ad 100644 --- a/data/sql/updates/pending_db_world/rev_1734055142233360300.sql +++ b/data/sql/updates/db_world/2024_12_22_01.sql @@ -1,3 +1,4 @@ +-- DB update 2024_12_22_00 -> 2024_12_22_01 -- DELETE FROM `command` where `name` = 'reload game_event_npc_vendor'; INSERT INTO `command` (`name`, `security`, `help`) VALUES ('reload game_event_npc_vendor', 3, 'Syntax: .reload game_event_npc_vendor\r Reload game_event_npc_vendor table.'); From cbdab03623b82da02bd135e21807658f2d5f1cb2 Mon Sep 17 00:00:00 2001 From: Stepan Makhorin Date: Sun, 22 Dec 2024 13:48:36 +0300 Subject: [PATCH 19/74] fix(Scripts/ICC): Make Blood-Queen Lana'thel bite tanks as well (#17834) --- .../Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp index 57239edd3..4b7ab2e13 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp @@ -332,7 +332,7 @@ public: const Map::PlayerList& pl = me->GetMap()->GetPlayers(); for (Map::PlayerList::const_iterator itr = pl.begin(); itr != pl.end(); ++itr) if (Player* p = itr->GetSource()) - if (p->IsAlive() && p != me->GetVictim() && p->GetGUID() != _offtankGUID && !p->IsGameMaster() && p->GetDistance(me) < 70.0f) + if (p->IsAlive() && p->GetDistance(me) < 70.0f) { float th = me->GetThreatMgr().getThreatWithoutTemp(p); if (!target || th > maxThreat) From d5fac96a20b078b96ecba105cd0e54ce85bcf53b Mon Sep 17 00:00:00 2001 From: Kitzunu <24550914+Kitzunu@users.noreply.github.com> Date: Sun, 22 Dec 2024 16:50:32 +0100 Subject: [PATCH 20/74] refactor(CI/Codestyle): Move the SQL check to python (#21002) --- .github/workflows/codestyle.yml | 2 +- .github/workflows/sql-codestyle.yml | 8 +- apps/ci/ci-pending.sh | 36 ----- .../{codestyle.py => codestyle-cpp.py} | 0 apps/codestyle/codestyle-sql.py | 141 ++++++++++++++++++ 5 files changed, 148 insertions(+), 39 deletions(-) delete mode 100644 apps/ci/ci-pending.sh rename apps/codestyle/{codestyle.py => codestyle-cpp.py} (100%) create mode 100644 apps/codestyle/codestyle-sql.py diff --git a/.github/workflows/codestyle.yml b/.github/workflows/codestyle.yml index f30e53375..1380bc683 100644 --- a/.github/workflows/codestyle.yml +++ b/.github/workflows/codestyle.yml @@ -18,7 +18,7 @@ jobs: with: python-version: '3.10' - name: AzerothCore codestyle - run: python ./apps/codestyle/codestyle.py + run: python ./apps/codestyle/codestyle-cpp.py - name: C++ Advanced run: | sudo apt update -y diff --git a/.github/workflows/sql-codestyle.yml b/.github/workflows/sql-codestyle.yml index a02088716..fa2c64292 100644 --- a/.github/workflows/sql-codestyle.yml +++ b/.github/workflows/sql-codestyle.yml @@ -13,5 +13,9 @@ jobs: if: github.repository == 'azerothcore/azerothcore-wotlk' && !github.event.pull_request.draft steps: - uses: actions/checkout@v4 - - name: Check pending SQL - run: source ./apps/ci/ci-pending.sh + - name: Setup python + uses: actions/setup-python@v5 + with: + python-version: '3.10' + - name: AzerothCore codestyle + run: python ./apps/codestyle/codestyle-sql.py diff --git a/apps/ci/ci-pending.sh b/apps/ci/ci-pending.sh deleted file mode 100644 index 87858b33c..000000000 --- a/apps/ci/ci-pending.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/bash -set -e - -echo "Pending SQL check script:" -echo - -# We want to ensure the end of file has a semicolon and doesn't have extra -# newlines -find data/sql/updates/pending* -name "*.sql" -type f | while read -r file; do - # The first sed script collapses all strings into an empty string. The - # contents of strings aren't necessary for this check and its still valid - # sql. - # - # The second rule removes sql comments. - ERR_AT_EOF="$(sed -e "s/'.*'/''/g" -e 's/ --([^-])*$//' "$file" | tr -d '\n ' | tail -c 1)" - if [[ "$ERR_AT_EOF" != ";" ]]; then - echo "Missing Semicolon (;) or multiple newlines at the end of the file." - exit 1 - else - echo "> Semicolon check - OK" - fi -done - -find data/sql/updates/pending* -name "*.sql" -type f | while read -r file; do - if sed "s/'.*'\(.*\)/\1/g" "$file" | grep -q -i -E "broadcast_text"; then - echo "> broadcast_text check - Failed" - echo " - DON'T EDIT broadcast_text TABLE UNLESS YOU KNOW WHAT YOU ARE DOING!" - echo " - This error can safely be ignored if the changes are approved to be sniffed." - exit 1 - else - echo "> broadcast_text check - OK" - fi -done - -echo -echo "Everything looks good" diff --git a/apps/codestyle/codestyle.py b/apps/codestyle/codestyle-cpp.py similarity index 100% rename from apps/codestyle/codestyle.py rename to apps/codestyle/codestyle-cpp.py diff --git a/apps/codestyle/codestyle-sql.py b/apps/codestyle/codestyle-sql.py new file mode 100644 index 000000000..840be4904 --- /dev/null +++ b/apps/codestyle/codestyle-sql.py @@ -0,0 +1,141 @@ +import io +import os +import sys +import re +import glob + +# Get the pending directory of the project +base_dir = os.getcwd() +pattern = os.path.join(base_dir, 'data/sql/updates/pending_db_*') +src_directory = glob.glob(pattern) + +# Global variables +error_handler = False +results = { + "Multiple blank lines check": "Passed", + "Trailing whitespace check": "Passed", + "SQL codestyle check": "Passed", +} + +# Collect all files in all directories +def collect_files_from_directories(directories: list) -> list: + all_files = [] + for directory in directories: + for root, _, files in os.walk(directory): + for file in files: + if not file.endswith('.sh'): # Skip .sh files + all_files.append(os.path.join(root, file)) + return all_files + +# Main function to parse all the files of the project +def parsing_file(files: list) -> None: + print("Starting AzerothCore SQL Codestyle check...") + print(" ") + print("Please read the SQL Standards for AzerothCore:") + print("https://www.azerothcore.org/wiki/sql-standards") + print(" ") + + # Iterate over all files + for file_path in files: + try: + with open(file_path, 'r', encoding='utf-8') as file: + multiple_blank_lines_check(file, file_path) + trailing_whitespace_check(file, file_path) + sql_check(file, file_path) + except UnicodeDecodeError: + print(f"\nCould not decode file {file_path}") + sys.exit(1) + + # Output the results + print("") + for check, result in results.items(): + print(f"{check} : {result}") + if error_handler: + print("\nPlease fix the codestyle issues above.") + sys.exit(1) + else: + print(f"\nEverything looks good") + +# Codestyle patterns checking for multiple blank lines +def multiple_blank_lines_check(file: io, file_path: str) -> None: + global error_handler, results + file.seek(0) # Reset file pointer to the beginning + check_failed = False + consecutive_blank_lines = 0 + # Parse all the file + for line_number, line in enumerate(file, start = 1): + if line.strip() == '': + consecutive_blank_lines += 1 + if consecutive_blank_lines > 1: + print(f"Multiple blank lines found in {file_path} at line {line_number - 1}") + check_failed = True + else: + consecutive_blank_lines = 0 + # Additional check for the end of the file + if consecutive_blank_lines >= 1: + print(f"Multiple blank lines found at the end of: {file_path}") + check_failed = True + # Handle the script error and update the result output + if check_failed: + error_handler = True + results["Multiple blank lines check"] = "Failed" + +# Codestyle patterns checking for whitespace at the end of the lines +def trailing_whitespace_check(file: io, file_path: str) -> None: + global error_handler, results + file.seek(0) # Reset file pointer to the beginning + check_failed = False + # Parse all the file + for line_number, line in enumerate(file, start = 1): + if line.endswith(' \n'): + print(f"Trailing whitespace found: {file_path} at line {line_number}") + check_failed = True + if check_failed: + error_handler = True + results["Trailing whitespace check"] = "Failed" + +# Codestyle patterns checking for various codestyle issues +def sql_check(file: io, file_path: str) -> None: + global error_handler, results + file.seek(0) # Reset file pointer to the beginning + check_failed = False + + # Parse all the file + for line_number, line in enumerate(file, start = 1): + if [match for match in ['broadcast_text'] if match in line]: + print( + f"DON'T EDIT broadcast_text TABLE UNLESS YOU KNOW WHAT YOU ARE DOING!\nThis error can safely be ignored if the changes are approved to be sniffed: {file_path} at line {line_number}") + check_failed = True + if [match for match in [';;'] if match in line]: + print( + f"Double semicolon (;;) found in {file_path} at line {line_number}") + check_failed = True + if re.match(r"\t", line): + print( + f"Tab found! Replace it to 4 spaces: {file_path} at line {line_number}") + check_failed = True + + # Ignore comments (remove content after --) + line_without_comment = re.sub(r'--.*', '', line).strip() + # Check if the last non-empty line ends with a semicolon + if not line_without_comment.endswith(';'): + print( + f"The last non-empty line does not end with a semicolon: {file_path}") + check_failed = True + + last_line = line[-1].strip() + if last_line: + print( + f"The last line is not a newline. Please add a newline: {file_path}") + check_failed = True + + # Handle the script error and update the result output + if check_failed: + error_handler = True + results["SQL codestyle check"] = "Failed" + +# Collect all files from matching directories +all_files = collect_files_from_directories(src_directory) + +# Main function +parsing_file(all_files) From f5ce076919f8598aed3591b90263f30b772a0b41 Mon Sep 17 00:00:00 2001 From: Kitzunu <24550914+Kitzunu@users.noreply.github.com> Date: Sun, 22 Dec 2024 18:40:06 +0100 Subject: [PATCH 21/74] chore(DB/quest_request_items_locale): Remove empty or NULL entries (#21013) --- data/sql/updates/pending_db_world/rev_1734875751323314900.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1734875751323314900.sql diff --git a/data/sql/updates/pending_db_world/rev_1734875751323314900.sql b/data/sql/updates/pending_db_world/rev_1734875751323314900.sql new file mode 100644 index 000000000..05881d878 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1734875751323314900.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `quest_request_items_locale` WHERE `CompletionText` = ''; +DELETE FROM `quest_request_items_locale` WHERE `CompletionText` = 'NULL'; +DELETE FROM `quest_request_items_locale` WHERE `CompletionText` IS NULL; From 5b37bc52054211fe43504c1b989e007131140ae2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 22 Dec 2024 17:41:05 +0000 Subject: [PATCH 22/74] chore(DB): import pending files Referenced commit(s): f5ce076919f8598aed3591b90263f30b772a0b41 --- .../rev_1734875751323314900.sql => db_world/2024_12_22_02.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1734875751323314900.sql => db_world/2024_12_22_02.sql} (83%) diff --git a/data/sql/updates/pending_db_world/rev_1734875751323314900.sql b/data/sql/updates/db_world/2024_12_22_02.sql similarity index 83% rename from data/sql/updates/pending_db_world/rev_1734875751323314900.sql rename to data/sql/updates/db_world/2024_12_22_02.sql index 05881d878..34c109f5a 100644 --- a/data/sql/updates/pending_db_world/rev_1734875751323314900.sql +++ b/data/sql/updates/db_world/2024_12_22_02.sql @@ -1,3 +1,4 @@ +-- DB update 2024_12_22_01 -> 2024_12_22_02 -- DELETE FROM `quest_request_items_locale` WHERE `CompletionText` = ''; DELETE FROM `quest_request_items_locale` WHERE `CompletionText` = 'NULL'; From 0a70ebc3af0cbc3cefb273f444b8c95f381a879b Mon Sep 17 00:00:00 2001 From: Takenbacon Date: Sun, 22 Dec 2024 23:26:18 -0800 Subject: [PATCH 23/74] fix(Core/Auctionhouse): Fix auctionhouse searches with locales other than enUS (#21019) --- src/server/game/AuctionHouse/AuctionHouseSearcher.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/game/AuctionHouse/AuctionHouseSearcher.cpp b/src/server/game/AuctionHouse/AuctionHouseSearcher.cpp index f1cda1fb1..0d50d7eaf 100644 --- a/src/server/game/AuctionHouse/AuctionHouseSearcher.cpp +++ b/src/server/game/AuctionHouse/AuctionHouseSearcher.cpp @@ -156,7 +156,7 @@ void AuctionHouseWorkerThread::SearchListRequest(AuctionSearchListRequest const& if (!searchListRequest.searchInfo.sorting.empty() && auctionEntries.size() > MAX_AUCTIONS_PER_PAGE) { - AuctionSorter sorter(&searchListRequest.searchInfo.sorting, searchListRequest.playerInfo.locdbc_idx); + AuctionSorter sorter(&searchListRequest.searchInfo.sorting, searchListRequest.playerInfo.loc_idx); std::sort(auctionEntries.begin(), auctionEntries.end(), sorter); } @@ -326,7 +326,7 @@ void AuctionHouseWorkerThread::BuildListAuctionItems(AuctionSearchListRequest co // No need to do any of this if no search term was entered if (!searchRequest.searchInfo.wsearchedname.empty()) { - if (Aitem.itemName[searchRequest.playerInfo.locdbc_idx].find(searchRequest.searchInfo.wsearchedname) == std::wstring::npos) + if (Aitem.itemName[searchRequest.playerInfo.loc_idx].find(searchRequest.searchInfo.wsearchedname) == std::wstring::npos) continue; } From 3dff27613612c130b6cc633ecde5abadec848ec4 Mon Sep 17 00:00:00 2001 From: Kitzunu <24550914+Kitzunu@users.noreply.github.com> Date: Mon, 23 Dec 2024 10:23:55 +0100 Subject: [PATCH 24/74] chore(CI): Update CI run types (#21015) --- .github/workflows/codestyle.yml | 4 ++++ .github/workflows/core-build-pch.yml | 5 ++++- .github/workflows/core_modules_build.yml | 4 ++++ .github/workflows/docker_build.yml | 2 -- .github/workflows/macos_build.yml | 4 +++- .github/workflows/sql-codestyle.yml | 4 ++++ .github/workflows/tools_build.yml | 2 -- .github/workflows/windows_build.yml | 4 +++- 8 files changed, 22 insertions(+), 7 deletions(-) diff --git a/.github/workflows/codestyle.yml b/.github/workflows/codestyle.yml index 1380bc683..2e81711af 100644 --- a/.github/workflows/codestyle.yml +++ b/.github/workflows/codestyle.yml @@ -1,6 +1,10 @@ name: Codestyle on: pull_request: + types: + - opened + - reopened + - synchronize paths: - src/** - "!README.md" diff --git a/.github/workflows/core-build-pch.yml b/.github/workflows/core-build-pch.yml index 4da23908a..f6c989346 100644 --- a/.github/workflows/core-build-pch.yml +++ b/.github/workflows/core-build-pch.yml @@ -4,7 +4,10 @@ on: branches: - 'master' pull_request: - types: ['opened', 'synchronize', 'reopened'] + types: + - opened + - reopened + - synchronize concurrency: group: ${{ github.head_ref }} || concat(${{ github.ref }}, ${{ github.workflow }}) diff --git a/.github/workflows/core_modules_build.yml b/.github/workflows/core_modules_build.yml index 440225a08..e67614ebe 100644 --- a/.github/workflows/core_modules_build.yml +++ b/.github/workflows/core_modules_build.yml @@ -4,6 +4,10 @@ on: branches: - 'master' pull_request: + types: + - opened + - reopened + - synchronize paths: - 'src/*' - 'src/common/**/*' diff --git a/.github/workflows/docker_build.yml b/.github/workflows/docker_build.yml index 141d34036..1b8c87660 100644 --- a/.github/workflows/docker_build.yml +++ b/.github/workflows/docker_build.yml @@ -6,9 +6,7 @@ on: pull_request: types: - labeled - - opened - synchronize - - reopened concurrency: group: ${{ github.head_ref }} || concat(${{ github.ref }}, ${{ github.workflow }}) diff --git a/.github/workflows/macos_build.yml b/.github/workflows/macos_build.yml index 9e0d1090a..039cc5315 100644 --- a/.github/workflows/macos_build.yml +++ b/.github/workflows/macos_build.yml @@ -4,7 +4,9 @@ on: branches: - 'master' pull_request: - types: ['labeled', 'opened', 'synchronize', 'reopened'] + types: + - labeled + - synchronize concurrency: group: ${{ github.head_ref }} || concat(${{ github.ref }}, ${{ github.workflow }}) diff --git a/.github/workflows/sql-codestyle.yml b/.github/workflows/sql-codestyle.yml index fa2c64292..f60b95cd7 100644 --- a/.github/workflows/sql-codestyle.yml +++ b/.github/workflows/sql-codestyle.yml @@ -1,6 +1,10 @@ name: Codestyle on: pull_request: + types: + - opened + - reopened + - synchronize paths: - data/** - "!README.md" diff --git a/.github/workflows/tools_build.yml b/.github/workflows/tools_build.yml index 875a99417..09a8d68c1 100644 --- a/.github/workflows/tools_build.yml +++ b/.github/workflows/tools_build.yml @@ -6,8 +6,6 @@ on: pull_request: types: - labeled - - opened - - reopened - synchronize concurrency: diff --git a/.github/workflows/windows_build.yml b/.github/workflows/windows_build.yml index ac492a77a..aa8700778 100644 --- a/.github/workflows/windows_build.yml +++ b/.github/workflows/windows_build.yml @@ -4,7 +4,9 @@ on: branches: - 'master' pull_request: - types: ['labeled', 'opened', 'synchronize', 'reopened'] + types: + - labeled + - synchronize concurrency: group: ${{ github.head_ref }} || concat(${{ github.ref }}, ${{ github.workflow }}) From 9c01bbbd6e64853954308bca2242d561d89024c8 Mon Sep 17 00:00:00 2001 From: Exitare Date: Mon, 23 Dec 2024 03:08:39 -0800 Subject: [PATCH 25/74] fix(Scripts/Hyjal) First wave should not grant reputation (#21004) --- .../CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp index 4a11a8d13..c0c95f6c7 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp @@ -190,6 +190,8 @@ public: if (creature->IsSummon() && _bossWave != TO_BE_DECIDED) { + if (_currentWave == 0) + creature->SetDisableReputationGain(true); DoUpdateWorldState(WORLD_STATE_ENEMYCOUNT, ++trash); // Update the instance wave count on new trash spawn _encounterNPCs.insert(creature->GetGUID()); // Used for despawning on wipe } From 24726545fbb189c3fb23b5a2ceded8a04bd3f7ab Mon Sep 17 00:00:00 2001 From: sudlud Date: Mon, 23 Dec 2024 22:29:06 +0100 Subject: [PATCH 26/74] fix(Core/Network): fix high idle cpu load in NetworkThread (#21033) --- src/server/shared/Network/NetworkThread.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/shared/Network/NetworkThread.h b/src/server/shared/Network/NetworkThread.h index b280c16d4..0f65a97b6 100644 --- a/src/server/shared/Network/NetworkThread.h +++ b/src/server/shared/Network/NetworkThread.h @@ -179,7 +179,7 @@ protected: { LOG_DEBUG("misc", "Network Thread Starting"); - _updateTimer.expires_at(std::chrono::steady_clock::now()); + _updateTimer.expires_at(std::chrono::steady_clock::now() + std::chrono::milliseconds(1)); _updateTimer.async_wait([this](boost::system::error_code const&) { Update(); }); _ioContext.run(); @@ -193,7 +193,7 @@ protected: if (_stopped) return; - _updateTimer.expires_at(std::chrono::steady_clock::now()); + _updateTimer.expires_at(std::chrono::steady_clock::now() + std::chrono::milliseconds(1)); _updateTimer.async_wait([this](boost::system::error_code const&) { Update(); }); AddNewSockets(); From ffae375f7323df05ba23b364c55fcc3bc2d47976 Mon Sep 17 00:00:00 2001 From: Grimdhex <176165533+Grimdhex@users.noreply.github.com> Date: Tue, 24 Dec 2024 12:39:00 +0100 Subject: [PATCH 27/74] fix(Apps/Codestyle): rewrite semi-colon check (#21027) --- apps/codestyle/codestyle-sql.py | 44 +++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/apps/codestyle/codestyle-sql.py b/apps/codestyle/codestyle-sql.py index 840be4904..d93646d09 100644 --- a/apps/codestyle/codestyle-sql.py +++ b/apps/codestyle/codestyle-sql.py @@ -15,6 +15,7 @@ results = { "Multiple blank lines check": "Passed", "Trailing whitespace check": "Passed", "SQL codestyle check": "Passed", + "Missing semicolon check": "Passed" } # Collect all files in all directories @@ -42,6 +43,7 @@ def parsing_file(files: list) -> None: multiple_blank_lines_check(file, file_path) trailing_whitespace_check(file, file_path) sql_check(file, file_path) + semicolon_check(file, file_path) except UnicodeDecodeError: print(f"\nCould not decode file {file_path}") sys.exit(1) @@ -114,14 +116,6 @@ def sql_check(file: io, file_path: str) -> None: print( f"Tab found! Replace it to 4 spaces: {file_path} at line {line_number}") check_failed = True - - # Ignore comments (remove content after --) - line_without_comment = re.sub(r'--.*', '', line).strip() - # Check if the last non-empty line ends with a semicolon - if not line_without_comment.endswith(';'): - print( - f"The last non-empty line does not end with a semicolon: {file_path}") - check_failed = True last_line = line[-1].strip() if last_line: @@ -134,6 +128,40 @@ def sql_check(file: io, file_path: str) -> None: error_handler = True results["SQL codestyle check"] = "Failed" +def semicolon_check(file: io, file_path: str) -> None: + global error_handler, results + file.seek(0) # Reset file pointer to the beginning + check_failed = False + sql_keywords = ["SELECT", "INSERT", "UPDATE", "DELETE"] + query_open = False + + lines = file.readlines() + total_lines = len(lines) + + for line_number, line in enumerate(lines, start=1): + stripped_line = line.rstrip() # Remove trailing whitespace including newline + + # Check if one keyword is in the line + if not query_open and any(keyword in stripped_line for keyword in sql_keywords): + query_open = True + + if query_open: + if stripped_line == '': + print(f"Missing semicolon in {file_path} at line {line_number - 1}") + check_failed = True + query_open = False + elif line_number == total_lines: + if not stripped_line.endswith(';'): + print(f"Missing semicolon in {file_path} at the last line {line_number}") + check_failed = True + query_open = False + elif stripped_line.endswith(';'): + query_open = False + + if check_failed: + error_handler = True + results["Missing semicolon check"] = "Failed" + # Collect all files from matching directories all_files = collect_files_from_directories(src_directory) From 2c927441407443938b1ed50e87fb94a505726d4b Mon Sep 17 00:00:00 2001 From: Rocco Silipo <108557877+Rorschach91@users.noreply.github.com> Date: Tue, 24 Dec 2024 14:35:38 +0100 Subject: [PATCH 28/74] fix(DB/Object) Sniffed Saronite Arrows spawn in phase 1. (#21029) Co-authored-by: Grimdhex <176165533+Grimdhex@users.noreply.github.com> --- .../Saronite_Arrows_Phase_1.sql | 148 ++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 data/sql/updates/pending_db_world/Saronite_Arrows_Phase_1.sql diff --git a/data/sql/updates/pending_db_world/Saronite_Arrows_Phase_1.sql b/data/sql/updates/pending_db_world/Saronite_Arrows_Phase_1.sql new file mode 100644 index 000000000..c449ab626 --- /dev/null +++ b/data/sql/updates/pending_db_world/Saronite_Arrows_Phase_1.sql @@ -0,0 +1,148 @@ + +-- Remove unofficial DBGuids and adds official spawn points (Sniffed Values) +DELETE FROM `gameobject` WHERE (`id` = 190691) AND (`guid` IN (66111, 66112, 66113, 66114, 66115, 66116, 66117, 66118, 66119, 66120, 66121, 66122, 66123, 66124, 66125, 66127, 66128, 66129, 66130, 66131, 66132, 66133, 66134, 66135, 66136, 66137, 66138, 66139, 66140, 66141, 66143, 66144, 66145, 66146, 66147, 66148, 66149, 66150, 66151, 66152, 66153, 66154, 66155, 66156, 66157, 66158, 66159, 66160, 66161, 66162, 66163, 66164, 66165, 66166, 66167, 66168, 66169, 66170, 66171, 66172, 66173, 66174, 66175, 66176, 66177, 66178, 66179, 66180, 66181, 66182, 66183, 66184, 66185, 66186, 66187, 66188, 66189, 66190, 66192, 66193, 66194, 66195, 66196, 66197, 66198, 66199, 66200, 66201, 66202, 66203, 66204, 66205, 66206, 66207, 66208, 66209, 66210, 66211, 66212, 66213, 66214, 66215, 66216, 66217, 66219, 66220, 66221, 66222, 66223, 66224, 66225, 66226, 66227, 66228, 66229, 66231, 66232, 66233)); +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 +(66111, 190691, 609, 0, 0, 1, 1, 2220.6106 , -5782.374 , 101.817215, 4.8694706, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66112, 190691, 609, 0, 0, 1, 1, 2185.355 , -5919.15 , 101.08694, 4.258607, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66113, 190691, 609, 0, 0, 1, 1, 1996.4088 , -5842.396 , 100.7364, 3.38594, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66114, 190691, 609, 0, 0, 1, 1, 1976.885 , -5839.7812 , 100.62573, 5.742135, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66115, 190691, 609, 0, 0, 1, 1, 1968.5273 , -5861.3496 , 100.64732, 2.2863789, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66116, 190691, 609, 0, 0, 1, 1, 2069.852 , -5841.052 , 102.76751, 3.1316335, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66117, 190691, 609, 0, 0, 1, 1, 2084.4976 , -5841.195 , 103.562, 3.1316335, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66118, 190691, 609, 0, 0, 1, 1, 1985.0178 , -5824.089 , 100.68411, 0.7155849, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66119, 190691, 609, 0, 0, 1, 1, 1961.3948 , -5841.2725 , 100.61539, 4.729844, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66120, 190691, 609, 0, 0, 1, 1, 1940.5985 , -5824.901 , 100.47675, 3.0543265, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66121, 190691, 609, 0, 0, 1, 1, 2056.4412 , -5846.3066 , 102.025215, 3.3863468, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66122, 190691, 609, 0, 0, 1, 1, 1958.8038 , -5809.7144 , 101.13848, 0.15707901, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66123, 190691, 609, 0, 0, 1, 1, 1974.2313 , -5786.4897 , 100.59507, 4.729844, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66124, 190691, 609, 0, 0, 1, 1, 1914.6744 , -5834.2173 , 100.37152, 1.3788092, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66125, 190691, 609, 0, 0, 1, 1, 2038.3315 , -5844.796 , 100.440384, 3.2734783, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66127, 190691, 609, 0, 0, 1, 1, 1997.3458 , -5844.343 , 100.75951, 3.1083305, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66128, 190691, 609, 0, 0, 1, 1, 1983.5228 , -5844.791 , 100.61369, 3.1415927, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66129, 190691, 609, 0, 0, 1, 1, 1933.4218 , -5762.193 , 104.0975, 3.2935214, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66130, 190691, 609, 0, 0, 1, 1, 1941.1277 , -5848.868 , 100.69379, 3.2374845, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66131, 190691, 609, 0, 0, 1, 1, 1905.713 , -5794.4614 , 101.17828, 4.4749866, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66132, 190691, 609, 0, 0, 1, 1, 1907.3081 , -5787.869 , 101.329254, 4.4749866, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66133, 190691, 609, 0, 0, 1, 1, 2027.9718 , -5757.5527 , 99.55013, 3.1865582, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66134, 190691, 609, 0, 0, 1, 1, 2027.9955 , -5751.978 , 99.075264, 3.039869, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66135, 190691, 609, 0, 0, 1, 1, 1989.4558 , -5754.071 , 100.958626, 3.0024395, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66136, 190691, 609, 0, 0, 1, 1, 1990.212 , -5751.9937 , 101.19646, 3.2041564, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66137, 190691, 609, 0, 0, 1, 1, 1992.3824 , -5784.0103 , 100.81239, 2.879789, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66138, 190691, 609, 0, 0, 1, 1, 2030.5973 , -5803.4043 , 100.4455, 4.8171096, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66139, 190691, 609, 0, 0, 1, 1, 1969.8164 , -5771.3735 , 100.47984, 1.7104216, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66140, 190691, 609, 0, 0, 1, 1, 2020.5231 , -5821.436 , 100.91554, 6.021387, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66141, 190691, 609, 0, 0, 1, 1, 2044.3993 , -5821.7314 , 100.85934, 1.4137151, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66143, 190691, 609, 0, 0, 1, 1, 1983.0048 , -5754.5845 , 99.77161, 3.2926145, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66144, 190691, 609, 0, 0, 1, 1, 2037.0658 , -5836.382 , 100.4912, 4.6425757, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66145, 190691, 609, 0, 0, 1, 1, 1986.0759 , -5871.829 , 100.72707, 1.2217293, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66146, 190691, 609, 0, 0, 1, 1, 1910.2681 , -5775.6367 , 102.14683, 4.4749866, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66147, 190691, 609, 0, 0, 1, 1, 1866.2843 , -5815.2437 , 100.51541, 3.2630513, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66148, 190691, 609, 0, 0, 1, 1, 1847.6194 , -5817.658 , 100.18135, 3.2224116, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66149, 190691, 609, 0, 0, 1, 1, 1825.1155 , -5817.2334 , 102.60431, 3.122061, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66150, 190691, 609, 0, 0, 1, 1, 1899.42, -5812.5977 , 100.99523, 3.3401446, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66151, 190691, 609, 0, 0, 1, 1, 1910.2681 , -5775.6367 , 102.14683, 4.4749866, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66152, 190691, 609, 0, 0, 1, 1, 1898.6533 , -5816.182 , 100.97481, 3.896659, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66153, 190691, 609, 0, 0, 1, 1, 1848.2504 , -5817.519 , 100.10902, 3.2374845, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66154, 190691, 609, 0, 0, 1, 1, 1963.5308 , -5798.0835 , 100.797935, 3.9401047, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66155, 190691, 609, 0, 0, 1, 1, 1932.7786 , -5806.3887 , 100.229904, 3.3866591, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66156, 190691, 609, 0, 0, 1, 1, 1813.3654 , -5817.226 , 105.75475, 3.1611245, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66157, 190691, 609, 0, 0, 1, 1, 2004.6646 , -5868.23 , 100.55443, 1.4660758, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66158, 190691, 609, 0, 0, 1, 1, 1893.9923 , -5910.102 , 102.065056, 3.1533117, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66159, 190691, 609, 0, 0, 1, 1, 1876.4713 , -5831.3823 , 101.15165, 2.6517444, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66160, 190691, 609, 0, 0, 1, 1, 2001.4006 , -5893.5283 , 101.45092, 1.7104216, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66161, 190691, 609, 0, 0, 1, 1, 1871.0381 , -5893.766 , 103.65555, 4.602811, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66162, 190691, 609, 0, 0, 1, 1, 1898.1274 , -5910.0537 , 101.89299, 3.1533117, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66163, 190691, 609, 0, 0, 1, 1, 1961.3948 , -5841.2725 , 100.61539, 4.729844, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66164, 190691, 609, 0, 0, 1, 1, 1851.5007 , -5907.953 , 104.657585, 3.769677, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66165, 190691, 609, 0, 0, 1, 1, 1921.0793 , -5907.0405 , 101.39488, 3.2276707, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66166, 190691, 609, 0, 0, 1, 1, 1866.1934 , -5826.356 , 100.42924, 2.898847, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66167, 190691, 609, 0, 0, 1, 1, 1801.4369 , -5932.352 , 115.83392, 2.934986, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66168, 190691, 609, 0, 0, 1, 1, 1841.6619 , -5818.099 , 100.35402, 3.2022355, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66169, 190691, 609, 0, 0, 1, 1, 1825.5342 , -5817.69 , 102.587555, 3.1161263, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66170, 190691, 609, 0, 0, 1, 1, 1820.4022 , -5926.401 , 112.87562, 3.3083558, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66171, 190691, 609, 0, 0, 1, 1, 1780.7356 , -5924.469 , 116.04771, 2.7775676, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66172, 190691, 609, 0, 0, 1, 1, 1734.1923 , -5904.1626 , 116.12229, 2.6980093, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66173, 190691, 609, 0, 0, 1, 1, 1717.5593 , -5895.232 , 116.131546, 2.5371814, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66174, 190691, 609, 0, 0, 1, 1, 1768.0194 , -5817.4536 , 116.0124, 3.1376865, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66175, 190691, 609, 0, 0, 1, 1, 1775.1846 , -5819.255 , 115.437355, 3.0985346, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66176, 190691, 609, 0, 0, 1, 1, 1646.7789 , -5849.391 , 117.284134, 4.5374284, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66177, 190691, 609, 0, 0, 1, 1, 1749.0945 , -5807.3667 , 117.10514, 2.274793, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66178, 190691, 609, 0, 0, 1, 1, 1717.2809 , -5831.0967 , 116.13906, 3.3866591, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66179, 190691, 609, 0, 0, 1, 1, 1678.9017 , -5833.643 , 116.258026, 2.9541461, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66180, 190691, 609, 0, 0, 1, 1, 1695.6592 , -5877.316 , 116.16627, 1.9197153, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL), +(66181, 190691, 609, 0, 0, 1, 1, 1691.6239 , -5878.599 , 116.16513, 2.6345763, 0, 0, 0, 1, 180, 0, 1, '', 58238, NULL); +-- Setup object groups +DELETE FROM `pool_template` WHERE (`entry` IN (22385)); +INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES +(22385, 40, 'Saronite Arrows (Phase 1)'); +DELETE FROM `pool_gameobject` WHERE (`pool_entry` IN (22385)); +INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES +(66111, 22385, 0, 'Saronite Arrow (190691)'), +(66112, 22385, 0, 'Saronite Arrow (190691)'), +(66113, 22385, 0, 'Saronite Arrow (190691)'), +(66114, 22385, 0, 'Saronite Arrow (190691)'), +(66115, 22385, 0, 'Saronite Arrow (190691)'), +(66116, 22385, 0, 'Saronite Arrow (190691)'), +(66117, 22385, 0, 'Saronite Arrow (190691)'), +(66118, 22385, 0, 'Saronite Arrow (190691)'), +(66119, 22385, 0, 'Saronite Arrow (190691)'), +(66120, 22385, 0, 'Saronite Arrow (190691)'), +(66121, 22385, 0, 'Saronite Arrow (190691)'), +(66122, 22385, 0, 'Saronite Arrow (190691)'), +(66123, 22385, 0, 'Saronite Arrow (190691)'), +(66124, 22385, 0, 'Saronite Arrow (190691)'), +(66125, 22385, 0, 'Saronite Arrow (190691)'), +(66127, 22385, 0, 'Saronite Arrow (190691)'), +(66128, 22385, 0, 'Saronite Arrow (190691)'), +(66129, 22385, 0, 'Saronite Arrow (190691)'), +(66130, 22385, 0, 'Saronite Arrow (190691)'), +(66131, 22385, 0, 'Saronite Arrow (190691)'), +(66132, 22385, 0, 'Saronite Arrow (190691)'), +(66133, 22385, 0, 'Saronite Arrow (190691)'), +(66134, 22385, 0, 'Saronite Arrow (190691)'), +(66135, 22385, 0, 'Saronite Arrow (190691)'), +(66136, 22385, 0, 'Saronite Arrow (190691)'), +(66137, 22385, 0, 'Saronite Arrow (190691)'), +(66138, 22385, 0, 'Saronite Arrow (190691)'), +(66139, 22385, 0, 'Saronite Arrow (190691)'), +(66140, 22385, 0, 'Saronite Arrow (190691)'), +(66141, 22385, 0, 'Saronite Arrow (190691)'), +(66143, 22385, 0, 'Saronite Arrow (190691)'), +(66144, 22385, 0, 'Saronite Arrow (190691)'), +(66145, 22385, 0, 'Saronite Arrow (190691)'), +(66146, 22385, 0, 'Saronite Arrow (190691)'), +(66147, 22385, 0, 'Saronite Arrow (190691)'), +(66148, 22385, 0, 'Saronite Arrow (190691)'), +(66149, 22385, 0, 'Saronite Arrow (190691)'), +(66150, 22385, 0, 'Saronite Arrow (190691)'), +(66151, 22385, 0, 'Saronite Arrow (190691)'), +(66152, 22385, 0, 'Saronite Arrow (190691)'), +(66153, 22385, 0, 'Saronite Arrow (190691)'), +(66154, 22385, 0, 'Saronite Arrow (190691)'), +(66155, 22385, 0, 'Saronite Arrow (190691)'), +(66156, 22385, 0, 'Saronite Arrow (190691)'), +(66157, 22385, 0, 'Saronite Arrow (190691)'), +(66158, 22385, 0, 'Saronite Arrow (190691)'), +(66159, 22385, 0, 'Saronite Arrow (190691)'), +(66160, 22385, 0, 'Saronite Arrow (190691)'), +(66161, 22385, 0, 'Saronite Arrow (190691)'), +(66162, 22385, 0, 'Saronite Arrow (190691)'), +(66163, 22385, 0, 'Saronite Arrow (190691)'), +(66164, 22385, 0, 'Saronite Arrow (190691)'), +(66165, 22385, 0, 'Saronite Arrow (190691)'), +(66166, 22385, 0, 'Saronite Arrow (190691)'), +(66167, 22385, 0, 'Saronite Arrow (190691)'), +(66168, 22385, 0, 'Saronite Arrow (190691)'), +(66169, 22385, 0, 'Saronite Arrow (190691)'), +(66170, 22385, 0, 'Saronite Arrow (190691)'), +(66171, 22385, 0, 'Saronite Arrow (190691)'), +(66172, 22385, 0, 'Saronite Arrow (190691)'), +(66173, 22385, 0, 'Saronite Arrow (190691)'), +(66174, 22385, 0, 'Saronite Arrow (190691)'), +(66175, 22385, 0, 'Saronite Arrow (190691)'), +(66176, 22385, 0, 'Saronite Arrow (190691)'), +(66177, 22385, 0, 'Saronite Arrow (190691)'), +(66178, 22385, 0, 'Saronite Arrow (190691)'), +(66179, 22385, 0, 'Saronite Arrow (190691)'), +(66180, 22385, 0, 'Saronite Arrow (190691)'), +(66181, 22385, 0, 'Saronite Arrow (190691)'); From ddd272f6a2e17dc5366d4e5c2fbbb7dec481ab92 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 24 Dec 2024 13:36:38 +0000 Subject: [PATCH 29/74] chore(DB): import pending files Referenced commit(s): 2c927441407443938b1ed50e87fb94a505726d4b --- .../Saronite_Arrows_Phase_1.sql => db_world/2024_12_24_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/Saronite_Arrows_Phase_1.sql => db_world/2024_12_24_00.sql} (99%) diff --git a/data/sql/updates/pending_db_world/Saronite_Arrows_Phase_1.sql b/data/sql/updates/db_world/2024_12_24_00.sql similarity index 99% rename from data/sql/updates/pending_db_world/Saronite_Arrows_Phase_1.sql rename to data/sql/updates/db_world/2024_12_24_00.sql index c449ab626..2cfcbb92c 100644 --- a/data/sql/updates/pending_db_world/Saronite_Arrows_Phase_1.sql +++ b/data/sql/updates/db_world/2024_12_24_00.sql @@ -1,3 +1,4 @@ +-- DB update 2024_12_22_02 -> 2024_12_24_00 -- Remove unofficial DBGuids and adds official spawn points (Sniffed Values) DELETE FROM `gameobject` WHERE (`id` = 190691) AND (`guid` IN (66111, 66112, 66113, 66114, 66115, 66116, 66117, 66118, 66119, 66120, 66121, 66122, 66123, 66124, 66125, 66127, 66128, 66129, 66130, 66131, 66132, 66133, 66134, 66135, 66136, 66137, 66138, 66139, 66140, 66141, 66143, 66144, 66145, 66146, 66147, 66148, 66149, 66150, 66151, 66152, 66153, 66154, 66155, 66156, 66157, 66158, 66159, 66160, 66161, 66162, 66163, 66164, 66165, 66166, 66167, 66168, 66169, 66170, 66171, 66172, 66173, 66174, 66175, 66176, 66177, 66178, 66179, 66180, 66181, 66182, 66183, 66184, 66185, 66186, 66187, 66188, 66189, 66190, 66192, 66193, 66194, 66195, 66196, 66197, 66198, 66199, 66200, 66201, 66202, 66203, 66204, 66205, 66206, 66207, 66208, 66209, 66210, 66211, 66212, 66213, 66214, 66215, 66216, 66217, 66219, 66220, 66221, 66222, 66223, 66224, 66225, 66226, 66227, 66228, 66229, 66231, 66232, 66233)); From 532d33c89e3a2ab70dc3c79b52520a05a9e91e89 Mon Sep 17 00:00:00 2001 From: Trinitarius <84076297+trinitarius@users.noreply.github.com> Date: Wed, 25 Dec 2024 19:50:48 +0100 Subject: [PATCH 30/74] fix(DB/page_text_locale): deDE name and location fixes (#21035) --- .../update_page_text_locale.sql | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 data/sql/updates/pending_db_world/update_page_text_locale.sql diff --git a/data/sql/updates/pending_db_world/update_page_text_locale.sql b/data/sql/updates/pending_db_world/update_page_text_locale.sql new file mode 100644 index 000000000..589270b4d --- /dev/null +++ b/data/sql/updates/pending_db_world/update_page_text_locale.sql @@ -0,0 +1,20 @@ +DELETE FROM `page_text_locale` WHERE `ID` IN (74, 77, 81, 2436, 2437, 2438, 2439, 2440, 2441, 2442, 2443, 2450, 2455, 2460, 2463, 2464, 2466, 2467) AND `locale` = 'deDE'; +INSERT INTO `page_text_locale` (`ID`, `locale`, `Text`, `VerifiedBuild`) VALUES +(74,'deDE','TAG 1:$B$BDer Lehrling und ich sind heute im Eisklammtal angekommen. Die Reise durch die Höhle verlief ohne besondere Vorkommnisse. Wir schlugen unser Lager in sicherer Entfernung von der Höhle auf, in der sich die Trolle eingenistet haben sollen.$B$BTAG 2:$B$BDas verdammte Wolfsgeheul ließ mich fast die ganze Nacht kein Auge zutun.$B$BIn ein paar Tagen werde ich wohl neue Kleider aus Wolfsbalg haben.$B$BDer Bursche hat sich heute ausgerechnet mit einem Trogg eingelassen. Es kam zum Kampf und',0), +(77,'deDE','TAG 1: Der Lehrling und ich sind heute im Eisklammtal angekommen. Die Reise durch die Höhle verlief ohne besondere Vorkommnisse. Wir schlugen unser Lager in sicherer Entfernung von der Höhle auf, in der sich die Trolle eingenistet haben sollen. TAG 2: Das verdammte Wolfsgeheul ließ mich fast die ganze Nacht kein Auge zutun. In ein paar Tagen werde ich wohl neue Kleider aus Wolfsbalg haben. Der Bursche hat sich heute ausgerechnet mit einem Trogg eingelassen. Es kam zum Kampf und',0), +(81,'deDE','behielt tatsächlich die Oberhand gegen den hässlichen Kerl, aber dafür hat er jetzt auch eine unangenehme Verletzung am Arm. Also muss ich wohl in den nächsten Tagen die lästigen Pflichten erledigen.$B$BTAG 3:$B$BKalt. Um die Mittagszeit schneite es ein wenig.$B$BTAG 4:$B$BDer Bursche kam gut gelaunt zurück und wir haben uns die Trolle mal genauer angesehen. Nach den Zeichen auf ihrer Haut und dem Plunder an Schmuck zu urteilen, den sie an sich trugen, würde ich sagen: Frostmähnen.',0), +(2436,'deDE','Vergesst meine Worte nicht, $N. Dies ist die Zeit der Unterdrückung und Täuschung... selbst in unserer großartigen Unterstadt. Jeder, der loyal zu Sylvanas steht, arbeitet an der Schaffung einer neuen, von den Verlassenen bestimmten, Ära. Und obgleich wir über keine magischen Fertigkeiten verfügen und keine Waffen an unseren Grenzen postieren, haben wir unsere eigenen Rolle in diesem Spiel.$B$BSucht mich im Gasthaus von Todesend auf. Dort werden wir weiterreden.$B$B- David Trias, Schurkenlehrer',0), +(2437,'deDE','Sael\'ah. Ich hoffe, dieses Siegelzeichen erreicht Euch bei guter Gesundheit. Ich wurde gebeten, Euch meine Dienste anzubieten. Auch ich befinde mich im Laubschattental, in dem großen Baum von Aldrassil, und wollte Euch wissen lassen, dass Ihr, wenn Ihr irgendeine Ausbildung braucht, jederzeit zu mir kommen könnt.$B$BIn diesen unsicheren Zeiten halte ich es für klug, dass sich alle, die sich der Verstohlenheit bedienen, noch enger zusammenschließen. Wie sollten wir sonst Teldrassil und unsere Art des Lebens beschützen können?$B$BSucht mich auf, wenn Ihr könnt.$B$B- Frahun Schattenflüsterer, Schurkenlehrerin',0), +(2438,'deDE','Seid gegrüßt, $GBruder:Schwester;. Die Zerschmetterte Hand sendet Grüße und hofft, dass das Tal ein geeigneter Ort für die Ausübung Eures Handwerks sein wird. Dies ist eine Zeit der Prüfung für Euch, denkt also nicht, dass Ihr nicht ständig überwacht würdet.$B$BEs ist meine Pflicht, für die Hand Eure Fertigkeiten zu bewerten und sie darüber zu informieren, wenn Ihr für größere Herausforderungen bereit seid.$B$BWenn Ihr so weit seid, findet Ihr mich tief im Höhlenbau. Ich werde Euch dort erwarten.$B$B- Rwag, Schurkenlehrer',0), +(2439,'deDE','Sagt mir, $C, habt Ihr jemals einen Orc schreien gehört? Oder vielleicht Euer Zuhause vor Gnollen geschützt, die Euch an die Kehle wollen? Ja, das klingt brutal, nicht wahr?$B$BTja, Ihr werdet meine Hilfe brauchen wenn Ihr Eure Lieben schützen wollt. Ihr findet mich in der Abtei von Nordhain. Mein Wissen ist nicht billig, wenn Ihr jedoch erfahren genug seid, kann ich Euch ein ganze Reihe von Kampfarten und Bewegungen beibringen, die Euch helfen werden, Gefahren von Sturmwind und Umgebung abzuwenden.$B$B- Llane Beshere, Kriegerlehrer',0), +(2440,'deDE','ACHTUNG:$BIhr habt Euch umgehend bei Thran Khorman zu melden. Er hält sich im Gebäude A3 auf: den Bewohnern auch unter dem Namen Ambossar bekannt. Nachdem Ihr Euch bei Khorman gemeldet habt, werdet Ihr Euch für den kommenden Krieg bereit machen - den Krieg, mit dem wir unsere Heimat Gnomeregan zurückerobern werden!$B$BAlle Anstrengungen und wichtigen Aufgaben müssen auf das Erreichen dieser Direktive konzentriert sein. Habt Ihr diese erfüllt, wird Euch eine neue Aufgabe zugewiesen.',0), +(2441,'deDE','Viele Stämme behaupten, es sei eine Gabe, Magie wirken oder mit unseren Vorfahren sprechen zu können, Ihr sollt jedoch wissen, $C, dass auch Ihr begabt seid. Einige haben nicht die Kraft in den Armen, mächtige Waffen zu schwingen. Einige haben nicht die Fertigkeit, den Schlag eines Auftragsmörders zu parieren oder den körperlichen Angriffen eines arkanen Zauberers standzuhalten, Ihr jedoch schon. Ihr seid stark. Und ich werde Euch helfen, noch stärker zu werden. Ihr findet mich im Camp Narache.$B$B- Harutt Donnerhorn, Kriegerlehrer',0), +(2442,'deDE','Beim Barte Magnis, es gibt so viel zu bereden, $N, und wir haben nur so wenig Zeit! Sucht mich so schnell wie möglich in Ambossar über dem Eisklammtal auf. Wir müssen unverzüglich anfangen.$B$BEs gibt so viele Dinge, von denen ich Euch berichten kann, damit Ihr Euch eilt, aber mit denen haben wir nichts zu schaffen... jedenfalls im Moment. Worauf wir uns konzentrieren müssen, ist das Halten der Axt, das Gewicht unserer Rüstung und der Geruch unseres Schweißes, der uns im Kampf gegen unsere Feinde über die Stirn läuft. Damit beginnen wir.$B$B- Thran Khorman, Kriegerlehrer',0), +(2443,'deDE','Viele Eurer Art wenden sich dem Arkanen und Göttlichen zu, um so Kraft zu gewinnen, aber wir wissen es besser, nicht wahr, $C? Wir wissen, dass unsere heiligen Symbole unsere Waffen sind, unser Zauberbuch unser Schild und unsere Weisheit unser Panzer.$B$BSelbst im Untod sind wir stark und wir werden nur noch stärker.$B$BIhr findet mich im Gasthaus von Todesend. Dort werde ich mit Euch diese Angelegenheiten und weitere Dinge erörtern.$B$B- Dannal Stern, Kriegerlehrer',0), +(2450,'deDE','ACHTUNG:$B$BKein Wort! Seht Euch nicht um! Jemand könnte Euch jetzt gerade beobachten.$B$BIch heiße Alamar Grimm, $N. Ich unterweise diejenigen, die Wissen und größere Macht aus... den jenseitigen Welten suchen. Ich wurde gebeten, diskret mit Euch Kontakt aufzunehmen und Euch darüber zu informieren, dass ich Euch in einer echten Form der Magie weiterbilden kann.$B$BWenn Ihr könnt, sucht mich auf der Rückseite von Ambossar auf.$B$B- Alamar Grimm, Hexenmeisterlehrer',0), +(2455,'deDE','Zähmer der Wildtiere, meisterlicher Schütze, erprobter Fährtenleser... was wollt Ihr sonst noch in diesem Leben erreichen? Für all dies zusammen muss man äußerst intelligent und sehr geduldig sein.$B$BDer Weg des Jägers ist kein einfacher, so viel ist sicher. Ihr benötigt viel Übung, um auch nur so gut zu werden wie unser Scharfschütze im niedersten Rang. Aber dafür bin ich ja da.$B$BIhr findet mich in Ambossar über dem Eisklammtal. Ich werde Euch erwarten.$B$B- Thorgas Grimson, Jägerlehrer',0), +(2460,'deDE','Ich grüße Euch, $C. Der Wind flüsterte mir zu, dass Ihr kommen würdet. Die Erde pries Eure Kraft. Und jetzt künden die alten Geister von den Leistungen, die Ihr noch vollbringen werdet. Unser Volk kann weise und große Anführer brauchen. Für beide Eigenschaften wendet es sich häufig an uns. So Ihr dies wollt. Lehre ich Euch mehr von unseren Fertigkeiten.$B$BSucht mich im Camp Narache auf der Hochwolkenebene auf - dann werden wir weiterreden.$B$B- Meela Morgenwandler, Schamanenlehrerin',0), +(2463,'deDE','Ich hoffe, dieser Brief erreicht Euch bei guter Gesundheit, $C. Ich sage dies mit großem Stolz, da nicht viele so tiefen Glauben zeigen können, wisset jedoch auch, dass sie zu den Besten der Besten der Beschützer von Azeroth zählen.Vergesst niemals, Euer erster und wichtigster Gedanke sollte stets Eurer Pflicht gelten, die zu bekämpfen, die unserer Welt schaden und Verderbnis in unsere Häuser bringen wollen. Ich bin berechtigt, Euch zu unterweisen, zumindest vorläufig. Wenn Ihr bereit seid, findet Ihr mich in der Abtei von Nordhain. - Bruder Sammuel, Paladinlehrer',0), +(2464,'deDE','Einige fürchten unsere Art mehr als die Drachen. Einige beneiden uns mehr als selbst die begnadetsten Schmiede. Einige preisen unsere Stärke im Kampf. Andere Freuen sich an unserem Glauben. Einige sind einfach nur neidisch, dass wir sie unter den Tisch trinken können! Aber wisset dies, $C. Ihr seid unter den besten Beschützern von ganz Azeroth. Das Heilige Licht gibt uns so viel Kraft, wie wir es stärken.$B$BIch werde Euch mehr erzählen, wenn Ihr Euch ein wenig mit dem Land vertraut gemacht habt. Ihr findet mich in Ambossar, über dem Tal.$B$B- Bromos Grummler, Paladinlehrer',0), +(2466,'deDE','Das Heilige Licht wärmt unsere Rücken und jeden Tag werden neue Entdeckungen gemacht... dies ist eine aufregende Zeit für die Söhne von Eisenschmiede. Die Forscherliga macht große Fortschritte bei der Suche nach längst verlorenen Antworten auf noch ältere Fragen. Und jetzt können wir auch Euch zu unseren Getreuen zählen beim Kampf gegen die Troggs und alle anderen Bedrohungen unserer Grenzen.$B$BSucht mich auf, wenn Ihr die Zeit dazu findet. Ich bin auf der Rückseite von Ambossar zu finden, gleich den Hügel hoch.$B$B- Branstock Kahlder, Priesterlehrer',0), +(2467,'deDE','Fühlt Euch gesegnet, $N. dass Euer Geist nicht in die Nether-Welt gesogen wurde. Fühlt Euch umso mehr gesegnet, da ich entschieden habe, dass Ihr es wert seid, Empfänger dieser von mir verfassten Schriftrolle zu sein.$B$BDie Menschen, die Ihr einst kanntet und die Euch vielleicht sogar etwas bedeutet haben, sind nicht mehr! Ihr müsst lernen, damit für den Rest Eures jetzt unnatürlichen Lebens \"zu leben\". Ich schlage vor, dass Ihr zunächst lernt, damit klarzukommen.$B$BWenn Ihr meint, dass Ihr für die vor Euch liegenden Prüfungen bereit seid, sucht mich in der Kirche von Todesend auf.$B$B- Dunkler Kleriker Duesten, Priesterlehrer',0); From 4073a8dfc7b00b80a678396625dd53afd76db22b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 25 Dec 2024 18:51:48 +0000 Subject: [PATCH 31/74] chore(DB): import pending files Referenced commit(s): 532d33c89e3a2ab70dc3c79b52520a05a9e91e89 --- .../update_page_text_locale.sql => db_world/2024_12_25_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/update_page_text_locale.sql => db_world/2024_12_25_00.sql} (99%) diff --git a/data/sql/updates/pending_db_world/update_page_text_locale.sql b/data/sql/updates/db_world/2024_12_25_00.sql similarity index 99% rename from data/sql/updates/pending_db_world/update_page_text_locale.sql rename to data/sql/updates/db_world/2024_12_25_00.sql index 589270b4d..df24829f2 100644 --- a/data/sql/updates/pending_db_world/update_page_text_locale.sql +++ b/data/sql/updates/db_world/2024_12_25_00.sql @@ -1,3 +1,4 @@ +-- DB update 2024_12_24_00 -> 2024_12_25_00 DELETE FROM `page_text_locale` WHERE `ID` IN (74, 77, 81, 2436, 2437, 2438, 2439, 2440, 2441, 2442, 2443, 2450, 2455, 2460, 2463, 2464, 2466, 2467) AND `locale` = 'deDE'; INSERT INTO `page_text_locale` (`ID`, `locale`, `Text`, `VerifiedBuild`) VALUES (74,'deDE','TAG 1:$B$BDer Lehrling und ich sind heute im Eisklammtal angekommen. Die Reise durch die Höhle verlief ohne besondere Vorkommnisse. Wir schlugen unser Lager in sicherer Entfernung von der Höhle auf, in der sich die Trolle eingenistet haben sollen.$B$BTAG 2:$B$BDas verdammte Wolfsgeheul ließ mich fast die ganze Nacht kein Auge zutun.$B$BIn ein paar Tagen werde ich wohl neue Kleider aus Wolfsbalg haben.$B$BDer Bursche hat sich heute ausgerechnet mit einem Trogg eingelassen. Es kam zum Kampf und',0), From fcc3f7f7cb9eefc1f478f2e066f3fc60a69097dd Mon Sep 17 00:00:00 2001 From: Grimdhex <176165533+Grimdhex@users.noreply.github.com> Date: Wed, 25 Dec 2024 21:57:17 +0100 Subject: [PATCH 32/74] fix(Script/Zul'Aman): adjust Zuljin timers (#20919) --- .../EasternKingdoms/ZulAman/boss_zuljin.cpp | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp index dc7e686d8..95de6bc40 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp @@ -161,13 +161,13 @@ struct boss_zuljin : public BossAI Talk(SAY_AGGRO, 37s); // Phase 1: Default (troll) - ScheduleTimedEvent(7s, [&] { + ScheduleTimedEvent(12s, 29s, [&] { DoCastAOE(SPELL_WHIRLWIND); - }, 15s, 20s); + }, 12s, 29s); - ScheduleTimedEvent(8s, [&] { + ScheduleTimedEvent(7s, 23s, [&] { DoCastRandomTarget(SPELL_GRIEVOUS_THROW, 0, 100.0f); - }, 10s); + }, 7s, 23s); me->m_Events.AddEventAtOffset([&]() { DoCastSelf(SPELL_BERSERK, true); @@ -177,9 +177,9 @@ struct boss_zuljin : public BossAI // Phase 2: Bear Form. ScheduleHealthCheckEvent({ 80 }, [&] { EnterPhase(PHASE_BEAR); - ScheduleTimedEvent(7s, [&] { + ScheduleTimedEvent(8s, [&] { DoCastAOE(SPELL_CREEPING_PARALYSIS); - }, 20s); + }, 26s, 30s); ScheduleTimedEvent(1s, [&] { if (!me->HasSpellCooldown(SPELL_OVERPOWER) && me->GetVictim() && me->GetComboPoints()) @@ -229,17 +229,17 @@ struct boss_zuljin : public BossAI me->m_Events.CancelEventGroup(GROUP_LYNX); EnterPhase(PHASE_DRAGONHAWK); - ScheduleTimedEvent(5s, [&] { + ScheduleTimedEvent(12s, 26s, [&] { DoCastSelf(SPELL_FLAME_WHIRL); - }, 12s); + }, 12s, 26s); - ScheduleTimedEvent(6s, [&] { + ScheduleTimedEvent(11s, 42s, [&] { DoCastRandomTarget(SPELL_SUMMON_PILLAR); - }, 10s); + }, 5s, 25s); - ScheduleTimedEvent(7s, [&] { + ScheduleTimedEvent(16s, 26s, [&] { DoCastAOE(SPELL_FLAME_BREATH); - }, 10s); + }, 6s, 25s); }); } From 082885131362516b745616d152cf93e7eac85531 Mon Sep 17 00:00:00 2001 From: sudlud Date: Wed, 25 Dec 2024 22:46:45 +0100 Subject: [PATCH 33/74] feat(CI/linux-build): introduce option to set maxerrors for compilation (#21022) --- .github/actions/linux-build/action.yml | 9 +++++++-- .github/workflows/core_modules_build.yml | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/actions/linux-build/action.yml b/.github/actions/linux-build/action.yml index 132cfc9fa..caf3c6047 100644 --- a/.github/actions/linux-build/action.yml +++ b/.github/actions/linux-build/action.yml @@ -26,6 +26,11 @@ inputs: description: Flag to enable or disable PCH required: false type: boolean + maxerrors: + default: 1 + description: Max allowed error count before compilation stops + required: false + type: number runs: using: composite steps: @@ -106,8 +111,8 @@ runs: -DCMAKE_BUILD_TYPE="Release" \ -DCMAKE_CXX_COMPILER_LAUNCHER="ccache" \ -DCMAKE_C_COMPILER_LAUNCHER="ccache" \ - -DCMAKE_C_FLAGS="-Werror" \ - -DCMAKE_CXX_FLAGS="-Werror" \ + -DCMAKE_C_FLAGS="-Werror ${{ startsWith(inputs.cc, 'clang') && '-ferror-limit=' || '-fmax-errors=' }}${{inputs.maxerrors}} " \ + -DCMAKE_CXX_FLAGS="-Werror ${{ startsWith(inputs.cxx, 'clang') && '-ferror-limit=' || '-fmax-errors=' }}${{inputs.maxerrors}}" \ -DBUILD_TESTING="ON" \ -DUSE_SCRIPTPCH=${{ inputs.pch == 'true' && 'ON' || '' }} \ -DUSE_COREPCH=${{ inputs.pch == 'true' && 'ON' || '' }} \ diff --git a/.github/workflows/core_modules_build.yml b/.github/workflows/core_modules_build.yml index e67614ebe..38d930cec 100644 --- a/.github/workflows/core_modules_build.yml +++ b/.github/workflows/core_modules_build.yml @@ -49,3 +49,4 @@ jobs: CXX: ${{ matrix.compiler.CXX }} modules: true pch: false + maxerrors: 0 From e68faf71fedf26a2485f6a84dea9abc1d4c46946 Mon Sep 17 00:00:00 2001 From: Kitzunu <24550914+Kitzunu@users.noreply.github.com> Date: Wed, 25 Dec 2024 23:17:25 +0100 Subject: [PATCH 34/74] fix(Core/Log): fmt output for appender (#21043) --- src/common/Logging/Appender.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/Logging/Appender.cpp b/src/common/Logging/Appender.cpp index a16951374..cf9d9df2b 100644 --- a/src/common/Logging/Appender.cpp +++ b/src/common/Logging/Appender.cpp @@ -66,7 +66,7 @@ void Appender::write(LogMessage* message) if (flags & APPENDER_FLAGS_PREFIX_LOGLEVEL) { - ss << Acore::StringFormat("%-5s ", Appender::getLogLevelString(message->level)); + ss << Acore::StringFormat("{} ", Appender::getLogLevelString(message->level)); } if (flags & APPENDER_FLAGS_PREFIX_LOGFILTERTYPE) From f8ea1316c93d8f5e014a20a5f31b1e296a19610b Mon Sep 17 00:00:00 2001 From: Exitare Date: Thu, 26 Dec 2024 00:47:34 -0800 Subject: [PATCH 35/74] fix(DB/Creature)Ashtongue Stormcaller missing interrupt immunity (#21030) --- data/sql/updates/pending_db_world/rev_1734977925243177000.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1734977925243177000.sql diff --git a/data/sql/updates/pending_db_world/rev_1734977925243177000.sql b/data/sql/updates/pending_db_world/rev_1734977925243177000.sql new file mode 100644 index 000000000..7776d7b37 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1734977925243177000.sql @@ -0,0 +1,2 @@ +-- Add interrupt immunity to Ashtongue Stormcaller +UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask` | 33554432 WHERE (`entry` = 22846); From e912547c40f67619da64c87ed5ca12f357bcef6b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 26 Dec 2024 08:48:32 +0000 Subject: [PATCH 36/74] chore(DB): import pending files Referenced commit(s): f8ea1316c93d8f5e014a20a5f31b1e296a19610b --- .../rev_1734977925243177000.sql => db_world/2024_12_26_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1734977925243177000.sql => db_world/2024_12_26_00.sql} (79%) diff --git a/data/sql/updates/pending_db_world/rev_1734977925243177000.sql b/data/sql/updates/db_world/2024_12_26_00.sql similarity index 79% rename from data/sql/updates/pending_db_world/rev_1734977925243177000.sql rename to data/sql/updates/db_world/2024_12_26_00.sql index 7776d7b37..3183d558a 100644 --- a/data/sql/updates/pending_db_world/rev_1734977925243177000.sql +++ b/data/sql/updates/db_world/2024_12_26_00.sql @@ -1,2 +1,3 @@ +-- DB update 2024_12_25_00 -> 2024_12_26_00 -- Add interrupt immunity to Ashtongue Stormcaller UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask` | 33554432 WHERE (`entry` = 22846); From 7f826731b7107ef83f08a18cfdd41e7abf9d2fb7 Mon Sep 17 00:00:00 2001 From: Exitare Date: Thu, 26 Dec 2024 00:49:45 -0800 Subject: [PATCH 37/74] fix(DB/Creature): Add Illidari Nightlord interrupt immunity (#21031) Co-authored-by: Grimdhex <176165533+Grimdhex@users.noreply.github.com> --- data/sql/updates/pending_db_world/rev_1734978274366357000.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1734978274366357000.sql diff --git a/data/sql/updates/pending_db_world/rev_1734978274366357000.sql b/data/sql/updates/pending_db_world/rev_1734978274366357000.sql new file mode 100644 index 000000000..66b33b3fa --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1734978274366357000.sql @@ -0,0 +1,2 @@ +-- Add interrupt immunity to Illidari Nightlord +UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask` | 33554432 WHERE (`entry` = 22855); From 59f79b5a3c56bcccbaa4b4e77e48a7491d684615 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 26 Dec 2024 08:50:46 +0000 Subject: [PATCH 38/74] chore(DB): import pending files Referenced commit(s): 7f826731b7107ef83f08a18cfdd41e7abf9d2fb7 --- .../rev_1734978274366357000.sql => db_world/2024_12_26_01.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1734978274366357000.sql => db_world/2024_12_26_01.sql} (78%) diff --git a/data/sql/updates/pending_db_world/rev_1734978274366357000.sql b/data/sql/updates/db_world/2024_12_26_01.sql similarity index 78% rename from data/sql/updates/pending_db_world/rev_1734978274366357000.sql rename to data/sql/updates/db_world/2024_12_26_01.sql index 66b33b3fa..a1deba22b 100644 --- a/data/sql/updates/pending_db_world/rev_1734978274366357000.sql +++ b/data/sql/updates/db_world/2024_12_26_01.sql @@ -1,2 +1,3 @@ +-- DB update 2024_12_26_00 -> 2024_12_26_01 -- Add interrupt immunity to Illidari Nightlord UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask` | 33554432 WHERE (`entry` = 22855); From aa24f50a032f3f0b14b42aba02718a7e50724021 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Thu, 26 Dec 2024 05:51:02 -0300 Subject: [PATCH 39/74] chore(Scripts/SSC): Move Vashj summons to the new format (#21042) --- .../SerpentShrine/instance_serpent_shrine.cpp | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) 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 5df41e6fa..5ac0206e4 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp @@ -64,6 +64,15 @@ BossBoundaryData const boundaries = { DATA_LADY_VASHJ, new CircleBoundary(Position(29.99f, -922.409f), 83.65f) } }; +ObjectData const summonData[] = +{ + { NPC_ENCHANTED_ELEMENTAL, DATA_LADY_VASHJ }, + { NPC_COILFANG_ELITE, DATA_LADY_VASHJ }, + { NPC_COILFANG_STRIDER, DATA_LADY_VASHJ }, + { NPC_TAINTED_ELEMENTAL, DATA_LADY_VASHJ }, + { 0, 0 } +}; + class instance_serpent_shrine : public InstanceMapScript { public: @@ -81,6 +90,7 @@ public: LoadObjectData(creatureData, gameObjectData); LoadMinionData(minionData); LoadBossBoundaries(boundaries); + LoadSummonData(summonData); _aliveKeepersCount = 0; } @@ -125,13 +135,6 @@ public: case NPC_CYCLONE_KARATHRESS: creature->GetMotionMaster()->MoveRandom(50.0f); break; - case NPC_ENCHANTED_ELEMENTAL: - case NPC_COILFANG_ELITE: - case NPC_COILFANG_STRIDER: - case NPC_TAINTED_ELEMENTAL: - if (Creature* vashj = GetCreature(DATA_LADY_VASHJ)) - vashj->AI()->JustSummoned(creature); - break; case NPC_SEER_OLUM: creature->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); creature->RemoveNpcFlag(UNIT_NPC_FLAG_QUESTGIVER); @@ -148,15 +151,11 @@ public: { case DATA_PLATFORM_KEEPER_RESPAWNED: if (_aliveKeepersCount < MAX_KEEPER_COUNT) - { ++_aliveKeepersCount; - } break; case DATA_PLATFORM_KEEPER_DIED: if (_aliveKeepersCount > MIN_KEEPER_COUNT) - { --_aliveKeepersCount; - } break; case DATA_BRIDGE_ACTIVATED: SetBossState(DATA_BRIDGE_EMERGED, NOT_STARTED); From bff594c4f5adc0b9508a694b061a2aea88c19434 Mon Sep 17 00:00:00 2001 From: Kitzunu <24550914+Kitzunu@users.noreply.github.com> Date: Thu, 26 Dec 2024 09:51:54 +0100 Subject: [PATCH 40/74] feat(Unit/Misc): HasAnyAuras() HasAllAuras() HasAuras() (#21040) --- src/server/game/Entities/Player/Player.cpp | 2 +- src/server/game/Entities/Unit/Unit.cpp | 23 +++++++++ src/server/game/Entities/Unit/Unit.h | 50 +++++++++++++++++++ .../BlackwingLair/boss_chromaggus.cpp | 5 +- .../TempleOfAhnQiraj/boss_twinemperors.cpp | 2 +- src/server/scripts/Kalimdor/zone_desolace.cpp | 4 +- .../IcecrownCitadel/boss_sindragosa.cpp | 2 +- .../IcecrownCitadel/boss_the_lich_king.cpp | 4 +- .../IcecrownCitadel/icecrown_citadel.cpp | 2 +- .../Northrend/Nexus/Oculus/boss_eregos.cpp | 2 +- .../Northrend/Ulduar/Ulduar/boss_hodir.cpp | 4 +- src/server/scripts/Northrend/zone_dalaran.cpp | 3 +- .../scripts/Northrend/zone_icecrown.cpp | 2 +- .../MagtheridonsLair/boss_magtheridon.cpp | 2 +- src/server/scripts/Spells/spell_dk.cpp | 6 +-- src/server/scripts/Spells/spell_paladin.cpp | 2 +- .../scripts/World/achievement_scripts.cpp | 2 +- .../scripts/World/boss_emerald_dragons.cpp | 2 +- .../scripts/World/npc_stave_of_ancients.cpp | 6 +-- 19 files changed, 95 insertions(+), 30 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index fa38de8ca..dfed1d216 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2419,7 +2419,7 @@ void Player::GiveXP(uint32 xp, Unit* victim, float group_rate, bool isLFGReward) // Favored experience increase START uint32 zone = GetZoneId(); float favored_exp_mult = 0; - if ((zone == 3483 || zone == 3562 || zone == 3836 || zone == 3713 || zone == 3714) && (HasAura(32096) || HasAura(32098))) + if ((zone == 3483 || zone == 3562 || zone == 3836 || zone == 3713 || zone == 3714) && HasAnyAuras(32096 /*Thrallmar's Favor*/, 32098 /*Honor Hold's Favor*/)) favored_exp_mult = 0.05f; // Thrallmar's Favor and Honor Hold's Favor xp = uint32(xp * (1 + favored_exp_mult)); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 2f7d6275b..85fe37b52 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -5695,6 +5695,29 @@ uint32 Unit::GetAuraCount(uint32 spellId) const return count; } +bool Unit::HasAuras(SearchMethod sm, std::vector& spellIds) const +{ + if (sm == SearchMethod::MatchAll) + { + for (auto const& spellId : spellIds) + if (!HasAura(spellId)) + return false; + return true; + } + else if (sm == SearchMethod::MatchAny) + { + for (auto const& spellId : spellIds) + if (HasAura(spellId)) + return true; + return false; + } + else + { + LOG_ERROR("entities.unit", "Unit::HasAuras using non-supported SearchMethod {}", sm); + return false; + } +} + bool Unit::HasAura(uint32 spellId, ObjectGuid casterGUID, ObjectGuid itemCasterGUID, uint8 reqEffMask) const { if (GetAuraApplication(spellId, casterGUID, itemCasterGUID, reqEffMask)) diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 47a6af78d..39898f578 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -558,6 +558,12 @@ enum CommandStates : uint8 COMMAND_ABANDON = 3 }; +enum class SearchMethod +{ + MatchAll, + MatchAny +}; + typedef std::list SharedVisionList; struct AttackPosition { @@ -1367,6 +1373,50 @@ public: [[nodiscard]] bool HasAuraEffect(uint32 spellId, uint8 effIndex, ObjectGuid caster = ObjectGuid::Empty) const; [[nodiscard]] uint32 GetAuraCount(uint32 spellId) const; + + /** + * @brief Check if unit has ANY or ALL specified auras. + * + * @param sm The search method to use + * - SearchMethod::MatchAll : The function checks for all of the spell id's on the unit. + * - SearchMethod::MatchAny : The function checks for any of the spell id's on the unit. + * + * @param spellIds List of spell id's to check for on the unit. + * + * @return Returns true if the search method condition is met. Otherwise false. + */ + bool HasAuras(SearchMethod sm, std::vector& spellIds) const; + + /** + * @brief Checks if the unit has ANY specified auras. + * + * @tparam Auras Can be any type convertible to uint32. + * @param spellIds List of spell id's to check for on the unit. + * + * @return Returns true if the unit has ANY of the specified auras. Otherwise false. + */ + template + bool HasAnyAuras(Auras... spellIds) const + { + std::vector spellList = { static_cast(spellIds)... }; + return HasAuras(SearchMethod::MatchAny, spellList); + } + + /** + * @brief Checks if the unit has ALL specified auras. + * + * @tparam Auras Can be any type convertible to uint32. + * @param spellIds List of spell id's to check for on the unit. + * + * @return Returns true if the unit has ALL of the specified auras. Otherwise false. + */ + template + bool HasAllAuras(Auras... spellIds) const + { + std::vector spellList = { static_cast(spellIds)... }; + return HasAuras(SearchMethod::MatchAll, spellList); + } + [[nodiscard]] bool HasAura(uint32 spellId, ObjectGuid casterGUID = ObjectGuid::Empty, ObjectGuid itemCasterGUID = ObjectGuid::Empty, uint8 reqEffMask = 0) const; [[nodiscard]] bool HasAuraType(AuraType auraType) const; [[nodiscard]] bool HasAuraTypeWithCaster(AuraType auratype, ObjectGuid caster) const; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp index 9b69b0e7a..cf39b53a1 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp @@ -188,11 +188,8 @@ public: { DoCast(player, afflictionSpellID, true); - if (player->HasAura(SPELL_BROODAF_BLUE) && player->HasAura(SPELL_BROODAF_BLACK) && player->HasAura(SPELL_BROODAF_RED) && - player->HasAura(SPELL_BROODAF_BRONZE) && player->HasAura(SPELL_BROODAF_GREEN)) - { + if (player->HasAllAuras(SPELL_BROODAF_BLUE, SPELL_BROODAF_BLACK, SPELL_BROODAF_RED, SPELL_BROODAF_BRONZE, SPELL_BROODAF_GREEN)) DoCast(player, SPELL_CHROMATIC_MUT_1); - } } } events.ScheduleEvent(EVENT_AFFLICTION, 10s); diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp index 091bb2837..eab24db58 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp @@ -447,7 +447,7 @@ class spell_mutate_explode_bug : public SpellScript if (target->GetEntry() != NPC_QIRAJI_SCARAB && target->GetEntry() != NPC_QIRAJI_SCORPION) return true; if (Creature const* creature = target->ToCreature()) - if (creature->HasAura(SPELL_EXPLODE_BUG) || creature->HasAura(SPELL_MUTATE_BUG)) + if (creature->HasAnyAuras(SPELL_EXPLODE_BUG, SPELL_MUTATE_BUG)) return true; return false; diff --git a/src/server/scripts/Kalimdor/zone_desolace.cpp b/src/server/scripts/Kalimdor/zone_desolace.cpp index 8f1af105d..3abed38b9 100644 --- a/src/server/scripts/Kalimdor/zone_desolace.cpp +++ b/src/server/scripts/Kalimdor/zone_desolace.cpp @@ -473,7 +473,7 @@ public: { if (spell->Id == SPELL_KODO_KOMBO_ITEM) { - if (!(caster->HasAura(SPELL_KODO_KOMBO_PLAYER_BUFF) || me->HasAura(SPELL_KODO_KOMBO_DESPAWN_BUFF)) + if (!caster->HasAnyAuras(SPELL_KODO_KOMBO_PLAYER_BUFF, SPELL_KODO_KOMBO_DESPAWN_BUFF) && (me->GetEntry() == NPC_AGED_KODO || me->GetEntry() == NPC_DYING_KODO || me->GetEntry() == NPC_ANCIENT_KODO)) { me->UpdateEntry(NPC_TAMED_KODO, nullptr, false); @@ -494,7 +494,7 @@ public: bool OnGossipHello(Player* player, Creature* creature) override { - if (player->HasAura(SPELL_KODO_KOMBO_PLAYER_BUFF) && creature->HasAura(SPELL_KODO_KOMBO_DESPAWN_BUFF)) + if (player->HasAllAuras(SPELL_KODO_KOMBO_PLAYER_BUFF, SPELL_KODO_KOMBO_DESPAWN_BUFF)) { player->TalkedToCreature(creature->GetEntry(), ObjectGuid::Empty); player->RemoveAurasDueToSpell(SPELL_KODO_KOMBO_PLAYER_BUFF); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp index d5107bdbc..263b636d4 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp @@ -260,7 +260,7 @@ public: if (target->HasAura(SPELL_FROST_IMBUED_BLADE)) return false; - if (target->IsImmunedToDamageOrSchool(SPELL_SCHOOL_MASK_ALL) || target->HasAura(SPELL_ICE_TOMB_UNTARGETABLE) || target->HasAura(SPELL_ICE_TOMB_DAMAGE) || target->HasAura(SPELL_TANK_MARKER_AURA) || target->HasSpiritOfRedemptionAura()) + if (target->IsImmunedToDamageOrSchool(SPELL_SCHOOL_MASK_ALL) || target->HasAnyAuras(SPELL_ICE_TOMB_UNTARGETABLE, SPELL_ICE_TOMB_DAMAGE, SPELL_TANK_MARKER_AURA) || target->HasSpiritOfRedemptionAura()) return false; return target != _source->GetVictim(); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp index 21e13a37a..5616b0e2d 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp @@ -451,7 +451,7 @@ public: return false; if (_source->GetExactDist(target) > 100.0f) return false; - if (target->HasAura(SPELL_HARVEST_SOUL_VALKYR) || target->HasAura(SPELL_VALKYR_TARGET_SEARCH)) + if (target->HasAnyAuras(SPELL_HARVEST_SOUL_VALKYR, SPELL_VALKYR_TARGET_SEARCH)) return false; if (!_source->IsWithinLOSInMap(target)) return false; @@ -603,7 +603,7 @@ public: { if (!unit || !unit->IsPlayer() || unit == _sourceObj || _sourceObj->GetVictim() == unit || !unit->isTargetableForAttack()) return false; - if (unit->HasAura(SPELL_PLAGUE_AVOIDANCE) || unit->HasAura(SPELL_BOSS_HITTIN_YA_AURA) || unit->HasAura(_notAura1) || unit->HasAura(_notAura2)) + if (unit->HasAnyAuras(SPELL_PLAGUE_AVOIDANCE, SPELL_BOSS_HITTIN_YA_AURA, _notAura1, _notAura2)) return false; if (!_sourceObj->IsWithinLOSInMap(unit)) return false; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index fbc510668..3d7970ead 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -1835,7 +1835,7 @@ public: { if (InstanceScript* instance = creature->GetInstanceScript()) if (instance->GetBossState(DATA_ROTFACE) == DONE && instance->GetBossState(DATA_FESTERGUT) == DONE && !creature->FindCurrentSpellBySpellId(SPELL_HARVEST_BLIGHT_SPECIMEN) && !creature->FindCurrentSpellBySpellId(SPELL_HARVEST_BLIGHT_SPECIMEN25)) - if (player->HasAura(SPELL_ORANGE_BLIGHT_RESIDUE) && player->HasAura(SPELL_GREEN_BLIGHT_RESIDUE)) + if (player->HasAllAuras(SPELL_ORANGE_BLIGHT_RESIDUE, SPELL_GREEN_BLIGHT_RESIDUE)) creature->CastSpell(creature, SPELL_HARVEST_BLIGHT_SPECIMEN, false); return false; } diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp index 2a26a8492..4b491b156 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp @@ -178,7 +178,7 @@ public: if (!UpdateVictim()) return; - if (me->HasAura(SPELL_PLANAR_SHIFT) || me->HasAura(SPELL_DRAKE_STOP_TIME)) + if (me->HasAnyAuras(SPELL_PLANAR_SHIFT, SPELL_DRAKE_STOP_TIME)) return; events.Update(diff); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp index 956763df8..fd974f452 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp @@ -1527,7 +1527,7 @@ public: bool OnCheck(Player* player, Unit* /*target*/, uint32 /*criteria_id*/) override { - return player && player->HasAura(SPELL_MAGE_TOASTY_FIRE_AURA) && player->HasAura(SPELL_DRUID_STARLIGHT_AREA_AURA) && player->HasAura(SPELL_SHAMAN_STORM_POWER_10); + return player && player->HasAllAuras(SPELL_MAGE_TOASTY_FIRE_AURA, SPELL_DRUID_STARLIGHT_AREA_AURA, SPELL_SHAMAN_STORM_POWER_10); } }; @@ -1538,7 +1538,7 @@ public: bool OnCheck(Player* player, Unit* /*target*/, uint32 /*criteria_id*/) override { - return player && player->HasAura(SPELL_MAGE_TOASTY_FIRE_AURA) && player->HasAura(SPELL_DRUID_STARLIGHT_AREA_AURA) && player->HasAura(SPELL_SHAMAN_STORM_POWER_25); + return player && player->HasAllAuras(SPELL_MAGE_TOASTY_FIRE_AURA, SPELL_DRUID_STARLIGHT_AREA_AURA, SPELL_SHAMAN_STORM_POWER_25); } }; diff --git a/src/server/scripts/Northrend/zone_dalaran.cpp b/src/server/scripts/Northrend/zone_dalaran.cpp index 3c23fe2a9..6d2d5aeac 100644 --- a/src/server/scripts/Northrend/zone_dalaran.cpp +++ b/src/server/scripts/Northrend/zone_dalaran.cpp @@ -454,8 +454,7 @@ public: if (!player || player->IsGameMaster() || player->IsBeingTeleported() || (player->GetPositionZ() > 670 && player->GetVehicle()) || // If player has Disguise aura for quest A Meeting With The Magister or An Audience With The Arcanist, do not teleport it away but let it pass - player->HasAura(SPELL_SUNREAVER_DISGUISE_FEMALE) || player->HasAura(SPELL_SUNREAVER_DISGUISE_MALE) || - player->HasAura(SPELL_SILVER_COVENANT_DISGUISE_FEMALE) || player->HasAura(SPELL_SILVER_COVENANT_DISGUISE_MALE)) + player->HasAnyAuras(SPELL_SUNREAVER_DISGUISE_FEMALE, SPELL_SUNREAVER_DISGUISE_MALE, SPELL_SILVER_COVENANT_DISGUISE_FEMALE, SPELL_SILVER_COVENANT_DISGUISE_MALE)) return; switch (me->GetEntry()) diff --git a/src/server/scripts/Northrend/zone_icecrown.cpp b/src/server/scripts/Northrend/zone_icecrown.cpp index 43ca3c21b..c253a499b 100644 --- a/src/server/scripts/Northrend/zone_icecrown.cpp +++ b/src/server/scripts/Northrend/zone_icecrown.cpp @@ -1496,7 +1496,7 @@ public: if (!who || !who->IsPlayer() || !me->IsHostileTo(who) || !me->isInBackInMap(who, 5.0f)) return; - if (who->HasAura(SPELL_TRESPASSER_H) || who->HasAura(SPELL_TRESPASSER_A)) + if (who->HasAnyAuras(SPELL_TRESPASSER_H, SPELL_TRESPASSER_A)) return; if (who->ToPlayer()->GetTeamId() == TEAM_ALLIANCE) diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp index 897d01c1b..e37234663 100644 --- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp @@ -416,7 +416,7 @@ public: bool OnGossipHello(Player* player, GameObject* /*go*/) override { - if (player->HasAura(SPELL_MIND_EXHAUSTION) || player->HasAura(SPELL_SHADOW_GRASP)) + if (player->HasAnyAuras(SPELL_MIND_EXHAUSTION, SPELL_SHADOW_GRASP)) return true; if (Creature* trigger = player->FindNearestCreature(NPC_HELLFIRE_RAID_TRIGGER, 10.0f)) diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index 0ec9a5fcd..408ffc314 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -1618,7 +1618,7 @@ class spell_dk_improved_blood_presence : public AuraScript void HandleEffectApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) { Unit* target = GetTarget(); - if ((target->HasAura(SPELL_DK_FROST_PRESENCE) || target->HasAura(SPELL_DK_UNHOLY_PRESENCE)) && !target->HasAura(SPELL_DK_IMPROVED_BLOOD_PRESENCE_TRIGGERED)) + if (target->HasAnyAuras(SPELL_DK_FROST_PRESENCE, SPELL_DK_UNHOLY_PRESENCE) && !target->HasAura(SPELL_DK_IMPROVED_BLOOD_PRESENCE_TRIGGERED)) target->CastCustomSpell(SPELL_DK_IMPROVED_BLOOD_PRESENCE_TRIGGERED, SPELLVALUE_BASE_POINT1, aurEff->GetAmount(), target, true, nullptr, aurEff); } @@ -1655,7 +1655,7 @@ class spell_dk_improved_frost_presence : public AuraScript void HandleEffectApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) { Unit* target = GetTarget(); - if ((target->HasAura(SPELL_DK_BLOOD_PRESENCE) || target->HasAura(SPELL_DK_UNHOLY_PRESENCE)) && !target->HasAura(SPELL_DK_FROST_PRESENCE_TRIGGERED)) + if (target->HasAnyAuras(SPELL_DK_BLOOD_PRESENCE, SPELL_DK_UNHOLY_PRESENCE) && !target->HasAura(SPELL_DK_FROST_PRESENCE_TRIGGERED)) target->CastCustomSpell(SPELL_DK_FROST_PRESENCE_TRIGGERED, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), target, true, nullptr, aurEff); } @@ -1700,7 +1700,7 @@ class spell_dk_improved_unholy_presence : public AuraScript target->CastCustomSpell(target, SPELL_DK_IMPROVED_UNHOLY_PRESENCE_TRIGGERED, &basePoints, &basePoints, &basePoints, true, nullptr, aurEff); } - if ((target->HasAura(SPELL_DK_BLOOD_PRESENCE) || target->HasAura(SPELL_DK_FROST_PRESENCE)) && !target->HasAura(SPELL_DK_UNHOLY_PRESENCE_TRIGGERED)) + if (target->HasAnyAuras(SPELL_DK_BLOOD_PRESENCE, SPELL_DK_FROST_PRESENCE) && !target->HasAura(SPELL_DK_UNHOLY_PRESENCE_TRIGGERED)) target->CastCustomSpell(SPELL_DK_UNHOLY_PRESENCE_TRIGGERED, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), target, true, nullptr, aurEff); } diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp index 5345782ac..04a596c61 100644 --- a/src/server/scripts/Spells/spell_paladin.cpp +++ b/src/server/scripts/Spells/spell_paladin.cpp @@ -969,7 +969,7 @@ class spell_pal_lay_on_hands : public SpellScript Unit* caster = GetCaster(); if (Unit* target = GetExplTargetUnit()) if (caster == target) - if (target->HasAura(SPELL_PALADIN_FORBEARANCE) || target->HasAura(SPELL_PALADIN_AVENGING_WRATH_MARKER) || target->HasAura(SPELL_PALADIN_IMMUNE_SHIELD_MARKER)) + if (target->HasAnyAuras(SPELL_PALADIN_FORBEARANCE, SPELL_PALADIN_AVENGING_WRATH_MARKER, SPELL_PALADIN_IMMUNE_SHIELD_MARKER)) return SPELL_FAILED_TARGET_AURASTATE; // Xinef: Glyph of Divinity diff --git a/src/server/scripts/World/achievement_scripts.cpp b/src/server/scripts/World/achievement_scripts.cpp index bdcba3df3..e365afdf5 100644 --- a/src/server/scripts/World/achievement_scripts.cpp +++ b/src/server/scripts/World/achievement_scripts.cpp @@ -267,7 +267,7 @@ class achievement_flirt_with_disaster_perf_check : public AchievementCriteriaScr if (!player) return false; - if (player->HasAura(AURA_PERFUME_FOREVER) || player->HasAura(AURA_PERFUME_ENCHANTRESS) || player->HasAura(AURA_PERFUME_VICTORY)) + if (player->HasAnyAuras(AURA_PERFUME_FOREVER, AURA_PERFUME_ENCHANTRESS, AURA_PERFUME_VICTORY)) return true; return false; diff --git a/src/server/scripts/World/boss_emerald_dragons.cpp b/src/server/scripts/World/boss_emerald_dragons.cpp index 4a1a28325..814871ee1 100644 --- a/src/server/scripts/World/boss_emerald_dragons.cpp +++ b/src/server/scripts/World/boss_emerald_dragons.cpp @@ -774,7 +774,7 @@ public: { // return those not tagged or already under the influence of Aura of Nature if (Unit* unit = object->ToUnit()) - return !(unit->HasAura(SPELL_MARK_OF_NATURE) && !unit->HasAura(SPELL_AURA_OF_NATURE)); + return !unit->HasAllAuras(SPELL_MARK_OF_NATURE, SPELL_AURA_OF_NATURE); return true; } }; diff --git a/src/server/scripts/World/npc_stave_of_ancients.cpp b/src/server/scripts/World/npc_stave_of_ancients.cpp index fede7e6fa..20c64c492 100644 --- a/src/server/scripts/World/npc_stave_of_ancients.cpp +++ b/src/server/scripts/World/npc_stave_of_ancients.cpp @@ -999,14 +999,10 @@ public: void SpellHit(Unit* /*Caster*/, SpellInfo const* Spell) override { if (InNormalForm()) - { return; - } - if (me->HasAura(NELSON_SPELL_SOUL_FLAME) && me->HasAura(NELSON_WEAKNESS_FROST_TRAP)) - { + if (me->HasAllAuras(NELSON_SPELL_SOUL_FLAME, NELSON_WEAKNESS_FROST_TRAP)) me->RemoveAura(NELSON_SPELL_SOUL_FLAME); - } if (!me->HasAura(NELSON_SPELL_CRIPPLING_CLIP) && Spell->Id == NELSON_WEAKNESS_WING_CLIP) { From 8ed7c5aa1f3087b83980ff5400a486b805bc2d1d Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Thu, 26 Dec 2024 14:20:52 -0300 Subject: [PATCH 41/74] fix(Scripts/SSC): Fix console panel gate not opening (#21047) --- .../rev_1735214037279163200.sql | 7 +++++ .../SerpentShrine/instance_serpent_shrine.cpp | 27 +++++++++---------- .../SerpentShrine/serpent_shrine.h | 20 +++++++------- 3 files changed, 30 insertions(+), 24 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1735214037279163200.sql diff --git a/data/sql/updates/pending_db_world/rev_1735214037279163200.sql b/data/sql/updates/pending_db_world/rev_1735214037279163200.sql new file mode 100644 index 000000000..8e1082fa8 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1735214037279163200.sql @@ -0,0 +1,7 @@ +-- +DELETE FROM `smart_scripts` WHERE (`source_type` = 1 AND `entryorguid` = 184568); +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 +(184568, 1, 0, 1, 64, 0, 100, 1, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 205, 26, 2, 0, 0, 0, 0, 0, 0, 'Lady Vashj Bridge Console - On Gossip Hello - Activate Gameobject (No repeat)'), +(184568, 1, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 205, 27, 2, 0, 0, 0, 0, 0, 0, 'Lady Vashj Bridge Console - On Gossip Hello - Activate Gameobject (No repeat)'), +(184568, 1, 2, 3, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 205, 28, 2, 0, 0, 0, 0, 0, 0, 'Lady Vashj Bridge Console - On Gossip Hello - Activate Gameobject (No repeat)'), +(184568, 1, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 205, 29, 2, 0, 0, 0, 0, 0, 0, 'Lady Vashj Bridge Console - On Gossip Hello - Activate Gameobject (No repeat)'); 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 5ac0206e4..7a4d7ab93 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp @@ -26,14 +26,6 @@ #include "SpellAuraEffects.h" #include "SpellScript.h" -DoorData const doorData[] = -{ - { GO_LADY_VASHJ_BRIDGE_CONSOLE, DATA_BRIDGE_EMERGED, DOOR_TYPE_PASSAGE }, - { GO_COILFANG_BRIDGE1, DATA_BRIDGE_EMERGED, DOOR_TYPE_PASSAGE }, - { GO_COILFANG_BRIDGE2, DATA_BRIDGE_EMERGED, DOOR_TYPE_PASSAGE }, - { GO_COILFANG_BRIDGE3, DATA_BRIDGE_EMERGED, DOOR_TYPE_PASSAGE } -}; - ObjectData const creatureData[] = { { NPC_LEOTHERAS_THE_BLIND, DATA_LEOTHERAS_THE_BLIND }, @@ -45,8 +37,12 @@ ObjectData const creatureData[] = ObjectData const gameObjectData[] = { - { GO_STRANGE_POOL, DATA_STRANGE_POOL }, - { 0, 0 } + { GO_STRANGE_POOL, DATA_STRANGE_POOL }, + { GO_LADY_VASHJ_BRIDGE_CONSOLE, DATA_CONSOLE }, + { GO_COILFANG_BRIDGE1, DATA_BRIDGE_PART1 }, + { GO_COILFANG_BRIDGE2, DATA_BRIDGE_PART2 }, + { GO_COILFANG_BRIDGE3, DATA_BRIDGE_PART3 }, + { 0, 0 } }; MinionData const minionData[] = @@ -86,7 +82,6 @@ public: { SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUNTERS); - LoadDoorData(doorData); LoadObjectData(creatureData, gameObjectData); LoadMinionData(minionData); LoadBossBoundaries(boundaries); @@ -118,6 +113,12 @@ public: case GO_SHIELD_GENERATOR4: _shieldGeneratorGUID[go->GetEntry() - GO_SHIELD_GENERATOR1] = go->GetGUID(); break; + case GO_LADY_VASHJ_BRIDGE_CONSOLE: + case GO_COILFANG_BRIDGE1: + case GO_COILFANG_BRIDGE2: + case GO_COILFANG_BRIDGE3: + go->AllowSaveToDB(true); + break; } InstanceScript::OnGameObjectCreate(go); @@ -157,10 +158,6 @@ public: if (_aliveKeepersCount > MIN_KEEPER_COUNT) --_aliveKeepersCount; break; - case DATA_BRIDGE_ACTIVATED: - SetBossState(DATA_BRIDGE_EMERGED, NOT_STARTED); - SetBossState(DATA_BRIDGE_EMERGED, DONE); - break; case DATA_ACTIVATE_SHIELD: if (Creature* vashj = GetCreature(DATA_LADY_VASHJ)) { diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/serpent_shrine.h b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/serpent_shrine.h index 4a1d5e276..e25aea198 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/serpent_shrine.h +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/serpent_shrine.h @@ -31,17 +31,19 @@ enum DataTypes DATA_LEOTHERAS_THE_BLIND = 2, DATA_FATHOM_LORD_KARATHRESS = 3, DATA_MOROGRIM_TIDEWALKER = 4, - DATA_BRIDGE_EMERGED = 5, - DATA_LADY_VASHJ = 6, - MAX_ENCOUNTERS = 7, + DATA_LADY_VASHJ = 5, + MAX_ENCOUNTERS = 6, DATA_PLATFORM_KEEPER_RESPAWNED = 20, DATA_PLATFORM_KEEPER_DIED = 21, DATA_ALIVE_KEEPERS = 22, - DATA_BRIDGE_ACTIVATED = 23, - DATA_ACTIVATE_SHIELD = 24, - DATA_STRANGE_POOL = 25, - DATA_SEER_OLUM = 26 + DATA_ACTIVATE_SHIELD = 23, + DATA_STRANGE_POOL = 24, + DATA_SEER_OLUM = 25, + DATA_CONSOLE = 26, // Used by the console SAI. + DATA_BRIDGE_PART1 = 27, // Used by the console SAI. + DATA_BRIDGE_PART2 = 28, // Used by the console SAI. + DATA_BRIDGE_PART3 = 29 // Used by the console SAI. }; enum SSNPCs @@ -91,8 +93,8 @@ enum SSSpells enum KeeperCount { - MIN_KEEPER_COUNT = 0, - MAX_KEEPER_COUNT = 24 + MIN_KEEPER_COUNT = 0, + MAX_KEEPER_COUNT = 24 }; template From 987c7910faa302b98d0eab0f965575ac68dc1fd4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 26 Dec 2024 17:21:51 +0000 Subject: [PATCH 42/74] chore(DB): import pending files Referenced commit(s): 8ed7c5aa1f3087b83980ff5400a486b805bc2d1d --- .../rev_1735214037279163200.sql => db_world/2024_12_26_02.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1735214037279163200.sql => db_world/2024_12_26_02.sql} (96%) diff --git a/data/sql/updates/pending_db_world/rev_1735214037279163200.sql b/data/sql/updates/db_world/2024_12_26_02.sql similarity index 96% rename from data/sql/updates/pending_db_world/rev_1735214037279163200.sql rename to data/sql/updates/db_world/2024_12_26_02.sql index 8e1082fa8..34cf182dd 100644 --- a/data/sql/updates/pending_db_world/rev_1735214037279163200.sql +++ b/data/sql/updates/db_world/2024_12_26_02.sql @@ -1,3 +1,4 @@ +-- DB update 2024_12_26_01 -> 2024_12_26_02 -- DELETE FROM `smart_scripts` WHERE (`source_type` = 1 AND `entryorguid` = 184568); 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 From af9f41675114cc79ffd5d83475eab7d54321ab04 Mon Sep 17 00:00:00 2001 From: Saqra1 <161769195+Saqra1@users.noreply.github.com> Date: Thu, 26 Dec 2024 12:25:08 -0500 Subject: [PATCH 43/74] fix(Core/Spells): Initial threat for periodic effects (#21045) Co-authored-by: tarwyn --- src/server/game/Spells/SpellMgr.cpp | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 781976ccf..3c5a4ccf6 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -2913,16 +2913,6 @@ void SpellMgr::LoadSpellInfoCustomAttributes() } } break; - case SPELL_AURA_PERIODIC_HEAL: - case SPELL_AURA_PERIODIC_DAMAGE: - case SPELL_AURA_PERIODIC_DAMAGE_PERCENT: - case SPELL_AURA_PERIODIC_LEECH: - case SPELL_AURA_PERIODIC_MANA_LEECH: - case SPELL_AURA_PERIODIC_HEALTH_FUNNEL: - case SPELL_AURA_PERIODIC_ENERGIZE: - case SPELL_AURA_OBS_MOD_HEALTH: - case SPELL_AURA_OBS_MOD_POWER: - case SPELL_AURA_POWER_BURN: case SPELL_AURA_TRACK_CREATURES: case SPELL_AURA_MOD_RANGED_HASTE: case SPELL_AURA_MOD_POSSESS_PET: From a1e1bded356a54d25baa2f362fc5472a84a44723 Mon Sep 17 00:00:00 2001 From: Kitzunu <24550914+Kitzunu@users.noreply.github.com> Date: Sat, 28 Dec 2024 02:33:18 +0100 Subject: [PATCH 44/74] fix(Scripts/ICC): Use threatlist for vampiric bite (#21012) Co-authored-by: Grimdhex <176165533+Grimdhex@users.noreply.github.com> --- .../rev_1734867444551549700.sql | 8 +++ .../boss_blood_queen_lana_thel.cpp | 72 +++++++++---------- 2 files changed, 42 insertions(+), 38 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1734867444551549700.sql diff --git a/data/sql/updates/pending_db_world/rev_1734867444551549700.sql b/data/sql/updates/pending_db_world/rev_1734867444551549700.sql new file mode 100644 index 000000000..d56fbb108 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1734867444551549700.sql @@ -0,0 +1,8 @@ +-- +DELETE FROM `spelldifficulty_dbc` WHERE `ID` IN (70867, 70879, 70877, 71623, 70994); +INSERT INTO `spelldifficulty_dbc` (`ID`, `DifficultySpellID_1`, `DifficultySpellID_2`, `DifficultySpellID_3`, `DifficultySpellID_4`) VALUES +(70867, 70867, 71473, 71532, 71533), +(70879, 70879, 71525, 71530, 71531), +(70877, 70877, 71474, 70877, 71474), +(71623, 71623, 71624, 71625, 71626), +(70994, 70994, 71962, 71963, 71964); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp index 4b7ab2e13..7b47377a2 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp @@ -48,6 +48,7 @@ enum Spells SPELL_FRENZIED_BLOODTHIRST_VISUAL = 71949, SPELL_VAMPIRIC_BITE = 71726, SPELL_VAMPIRIC_BITE_DUMMY = 71837, + SPELL_ESSENCE_OF_BLOOD_QUEEN = 70867, SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_PLR = 70879, SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_HEAL = 70872, SPELL_FRENZIED_BLOODTHIRST = 70877, @@ -79,25 +80,10 @@ enum Shadowmourne SPELL_THIRST_QUENCHED = 72154, }; -#define ESSENCE_OF_BLOOD_QUEEN RAID_MODE(70867, 71473, 71532, 71533) -#define ESSENCE_OF_BLOOD_QUEEN_PLR RAID_MODE(70879, 71525, 71530, 71531) -#define FRENZIED_BLOODTHIRST RAID_MODE(70877, 71474, 70877, 71474) -#define DELIRIOUS_SLASH RAID_MODE(71623, 71624, 71625, 71626) -#define PRESENCE_OF_THE_DARKFALLEN RAID_MODE(70994, 71962, 71963, 71964) - -uint32 const vampireAuras[3][MAX_DIFFICULTY] = -{ - {70867, 71473, 71532, 71533}, - {70879, 71525, 71530, 71531}, - {70877, 71474, 70877, 71474}, -}; - bool IsVampire(Unit const* unit) { - uint8 spawnMode = unit->GetMap()->GetSpawnMode(); - for (uint8 i = 0; i < 3; ++i) - if (unit->HasAura(vampireAuras[i][spawnMode])) - return true; + if (unit->HasAnyAuras(SPELL_ESSENCE_OF_BLOOD_QUEEN, SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_PLR, SPELL_FRENZIED_BLOODTHIRST)) + return true; return false; } @@ -134,6 +120,31 @@ Position const centerPos = {4595.7090f, 2769.4190f, 400.6368f, 0.000000f}; Position const airPos = {4595.7090f, 2769.4190f, 422.3893f, 0.000000f}; Position const mincharPos = {4629.3711f, 2782.6089f, 424.6390f, 0.000000f}; +struct VampiricBiteTargetSelector +{ +public: + VampiricBiteTargetSelector(Creature* source) : _source(source) { } + bool operator()(Unit const* target) const + { + if (!target) + return false; + + if (!target->IsPlayer()) + return false; + + if (target->HasAura(SPELL_BLOOD_MIRROR_DAMAGE)) + return false; + + if (IsVampire(target)) + return false; + + return target != _source->GetVictim(); + } + +private: + Creature const* _source; +}; + class boss_blood_queen_lana_thel : public CreatureScript { public: @@ -327,22 +338,7 @@ public: break; case EVENT_VAMPIRIC_BITE: { - Player* target = nullptr; - float maxThreat = 0.0f; - const Map::PlayerList& pl = me->GetMap()->GetPlayers(); - for (Map::PlayerList::const_iterator itr = pl.begin(); itr != pl.end(); ++itr) - if (Player* p = itr->GetSource()) - if (p->IsAlive() && p->GetDistance(me) < 70.0f) - { - float th = me->GetThreatMgr().getThreatWithoutTemp(p); - if (!target || th > maxThreat) - { - target = p; - maxThreat = th; - } - } - - if (target) + if (Unit* target = SelectTarget(SelectTargetMethod::MaxThreat, 0, VampiricBiteTargetSelector(me))) { me->CastSpell(target, SPELL_VAMPIRIC_BITE, false); me->CastSpell((Unit*)nullptr, SPELL_VAMPIRIC_BITE_DUMMY, true); @@ -513,17 +509,17 @@ public: void CleanAuras() { - instance->DoRemoveAurasDueToSpellOnPlayers(ESSENCE_OF_BLOOD_QUEEN); - instance->DoRemoveAurasDueToSpellOnPlayers(ESSENCE_OF_BLOOD_QUEEN_PLR); - instance->DoRemoveAurasDueToSpellOnPlayers(FRENZIED_BLOODTHIRST); + instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_ESSENCE_OF_BLOOD_QUEEN); + instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_PLR); + instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_FRENZIED_BLOODTHIRST); instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_FRENZIED_BLOODTHIRST_VISUAL); instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_UNCONTROLLABLE_FRENZY); instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_BLOOD_MIRROR_DAMAGE); instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_BLOOD_MIRROR_VISUAL); instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_BLOOD_MIRROR_DUMMY); - instance->DoRemoveAurasDueToSpellOnPlayers(DELIRIOUS_SLASH); + instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_DELIRIOUS_SLASH); instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_PACT_OF_THE_DARKFALLEN); - instance->DoRemoveAurasDueToSpellOnPlayers(PRESENCE_OF_THE_DARKFALLEN); + instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_PRESENCE_OF_THE_DARKFALLEN_DUMMY); } bool WasVampire(ObjectGuid guid) From 118c426f7425af5a7c664ae179c16c6aa70d5a6b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 28 Dec 2024 01:34:16 +0000 Subject: [PATCH 45/74] chore(DB): import pending files Referenced commit(s): a1e1bded356a54d25baa2f362fc5472a84a44723 --- .../rev_1734867444551549700.sql => db_world/2024_12_28_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1734867444551549700.sql => db_world/2024_12_28_00.sql} (90%) diff --git a/data/sql/updates/pending_db_world/rev_1734867444551549700.sql b/data/sql/updates/db_world/2024_12_28_00.sql similarity index 90% rename from data/sql/updates/pending_db_world/rev_1734867444551549700.sql rename to data/sql/updates/db_world/2024_12_28_00.sql index d56fbb108..0b03983e5 100644 --- a/data/sql/updates/pending_db_world/rev_1734867444551549700.sql +++ b/data/sql/updates/db_world/2024_12_28_00.sql @@ -1,3 +1,4 @@ +-- DB update 2024_12_26_02 -> 2024_12_28_00 -- DELETE FROM `spelldifficulty_dbc` WHERE `ID` IN (70867, 70879, 70877, 71623, 70994); INSERT INTO `spelldifficulty_dbc` (`ID`, `DifficultySpellID_1`, `DifficultySpellID_2`, `DifficultySpellID_3`, `DifficultySpellID_4`) VALUES From 638b8ea621bc5d11e22213fa5bb950f189fbef33 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Sat, 28 Dec 2024 14:23:14 +0100 Subject: [PATCH 46/74] fix(Scripts/Spells): Death Knight Army of the Dead auras (#19795) --- .../rev_1724946417358596409.sql | 13 ++++ src/server/game/Entities/Pet/Pet.cpp | 6 +- src/server/game/Entities/Pet/PetDefines.h | 10 ++- src/server/scripts/Pet/pet_dk.cpp | 4 -- src/server/scripts/Spells/spell_dk.cpp | 71 ++++++++++++++++++- src/server/scripts/Spells/spell_generic.cpp | 60 ++++++++++++++++ 6 files changed, 152 insertions(+), 12 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1724946417358596409.sql diff --git a/data/sql/updates/pending_db_world/rev_1724946417358596409.sql b/data/sql/updates/pending_db_world/rev_1724946417358596409.sql new file mode 100644 index 000000000..28cccba32 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1724946417358596409.sql @@ -0,0 +1,13 @@ +-- +UPDATE `spell_dbc` +SET `Attributes`=`Attributes`|64, `AttributesEx4`=34603008, `ProcChance`=101, `DurationIndex`=21, +`Effect_1`=6, `Effect_2`=6, `Effect_3`=6, `EffectBasePoints_1`=-1, `EffectBasePoints_2`=-1, `EffectBasePoints_3`=-1, +`ImplicitTargetA_1`=1, `ImplicitTargetA_2`=1, `ImplicitTargetA_3`=1, +`EffectAura_1`=55, `EffectAura_2`=240, `EffectAura_3`=123, +`EffectMultipleValue_1`=1.0, `EffectMultipleValue_2`=1.0, `EffectMultipleValue_3`=1.0, +`EffectMiscValue_3`=124 +WHERE `ID`=67561; +DELETE FROM `spell_script_names` WHERE `spell_id` IN (49040, 67561); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(49040, 'spell_dk_army_of_the_dead_passive'), +(67561, 'spell_pet_spellhit_expertise_spellpen_scaling'); diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index 5f4d3057a..58d7be70e 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -1362,11 +1362,11 @@ bool Guardian::InitStatsForLevel(uint8 petlevel) } case NPC_ARMY_OF_THE_DEAD: { - AddAura(SPELL_HUNTER_PET_SCALING_04, this); - AddAura(SPELL_DK_PET_SCALING_01, this); + AddAura(SPELL_DK_ARMY_OF_THE_DEAD_PASSIVE, this); AddAura(SPELL_DK_PET_SCALING_02, this); AddAura(SPELL_DK_PET_SCALING_03, this); - AddAura(SPELL_PET_AVOIDANCE, this); + AddAura(SPELL_DK_AVOIDANCE, this); + AddAura(SPELL_PET_SCALING_MASTER_06, this); SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel - (petlevel / 4))); SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel + (petlevel / 4))); diff --git a/src/server/game/Entities/Pet/PetDefines.h b/src/server/game/Entities/Pet/PetDefines.h index 65de91faa..b0bbe57ac 100644 --- a/src/server/game/Entities/Pet/PetDefines.h +++ b/src/server/game/Entities/Pet/PetDefines.h @@ -134,7 +134,9 @@ enum NPCEntries enum PetScalingSpells { SPELL_PET_AVOIDANCE = 32233, + SPELL_PET_SCALING_MASTER_06 = 67561, // Serverside - Pet Scaling - Master Spell 06 - Spell Hit, Expertise, Spell Penetration + // Hunter SPELL_HUNTER_PET_SCALING_01 = 34902, SPELL_HUNTER_PET_SCALING_02 = 34903, SPELL_HUNTER_PET_SCALING_03 = 34904, @@ -190,9 +192,11 @@ enum PetScalingSpells // Death Knight SPELL_ORC_RACIAL_COMMAND_DK = 65221, SPELL_NIGHT_OF_THE_DEAD_AVOIDANCE = 62137, - SPELL_DK_PET_SCALING_01 = 51996, - SPELL_DK_PET_SCALING_02 = 54566, - SPELL_DK_PET_SCALING_03 = 61697 + SPELL_DK_PET_SCALING_01 = 54566, + SPELL_DK_PET_SCALING_02 = 51996, + SPELL_DK_PET_SCALING_03 = 61697, + SPELL_DK_AVOIDANCE = 65220, + SPELL_DK_ARMY_OF_THE_DEAD_PASSIVE = 49040, }; #define PET_FOLLOW_DIST 1.0f diff --git a/src/server/scripts/Pet/pet_dk.cpp b/src/server/scripts/Pet/pet_dk.cpp index 959649e0f..a0a79b949 100644 --- a/src/server/scripts/Pet/pet_dk.cpp +++ b/src/server/scripts/Pet/pet_dk.cpp @@ -303,10 +303,6 @@ public: { CombatAI::InitializeAI(); ((Minion*)me)->SetFollowAngle(rand_norm() * 2 * M_PI); - - // Heroism / Bloodlust immunity - me->ApplySpellImmune(0, IMMUNITY_ID, 32182, true); - me->ApplySpellImmune(0, IMMUNITY_ID, 2825, true); } }; diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index 408ffc314..3222df8df 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -751,8 +751,8 @@ class spell_dk_pet_scaling : public AuraScript // Check just if owner has Ravenous Dead since it's effect is not an aura if (AuraEffect const* rdEff = owner->GetAuraEffect(SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE, SPELLFAMILY_DEATHKNIGHT, 3010, 0)) { - SpellInfo const* spellInfo = rdEff->GetSpellInfo(); // Then get the SpellProto and add the dummy effect value - AddPct(modifier, spellInfo->Effects[EFFECT_1].CalcValue()); // Ravenous Dead edits the original scale + SpellInfo const* spellInfo = rdEff->GetSpellInfo(); // Then get the SpellProto and add the dummy effect value + AddPct(modifier, spellInfo->Effects[EFFECT_1].CalcValue()); // Ravenous Dead edits the original scale } // xinef: Glyph of the Ghoul @@ -2203,6 +2203,72 @@ class spell_dk_will_of_the_necropolis : public AuraScript } }; +// 49040 - Army of the Dead Passive +class spell_dk_army_of_the_dead_passive : public AuraScript +{ + PrepareAuraScript(spell_dk_army_of_the_dead_passive); + + void CalculateAPAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) + { + // army ghoul inherits 6.5% of AP + if (Unit* owner = GetUnitOwner()->GetOwner()) + amount = CalculatePct(std::max(0, owner->GetTotalAttackPowerValue(BASE_ATTACK)), 6.5f); + } + + void CalculateHealthAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) + { + // army ghoul inherits 20% of health + if (Unit* owner = GetUnitOwner()->GetOwner()) + amount = owner->CountPctFromMaxHealth(20); + } + + void CalculateSPAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) + { + // army ghoul inherits 6.5% of AP + if (Unit* owner = GetUnitOwner()->GetOwner()) + amount = CalculatePct(std::max(0, owner->GetTotalAttackPowerValue(BASE_ATTACK)), 6.5f); + } + + void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (GetUnitOwner()->IsPet()) + return; + + GetUnitOwner()->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_STAT, true, SPELL_BLOCK_TYPE_POSITIVE); + GetUnitOwner()->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE, true, SPELL_BLOCK_TYPE_POSITIVE); + GetUnitOwner()->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_ATTACK_POWER, true, SPELL_BLOCK_TYPE_POSITIVE); + GetUnitOwner()->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_ATTACK_POWER_PCT, true, SPELL_BLOCK_TYPE_POSITIVE); + // Heroism / Bloodlust immunity + GetUnitOwner()->ApplySpellImmune(0, IMMUNITY_ID, 32182, true); + GetUnitOwner()->ApplySpellImmune(0, IMMUNITY_ID, 2825, true); + } + + void CalcPeriodic(AuraEffect const* /*aurEff*/, bool& isPeriodic, int32& amplitude) + { + if (!GetUnitOwner()->IsPet()) + return; + + isPeriodic = true; + amplitude = 2 * IN_MILLISECONDS; + } + + void HandlePeriodic(AuraEffect const* aurEff) + { + PreventDefaultAction(); + GetEffect(aurEff->GetEffIndex())->RecalculateAmount(); + } + + void Register() override + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_army_of_the_dead_passive::CalculateAPAmount, EFFECT_0, SPELL_AURA_MOD_ATTACK_POWER); + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_army_of_the_dead_passive::CalculateHealthAmount, EFFECT_1, SPELL_AURA_MOD_INCREASE_HEALTH); + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_army_of_the_dead_passive::CalculateSPAmount, EFFECT_2, SPELL_AURA_MOD_DAMAGE_DONE); + OnEffectApply += AuraEffectApplyFn(spell_dk_army_of_the_dead_passive::HandleEffectApply, EFFECT_ALL, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL); + DoEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_dk_army_of_the_dead_passive::CalcPeriodic, EFFECT_ALL, SPELL_AURA_ANY); + OnEffectPeriodic += AuraEffectPeriodicFn(spell_dk_army_of_the_dead_passive::HandlePeriodic, EFFECT_ALL, SPELL_AURA_ANY); + } +}; + void AddSC_deathknight_spell_scripts() { RegisterSpellScript(spell_dk_wandering_plague); @@ -2250,4 +2316,5 @@ void AddSC_deathknight_spell_scripts() RegisterSpellScript(spell_dk_vampiric_blood); RegisterSpellScript(spell_dk_will_of_the_necropolis); RegisterSpellScript(spell_dk_ghoul_thrash); + RegisterSpellScript(spell_dk_army_of_the_dead_passive); } diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index b29818522..f672ad8b6 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -5320,6 +5320,65 @@ class spell_gen_set_health : public SpellScript } }; +// 67561 - Serverside - Pet Scaling - Master Spell 06 - Spell Hit, Expertise, Spell Penetration +class spell_pet_spellhit_expertise_spellpen_scaling : public AuraScript +{ + PrepareAuraScript(spell_pet_spellhit_expertise_spellpen_scaling) + + int32 CalculatePercent(float hitChance, float cap, float maxChance) + { + return (hitChance / cap) * maxChance; + } + + void CalculateSpellHitAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) + { + if (Player* modOwner = GetUnitOwner()->GetSpellModOwner()) + amount = CalculatePercent(modOwner->m_modMeleeHitChance, 8.0f, 17.0f); + } + + void CalculateExpertiseAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) + { + if (Player* modOwner = GetUnitOwner()->GetSpellModOwner()) + amount = CalculatePercent(modOwner->m_modMeleeHitChance, 8.0f, 26.0f); + } + + void CalculateSpellPenAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) + { + if (Player* modOwner = GetUnitOwner()->GetSpellModOwner()) + amount = modOwner->GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_TARGET_RESISTANCE, SPELL_SCHOOL_MASK_SPELL); + } + + void HandleEffectApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) + { + GetUnitOwner()->ApplySpellImmune(GetId(), IMMUNITY_STATE, aurEff->GetAuraType(), true, SPELL_BLOCK_TYPE_POSITIVE); + } + + void CalcPeriodic(AuraEffect const* /*aurEff*/, bool& isPeriodic, int32& amplitude) + { + if (!GetUnitOwner()->IsPet()) + return; + + isPeriodic = true; + amplitude = 3 * IN_MILLISECONDS; + } + + void HandlePeriodic(AuraEffect const* aurEff) + { + PreventDefaultAction(); + GetEffect(aurEff->GetEffIndex())->RecalculateAmount(); + } + + void Register() override + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pet_spellhit_expertise_spellpen_scaling::CalculateSpellHitAmount, EFFECT_0, SPELL_AURA_MOD_SPELL_HIT_CHANCE); + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pet_spellhit_expertise_spellpen_scaling::CalculateExpertiseAmount, EFFECT_1, SPELL_AURA_MOD_EXPERTISE); + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pet_spellhit_expertise_spellpen_scaling::CalculateSpellPenAmount, EFFECT_2, SPELL_AURA_MOD_TARGET_RESISTANCE); + OnEffectApply += AuraEffectApplyFn(spell_pet_spellhit_expertise_spellpen_scaling::HandleEffectApply, EFFECT_ALL, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL); + DoEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_pet_spellhit_expertise_spellpen_scaling::CalcPeriodic, EFFECT_ALL, SPELL_AURA_ANY); + OnEffectPeriodic += AuraEffectPeriodicFn(spell_pet_spellhit_expertise_spellpen_scaling::HandlePeriodic, EFFECT_ALL, SPELL_AURA_ANY); + } +}; + void AddSC_generic_spell_scripts() { RegisterSpellScript(spell_silithyst); @@ -5478,4 +5537,5 @@ void AddSC_generic_spell_scripts() RegisterSpellScript(spell_gen_sober_up); RegisterSpellScript(spell_gen_steal_weapon); RegisterSpellScript(spell_gen_set_health); + RegisterSpellScript(spell_pet_spellhit_expertise_spellpen_scaling); } From 8679e2900e17b2203dc711d99c4953fa973d9340 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 28 Dec 2024 13:24:12 +0000 Subject: [PATCH 47/74] chore(DB): import pending files Referenced commit(s): 638b8ea621bc5d11e22213fa5bb950f189fbef33 --- .../rev_1724946417358596409.sql => db_world/2024_12_28_01.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1724946417358596409.sql => db_world/2024_12_28_01.sql} (94%) diff --git a/data/sql/updates/pending_db_world/rev_1724946417358596409.sql b/data/sql/updates/db_world/2024_12_28_01.sql similarity index 94% rename from data/sql/updates/pending_db_world/rev_1724946417358596409.sql rename to data/sql/updates/db_world/2024_12_28_01.sql index 28cccba32..d4aa9b48c 100644 --- a/data/sql/updates/pending_db_world/rev_1724946417358596409.sql +++ b/data/sql/updates/db_world/2024_12_28_01.sql @@ -1,3 +1,4 @@ +-- DB update 2024_12_28_00 -> 2024_12_28_01 -- UPDATE `spell_dbc` SET `Attributes`=`Attributes`|64, `AttributesEx4`=34603008, `ProcChance`=101, `DurationIndex`=21, From 7ab42194d7bf70357a42b293adf130e456f39084 Mon Sep 17 00:00:00 2001 From: FlyingArowana Date: Sat, 28 Dec 2024 22:07:05 +0000 Subject: [PATCH 48/74] fix(DB/SAI): SAI overhaul of Deadwood Warrior, Gardener and Pathfinder (#20901) --- .../rev_1733968258139506300.sql | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1733968258139506300.sql diff --git a/data/sql/updates/pending_db_world/rev_1733968258139506300.sql b/data/sql/updates/pending_db_world/rev_1733968258139506300.sql new file mode 100644 index 000000000..5cec363cc --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1733968258139506300.sql @@ -0,0 +1,23 @@ +-- +-- Adds if missing SAI to Deadwood Warrior, Gardener and Pathfinder +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` in (7153, 7154, 7155); + +-- Deadwood Warrior +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 7153); +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 +(7153, 0, 0, 0, 0, 0, 100, 0, 4000, 11000, 12000, 15000, 0, 0, 11, 13583, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Deadwood Warrior - In Combat - Cast \'Curse of the Deadwood\''), +(7153, 0, 1, 0, 0, 0, 100, 0, 6000, 6000, 5000, 10000, 0, 0, 11, 13584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Deadwood Warrior - In Combat - Cast \'Strike\''); + +-- Deadwood Gardener +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 7154) AND (`source_type` = 0) AND (`id` IN (0, 1, 2, 3)); +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 +(7154, 0, 0, 0, 0, 0, 100, 0, 4000, 11000, 12000, 15000, 0, 0, 11, 13583, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Deadwood Gardener - In Combat - Cast \'Curse of the Deadwood\''), +(7154, 0, 1, 0, 2, 0, 100, 0, 0, 70, 15000, 15000, 0, 0, 11, 12160, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Deadwood Gardener - Between 0-70% Health - Cast \'Rejuvenation\''), +(7154, 0, 3, 0, 2, 0, 100, 0, 0, 30, 10000, 10000, 0, 0, 11, 11986, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Deadwood Gardener - Between 0-30% Health - Cast \'Healing Wave\''); + +-- Deadwood Pathfinder +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 7155) AND (`source_type` = 0) AND (`id` IN (0, 1, 2)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(7155, 0, 0, 0, 0, 0, 100, 0, 0, 0, 2200, 3800, 0, 0, 11, 6660, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Deadwood Pathfinder - In Combat - Cast \'Shoot\''), +(7155, 0, 1, 0, 9, 0, 100, 0, 0, 0, 6000, 12000, 5, 30, 11, 6685, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Deadwood Pathfinder - Within 5-30 Range - Cast \'Piercing Shot\''), +(7155, 0, 2, 0, 0, 0, 100, 0, 5000, 9000, 125000, 130000, 0, 0, 11, 13583, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Deadwood Pathfinder - In Combat - Cast \'Curse of the Deadwood\''); From 61521231eff1714cf6f245b120be884e87e835f7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 28 Dec 2024 22:08:04 +0000 Subject: [PATCH 49/74] chore(DB): import pending files Referenced commit(s): 7ab42194d7bf70357a42b293adf130e456f39084 --- .../rev_1733968258139506300.sql => db_world/2024_12_28_02.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1733968258139506300.sql => db_world/2024_12_28_02.sql} (98%) diff --git a/data/sql/updates/pending_db_world/rev_1733968258139506300.sql b/data/sql/updates/db_world/2024_12_28_02.sql similarity index 98% rename from data/sql/updates/pending_db_world/rev_1733968258139506300.sql rename to data/sql/updates/db_world/2024_12_28_02.sql index 5cec363cc..d7310d7ab 100644 --- a/data/sql/updates/pending_db_world/rev_1733968258139506300.sql +++ b/data/sql/updates/db_world/2024_12_28_02.sql @@ -1,3 +1,4 @@ +-- DB update 2024_12_28_01 -> 2024_12_28_02 -- -- Adds if missing SAI to Deadwood Warrior, Gardener and Pathfinder UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` in (7153, 7154, 7155); From 3acf687b0804fd861067d823eb8734e75c5c3229 Mon Sep 17 00:00:00 2001 From: Trinitarius <84076297+trinitarius@users.noreply.github.com> Date: Sun, 29 Dec 2024 17:17:34 +0100 Subject: [PATCH 50/74] fix(DB/Creature): Arcanist Helion gossip text (#21062) --- data/sql/updates/pending_db_world/update_gossip_menu.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/update_gossip_menu.sql diff --git a/data/sql/updates/pending_db_world/update_gossip_menu.sql b/data/sql/updates/pending_db_world/update_gossip_menu.sql new file mode 100644 index 000000000..552aabb0c --- /dev/null +++ b/data/sql/updates/pending_db_world/update_gossip_menu.sql @@ -0,0 +1,2 @@ +UPDATE `gossip_menu` SET `TextID` = 7786 WHERE `MenuID` = 12002 AND `TextID` = 50030; +DELETE FROM `npc_text` WHERE `ID` = 50030; From ca686d8798233452898c144c6172d1e96ae9cdf3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 29 Dec 2024 16:18:35 +0000 Subject: [PATCH 51/74] chore(DB): import pending files Referenced commit(s): 3acf687b0804fd861067d823eb8734e75c5c3229 --- .../update_gossip_menu.sql => db_world/2024_12_29_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/update_gossip_menu.sql => db_world/2024_12_29_00.sql} (74%) diff --git a/data/sql/updates/pending_db_world/update_gossip_menu.sql b/data/sql/updates/db_world/2024_12_29_00.sql similarity index 74% rename from data/sql/updates/pending_db_world/update_gossip_menu.sql rename to data/sql/updates/db_world/2024_12_29_00.sql index 552aabb0c..32323a5c4 100644 --- a/data/sql/updates/pending_db_world/update_gossip_menu.sql +++ b/data/sql/updates/db_world/2024_12_29_00.sql @@ -1,2 +1,3 @@ +-- DB update 2024_12_28_02 -> 2024_12_29_00 UPDATE `gossip_menu` SET `TextID` = 7786 WHERE `MenuID` = 12002 AND `TextID` = 50030; DELETE FROM `npc_text` WHERE `ID` = 50030; From 5dfe8973bb3e01d44d6784d1b44ae5a00066c484 Mon Sep 17 00:00:00 2001 From: Kitzunu <24550914+Kitzunu@users.noreply.github.com> Date: Sun, 29 Dec 2024 18:50:20 +0100 Subject: [PATCH 52/74] chore(DB): Delete empty/null entries (#21058) --- .../updates/pending_db_world/rev_1735437140186286300.sql | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1735437140186286300.sql diff --git a/data/sql/updates/pending_db_world/rev_1735437140186286300.sql b/data/sql/updates/pending_db_world/rev_1735437140186286300.sql new file mode 100644 index 000000000..f8f51ad5f --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1735437140186286300.sql @@ -0,0 +1,7 @@ +-- +DELETE FROM `gameobject_template_locale` WHERE `name` = ''; +DELETE FROM `gameobject_template_locale` WHERE `name` = 'NULL'; +DELETE FROM `gameobject_template_locale` WHERE `name` IS NULL; +DELETE FROM `quest_offer_reward_locale` WHERE `RewardText` = ''; +DELETE FROM `quest_offer_reward_locale` WHERE `RewardText` = 'NULL'; +DELETE FROM `quest_offer_reward_locale` WHERE `RewardText` IS NULL; From a710b9873dba174e5aba626644e1eb85b9f3bede Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 29 Dec 2024 17:51:19 +0000 Subject: [PATCH 53/74] chore(DB): import pending files Referenced commit(s): 5dfe8973bb3e01d44d6784d1b44ae5a00066c484 --- .../rev_1735437140186286300.sql => db_world/2024_12_29_01.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1735437140186286300.sql => db_world/2024_12_29_01.sql} (89%) diff --git a/data/sql/updates/pending_db_world/rev_1735437140186286300.sql b/data/sql/updates/db_world/2024_12_29_01.sql similarity index 89% rename from data/sql/updates/pending_db_world/rev_1735437140186286300.sql rename to data/sql/updates/db_world/2024_12_29_01.sql index f8f51ad5f..b87fbf99c 100644 --- a/data/sql/updates/pending_db_world/rev_1735437140186286300.sql +++ b/data/sql/updates/db_world/2024_12_29_01.sql @@ -1,3 +1,4 @@ +-- DB update 2024_12_29_00 -> 2024_12_29_01 -- DELETE FROM `gameobject_template_locale` WHERE `name` = ''; DELETE FROM `gameobject_template_locale` WHERE `name` = 'NULL'; From d94919245537fe9416f2409d340b897edc8a1168 Mon Sep 17 00:00:00 2001 From: Benjamin Jackson <38561765+heyitsbench@users.noreply.github.com> Date: Sun, 29 Dec 2024 13:13:52 -0500 Subject: [PATCH 54/74] fix(Scripts/Zul'Aman): Band-Aid fix for hostage loot. (#21060) --- data/sql/updates/pending_db_world/za-hostage-bandaid.sql | 1 + .../scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp | 6 ++++++ src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp | 6 +++++- src/server/scripts/EasternKingdoms/ZulAman/zulaman.h | 3 ++- 4 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 data/sql/updates/pending_db_world/za-hostage-bandaid.sql diff --git a/data/sql/updates/pending_db_world/za-hostage-bandaid.sql b/data/sql/updates/pending_db_world/za-hostage-bandaid.sql new file mode 100644 index 000000000..b4da9f879 --- /dev/null +++ b/data/sql/updates/pending_db_world/za-hostage-bandaid.sql @@ -0,0 +1 @@ +UPDATE `conditions` SET `ConditionValue1` = 17 WHERE `SourceTypeOrReferenceId` = 10 AND `SourceGroup` IN (35100, 35101, 35102) AND `ConditionTypeOrReference` = 13 AND `ConditionValue2` IN (1, 2, 3, 4); diff --git a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp index f86186b40..f743f017a 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp @@ -103,6 +103,7 @@ public: LoadBossBoundaries(boundaries); LoadDoorData(doorData); LoadSummonData(summonData); + _chestLooted = 0; for (uint8 i = 0; i < RAND_VENDOR; ++i) RandVendor[i] = NOT_STARTED; @@ -200,6 +201,8 @@ public: else if (data == DONE) _akilzonGauntlet = DONE; } + else if (type == DATA_CHEST_LOOTED) + ++_chestLooted; } void StartAkilzonGauntlet() @@ -320,6 +323,8 @@ public: return RandVendor[1]; else if (type == TYPE_AKILZON_GAUNTLET) return _akilzonGauntlet; + else if (type == DATA_CHEST_LOOTED) + return _chestLooted; return 0; } @@ -330,6 +335,7 @@ public: } private: + uint16 _chestLooted; uint32 RandVendor[RAND_VENDOR]; GuidSet AkilzonTrash; EncounterState _akilzonGauntlet = NOT_STARTED; diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp index ddb9bc6fd..83034d117 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp @@ -290,13 +290,17 @@ public: creature->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); + creature->GetInstanceScript()->SetData(DATA_CHEST_LOOTED, 0); + float x, y, z; creature->GetPosition(x, y, z); for (uint8 i = 0; i < 4; ++i) { if (HostageEntry[i] == creature->GetEntry()) { - creature->SummonGameObject(ChestEntry[i], x - 2, y, z, 0, 0, 0, 0, 0, 0); + GameObject* obj = creature->SummonGameObject(ChestEntry[i], x - 2, y, z, 0, 0, 0, 0, 0, 0); + if (obj) + obj->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); break; } } diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h index 8ed6eb131..341f97f65 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h +++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h @@ -41,7 +41,8 @@ enum DataTypes DATA_HARRISON_JONES = 13, TYPE_AKILZON_GAUNTLET = 14, DATA_LOOKOUT = 15, - DATA_ZULJIN_GATE = 16 + DATA_ZULJIN_GATE = 16, + DATA_CHEST_LOOTED = 17 // Used for hostage loot DB conditions }; enum CreatureIds From a97bff0baaaa9caf1190f107a8f4273a64eff12b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 29 Dec 2024 18:14:54 +0000 Subject: [PATCH 55/74] chore(DB): import pending files Referenced commit(s): d94919245537fe9416f2409d340b897edc8a1168 --- .../za-hostage-bandaid.sql => db_world/2024_12_29_02.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/za-hostage-bandaid.sql => db_world/2024_12_29_02.sql} (82%) diff --git a/data/sql/updates/pending_db_world/za-hostage-bandaid.sql b/data/sql/updates/db_world/2024_12_29_02.sql similarity index 82% rename from data/sql/updates/pending_db_world/za-hostage-bandaid.sql rename to data/sql/updates/db_world/2024_12_29_02.sql index b4da9f879..c537bf630 100644 --- a/data/sql/updates/pending_db_world/za-hostage-bandaid.sql +++ b/data/sql/updates/db_world/2024_12_29_02.sql @@ -1 +1,2 @@ +-- DB update 2024_12_29_01 -> 2024_12_29_02 UPDATE `conditions` SET `ConditionValue1` = 17 WHERE `SourceTypeOrReferenceId` = 10 AND `SourceGroup` IN (35100, 35101, 35102) AND `ConditionTypeOrReference` = 13 AND `ConditionValue2` IN (1, 2, 3, 4); From e152d6a3aabcabdebe03ee133a4ea2d69395b182 Mon Sep 17 00:00:00 2001 From: vrachv <52053491+vrachv@users.noreply.github.com> Date: Sun, 29 Dec 2024 19:13:22 +0000 Subject: [PATCH 56/74] fix(Scripts/Karazhan): Chess pieces reset to correct positions (#21061) --- .../scripts/EasternKingdoms/Karazhan/boss_chess_event.cpp | 4 ++++ .../scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp | 3 --- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_chess_event.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_chess_event.cpp index 8a6869d64..84d51f7d0 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_chess_event.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_chess_event.cpp @@ -1424,6 +1424,7 @@ struct npc_chesspiece : public ScriptedAI _instance = creature->GetInstanceScript(); _currentOrientation = GetDefaultOrientationForTeam(); + _homePosition = creature->GetPosition(); _nextMoveTimer = urand(8 * IN_MILLISECONDS, 20 * IN_MILLISECONDS); @@ -1457,6 +1458,8 @@ struct npc_chesspiece : public ScriptedAI { me->SetResistance(SpellSchools(i), 0); } + + me->NearTeleportTo(_homePosition); } void EnterEvadeMode(EvadeReason /*why*/) override @@ -2044,6 +2047,7 @@ private: KarazhanChessOrientationType _currentOrientation; bool _teamControlledByRaid; + Position _homePosition; }; struct npc_chess_move_trigger : public ScriptedAI diff --git a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp index ddc653f32..76758c950 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp @@ -271,9 +271,6 @@ public: piece->RemoveAllAuras(); piece->setDeathState(DeathState::JustRespawned); piece->SetHealth(piece->GetMaxHealth()); - float x, y, z, o; - piece->GetHomePosition(x, y, z, o); - piece->NearTeleportTo(x, y, z, o); piece->AI()->DoAction(ACTION_CHESS_PIECE_RESET_ORIENTATION); piece->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); piece->AI()->Reset(); From 8f7fc6d0d12cfd5eccdeeefd0549615a0ea11155 Mon Sep 17 00:00:00 2001 From: Trinitarius <84076297+trinitarius@users.noreply.github.com> Date: Sun, 29 Dec 2024 20:46:44 +0100 Subject: [PATCH 57/74] fix(DB/Locale): deDE fixes cata quest texts to wrath state (#21049) --- data/sql/updates/pending_db_world/fix-cata-texts.sql | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 data/sql/updates/pending_db_world/fix-cata-texts.sql diff --git a/data/sql/updates/pending_db_world/fix-cata-texts.sql b/data/sql/updates/pending_db_world/fix-cata-texts.sql new file mode 100644 index 000000000..0e8c7afe7 --- /dev/null +++ b/data/sql/updates/pending_db_world/fix-cata-texts.sql @@ -0,0 +1,6 @@ +DELETE FROM `quest_template_locale` WHERE `ID` IN (182, 218, 3361, 3364) AND `locale` = 'deDE'; +INSERT INTO `quest_template_locale` (`ID`, `locale`, `Title`, `Details`, `Objectives`, `EndText`, `CompletedText`, `ObjectiveText1`, `ObjectiveText2`, `ObjectiveText3`, `ObjectiveText4`, `VerifiedBuild`) VALUES +(182,'deDE','Die Trollhöhle','Mein Bruder Senir und ich wurden in unterschiedliche Ecken von Dun Morogh entsandt, um dort die von den Trollen ausgehende Gefahr zu untersuchen. Der Senat hat mit den Troggs bereits alle Hände voll zu tun, deswegen kann er keinen weiteren Ärger gebrauchen.$B$BNach allem, was ich gesehen habe, ist die Position der Trolle hier im Eisklammtal nicht sonderlich gut - sie sind vor allem in der südlichen Höhle zu finden. Ich würde sagen, die Armee brauchen wir nicht. Einige starke Arme sollten mehr als ausreichend sein.$B$BMöchtet Ihr vielleicht mithelfen? Ich bin ermächtigt, Euch für Eure Dienste eine Entschädigung anzubieten.','Grelin Weißbart möchte, dass Ihr 10 Trollwelpen der Frostmähnen tötet.','','Kehrt zu Grelin Weißbart in Dun Morogh zurück.','','','','',0), +(218,'deDE','Das gestohlene Tagebuch','Mein Tagebuch! Sie haben es in die Höhle gebracht. Der, der es hatte, war ein großer Kerl mit seltsamen Zeichen auf der Haut und im Gesicht. Viel mehr konnte ich leider nicht sehen.$B$BIhr hattet ja mit den Trollen Erfolg, vielleicht könntet Ihr es mir wiederbeschaffen?','Grelin Weißbart möchte, dass Ihr Grik\'nir den Kalten tötet und ihm sein Tagebuch wiederbeschafft.','','Kehrt zu Grelin Weißbart in Dun Morogh zurück.','','','','',0), +(3361,'deDE','Dilemma eines Flüchtlings','Wir haben die Troggs aus Gnomeregan vertrieben, aber dann ist alles schrecklich schief gegangen! Jetzt ist unsere Heimat völlig von Strahlen verseucht und wir Gnome sind überall in Dun Morogh zerstreut.$B$BIn meiner Hast, der Strahlung zu entkommen, habe ich all mein ganzes Hab und Gut und auch meine Werkzeuge verloren. Die Trolle haben sie geholt. Sie haben meine Truhe, meine Kiste, und meinen Bolzeneimer gestohlen! Alles das haben sie in ihre Lager südwestlich von Ambossar mitgenommen.$B$BIch bin nur leider kein Abenteurer - könntet Ihr bitte meine Sachen suchen und sie mir herbringen?','Bringt Felix Windenbolz in Ambossar den Kasten, die Truhe und den Bolzeneimer von Felix.','','Kehrt zu Felix Windenbolz in Ambossar in Dun Morogh zurück.','','','','',0), +(3364,'deDE','Lieferung des kochend heißen Morgengebräus','Bah! Ich sollte dieses köstliche, kochend heiße Morgengebräu schon vor einer ganzen Weile zu Durnan Pelznaht in Ambossar bringen, aber ich musste erst eine Ladung zu Grelin hier bringen. Ich werde es niemals bis nach Ambossar schaffen, bevor das Gebräu kalt wird!$B$BIhr seht hurtig aus. Vielleicht könnt Ihr es schaffen. Diese Tasse wird nur noch ein paar Minuten lang heiß bleiben, und Durnan bestellte kein \"eisiges\" Morgengebräu, also beeilt Euch. Ambossar liegt im Nordosten. Es ist eine Siedlung, die in den Berg gebaut wurde.$B$BDanke, $n, und vergesst nicht, mir meinen Becher zurückzubringen!','Bringt ein kochend heißes Morgengebräu zu Durnan Pelznaht in Ambossar hinein, bevor es kalt wird!','','','','','','',0); From 26ae20a2f34c5d84948c80e15c77b6eda7bda798 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 29 Dec 2024 19:47:47 +0000 Subject: [PATCH 58/74] chore(DB): import pending files Referenced commit(s): 8f7fc6d0d12cfd5eccdeeefd0549615a0ea11155 --- .../fix-cata-texts.sql => db_world/2024_12_29_03.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/fix-cata-texts.sql => db_world/2024_12_29_03.sql} (98%) diff --git a/data/sql/updates/pending_db_world/fix-cata-texts.sql b/data/sql/updates/db_world/2024_12_29_03.sql similarity index 98% rename from data/sql/updates/pending_db_world/fix-cata-texts.sql rename to data/sql/updates/db_world/2024_12_29_03.sql index 0e8c7afe7..d7e6016be 100644 --- a/data/sql/updates/pending_db_world/fix-cata-texts.sql +++ b/data/sql/updates/db_world/2024_12_29_03.sql @@ -1,3 +1,4 @@ +-- DB update 2024_12_29_02 -> 2024_12_29_03 DELETE FROM `quest_template_locale` WHERE `ID` IN (182, 218, 3361, 3364) AND `locale` = 'deDE'; INSERT INTO `quest_template_locale` (`ID`, `locale`, `Title`, `Details`, `Objectives`, `EndText`, `CompletedText`, `ObjectiveText1`, `ObjectiveText2`, `ObjectiveText3`, `ObjectiveText4`, `VerifiedBuild`) VALUES (182,'deDE','Die Trollhöhle','Mein Bruder Senir und ich wurden in unterschiedliche Ecken von Dun Morogh entsandt, um dort die von den Trollen ausgehende Gefahr zu untersuchen. Der Senat hat mit den Troggs bereits alle Hände voll zu tun, deswegen kann er keinen weiteren Ärger gebrauchen.$B$BNach allem, was ich gesehen habe, ist die Position der Trolle hier im Eisklammtal nicht sonderlich gut - sie sind vor allem in der südlichen Höhle zu finden. Ich würde sagen, die Armee brauchen wir nicht. Einige starke Arme sollten mehr als ausreichend sein.$B$BMöchtet Ihr vielleicht mithelfen? Ich bin ermächtigt, Euch für Eure Dienste eine Entschädigung anzubieten.','Grelin Weißbart möchte, dass Ihr 10 Trollwelpen der Frostmähnen tötet.','','Kehrt zu Grelin Weißbart in Dun Morogh zurück.','','','','',0), From 0e6fffa72e3160620889909282ba8caf3c97a0d8 Mon Sep 17 00:00:00 2001 From: Trinitarius <84076297+trinitarius@users.noreply.github.com> Date: Sun, 29 Dec 2024 20:56:55 +0100 Subject: [PATCH 59/74] fix(DB/Locale): deDE fixes cata quest texts to wrath state - part 2 (#21059) --- data/sql/updates/pending_db_world/fix_cata_texts_2.sql | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 data/sql/updates/pending_db_world/fix_cata_texts_2.sql diff --git a/data/sql/updates/pending_db_world/fix_cata_texts_2.sql b/data/sql/updates/pending_db_world/fix_cata_texts_2.sql new file mode 100644 index 000000000..bacf1d352 --- /dev/null +++ b/data/sql/updates/pending_db_world/fix_cata_texts_2.sql @@ -0,0 +1,6 @@ +DELETE FROM `quest_template_locale` WHERE `ID` IN (364, 376, 380, 3901) AND `locale` = 'deDE'; +INSERT INTO `quest_template_locale` (`ID`, `locale`, `Title`, `Details`, `Objectives`, `EndText`, `CompletedText`, `ObjectiveText1`, `ObjectiveText2`, `ObjectiveText3`, `ObjectiveText4`, `VerifiedBuild`) VALUES +(364,'deDE','Die Hirnlosen','Seit der erste Verlassene aus seinem Grab gekrochen ist, stehen wir mit der Geißel, der Armee des Lichkönigs im Krieg: durch Nekromantie erweckte Armeen von Untoten, grausige Bestien des Nordens und gepeinigte Schreckgespenster.$b$bDer nördliche Teil des Dorfes wurde von den Hirnlosen überrannt, und diese müssen vernichtet werden. Vernichtet sie, zeigt ihnen keine Gnade, auch wenn sie unsere früheren Brüder und Schwestern gewesen sein mögen. Die Gefallenen sind nichts als Sklaven des Lichkönigs.','Schattenpriester Sarvis will, dass Ihr 5 hirnlose Zombies und 5 elende Ghuls tötet.','','Kehrt zu Schattenpriester Sarvis in Todesend in Tirisfal zurück.','','','','',0), +(376,'deDE','Die Verdammten','Meine Pflichten umfassen, die verwundeten Krieger zu versorgen, Rüstung und Kleidung zu schneidern und Schattenpriester Sarvis in jeder erdenklichen Weise zu unterstützen.$b$bEs sieht so aus, als würdet Ihr ebenfalls in seine Dienste aufgenommen... wahrscheinlich um die Hirnlosen zu jagen, wie ich ihn kenne. Tja, wenn Ihr dabei in einem Stück bleiben wollt - und ich bezweifle nicht, dass Ihr das wollt -, dann kann ich Euch vielleicht helfen. Mir gehen die Tatzen und Flügel aus, und wenn Ihr mir einige davon bringt, besorge ich Euch eine Rüstung. Ihr werdet im Norden eine Menge Wölfe und Fledermäuse finden.','Novize Elreth benötigt 6 Aasfressertatzen und 6 Nachtsaugerflügel.','','Kehrt zu Novizin Elreth in Todesend in Tirisfal zurück.','','','','',0), +(380,'deDE','Nachtwebergrund','Eine unserer größten Schwierigkeiten besteht darin, die Rohstoffe zu besorgen, die wir zum Überleben brauchen. Gold war schon zu Hochzeiten der Macht der Allianz selten.$b$bEs gibt eine Goldmine im Nordwesten, die von Spinnen überrannt wurde. Wir brauchen das Gold dieser Mine, aber wir können es ja schlecht holen, während die Spinnen darin herumkrabbeln. Ich habe nicht viel Personal übrig für diese Aufgabe, also müssen wir sie Schritt für Schritt lösen.$B$BBegebt Euch dorthin und schaut mal, was Ihr für uns ausrichten könnt, $n.','Exekutor Arren will, dass Ihr 8 junge Nachtweber und 5 Nachtweber tötet.','','Kehrt zu Exekutor Arren in Todesend in Tirisfal zurück.','','','','',0), +(3901,'deDE','Klappernde Skelette','Ihr habt den Verlassenen Euer Potenzial unter normalen Umständen gezeigt, $n. Jetzt wollen wir mal sehen, wie es damit bestellt ist, wenn Ihr unter Druck steht.$B$BDie klappernden Skelette, weitere hirnlose Diener des Lichkönigs, sind zähere Feinde als die Zombies, mit denen Ihr es bisher zu tun hattet. Auch hier heißt es wieder: Dünnt ihre Reihen aus und beweist den Verlassenen, dass Ihr der Aufgabe gewachsen seid. Frisch ans Werk...und redet wieder mit mir, wenn Ihr fertig seid.','Tötet 8 klappernde Skelette und kehrt zu Schattenpriester Sarvis in Todesend zurück, wenn Ihr fertig seid.','','Kehrt zu Schattenpriester Sarvis in Todesend in Tirisfal zurück.','','','','',0); From 9b5fc8775efce24f07cd81a45a248f60fc2171d5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 29 Dec 2024 19:57:54 +0000 Subject: [PATCH 60/74] chore(DB): import pending files Referenced commit(s): 0e6fffa72e3160620889909282ba8caf3c97a0d8 --- .../fix_cata_texts_2.sql => db_world/2024_12_29_04.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/fix_cata_texts_2.sql => db_world/2024_12_29_04.sql} (98%) diff --git a/data/sql/updates/pending_db_world/fix_cata_texts_2.sql b/data/sql/updates/db_world/2024_12_29_04.sql similarity index 98% rename from data/sql/updates/pending_db_world/fix_cata_texts_2.sql rename to data/sql/updates/db_world/2024_12_29_04.sql index bacf1d352..a1d7ffa75 100644 --- a/data/sql/updates/pending_db_world/fix_cata_texts_2.sql +++ b/data/sql/updates/db_world/2024_12_29_04.sql @@ -1,3 +1,4 @@ +-- DB update 2024_12_29_03 -> 2024_12_29_04 DELETE FROM `quest_template_locale` WHERE `ID` IN (364, 376, 380, 3901) AND `locale` = 'deDE'; INSERT INTO `quest_template_locale` (`ID`, `locale`, `Title`, `Details`, `Objectives`, `EndText`, `CompletedText`, `ObjectiveText1`, `ObjectiveText2`, `ObjectiveText3`, `ObjectiveText4`, `VerifiedBuild`) VALUES (364,'deDE','Die Hirnlosen','Seit der erste Verlassene aus seinem Grab gekrochen ist, stehen wir mit der Geißel, der Armee des Lichkönigs im Krieg: durch Nekromantie erweckte Armeen von Untoten, grausige Bestien des Nordens und gepeinigte Schreckgespenster.$b$bDer nördliche Teil des Dorfes wurde von den Hirnlosen überrannt, und diese müssen vernichtet werden. Vernichtet sie, zeigt ihnen keine Gnade, auch wenn sie unsere früheren Brüder und Schwestern gewesen sein mögen. Die Gefallenen sind nichts als Sklaven des Lichkönigs.','Schattenpriester Sarvis will, dass Ihr 5 hirnlose Zombies und 5 elende Ghuls tötet.','','Kehrt zu Schattenpriester Sarvis in Todesend in Tirisfal zurück.','','','','',0), From 6313d538c789b6e28dec1be3a4a8463362c5751f Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Mon, 30 Dec 2024 15:32:33 +0100 Subject: [PATCH 61/74] fix(Scripts/ZulAman): add Altar Torch visuals (#21064) --- .../EasternKingdoms/ZulAman/instance_zulaman.cpp | 14 +++++++++----- .../scripts/EasternKingdoms/ZulAman/zulaman.h | 6 +++++- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp index f743f017a..b595c12d2 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp @@ -49,11 +49,15 @@ Position const HarrisonJonesLoc = {120.687f, 1674.0f, 42.0217f, 1.59044f}; DoorData const doorData[] = { - { GO_ZULJIN_FIREWALL, DATA_ZULJIN, DOOR_TYPE_ROOM }, - { GO_DOOR_HALAZZI, DATA_HALAZZI, DOOR_TYPE_PASSAGE }, - { GO_LYNX_TEMPLE_ENTRANCE, DATA_HALAZZI, DOOR_TYPE_ROOM }, - { GO_DOOR_AKILZON, DATA_AKILZON, DOOR_TYPE_ROOM }, - { 0, 0, DOOR_TYPE_ROOM } // END + { GO_ZULJIN_FIREWALL, DATA_ZULJIN, DOOR_TYPE_ROOM }, + { GO_DOOR_HALAZZI, DATA_HALAZZI, DOOR_TYPE_PASSAGE }, + { GO_LYNX_TEMPLE_ENTRANCE, DATA_HALAZZI, DOOR_TYPE_ROOM }, + { GO_DOOR_AKILZON, DATA_AKILZON, DOOR_TYPE_ROOM }, + { GO_ALTAR_TORCH_EAGLE_GOD, DATA_AKILZON, DOOR_TYPE_PASSAGE }, + { GO_ALTAR_TORCH_DRAGONHAWK_GOD, DATA_JANALAI, DOOR_TYPE_PASSAGE }, + { GO_ALTAR_TORCH_LYNX_GOD, DATA_HALAZZI, DOOR_TYPE_PASSAGE }, + { GO_ALTAR_TORCH_BEAR_GOD, DATA_NALORAKK, DOOR_TYPE_PASSAGE }, + { 0, 0, DOOR_TYPE_ROOM } // END }; ObjectData const creatureData[] = diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h index 341f97f65..bebca990c 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h +++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h @@ -80,7 +80,11 @@ enum GameobjectIds GO_TANZARS_TRUNK = 186648, GO_ASHLIS_BAG = 186672, GO_KRAZS_PACKAGE = 186667, - GO_STRANGE_GONG = 187359 + GO_STRANGE_GONG = 187359, + GO_ALTAR_TORCH_EAGLE_GOD = 187035, + GO_ALTAR_TORCH_DRAGONHAWK_GOD = 187036, + GO_ALTAR_TORCH_LYNX_GOD = 187037, + GO_ALTAR_TORCH_BEAR_GOD = 186860 }; enum MiscIds From 467a5116f159c88bead835428bbae5164f573fcb Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Mon, 30 Dec 2024 19:05:43 +0100 Subject: [PATCH 62/74] fix(Scripts/ZulAman): add Boss Boundaries (#21065) --- .../scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp index b595c12d2..abb733126 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp @@ -86,7 +86,12 @@ ObjectData const summonData[] = BossBoundaryData const boundaries = { - { DATA_HEXLORD, new RectangleBoundary(80.50557f, 920.9858f, 155.88986f, 1015.27563f)} + { DATA_AKILZON, new ZRangeBoundary(72.0f, 100.0f)}, + { DATA_HALAZZI, new RectangleBoundary(304.0f, 432.0f, 1052.0f, 1156.0f)}, + { DATA_HEXLORD, new RectangleBoundary(80.50557f, 920.9858f, 155.88986f, 1015.27563f)}, + { DATA_JANALAI, new ZRangeBoundary(16.0f, 46.0f)}, + { DATA_NALORAKK, new ZRangeBoundary(38.0f, 68.0f)}, + { DATA_ZULJIN, new ZRangeBoundary(43.0f, 73.0f)} }; class instance_zulaman : public InstanceMapScript From e6cf00aefa36fa5f0db1d289ef5511f44be4aff9 Mon Sep 17 00:00:00 2001 From: vrachv <52053491+vrachv@users.noreply.github.com> Date: Mon, 30 Dec 2024 19:24:29 +0000 Subject: [PATCH 63/74] =?UTF-8?q?fix(DB/SAI):=20restore=20Drakuru=E2=80=99?= =?UTF-8?q?s=20(id:=2028802)=20health=20to=20100%=20upon=20charming=20(#21?= =?UTF-8?q?037)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../updates/pending_db_world/rev_1735053928227867164.sql | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1735053928227867164.sql diff --git a/data/sql/updates/pending_db_world/rev_1735053928227867164.sql b/data/sql/updates/pending_db_world/rev_1735053928227867164.sql new file mode 100644 index 000000000..99da414eb --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1735053928227867164.sql @@ -0,0 +1,8 @@ +DELETE FROM `smart_scripts` WHERE `entryorguid` = 28802 AND `id` = 4 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_x`, `target_y`, `target_z`, `target_o`, `comment`) +VALUES +(28802, 0, 4, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 0, 142, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Servant of Drakuru - On Update Entry - Set Health 100%'); + +UPDATE `smart_scripts` SET `link` = 4 WHERE `entryorguid` = 28802 AND `id` = 2 AND `source_type` = 0 AND `link` = 0; From 715f55900a030de5e4f4a30820ff867853c8ac2e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 30 Dec 2024 19:25:30 +0000 Subject: [PATCH 64/74] chore(DB): import pending files Referenced commit(s): e6cf00aefa36fa5f0db1d289ef5511f44be4aff9 --- .../rev_1735053928227867164.sql => db_world/2024_12_30_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1735053928227867164.sql => db_world/2024_12_30_00.sql} (95%) diff --git a/data/sql/updates/pending_db_world/rev_1735053928227867164.sql b/data/sql/updates/db_world/2024_12_30_00.sql similarity index 95% rename from data/sql/updates/pending_db_world/rev_1735053928227867164.sql rename to data/sql/updates/db_world/2024_12_30_00.sql index 99da414eb..ba0d7cce1 100644 --- a/data/sql/updates/pending_db_world/rev_1735053928227867164.sql +++ b/data/sql/updates/db_world/2024_12_30_00.sql @@ -1,3 +1,4 @@ +-- DB update 2024_12_29_04 -> 2024_12_30_00 DELETE FROM `smart_scripts` WHERE `entryorguid` = 28802 AND `id` = 4 AND `source_type` = 0; INSERT INTO `smart_scripts` From 6ea9b7a9cbc85a6d0648375888a82b9a0358d5e8 Mon Sep 17 00:00:00 2001 From: Kitzunu <24550914+Kitzunu@users.noreply.github.com> Date: Mon, 30 Dec 2024 20:42:09 +0100 Subject: [PATCH 65/74] fix(Core/Player): fix output for disabled maps (#21068) --- src/server/game/Entities/Player/PlayerStorage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Entities/Player/PlayerStorage.cpp b/src/server/game/Entities/Player/PlayerStorage.cpp index 8c7b9da6f..3e878976d 100644 --- a/src/server/game/Entities/Player/PlayerStorage.cpp +++ b/src/server/game/Entities/Player/PlayerStorage.cpp @@ -6723,7 +6723,7 @@ bool Player::Satisfy(DungeonProgressionRequirements const* ar, uint32 target_map if (DisableMgr::IsDisabledFor(DISABLE_TYPE_MAP, target_map, this)) { - GetSession()->SendAreaTriggerMessage("%s", GetSession()->GetAcoreString(LANG_INSTANCE_CLOSED)); + GetSession()->SendAreaTriggerMessage("{}", GetSession()->GetAcoreString(LANG_INSTANCE_CLOSED)); return false; } From 4e49f522b4c2bff698b9dc14947151e24f019348 Mon Sep 17 00:00:00 2001 From: blinkysc <37940565+blinkysc@users.noreply.github.com> Date: Mon, 30 Dec 2024 15:09:20 -0600 Subject: [PATCH 66/74] fix(Scripts/PitOfSauron): Reset Scourgelord Tyrannus encounter state (#21057) Co-authored-by: Nicholas Lee Co-authored-by: blinkysc --- .../FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp index 675ff39f1..b0de4aba5 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp @@ -97,6 +97,7 @@ public: if (Vehicle* v = c->GetVehicleKit()) v->InstallAllAccessories(false); } + pInstance->SetData(DATA_TYRANNUS, NOT_STARTED); } } From b6c957307067ac6cf3b008f137aa3fdae6fca8bb Mon Sep 17 00:00:00 2001 From: Trinitarius <84076297+trinitarius@users.noreply.github.com> Date: Mon, 30 Dec 2024 22:20:52 +0100 Subject: [PATCH 67/74] fix(DB/Locale): deDE fixes for quest greetings (#21067) --- .../update_quest_greeting1.sql | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 data/sql/updates/pending_db_world/update_quest_greeting1.sql diff --git a/data/sql/updates/pending_db_world/update_quest_greeting1.sql b/data/sql/updates/pending_db_world/update_quest_greeting1.sql new file mode 100644 index 000000000..24ce9c5bb --- /dev/null +++ b/data/sql/updates/pending_db_world/update_quest_greeting1.sql @@ -0,0 +1,71 @@ +DELETE FROM `quest_greeting_locale` WHERE `ID` IN (234, 235, 238, 239, 240, 241, 261, 265, 272, 278, 342, 344, 381, 382, 392, 415, 464, 633, 656, 661, 714, 733, 737, 773, 786, 823, 1071, 1092, 1105, 1239, 1284, 1343, 1344, 1356, 1374, 1377, 1428, 1495, 1499, 1500, 1515, 1518, 1646, 1719, 1738, 1748, 1937, 1938, 1950, 1952, 2080, 2086, 2094, 2121, 2215, 2216, 2263, 2498, 2501, 2700, 2706, 2713, 2785, 2786, 2817, 2860, 2910, 2920, 2921) AND `locale` = 'deDE'; +INSERT INTO `quest_greeting_locale` (`ID`, `type`, `locale`, `Greeting`, `VerifiedBuild`) VALUES +(234,0,'deDE','In Westfall hat sich üble Verderbnis eingeschlichen. Während ich auf dem Schlachtfeld von Lordaeron meine Pflicht tat, wurden diese anständig geführten Höfe überfallen und zu Schlupfwinkeln für Schläger und Mörder umfunktioniert. Die Volksmiliz ist auf Eure Hilfe angewiesen.',0), +(235,0,'deDE','Willkommen in unserer bescheidenen Hütte! Wir freuen uns über jedes freundliche Gesicht. Und Ihr habt so starke Arme. Mein Mann und ich sind ständig auf der Suche nach jemandem, der uns auf dem Hof hilft. Jetzt, wo die ganzen guten Leute weg sind, ist es nicht einfach, kräftige Helfer zu bekommen.',0), +(238,0,'deDE','Manchmal denke ich, eine große dunkle Wolke schwebt über uns, aus der Unglück auf uns herabregnet. Erst werden wir von unserem Land vertrieben und jetzt kommen wir noch nicht einmal aus Westfall weg. Alles liegt im Argen. Es muss etwas geschehen.',0), +(239,0,'deDE','Abenteuer in Ländern so nah und so fern $BVerschiedene Leute, wir treffen sehr gern $BDocht wollt Ihr eine Frage stellen $BMüsst Ihr zuerst \'ne einfache Aufgabe erfüllen!',0), +(240,0,'deDE','Ach je, es ist auch ohne diese neuen Probleme schon schwer genug, hier für Ordnung zu sorgen! Ich hoffe, Ihr bringt gute Neuigkeiten, $N...',0), +(241,0,'deDE','He, mein Freund. Man nennt mich Remy. Ich komme aus dem Rotkammgebirge im Osten und bin auf der Suche nach interessanten... Geschäften, interessanten... Geschäften. Habt Ihr vielleicht welche... vielleicht welche?',0), +(261,0,'deDE','Seid gegrüßt. Ihr seht aus wie $Gein Mann:eine Frau; $Gder:die; weiß, was $Ger:sie; will... habt Ihr mit der Armee von Sturmwind zu tun?',0), +(265,0,'deDE','Ich spürte schon seit geraumer Zeit, dass Ihr kommen würdet, $N. Es stand in den Sternen geschrieben.',0), +(272,0,'deDE','Hallo, hallo! Willkommen in meiner Küche, $Gmein Herr:meine Dame;! Hier werden all die köstlichen Delikatessen der Taverne Zum roten Raben zubereitet. Ah, riecht nur das wunderbare Aroma!',0), +(278,0,'deDE','Hallo, $Gwerter Herr:werte Dame;. Nehmt Platz und esst etwas, wenn Ihr Hunger habt. Und keine Sorge, ich bin zwar mit meiner Handarbeit beschäftigt, aber ich höre Euch gut zu...',0), +(342,0,'deDE','Seid gegrüßt, $N! Willkommen in meinem bescheidenen Garten. Das Wetter ist in letzter Zeit wirklich vorzüglich. Lasst uns hoffen, dass es bis zur Ernte anhält.',0), +(344,0,'deDE','Wer ist $Gdieser:diese; $C, $Gder:die; sich vor das Gericht von Seenhain im Königreich Sturmwind begibt? Sagt, was Euer Anliegen in dieser Stadt ist, $R. Die Bedrohung des Königreichs durch die Orcs ist zu groß, um Zeit mit einem Geplänkel zu vergeuden.',0), +(381,0,'deDE','Grüße, $C. Wenn Ihr aus geschäftlichen Gründen hier seid, so schnappt Euch ein Bier und dann reden wir.',0), +(382,0,'deDE','Ich habe keine Zeit zum Schwatzen, doch wenn Ihr gewillt seid, uns im Kampf gegen die Orcs beizustehen, dann finden wir schon etwas für Euch zu tun.',0), +(392,0,'deDE','Erschreckt nicht, $R. Ich bin seit langem schon aus diesem Land geschieden, aber ich habe nicht vor, Euresgleichen Schaden zuzufügen. Ich habe in meinem Leben zu viel Tod gesehen. Mein einziger Wunsch ist der nach Frieden. Vielleicht könnt Ihr mir dabei helfen.',0), +(415,0,'deDE','He, $GKumpel:Maidlein;, könntet Ihr mir wohl bei einer Sache unter die Arme greifen? Ich stecke wirklich in der Klemme...',0), +(464,0,'deDE','Grüße, $C. Schlimme Zeiten sind dies, $Gmein Freund:meine Freundin;, denn unsere Stadt wird belagert! Die Orcs des Schwarzfelsklans greifen von der Burg Steinwacht aus an, die Schattenfellgnolle bedrohen den Ilgalar-Turm und das Rotkammgnollrudel gewinnt an Stärke. Ich hoffe, Ihr hattet nicht vor, hier Urlaub zu machen...',0), +(633,0,'deDE','Dunkle Zeiten sind über uns hereingebrochen, $C... Nicht mehr lange, und wir werden alles verlieren... wenn das Licht alle verlässt, außer jenen, die wahrhaftig unter dem Lichte wandeln.',0), +(656,0,'deDE','Überall waren Diebe!$B$BEs war schrecklich. Die Höhle stürzte über uns ein. Ich glaube, die Bergarbeiter sind alle tot, darunter auch mein Bruder, der Großknecht.',0), +(661,0,'deDE','Seid gegrüßt. Was habt Ihr mit der Familie Treuwein zu tun? Wollt Ihr die Treuweins im Kampf gegen die Untoten unterstützen?',0), +(714,0,'deDE','Grüße, $C! Herrlicher Tag zum Jagen, meint Ihr nicht auch? Ich selbst hatte bereits ziemliches Glück mit den Ebern. Möchtet Ihr es auch versuchen?',0), +(733,0,'deDE','Passt auf, was Ihr hier tut, $GSöhnchen:Mädel;. Ihr gehört zwar nicht zu unserer Truppe, aber das bedeutet nicht, dass ich Euch nicht übers Knie lege, wenn Ihr aus der Reihe tanzt!',0), +(737,0,'deDE','Ah, guten Tag. Mir scheint, Ihr seid einem kleinen Zusatzverdienst nicht abgeneigt, hmmm? Ich kann es an Euren Augen erkennen. Mein Name ist Mogul Kebok, Vorarbeiter der Unternehmungen in Azeroth, und wenn Ihr auf Reichtum aus seid, dann kann ich da vielleicht etwas arrangieren.',0), +(773,0,'deDE','$C, eh? Ich bin Krazek, Sekretär von Baron Revilgaz. Ich weiß über alles Bescheid, das in diesem Dschungel und darüber hinaus vor sich geht. Vielleicht möchtet Ihr den aktuellen Ölpreis in Ratschet wissen? Nein? Oder sucht Ihr vielleicht Arbeit? Da kann ich Euch helfen.',0), +(786,0,'deDE','Seid gegrüßt, $GJungchen:Mädel;. Mein Name ist Grelin Weißbart. Ich soll untersuchen, welche Bedrohung von den Trollen im Eisklammtal ausgeht, deren Zahl ständig anwächst. Was ich festgestellt habe? Naja, es ist schon etwas besorgniserregend...',0), +(823,0,'deDE','Guten Tag, $C. Normalerweise würde ich jetzt meine Runde machen und die Leute von Sturmwind beschützen, doch viele der Wachen von Sturmwind kämpfen in fremdem Landen. Daher mache ich jetzt hier Vertretung und setze Kopfgelder aus, wo ich doch eigentlich lieber auf Patrouille sein würde...',0), +(1071,0,'deDE','Ich habe mit der Zeit gelernt, dass es keine langweiligen Aufträge gibt. Der Schutz des Thandolübergangs hätte eine leichte Aufgabe sein sollen. Aber da der Hauptteil der Armee an der Seite der Allianz kämpft, wurden wir hier überwältigt und Dun Modr fiel.',0), +(1092,0,'deDE','Seid gegrüßt, $n.',0), +(1105,0,'deDE','Wisst Ihr, eigentlich wollte ich ja Ausgrabungsleiter werden. Aber da ich von jeher gut mit Zahlen umgehen konnte, beschloss die Gilde, dass ich am besten für die Buchhaltung geeignet sei! An jedem Tag meiner Jugend hieß es Lernen, Lernen und noch mal Lernen...',0), +(1239,0,'deDE','Wenn Ihr gewillt seid, Euch Geschichten anzuhören, die Eure Knochen zum Schlottern bringen und Euch das Fürchten lehren werden, dann holt Euch etwas zu trinken und setzt Euch hin...',0), +(1284,0,'deDE','Seid gegrüßt, $n.',0), +(1343,0,'deDE','Na, wenn das nicht $Gein junger, wilder:eine junge, wilde; $C ist, $Gden:die; zweifellos Erzählungen über meine Taten auf dem Schlachtfeld hierher geführt haben!$B$BLeider ist jetzt keine Zeit für große Geschichten, denn es gilt bedeutende Taten zu vollbringen! Wenn Ihr also auf Ruhm aus seid, dann ist Euch das Glück heute hold...',0), +(1344,0,'deDE','Auch wenn es in diesen Ruinen zurzeit recht ruhig ist, bin ich doch davon überzeugt, dass das nicht lange andauern wird. In der Zwischenzeit kann ich jemanden wie Euch jedoch gut gebrauchen. Möchtet Ihr die Forschergilde der Zwerge unterstützen?',0), +(1356,0,'deDE','Ich bin mit einer äußerst bedeutenden Aufgabe beschäftigt. Ausgrabungsleitergeschäfte. Sofern Ihr mir daher nicht etwas mindestens ebenso Wichtiges zu sagen habt, was ich bezweifeln möchte, müsst Ihr mich schon entschuldigen.',0), +(1374,0,'deDE','Verflucht sei die Brauerliga! Die Leute können sich die besten Zutaten besorgen, während wir uns hier verzweifelt ein bisschen Hopfen und Getreide zusammenkratzen müssen!$B$BWie gern würde ich denen als Ausgleich ein bisschen bittere Medizin zu schlucken geben...',0), +(1377,0,'deDE','Nicht jeder kann einen Dampfpanzer fahren. Dafür braucht man einen eisernen Griff und Nerven wie Drahtseile... Zum Glück besitze ich beides! Wie steht es mit Euch? Traut Ihr Euch? Möchtet Ihr es mir beweisen?',0), +(1428,0,'deDE','Seid gegrüßt, $n.',0), +(1495,0,'deDE','Seid gegrüßt, $C. Seid wachsam, wenn Ihr nach Osten zum Bollwerk reist. Aktuellen Spähermeldungen zufolge ist in dem Bereich eine erhöhte Aktivität der Geißel zu verzeichnen. Hier ist also Vorsicht geboten.',0), +(1499,0,'deDE','He, Ihr da! Ich hätte da ein paar Aufgaben zu vergeben und muss unbedingt kurz erklären, wie außerordentlich wichtig sie sind. Hört gut zu.',0), +(1500,0,'deDE','Ich hoffe, Ihr seid den Umständen entsprechend wohlauf.$B$BNehmt doch hier Platz und lauscht meiner Geschichte. Natürlich ist es eine Tragödie, aber hoffentlich eine, die am Ende gerächt wird!',0), +(1515,0,'deDE','Der scharlachrote Kreuzzug rückt unserer Heimat näher. Die törichten Eiferer erkennen nicht, dass die treuen Diener der dunklen Fürstin alles tun werden, um sie zu töten.',0), +(1518,0,'deDE','Die dunkle Fürstin hat die Herausforderung gestellt. Es liegt an uns, sie anzunehmen.',0), +(1646,0,'deDE','Seid gegrüßt, ich bin Baros Alexston, Stadtarchitekt von Sturmwind.',0), +(1719,0,'deDE','Hier drüben, nutzloses Pack...! Wenn Ihr etwas Sinnvolles tun wollt, dann hört genau zu!',0), +(1738,1,'deDE','Diese Schriftrollensammlung enthält verschiedene logistische und strategische Informationen sowie kodierte Nachrichten.',0), +(1748,0,'deDE','Ich bin Bolvar Fordragon, Hochlord von Sturmwind.',0), +(1937,0,'deDE','Die dunkle Fürstin hat die Herausforderung gestellt. Jetzt liegt es an der Königlichen Apothekervereinigung, eine neue Seuche zu entwickeln. Wir werden Arthas und seine jämmerliche Armee in die Knie zwingen.',0), +(1938,0,'deDE','Die Kirin Tor haben meine Warnungen in den Wind geschlagen! Die Allianz ist ein Schwindel. Arugal ist ein tollkühner Dummkopf.',0), +(1950,0,'deDE','Mein Bruder und ich sind in wichtiger Mission unterwegs, aber wir sind in diesem Bauernhaus festgenagelt. Die Todespirscher brauchen Eure Hilfe.',0), +(1952,0,'deDE','Hallo, $C. Da Ihr hier seid, wisst Ihr ja wohl, dass der Silberwald voll von unseren Feinden ist. Um zu überleben m',0), +(2080,0,'deDE','Die Entstehung von Teldrassil war ein großer Erfolg, doch jetzt muss sich die Welt neu orientieren, um wieder ins Gleichgewicht zu finden.',0), +(2086,0,'deDE','Seid gegrüßt, $n.',0), +(2094,0,'deDE','Seid gegrüßt, $C. Ich befinde mich gerade in einer etwas misslichen Lage, ich habe fast keine Bälge mehr.',0), +(2121,0,'deDE','Informationen... Mit unseren Spähern und Agenten haben wir den Informationsfluss in Lordaeron in der Hand. Bewegungen der Geißel, ihre Stellungen, nichts entgeht unseren wachsamen Augen...',0), +(2215,0,'deDE','Um der dunklen Fürstin und Varimathras zu dienen, müssen wir gegen die menschliche Plage vorgehen.',0), +(2216,0,'deDE','Wir stehen kurz vor der Entwicklung der neuen Seuche, nach der unsere dunkle Fürstin so dringend verlangt.',0), +(2263,0,'deDE','Ich hoffe, Ihr seid zum Arbeiten hergekommen, $C. Wir haben viel zu tun und von der Horde, dem Syndikat und den Ogern können wir keine Hilfe erwarten.',0), +(2498,0,'deDE','Was, Was?! Wir müssen alle einen Profit machen... und das geht nicht, wenn wir nur dumm herumstehen.',0), +(2501,0,'deDE','Eh! Lust auf eine Runde Fingerhakeln?',0), +(2700,0,'deDE','Wir auf der Zuflucht halten eines der letzten Gebiete von Stromgarde im Arathihochland. Aber wir werden zusehends bedrängt...$B$BWenn Ihr Neuigkeiten bringt, dann hoffentlich gute.',0), +(2706,0,'deDE','Dank des Kriegshäuptlings verbleibt selbst in den Ruinen unseres alten Gefängnisses noch Hoffnung, und die Horde erhebt sich erneut.',0), +(2713,1,'deDE','Dieses Holzbrett bietet Platz für primitive Steckbriefe.',0), +(2785,0,'deDE','Weg da! Bleibt zurück! Ich habe ein Paket Sprengpulver und zögere nicht, es zu benutzen! Ich sprenge uns alle in die Luft!$B$BOh, Verzeihung. Ich dachte, Ihr wäret jemand anderes...',0), +(2786,0,'deDE','Willkommen bei \'Knochengriffs Runen und Verdamnisse\', $C. Ihr dürft Euch umsehen, aber bitte fasst nichts an',0), +(2817,0,'deDE','Ihr müsst in Schwierigkeiten sein, wenn Ihr dieses Ödland durchstreift, $C. In Schwierigkeiten wie ich.$B$BOder vielleicht seid Ihr auch nur verrückt. Verrückt wie ich.',0), +(2860,0,'deDE','Es war ein ziemlich spektakulärer Abgang, kann ich Euch sagen, $C. Wir haben alles gegriffen, was nicht niet- und nagelfest war. Darum haben wir jetzt ein paar Vorräte übrig.',0), +(2910,0,'deDE','Die Bastarde haben sich nachts auf uns gestürzt, nachdem wir ordentlich gezecht hatten. Sonst hätten wir sie leicht überwältigt, das ist mal sicher.$B$BJetzt sind alle tot... bis auf einige wenige von uns.',0), +(2920,0,'deDE','He, hallo, $N.$B$BLotwil ist nicht gerade der aufmerksamste Boss, den ich je hatte. Manchmal ist er ziemlich in seine Arbeit vertieft. Dann kriegen sein Untergebenen nichts zu essen oder werden nicht bezahlt.$B$B$B$BAber deshalb solltet Ihr nicht leiden müssen.',0), +(2921,0,'deDE','Wie gut, dass Ihr vorbeikommt, $C.$B$BIch heiße Lotwil Veriatus, Gründungsmitglied der Erleuchteten Versammlung für Arkanologie, Alchimie und Ingenieurwissenschaften: Unser Streben ist, die hohen Wissenschaften von Azeroth zu einer umfassenden Schule zu verschmelzen.',0); From 236f60799cb6de78b0fd514c860cc72a47e59b7c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 30 Dec 2024 21:21:56 +0000 Subject: [PATCH 68/74] chore(DB): import pending files Referenced commit(s): b6c957307067ac6cf3b008f137aa3fdae6fca8bb --- .../update_quest_greeting1.sql => db_world/2024_12_30_01.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/update_quest_greeting1.sql => db_world/2024_12_30_01.sql} (99%) diff --git a/data/sql/updates/pending_db_world/update_quest_greeting1.sql b/data/sql/updates/db_world/2024_12_30_01.sql similarity index 99% rename from data/sql/updates/pending_db_world/update_quest_greeting1.sql rename to data/sql/updates/db_world/2024_12_30_01.sql index 24ce9c5bb..c4c677ea6 100644 --- a/data/sql/updates/pending_db_world/update_quest_greeting1.sql +++ b/data/sql/updates/db_world/2024_12_30_01.sql @@ -1,3 +1,4 @@ +-- DB update 2024_12_30_00 -> 2024_12_30_01 DELETE FROM `quest_greeting_locale` WHERE `ID` IN (234, 235, 238, 239, 240, 241, 261, 265, 272, 278, 342, 344, 381, 382, 392, 415, 464, 633, 656, 661, 714, 733, 737, 773, 786, 823, 1071, 1092, 1105, 1239, 1284, 1343, 1344, 1356, 1374, 1377, 1428, 1495, 1499, 1500, 1515, 1518, 1646, 1719, 1738, 1748, 1937, 1938, 1950, 1952, 2080, 2086, 2094, 2121, 2215, 2216, 2263, 2498, 2501, 2700, 2706, 2713, 2785, 2786, 2817, 2860, 2910, 2920, 2921) AND `locale` = 'deDE'; INSERT INTO `quest_greeting_locale` (`ID`, `type`, `locale`, `Greeting`, `VerifiedBuild`) VALUES (234,0,'deDE','In Westfall hat sich üble Verderbnis eingeschlichen. Während ich auf dem Schlachtfeld von Lordaeron meine Pflicht tat, wurden diese anständig geführten Höfe überfallen und zu Schlupfwinkeln für Schläger und Mörder umfunktioniert. Die Volksmiliz ist auf Eure Hilfe angewiesen.',0), From d6edcf810dd1d1a8df0905618264f94cd71c5f92 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Mon, 30 Dec 2024 18:56:18 -0300 Subject: [PATCH 69/74] =?UTF-8?q?fix(Scripts/PitOfSaron):=20Fix=20Scourgel?= =?UTF-8?q?ord=20Tyrannus=20not=20respawning=20afte=E2=80=A6=20(#21070)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PitOfSaron/boss_scourgelord_tyrannus.cpp | 46 +++++++++---------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp index b0de4aba5..1ea12a831 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp @@ -63,9 +63,9 @@ public: { pInstance = me->GetInstanceScript(); me->SetReactState(REACT_PASSIVE); - if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_RIMEFANG_GUID))) + if (Creature* rimefang = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_RIMEFANG_GUID))) { - c->SetCanFly(true); + rimefang->SetCanFly(true); } } @@ -76,29 +76,27 @@ public: { me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); events.Reset(); - if (me->HasReactState(REACT_AGGRESSIVE)) // Reset() called by EnterEvadeMode() - { - if (!pInstance) - return; - if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_MARTIN_OR_GORKUN_GUID))) - { - c->AI()->DoAction(1); - c->DespawnOrUnsummon(); - pInstance->SetGuidData(DATA_MARTIN_OR_GORKUN_GUID, ObjectGuid::Empty); - } - if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_RIMEFANG_GUID))) - { - c->GetMotionMaster()->Clear(); - c->GetMotionMaster()->MoveIdle(); + pInstance->SetData(DATA_TYRANNUS, NOT_STARTED); + } - c->RemoveAllAuras(); - c->UpdatePosition(1017.3f, 168.974f, 642.926f, 5.2709f, true); - c->StopMovingOnCurrentPos(); - if (Vehicle* v = c->GetVehicleKit()) - v->InstallAllAccessories(false); - } - pInstance->SetData(DATA_TYRANNUS, NOT_STARTED); + void EnterEvadeMode(EvadeReason /*why*/) override + { + if (!pInstance) + return; + + if (Creature* creature = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_MARTIN_OR_GORKUN_GUID))) + { + creature->AI()->DoAction(1); + creature->DespawnOrUnsummon(); + pInstance->SetGuidData(DATA_MARTIN_OR_GORKUN_GUID, ObjectGuid::Empty); } + + // Tyrannus is temporarily spawned as Rimefang's rider. If he evades, despawn Rimefang. + // Tyrannus will be respawned once Rimefang respawns. + if (Creature* rimefang = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_RIMEFANG_GUID))) + rimefang->DespawnOnEvade(); + + me->DespawnOrUnsummon(); } void DoAction(int32 param) override @@ -141,7 +139,7 @@ public: if (TSDistCheckPos.GetExactDist(x, y, z) > 100.0f || z > TSDistCheckPos.GetPositionZ() + 20.0f || z < TSDistCheckPos.GetPositionZ() - 20.0f) { me->SetHealth(me->GetMaxHealth()); - EnterEvadeMode(); + EnterEvadeMode(EVADE_REASON_OTHER); return; } } From e837fa84f3da80f471a8555966a495db9d70adbc Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Mon, 30 Dec 2024 23:23:46 +0100 Subject: [PATCH 70/74] fix(Scripts/ZulAman): Eagle Gauntlet behavior (#20947) --- .../rev_1734398393541318995.sql | 11 +++++ .../ZulAman/instance_zulaman.cpp | 4 ++ .../EasternKingdoms/ZulAman/zulaman.cpp | 42 ++++++------------- .../scripts/EasternKingdoms/ZulAman/zulaman.h | 1 + 4 files changed, 29 insertions(+), 29 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1734398393541318995.sql diff --git a/data/sql/updates/pending_db_world/rev_1734398393541318995.sql b/data/sql/updates/pending_db_world/rev_1734398393541318995.sql new file mode 100644 index 000000000..7694bee4e --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1734398393541318995.sql @@ -0,0 +1,11 @@ +-- +-- Eagle Trash Aggro Trigger +UPDATE `creature_template` SET `ScriptName` = '' WHERE (`entry` = 24223); +-- set spawntime to 30min Amani'shi Tempest +UPDATE `creature` SET `spawntimesecs` = 1800 WHERE (`id1` = 24549) AND (`guid` IN (89283)); +-- delete Amani'shi Wind Walker #5 next to Tempest +DELETE FROM `creature` WHERE (`id1` = 24179) AND (`guid` IN (1107)); +-- delete Amani'shi Protector #5 next to Tempest +DELETE FROM `creature` WHERE (`id1` = 24180) AND (`guid` IN (89311)); +DELETE FROM `creature_addon` WHERE `guid` IN (1107, 89311); +DELETE FROM `linked_respawn` WHERE `guid` IN (1107, 89311); diff --git a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp index abb733126..802fb0fdd 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp @@ -238,8 +238,12 @@ public: _akilzonGauntlet = NOT_STARTED; for (ObjectGuid guid : AkilzonTrash) if (Creature* creature = instance->GetCreature(guid)) + { if (!creature->IsAlive()) creature->Respawn(); + else if (creature->GetEntry() == NPC_AMINISHI_TEMPEST) + creature->AI()->DoAction(ACTION_RESET_AKILZON_GAUNTLET); + } if (Creature* creature = GetCreature(DATA_LOOKOUT)) if (creature->isMoving()) creature->Respawn(true); diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp index 83034d117..97dde689d 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp @@ -590,7 +590,6 @@ private: enum AmanishiTempest { - ACTION_START_GAUNTLET = 1, GROUP_AKILZON_GAUNTLET = 1, SPELL_SUMMON_EAGLE = 43487, SPELL_SUMMON_WARRIOR = 43486, @@ -605,6 +604,11 @@ struct npc_amanishi_tempest : public ScriptedAI { _summons.DespawnAll(); scheduler.CancelAll(); + } + + void JustEngagedWith(Unit* /*who*/) override + { + scheduler.CancelGroup(GROUP_AKILZON_GAUNTLET); scheduler.Schedule(9s, 11s, [this](TaskContext context) { DoCastVictim(SPELL_THUNDERCLAP); @@ -627,8 +631,15 @@ struct npc_amanishi_tempest : public ScriptedAI void DoAction(int32 action) override { - if (action == ACTION_START_GAUNTLET) + if (action == ACTION_START_AKILZON_GAUNTLET) ScheduleEvents(); + else if (action == ACTION_RESET_AKILZON_GAUNTLET) + Reset(); + } + + void SummonedCreatureEvade(Creature* /*summon*/) override + { + EnterEvadeMode(EVADE_REASON_OTHER); } void EnterEvadeMode(EvadeReason why) override @@ -639,7 +650,6 @@ struct npc_amanishi_tempest : public ScriptedAI void ScheduleEvents() { - me->SetInCombatWithZone(); scheduler.Schedule(29s, 53s, GROUP_AKILZON_GAUNTLET, [this](TaskContext context) { for (uint8 i = 0; i < 5; ++i) @@ -656,11 +666,6 @@ struct npc_amanishi_tempest : public ScriptedAI void UpdateAI(uint32 diff) override { scheduler.Update(diff); - if (!me->IsEngaged()) - return; - Unit* victim = me->SelectVictim(); - if (!victim || me->GetExactDist(victim) > me->GetAggroRange(victim)) - return; ScriptedAI::UpdateAI(diff); } @@ -669,26 +674,6 @@ private: SummonList _summons; }; -struct npc_eagle_trash_aggro_trigger : public ScriptedAI -{ - npc_eagle_trash_aggro_trigger(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) {} - - void MoveInLineOfSight(Unit* who) override - { - if (!me->IsWithinDist(who, 10.0f, false)) // distance not confirmed - return; - - Player* player = who->GetCharmerOrOwnerPlayerOrPlayerItself(); - if (!player || player->IsGameMaster()) - return; - - if (_instance->GetData(TYPE_AKILZON_GAUNTLET) == NOT_STARTED) - _instance->SetData(TYPE_AKILZON_GAUNTLET, IN_PROGRESS); - } -private: - InstanceScript* _instance; -}; - void AddSC_zulaman() { RegisterZulAmanCreatureAI(npc_forest_frog); @@ -697,5 +682,4 @@ void AddSC_zulaman() RegisterSpellScript(spell_ritual_of_power); RegisterZulAmanCreatureAI(npc_amanishi_lookout); RegisterZulAmanCreatureAI(npc_amanishi_tempest); - RegisterZulAmanCreatureAI(npc_eagle_trash_aggro_trigger); } diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h index bebca990c..66e3b079a 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h +++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h @@ -92,6 +92,7 @@ enum MiscIds DATA_TIMED_RUN = 0, ACTION_START_TIMED_RUN = 0, ACTION_START_AKILZON_GAUNTLET = 1, + ACTION_RESET_AKILZON_GAUNTLET = 2, GROUP_TIMED_RUN = 1 }; From 35bc0a78cedb6469ba2b3d66656544614f2b34ce Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 30 Dec 2024 22:24:48 +0000 Subject: [PATCH 71/74] chore(DB): import pending files Referenced commit(s): e837fa84f3da80f471a8555966a495db9d70adbc --- .../rev_1734398393541318995.sql => db_world/2024_12_30_02.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1734398393541318995.sql => db_world/2024_12_30_02.sql} (93%) diff --git a/data/sql/updates/pending_db_world/rev_1734398393541318995.sql b/data/sql/updates/db_world/2024_12_30_02.sql similarity index 93% rename from data/sql/updates/pending_db_world/rev_1734398393541318995.sql rename to data/sql/updates/db_world/2024_12_30_02.sql index 7694bee4e..1bd2cd5f2 100644 --- a/data/sql/updates/pending_db_world/rev_1734398393541318995.sql +++ b/data/sql/updates/db_world/2024_12_30_02.sql @@ -1,3 +1,4 @@ +-- DB update 2024_12_30_01 -> 2024_12_30_02 -- -- Eagle Trash Aggro Trigger UPDATE `creature_template` SET `ScriptName` = '' WHERE (`entry` = 24223); From 106e0ed4d2fc1148821d2d831e683ca6cbb440c8 Mon Sep 17 00:00:00 2001 From: Rocco Silipo <108557877+Rorschach91@users.noreply.github.com> Date: Tue, 31 Dec 2024 09:40:53 +0100 Subject: [PATCH 72/74] fix(DB/Creature) Scarlet Peasant SmartAI. (#21069) --- .../sql/updates/pending_db_world/Scarlet_Peasant.sql | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 data/sql/updates/pending_db_world/Scarlet_Peasant.sql diff --git a/data/sql/updates/pending_db_world/Scarlet_Peasant.sql b/data/sql/updates/pending_db_world/Scarlet_Peasant.sql new file mode 100644 index 000000000..e85d06f42 --- /dev/null +++ b/data/sql/updates/pending_db_world/Scarlet_Peasant.sql @@ -0,0 +1,12 @@ + +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 28557; + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 28557); +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 +(28557, 0, 0, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Peasant - On Reset - Set Reactstate Passive'), +(28557, 0, 1, 2, 101, 0, 100, 0, 1, 3, 3000, 0, 0, 0, 11, 51604, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Peasant - On 1 or More Players in Range - Cast \'Serverside - Stun Self\''), +(28557, 0, 2, 3, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 4, 14561, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Peasant - On 1 or More Players in Range - Play Sound 14561'), +(28557, 0, 3, 4, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 17, 431, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Peasant - On 1 or More Players in Range - Set Emote State 431'), +(28557, 0, 4, 5, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 21, 3, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Peasant - On 1 or More Players in Range - Set Orientation Closest Player'), +(28557, 0, 5, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 21, 3, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Peasant - On 1 or More Players in Range - Say Line 0'), +(28557, 0, 6, 0, 102, 0, 100, 0, 1, 3, 30000, 30000, 30000, 0, 24, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scarlet Peasant - On Less Than 1 Players in Range - Evade'); From 63bd7cdca340b90f035efe0a6bbd0ae0f7f38756 Mon Sep 17 00:00:00 2001 From: Rocco Silipo <108557877+Rorschach91@users.noreply.github.com> Date: Tue, 31 Dec 2024 09:41:47 +0100 Subject: [PATCH 73/74] fix (DB/Creature) Citizen of Havenshire waypoints and SmartAI. (#21048) --- .../Citizen_of_Havenshire.sql | 772 ++++++++++++++++++ 1 file changed, 772 insertions(+) create mode 100644 data/sql/updates/pending_db_world/Citizen_of_Havenshire.sql diff --git a/data/sql/updates/pending_db_world/Citizen_of_Havenshire.sql b/data/sql/updates/pending_db_world/Citizen_of_Havenshire.sql new file mode 100644 index 000000000..42364d73e --- /dev/null +++ b/data/sql/updates/pending_db_world/Citizen_of_Havenshire.sql @@ -0,0 +1,772 @@ + +-- Set Run Speed +UPDATE `creature_template` SET `speed_run` = 1.05 WHERE `entry` IN (28576, 28577); + +-- Remove Wrong Auras +UPDATE `creature_addon` SET `auras` = '' WHERE (`guid` IN (128916, 128921, 128925, 128927, 128966, 128969, 128972, 128975, 128980)); + +-- Remove Guids +DELETE FROM `creature` WHERE (`id1` = 28576) AND (`guid` IN (128921, 128923, 128925, 128931, 128932, 128933, 128936, 128937, 128938, 128939, 128940, 128941, 128942, 128943, 128944, 128945, 128946, 128947, 128949, 128950, 128951, 128952, 128953, 128955, 128956, 128957)); +DELETE FROM `creature_addon` WHERE (`guid` IN (128921, 128923, 128925, 128931, 128932, 128933, 128936, 128937, 128938, 128939, 128940, 128941, 128942, 128943, 128944, 128945, 128946, 128947, 128949, 128950, 128951, 128952, 128953, 128955, 128956, 128957)); +DELETE FROM `creature` WHERE (`id1` = 28577) AND (`guid` IN (128969, 128971, 128972, 128974, 128975, 128977, 128982, 128983, 128984, 128985, 128987, 128988, 128989, 128990, 128994, 128995, 128996, 128997, 128998, 128999, 129000, 129001)); +DELETE FROM `creature_addon` WHERE (`guid` IN (128969, 128971, 128972, 128974, 128975, 128977, 128982, 128983, 128984, 128985, 128987, 128988, 128989, 128990, 128994, 128995, 128996, 128997, 128998, 128999, 129000, 129001)); + +-- Change Wander Distance and Movement Type +UPDATE `creature` SET `wander_distance` = 0, `MovementType` = 0 WHERE `guid` IN (128927, 128928, 128930, 128922, 128924, 128954, 128929, 128934, 128926, 128920, 128916, 128935, 128948, 128910, 128911, 128912, 128913, 128914, 128915, 128917, 128918, 128919) AND `id1` = 28576; +UPDATE `creature` SET `wander_distance` = 0, `MovementType` = 0 WHERE `guid` IN (128973, 128980, 128976, 128978, 128981, 128968, 128993, 128979, 128986, 128970, 128966, 128991, 128992, 128958, 128959, 128960, 128961, 128962, 128963, 128964, 128965, 128967) AND `id1` = 28577; + +-- Change Positions (sniffed values) +UPDATE `creature` SET `position_x` = 2083.5244, `position_y` = -5713.8477, `position_z` = 100.62685, `orientation` = 5.6665, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128922, 28576), (128979, 28577)); +UPDATE `creature` SET `position_x` = 1959.51, `position_y` = -5809.41, `position_z` = 101.222, `orientation` = 1.48353, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128927, 28576), (128986, 28577)); +UPDATE `creature` SET `position_x` = 2104.597, `position_y` = -5852.6714, `position_z` = 102.65492, `orientation` = 3.7433, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128928, 28576), (128970, 28577)); +UPDATE `creature` SET `position_x` = 2092.7227, `position_y` = -5778.4004, `position_z` = 99.17004, `orientation` = 2.3495708, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128930, 28576), (128966, 28577)); +UPDATE `creature` SET `position_x` = 1965.97, `position_y` = -5833.76, `position_z` = 100.843, `orientation` = 4.08407, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128973, 28577), (128924, 28576)); +UPDATE `creature` SET `position_x` = 2126.9946, `position_y` = -5881.348, `position_z` = 102.23642, `orientation` = 2.1005676, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128976, 28577), (128954, 28576)); +UPDATE `creature` SET `position_x` = 2056.6086, `position_y` = -5754.899, `position_z` = 98.03694, `orientation` = 3.0397918, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128978, 28577), (128929, 28576)); +UPDATE `creature` SET `position_x` = 2067.315, `position_y` = -5915.171, `position_z` = 106.67783, `orientation` = 3.5101542, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128980, 28577), (128934, 28576)); +UPDATE `creature` SET `position_x` = 1927.4072, `position_y` = -5807.218, `position_z` = 100.20784, `orientation` = 5.9593172, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128981, 28577), (128926, 28576)); +UPDATE `creature` SET `position_x` = 2160.4504, `position_y` = -5793.529, `position_z` = 100.928505, `orientation` = 2.87087, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128968, 28577), (128920, 28576)); +UPDATE `creature` SET `position_x` = 2144.6318, `position_y` = -5754.6543, `position_z` = 99.69839, `orientation` = 5.02815, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128993, 28577), (128916, 28576)); +UPDATE `creature` SET `position_x` = 2145.1165, `position_y` = -5919.1206, `position_z` = 98.640945, `orientation` = 1.53392, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128991, 28577), (128935, 28576)); +UPDATE `creature` SET `position_x` = 2254.762, `position_y` = -5809.216, `position_z` = 101.03145, `orientation` = 2.50164, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128992, 28577), (128948, 28576)); +UPDATE `creature` SET `position_x` = 2182.8823, `position_y` = -5747.591, `position_z` = 101.89203, `orientation` = 4.89732, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128958, 28577), (128910, 28576)); +UPDATE `creature` SET `position_x` = 2220.754, `position_y` = -5868.3633, `position_z` = 101.3891, `orientation` = 3.23552, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128959, 28577), (128911, 28576)); +UPDATE `creature` SET `position_x` = 2221.779, `position_y` = -5904.03, `position_z` = 101.254715, `orientation` = 1.18682, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128960, 28577), (128912, 28576)); +UPDATE `creature` SET `position_x` = 2197.7969, `position_y` = -5908.8823, `position_z` = 100.96651, `orientation` = 2.43027, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128961, 28577), (128913, 28576)); +UPDATE `creature` SET `position_x` = 2272.2073, `position_y` = -5888.6865, `position_z` = 100.51772, `orientation` = 3.63413, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128962, 28577), (128914, 28576)); +UPDATE `creature` SET `position_x` = 2286.7288, `position_y` = -5786.4834, `position_z` = 101.393166, `orientation` = 2.39381, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128963, 28577), (128915, 28576)); +UPDATE `creature` SET `position_x` = 2316.1199, `position_y` = -5880.3145, `position_z` = 100.80853, `orientation` = 2.82385, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128964, 28577), (128917, 28576)); +UPDATE `creature` SET `position_x` = 2172.77, `position_y` = -5739.8115, `position_z` = 101.75742, `orientation` = 4.92786, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128965, 28577), (128918, 28576)); +UPDATE `creature` SET `position_x` = 1959.3444, `position_y` = -5881.302, `position_z` = 101.192764, `orientation` = 2.11768, `spawntimesecs` = 120, `VerifiedBuild` = 58158 WHERE (`guid`, `id1`) IN ((128967, 28577), (128919, 28576)); + +-- Waypoints +DELETE FROM `waypoint_data` WHERE `id` IN (12897300); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(12897300, 1, 1944.7305 , -5843.9497 , 100.4848, NULL, 0, 1, 0, 100, 0), +(12897300, 2, 1931.9498 , -5845.102 , 100.816826, NULL, 0, 1, 0, 100, 0), +(12897300, 3, 1903.3739 , -5842.505 , 100.84671, NULL, 0, 1, 0, 100, 0), +(12897300, 4, 1888.0885 , -5837.739 , 101.21175, NULL, 0, 1, 0, 100, 0), +(12897300, 5, 1848.5492 , -5823.535 , 100.22142, NULL, 0, 1, 0, 100, 0), +(12897300, 6, 1801.6525 , -5819.4927 , 108.76074, NULL, 0, 1, 0, 100, 0), +(12897300, 7, 1772.8551 , -5820.0854 , 115.72131, NULL, 0, 1, 0, 100, 0), +(12897300, 8, 1735.2579 , -5820.85 , 116.11808, NULL, 0, 1, 0, 100, 0), +(12897300, 9, 1716.0979 , -5821.3535 , 116.12192, NULL, 0, 1, 0, 100, 0), +(12897300, 10, 1707.7023 , -5817.693 , 116.06911, NULL, 0, 1, 0, 100, 0), +(12897300, 11, 1671.9619 , -5790.0522 , 116.16962, NULL, 0, 1, 0, 100, 0), +(12897300, 12, 1635.5886 , -5779.9287 , 116.1127, NULL, 0, 1, 0, 100, 0), +(12897300, 13, 1606.2896 , -5759.3193 , 118.430176, NULL, 0, 1, 0, 100, 0), +(12897300, 14, 1588.4744 , -5725.8613 , 121.6682, NULL, 0, 1, 0, 100, 0), +(12897300, 15, 1586.0789 , -5721.0986 , 121.72284, NULL, 0, 1, 0, 100, 0), +(12897300, 16, 1576.3289 , -5724.8486 , 121.22284, NULL, 0, 1, 0, 100, 0); + +DELETE FROM `waypoint_data` WHERE `id` IN (12892700); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(12892700, 1, 1969.4949 , -5841.5913 , 100.70409, NULL, 0, 1, 0, 100, 0), +(12892700, 2, 1967.9069 , -5879.0483 , 100.99721, NULL, 0, 1, 0, 100, 0), +(12892700, 3, 1941.4285 , -5904.2793 , 101.0126, NULL, 0, 1, 0, 100, 0), +(12892700, 4, 1905.0734 , -5910.6533 , 101.74708, NULL, 0, 1, 0, 100, 0), +(12892700, 5, 1867.1259 , -5916.288 , 104.24944, NULL, 0, 1, 0, 100, 0), +(12892700, 6, 1830.589 , -5926.684 , 110.515434, NULL, 0, 1, 0, 100, 0), +(12892700, 7, 1797.2595 , -5929.0654 , 116.07023, NULL, 0, 1, 0, 100, 0); + +DELETE FROM `waypoint_data` WHERE `id` IN (12898000); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(12898000, 1, 2040.1895, -5908.4395, 105.352394, NULL, 0, 1, 0, 100, 0), +(12898000, 2, 2022.1426, -5907.8115, 105.09137, NULL, 0, 1, 0, 100, 0), +(12898000, 3, 1998.4114, -5904.9033, 103.78064, NULL, 0, 1, 0, 100, 0), +(12898000, 4, 1959.7418, -5905.0034, 102.12171, NULL, 0, 1, 0, 100, 0), +(12898000, 5, 1930.9708, -5908.3857, 101.310776, NULL, 0, 1, 0, 100, 0), +(12898000, 6, 1882.8198, -5912.3, 103.69942, NULL, 0, 1, 0, 100, 0), +(12898000, 7, 1845.4309, -5921.158, 106.55255, NULL, 0, 1, 0, 100, 0), +(12898000, 8, 1827.6106, -5926.33, 111.30682, NULL, 0, 1, 0, 100, 0), +(12898000, 9, 1799.338, -5929.2344, 115.8991, NULL, 0, 1, 0, 100, 0), +(12898000, 10, 1763.3955, -5918.088, 116.10021, NULL, 0, 1, 0, 100, 0), +(12898000, 11, 1728.2671, -5901.347, 116.121765, NULL, 0, 1, 0, 100, 0), +(12898000, 12, 1703.8771, -5885.782, 116.13325, NULL, 0, 1, 0, 100, 0), +(12898000, 13, 1689.8062, -5861.2275, 116.30095, NULL, 0, 1, 0, 100, 0), +(12898000, 14, 1658.6609, -5843.833, 116.13829, NULL, 0, 1, 0, 100, 0), +(12898000, 15, 1654.2504, -5842.74, 116.59402, NULL, 0, 1, 0, 100, 0), +(12898000, 16, 1643.8115, -5842.8213, 117.292656, NULL, 0, 1, 0, 100, 0), +(12898000, 17, 1643.0146, -5856.5806, 117.29288, NULL, 0, 1, 0, 100, 0), +(12898000, 18, 1644.2047, -5856.674, 117.29288, NULL, 0, 1, 0, 100, 0), +(12898000, 19, 1646.0004, -5846.99, 122.09402, NULL, 0, 1, 0, 100, 0); + +DELETE FROM `waypoint_data` WHERE `id` IN (12892800); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(12892800, 1, 2066.441, -5892.1685, 104.63345, NULL, 0, 1, 0, 100, 0), +(12892800, 2, 2040.8818, -5904.998, 105.20388, NULL, 0, 1, 0, 100, 0), +(12892800, 3, 2015.8793, -5906.8616, 104.558655, NULL, 0, 1, 0, 100, 0), +(12892800, 4, 1992.981, -5905.2583, 103.64758, NULL, 0, 1, 0, 100, 0), +(12892800, 5, 1963.8256, -5904.36, 102.39117, NULL, 0, 1, 0, 100, 0), +(12892800, 6, 1915.5765, -5907.2207, 101.523865, NULL, 0, 1, 0, 100, 0), +(12892800, 7, 1877.1783, -5911.365, 103.98798, NULL, 0, 1, 0, 100, 0), +(12892800, 8, 1840.3024, -5922.0996, 107.65767, NULL, 0, 1, 0, 100, 0), +(12892800, 9, 1813.3237, -5929.456, 114.523346, NULL, 0, 1, 0, 100, 0), +(12892800, 10, 1776.1013, -5923.899, 116.10615, NULL, 0, 1, 0, 100, 0), +(12892800, 11, 1761.0944, -5918.087, 116.12125, NULL, 0, 1, 0, 100, 0), +(12892800, 12, 1761.0944, -5918.087, 116.12125, NULL, 0, 1, 0, 100, 0), +(12892800, 13, 1706.6926, -5886.3516, 116.134094, NULL, 0, 1, 0, 100, 0), +(12892800, 14, 1690.5028, -5875.701, 116.15037, NULL, 0, 1, 0, 100, 0), +(12892800, 15, 1672.8468, -5874.1313, 116.15768, NULL, 0, 1, 0, 100, 0), +(12892800, 16, 1656.9258, -5879.2573, 117.14002, NULL, 0, 1, 0, 100, 0); + +DELETE FROM `waypoint_data` WHERE `id` IN (12897600); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(12897600, 1, 2111.3591, -5871.938, 102.830246, NULL, 0, 1, 0, 100, 0), +(12897600, 2, 2074.83, -5891.751, 104.46708, NULL, 0, 1, 0, 100, 0), +(12897600, 3, 2047.8912, -5902.0273, 105.27161, NULL, 0, 1, 0, 100, 0), +(12897600, 4, 2018.3429, -5907.862, 104.67937, NULL, 0, 1, 0, 100, 0), +(12897600, 5, 1997.4357, -5905.4326, 103.8081, NULL, 0, 1, 0, 100, 0), +(12897600, 6, 1961.94, -5904.3047, 102.270355, NULL, 0, 1, 0, 100, 0), +(12897600, 7, 1913.7784, -5907.3794, 101.558586, NULL, 0, 1, 0, 100, 0), +(12897600, 8, 1875.4719, -5911.5635, 104.01149, NULL, 0, 1, 0, 100, 0), +(12897600, 9, 1838.9071, -5922.575, 107.9482, NULL, 0, 1, 0, 100, 0), +(12897600, 10, 1811.834, -5929.828, 114.76414, NULL, 0, 1, 0, 100, 0), +(12897600, 11, 1774.6315, -5923.45, 116.10475, NULL, 0, 1, 0, 100, 0), +(12897600, 12, 1747.9906, -5912.2446, 116.11488, NULL, 0, 1, 0, 100, 0), +(12897600, 13, 1706.5342, -5887.2197, 116.13313, NULL, 0, 1, 0, 100, 0), +(12897600, 14, 1690.7845, -5875.925, 116.14969, NULL, 0, 1, 0, 100, 0), +(12897600, 15, 1676.5111, -5873.307, 116.164276, NULL, 0, 1, 0, 100, 0), +(12897600, 16, 1676.5111, -5873.307, 116.164276, NULL, 0, 1, 0, 100, 0), +(12897600, 17, 1657.8718, -5880.3726, 117.14161, NULL, 0, 1, 0, 100, 0); + +DELETE FROM `waypoint_data` WHERE `id` IN (12893000); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(12893000, 1, 2070.2095, -5762.7603, 99.81166, NULL, 0, 1, 0, 100, 0), +(12893000, 2, 2070.2095, -5762.7603, 99.81166, NULL, 0, 1, 0, 100, 0), +(12893000, 3, 1994.7286, -5754.8096, 101.051895, NULL, 0, 1, 0, 100, 0), +(12893000, 4, 1978.1233, -5761.267, 100.05591, NULL, 0, 1, 0, 100, 0), +(12893000, 5, 1975.6188, -5775.5063, 100.50737, NULL, 0, 1, 0, 100, 0), +(12893000, 6, 1957.5121, -5804.2607, 101.00263, NULL, 0, 1, 0, 100, 0), +(12893000, 7, 1931.0342, -5809.3525, 100.24758, NULL, 0, 1, 0, 100, 0), +(12893000, 8, 1902.3887, -5812.0005, 100.822266, NULL, 0, 1, 0, 100, 0), +(12893000, 9, 1854.5596, -5817.096, 100.11816, NULL, 0, 1, 0, 100, 0), +(12893000, 10, 1825.8574, -5819.058, 102.42384, NULL, 0, 1, 0, 100, 0), +(12893000, 11, 1797.9662, -5819.641, 109.77238, NULL, 0, 1, 0, 100, 0), +(12893000, 12, 1760.0563, -5818.603, 116.11024, NULL, 0, 1, 0, 100, 0), +(12893000, 13, 1731.8124, -5824.739, 116.122055, NULL, 0, 1, 0, 100, 0), +(12893000, 14, 1695.5244, -5833.4883, 116.13347, NULL, 0, 1, 0, 100, 0), +(12893000, 15, 1677.6709, -5833.4097, 116.27008, NULL, 0, 1, 0, 100, 0), +(12893000, 16, 1664.9114, -5810.619, 116.269135, NULL, 0, 1, 0, 100, 0), +(12893000, 17, 1651.6998, -5803.006, 117.191055, NULL, 0, 1, 0, 100, 0); + +DELETE FROM `waypoint_data` WHERE `id` IN (12897800); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(12897800, 1, 2023.7551, -5751.5454, 99.346756, NULL, 0, 1, 0, 100, 0), +(12897800, 2, 1976.9875, -5752.822, 99.495636, NULL, 0, 1, 0, 100, 0), +(12897800, 3, 1939.8892, -5760.4897, 104.04903, NULL, 0, 1, 0, 100, 0), +(12897800, 4, 1921.4534, -5766.0054, 103.05617, NULL, 0, 1, 0, 100, 0), +(12897800, 5, 1902.7848, -5806.5317, 100.9096, NULL, 0, 1, 0, 100, 0), +(12897800, 6, 1871.4408, -5841.7896, 101.79826, NULL, 0, 1, 0, 100, 0), +(12897800, 7, 1871.3506, -5868.6646, 103.00215, NULL, 0, 1, 0, 100, 0), +(12897800, 8, 1869.5706, -5907.1045, 103.911934, NULL, 0, 1, 0, 100, 0), +(12897800, 9, 1829.5681, -5925.896, 110.61987, NULL, 0, 1, 0, 100, 0), +(12897800, 10, 1811.7615, -5931.8643, 114.946075, NULL, 0, 1, 0, 100, 0), +(12897800, 11, 1783.5422, -5928.593, 116.11073, NULL, 0, 1, 0, 100, 0), +(12897800, 12, 1766.4922, -5933.464, 116.12873, NULL, 0, 1, 0, 100, 0), +(12897800, 13, 1742.8866, -5964.3276, 117.121796, NULL, 0, 1, 0, 100, 0); + +DELETE FROM `waypoint_data` WHERE `id` IN (12898100); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(12898100, 1, 1951.9263, -5815.4497, 101.04118, NULL, 0, 1, 0, 100, 0), +(12898100, 2, 1970.7544, -5844.5786, 100.687996, NULL, 0, 1, 0, 100, 0), +(12898100, 3, 1967.2448, -5881.7847, 101.34556, NULL, 0, 1, 0, 100, 0), +(12898100, 4, 1938.9346, -5905.942, 101.04604, NULL, 0, 1, 0, 100, 0), +(12898100, 5, 1902.1019, -5910.5957, 101.783394, NULL, 0, 1, 0, 100, 0), +(12898100, 6, 1864.4154, -5916.9707, 104.330055, NULL, 0, 1, 0, 100, 0), +(12898100, 7, 1828.0709, -5927.4385, 111.26059, NULL, 0, 1, 0, 100, 0), +(12898100, 8, 1797.2505, -5929.193, 116.19281, NULL, 0, 1, 0, 100, 0); + +DELETE FROM `waypoint_data` WHERE `id` IN (12892200); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(12892200, 1, 2094.0906, -5834.092, 102.69047, NULL, 0, 1, 0, 100, 0), +(12892200, 2, 2079.626, -5841.1475, 103.4521, NULL, 0, 1, 0, 100, 0), +(12892200, 3, 2035.0693, -5845.4404, 100.44537, NULL, 0, 1, 0, 100, 0), +(12892200, 4, 2006.8013, -5844.5874, 100.6099, NULL, 0, 1, 0, 100, 0), +(12892200, 5, 2000.3555, -5844.169, 100.701965, NULL, 0, 1, 0, 100, 0), +(12892200, 6, 1946.4022, -5848.609, 100.432556, NULL, 0, 1, 0, 100, 0), +(12892200, 7, 1909.1177, -5846.7256, 100.54386, NULL, 0, 1, 0, 100, 0), +(12892200, 8, 1874.3818, -5830.268, 101.104195, NULL, 0, 1, 0, 100, 0), +(12892200, 9, 1849.9789, -5822.343, 100.16639, NULL, 0, 1, 0, 100, 0), +(12892200, 10, 1791.5347, -5817.185, 111.733925, NULL, 0, 1, 0, 100, 0), +(12892200, 11, 1754.2554, -5817.1816, 116.08976, NULL, 0, 1, 0, 100, 0), +(12892200, 12, 1748.3037, -5806.4995, 117.35039, NULL, 0, 1, 0, 100, 0); + +DELETE FROM `waypoint_data` WHERE `id` IN (12896800); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(12896800, 1, 2013.9696, -5750.505, 99.70143, NULL, 0, 1, 0, 100, 0), +(12896800, 2, 1972.1002, -5753.1313, 99.956764, NULL, 0, 1, 0, 100, 0), +(12896800, 3, 1930.2598, -5762.677, 103.71254, NULL, 0, 1, 0, 100, 0), +(12896800, 4, 1911.7079, -5769.6855, 103.2831, NULL, 0, 1, 0, 100, 0), +(12896800, 5, 1900.9596, -5814.0117, 100.851074, NULL, 0, 1, 0, 100, 0), +(12896800, 6, 1867.4998, -5845.516, 102.06406, NULL, 0, 1, 0, 100, 0), +(12896800, 7, 1872.8259, -5877.5146, 103.11753, NULL, 0, 1, 0, 100, 0), +(12896800, 8, 1868.8295, -5913.8647, 104.1411, NULL, 0, 1, 0, 100, 0), +(12896800, 9, 1824.596, -5927.4673, 112.021965, NULL, 0, 1, 0, 100, 0), +(12896800, 10, 1806.9615, -5933.51, 115.49063, NULL, 0, 1, 0, 100, 0), +(12896800, 11, 1775.8497, -5926.973, 116.12056, NULL, 0, 1, 0, 100, 0), +(12896800, 12, 1743.2236, -5964.2686, 117.110565, NULL, 0, 1, 0, 100, 0); + +DELETE FROM `waypoint_data` WHERE `id` IN (12899300); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(12899300, 1, 2076.472, -5888.584, 104.19423, NULL, 0, 1, 0, 100, 0), +(12899300, 2, 2041.5881, -5906.801, 105.34805, NULL, 0, 1, 0, 100, 0), +(12899300, 3, 2024.7155, -5907.803, 104.91816, NULL, 0, 1, 0, 100, 0), +(12899300, 4, 2004.056, -5904.8228, 103.98675, NULL, 0, 1, 0, 100, 0), +(12899300, 5, 1994.0098, -5904.212, 103.83737, NULL, 0, 1, 0, 100, 0), +(12899300, 6, 1975.0098, -5903.212, 103.33737, NULL, 0, 1, 0, 100, 0), +(12899300, 7, 1960.9049, -5902.596, 102.14691, NULL, 0, 1, 0, 100, 0), +(12899300, 8, 1920.0485, -5909.797, 101.558655, NULL, 0, 1, 0, 100, 0), +(12899300, 9, 1886.3186, -5910.0615, 103.367516, NULL, 0, 1, 0, 100, 0), +(12899300, 10, 1871.5569, -5910.3486, 104.01594, NULL, 0, 1, 0, 100, 0), +(12899300, 11, 1828.5173, -5925.0347, 110.76521, NULL, 0, 1, 0, 100, 0), +(12899300, 12, 1796.468, -5930.4634, 116.01326, NULL, 0, 1, 0, 100, 0), +(12899300, 13, 1756.4623, -5915.221, 116.10086, NULL, 0, 1, 0, 100, 0), +(12899300, 14, 1716.3547, -5893.5947, 116.14236, NULL, 0, 1, 0, 100, 0), +(12899300, 15, 1682.9327, -5873.7715, 116.17101, NULL, 0, 1, 0, 100, 0), +(12899300, 16, 1663.3423, -5876.8574, 117.09895, NULL, 0, 1, 0, 100, 0); + +DELETE FROM `waypoint_data` WHERE `id` IN (12899100); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(12899100, 1, 2133.4194, -5890.052, 102.231575, NULL, 0, 1, 0, 100, 0), +(12899100, 2, 2122.249, -5838.9604, 101.52284, NULL, 0, 1, 0, 100, 0), +(12899100, 3, 2100.3472, -5814.198, 100.14385, NULL, 0, 1, 0, 100, 0), +(12899100, 4, 2076.754, -5783.5723, 101.04958, NULL, 0, 1, 0, 100, 0), +(12899100, 5, 2058.3276, -5756.188, 98.141235, NULL, 0, 1, 0, 100, 0), +(12899100, 6, 2017.8334, -5758.0444, 100.78644, NULL, 0, 1, 0, 100, 0), +(12899100, 7, 1987.5137, -5753.7964, 100.69717, NULL, 0, 1, 0, 100, 0), +(12899100, 8, 1970.6337, -5767.217, 100.53471, NULL, 0, 1, 0, 100, 0), +(12899100, 9, 1979.3994, -5781.793, 100.605316, NULL, 0, 1, 0, 100, 0), +(12899100, 10, 1951.6432, -5810.2803, 101.017456, NULL, 0, 1, 0, 100, 0), +(12899100, 11, 1918.3981, -5808.7803, 100.12152, NULL, 0, 1, 0, 100, 0), +(12899100, 12, 1891.5178, -5814.1875, 101.82555, NULL, 0, 1, 0, 100, 0), +(12899100, 13, 1843.686, -5817.9766, 100.21717, NULL, 0, 1, 0, 100, 0), +(12899100, 14, 1820.1938, -5819.423, 103.83345, NULL, 0, 1, 0, 100, 0), +(12899100, 15, 1786.3748, -5819.7363, 113.102936, NULL, 0, 1, 0, 100, 0), +(12899100, 16, 1755.2192, -5818.3926, 116.12125, NULL, 0, 1, 0, 100, 0), +(12899100, 17, 1726.4553, -5826.191, 116.12224, NULL, 0, 1, 0, 100, 0), +(12899100, 18, 1691.1974, -5835.975, 116.13765, NULL, 0, 1, 0, 100, 0), +(12899100, 19, 1671.5693, -5832.2524, 116.32982, NULL, 0, 1, 0, 100, 0), +(12899100, 20, 1663.0612, -5804.608, 116.12191, NULL, 0, 1, 0, 100, 0), +(12899100, 21, 1650.4883, -5802.892, 117.11298, NULL, 0, 1, 0, 100, 0); + +DELETE FROM `waypoint_data` WHERE `id` IN (12899200); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(12899200, 1, 2208.9922, -5774.83, 101.751114, NULL, 0, 1, 0, 100, 0), +(12899200, 2, 2180.3252, -5769.429, 101.35872, NULL, 0, 1, 0, 100, 0), +(12899200, 3, 2159.842, -5798.3203, 101.017365, NULL, 0, 1, 0, 100, 0), +(12899200, 4, 2143.869, -5819.368, 100.95576, NULL, 0, 1, 0, 100, 0), +(12899200, 5, 2130.524, -5854.802, 101.66334, NULL, 0, 1, 0, 100, 0), +(12899200, 6, 2099.8154, -5874.7124, 103.43926, NULL, 0, 1, 0, 100, 0), +(12899200, 7, 2058.2124, -5898.143, 105.209, NULL, 0, 1, 0, 100, 0), +(12899200, 8, 2018.2173, -5908.242, 104.687775, NULL, 0, 1, 0, 100, 0), +(12899200, 9, 1980.6598, -5904.7993, 103.00401, NULL, 0, 1, 0, 100, 0), +(12899200, 10, 1951.6602, -5904.4023, 101.53832, NULL, 0, 1, 0, 100, 0), +(12899200, 11, 1916.6315, -5907.4443, 101.529045, NULL, 0, 1, 0, 100, 0), +(12899200, 12, 1874.3184, -5912.4497, 104.05506, NULL, 0, 1, 0, 100, 0), +(12899200, 13, 1830.64, -5924.63, 110.22774, NULL, 0, 1, 0, 100, 0), +(12899200, 14, 1799.2496, -5933.987, 115.95625, NULL, 0, 1, 0, 100, 0), +(12899200, 15, 1756.3352, -5918.8296, 116.11929, NULL, 0, 1, 0, 100, 0), +(12899200, 16, 1731.1982, -5905.51, 116.127594, NULL, 0, 1, 0, 100, 0), +(12899200, 17, 1719.0509, -5885.116, 116.58339, NULL, 0, 1, 0, 100, 0), +(12899200, 18, 1727.4645, -5872.8423, 116.125916, NULL, 0, 1, 0, 100, 0), +(12899200, 19, 1733.1125, -5871.979, 116.641304, NULL, 0, 1, 0, 100, 0), +(12899200, 20, 1739.6682, -5873.1895, 116.643486, NULL, 0, 1, 0, 100, 0), +(12899200, 21, 1739.8035, -5879.1963, 116.66808, NULL, 0, 1, 0, 100, 0), +(12899200, 22, 1750.481, -5878.4556, 116.03192, NULL, 0, 1, 0, 100, 0); + +DELETE FROM `waypoint_data` WHERE `id` IN (12895800); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(12895800, 1, 2112.2366, -5870.4365, 102.70522, NULL, 0, 1, 0, 100, 0), +(12895800, 2, 2076.472, -5888.584, 104.19423, NULL, 0, 1, 0, 100, 0), +(12895800, 3, 2041.5881, -5906.801, 105.34805, NULL, 0, 1, 0, 100, 0), +(12895800, 4, 2022.9702, -5905.5884, 104.894196, NULL, 0, 1, 0, 100, 0), +(12895800, 5, 2004.056, -5904.8228, 103.98675, NULL, 0, 1, 0, 100, 0), +(12895800, 6, 1960.9049, -5902.596, 102.14691, NULL, 0, 1, 0, 100, 0), +(12895800, 7, 1920.0485, -5909.797, 101.558655, NULL, 0, 1, 0, 100, 0), +(12895800, 8, 1871.5569, -5910.3486, 104.01594, NULL, 0, 1, 0, 100, 0), +(12895800, 9, 1828.5173, -5925.0347, 110.76521, NULL, 0, 1, 0, 100, 0), +(12895800, 10, 1796.468, -5930.4634, 116.01326, NULL, 0, 1, 0, 100, 0), +(12895800, 11, 1756.4623, -5915.221, 116.10086, NULL, 0, 1, 0, 100, 0), +(12895800, 12, 1716.3547, -5893.5947, 116.14236, NULL, 0, 1, 0, 100, 0), +(12895800, 13, 1682.9327, -5873.7715, 116.17101, NULL, 0, 1, 0, 100, 0), +(12895800, 14, 1663.3423, -5876.8574, 117.27307, NULL, 0, 1, 0, 100, 0); + +DELETE FROM `waypoint_data` WHERE `id` IN (12895900); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(12895900, 1, 2097.34, -5841.3203, 102.67261, NULL, 0, 1, 0, 100, 0), +(12895900, 2, 2066.8403, -5841.029, 102.287506, NULL, 0, 1, 0, 100, 0), +(12895900, 3, 2029.0686, -5846.0244, 100.455025, NULL, 0, 1, 0, 100, 0), +(12895900, 4, 1993.8956, -5843.7485, 100.748825, NULL, 0, 1, 0, 100, 0), +(12895900, 5, 1962.1233, -5843.173, 100.5741, NULL, 0, 1, 0, 100, 0), +(12895900, 6, 1935.0837, -5849.48, 101.044945, NULL, 0, 1, 0, 100, 0), +(12895900, 7, 1904.2611, -5846.199, 100.77372, NULL, 0, 1, 0, 100, 0), +(12895900, 8, 1867.7396, -5826.739, 100.54382, NULL, 0, 1, 0, 100, 0), +(12895900, 9, 1831.8232, -5817.8496, 101.37269, NULL, 0, 1, 0, 100, 0), +(12895900, 10, 1786.0167, -5816.726, 113.24113, NULL, 0, 1, 0, 100, 0), +(12895900, 11, 1746.1085, -5817.3066, 116.121925, NULL, 0, 1, 0, 100, 0), +(12895900, 12, 1747.8519, -5805.8174, 117.27875, NULL, 0, 1, 0, 100, 0); + +DELETE FROM `waypoint_data` WHERE `id` IN (12896000); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(12896000, 1, 2056.6086, -5754.899, 98.03696, NULL, 0, 1, 0, 100, 0), +(12896000, 2, 2013.9696, -5750.505, 99.70143, NULL, 0, 1, 0, 100, 0), +(12896000, 3, 1972.1002, -5753.1313, 99.956764, NULL, 0, 1, 0, 100, 0), +(12896000, 4, 1930.2598, -5762.677, 103.71254, NULL, 0, 1, 0, 100, 0), +(12896000, 5, 1911.7079, -5769.6855, 103.2831, NULL, 0, 1, 0, 100, 0), +(12896000, 6, 1900.9596, -5814.0117, 100.851074, NULL, 0, 1, 0, 100, 0), +(12896000, 7, 1867.4998, -5845.516, 102.06406, NULL, 0, 1, 0, 100, 0), +(12896000, 8, 1872.8259, -5877.5146, 103.11753, NULL, 0, 1, 0, 100, 0), +(12896000, 9, 1868.8295, -5913.8647, 104.1411, NULL, 0, 1, 0, 100, 0), +(12896000, 10, 1824.596, -5927.4673, 112.021965, NULL, 0, 1, 0, 100, 0), +(12896000, 11, 1806.9615, -5933.51, 115.49063, NULL, 0, 1, 0, 100, 0), +(12896000, 12, 1775.8497, -5926.973, 116.12056, NULL, 0, 1, 0, 100, 0), +(12896000, 13, 1755.8041, -5940.877, 116.13806, NULL, 0, 1, 0, 100, 0), +(12896000, 14, 1743.2236, -5964.2686, 117.27308, NULL, 0, 1, 0, 100, 0); + +DELETE FROM `waypoint_data` WHERE `id` IN (12896100); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(12896100, 1, 2092.1965, -5774.9946, 99.134636, NULL, 0, 1, 0, 100, 0), +(12896100, 2, 2058.3276, -5756.188, 98.141235, NULL, 0, 1, 0, 100, 0), +(12896100, 3, 2017.8334, -5758.0444, 100.78644, NULL, 0, 1, 0, 100, 0), +(12896100, 4, 1987.5137, -5753.7964, 100.69717, NULL, 0, 1, 0, 100, 0), +(12896100, 5, 1970.6337, -5767.217, 100.53471, NULL, 0, 1, 0, 100, 0), +(12896100, 6, 1979.3994, -5781.793, 100.605316, NULL, 0, 1, 0, 100, 0), +(12896100, 7, 1951.6432, -5810.2803, 101.017456, NULL, 0, 1, 0, 100, 0), +(12896100, 8, 1918.3981, -5808.7803, 100.12152, NULL, 0, 1, 0, 100, 0), +(12896100, 9, 1891.5178, -5814.1875, 101.82555, NULL, 0, 1, 0, 100, 0), +(12896100, 10, 1843.686, -5817.9766, 100.21717, NULL, 0, 1, 0, 100, 0), +(12896100, 11, 1820.1938, -5819.423, 103.83345, NULL, 0, 1, 0, 100, 0), +(12896100, 12, 1786.3748, -5819.7363, 113.102936, NULL, 0, 1, 0, 100, 0), +(12896100, 13, 1755.2192, -5818.3926, 116.12125, NULL, 0, 1, 0, 100, 0), +(12896100, 14, 1726.4553, -5826.191, 116.12224, NULL, 0, 1, 0, 100, 0), +(12896100, 15, 1691.1974, -5835.975, 116.13765, NULL, 0, 1, 0, 100, 0), +(12896100, 16, 1671.5693, -5832.2524, 116.32982, NULL, 0, 1, 0, 100, 0), +(12896100, 17, 1663.0612, -5804.608, 116.12191, NULL, 0, 1, 0, 100, 0), +(12896100, 18, 1650.4883, -5802.892, 117.27875, NULL, 0, 1, 0, 100, 0); + +DELETE FROM `waypoint_data` WHERE `id` IN (12896200); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(12896200, 1, 2112.2366, -5870.4365, 102.70522, NULL, 0, 1, 0, 100, 0), +(12896200, 2, 2076.472, -5888.584, 104.19423, NULL, 0, 1, 0, 100, 0), +(12896200, 3, 2041.5881, -5906.801, 105.34805, NULL, 0, 1, 0, 100, 0), +(12896200, 4, 2017.8765, -5905.41, 104.65199, NULL, 0, 1, 0, 100, 0), +(12896200, 5, 2004.056, -5904.8228, 103.98675, NULL, 0, 1, 0, 100, 0), +(12896200, 6, 1960.9049, -5902.596, 102.14691, NULL, 0, 1, 0, 100, 0), +(12896200, 7, 1920.0485, -5909.797, 101.558655, NULL, 0, 1, 0, 100, 0), +(12896200, 8, 1871.5569, -5910.3486, 104.01594, NULL, 0, 1, 0, 100, 0), +(12896200, 9, 1828.5173, -5925.0347, 110.76521, NULL, 0, 1, 0, 100, 0), +(12896200, 10, 1796.468, -5930.4634, 116.01326, NULL, 0, 1, 0, 100, 0), +(12896200, 11, 1756.4623, -5915.221, 116.10086, NULL, 0, 1, 0, 100, 0), +(12896200, 12, 1716.3547, -5893.5947, 116.14236, NULL, 0, 1, 0, 100, 0), +(12896200, 13, 1682.9327, -5873.7715, 116.17101, NULL, 0, 1, 0, 100, 0), +(12896200, 14, 1663.3423, -5876.8574, 117.27307, NULL, 0, 1, 0, 100, 0); + +DELETE FROM `waypoint_data` WHERE `id` IN (12896300); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(12896300, 1, 2097.34, -5841.3203, 102.67261, NULL, 0, 1, 0, 100, 0), +(12896300, 2, 2066.8403, -5841.029, 102.287506, NULL, 0, 1, 0, 100, 0), +(12896300, 3, 2029.0686, -5846.0244, 100.455025, NULL, 0, 1, 0, 100, 0), +(12896300, 4, 1993.8956, -5843.7485, 100.748825, NULL, 0, 1, 0, 100, 0), +(12896300, 5, 1962.1233, -5843.173, 100.5741, NULL, 0, 1, 0, 100, 0), +(12896300, 6, 1935.0837, -5849.48, 101.044945, NULL, 0, 1, 0, 100, 0), +(12896300, 7, 1904.2611, -5846.199, 100.77372, NULL, 0, 1, 0, 100, 0), +(12896300, 8, 1867.7396, -5826.739, 100.54382, NULL, 0, 1, 0, 100, 0), +(12896300, 9, 1831.8232, -5817.8496, 101.37269, NULL, 0, 1, 0, 100, 0), +(12896300, 10, 1786.0167, -5816.726, 113.24113, NULL, 0, 1, 0, 100, 0), +(12896300, 11, 1746.1085, -5817.3066, 116.121925, NULL, 0, 1, 0, 100, 0), +(12896300, 12, 1747.8519, -5805.8174, 117.27875, NULL, 0, 1, 0, 100, 0); + +DELETE FROM `waypoint_data` WHERE `id` IN (12896400); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(12896400, 1, 2112.2366, -5870.4365, 102.70522, NULL, 0, 1, 0, 100, 0), +(12896400, 2, 2076.472, -5888.584, 104.19423, NULL, 0, 1, 0, 100, 0), +(12896400, 3, 2041.5881, -5906.801, 105.34805, NULL, 0, 1, 0, 100, 0), +(12896400, 4, 2004.056, -5904.8228, 103.98675, NULL, 0, 1, 0, 100, 0), +(12896400, 5, 1960.9049, -5902.596, 102.14691, NULL, 0, 1, 0, 100, 0), +(12896400, 6, 1920.0485, -5909.797, 101.558655, NULL, 0, 1, 0, 100, 0), +(12896400, 7, 1871.5569, -5910.3486, 104.01594, NULL, 0, 1, 0, 100, 0), +(12896400, 8, 1828.5173, -5925.0347, 110.76521, NULL, 0, 1, 0, 100, 0), +(12896400, 9, 1796.468, -5930.4634, 116.01326, NULL, 0, 1, 0, 100, 0), +(12896400, 10, 1756.4623, -5915.221, 116.10086, NULL, 0, 1, 0, 100, 0), +(12896400, 11, 1716.3547, -5893.5947, 116.14236, NULL, 0, 1, 0, 100, 0), +(12896400, 12, 1682.9327, -5873.7715, 116.17101, NULL, 0, 1, 0, 100, 0), +(12896400, 13, 1663.3423, -5876.8574, 117.27307, NULL, 0, 1, 0, 100, 0); + +DELETE FROM `waypoint_data` WHERE `id` IN (12896500); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(12896500, 1, 2152.1838, -5846.8916, 101.93773, NULL, 0, 1, 0, 100, 0), +(12896500, 2, 2112.2366, -5870.4365, 102.70522, NULL, 0, 1, 0, 100, 0), +(12896500, 3, 2076.472, -5888.584, 104.19423, NULL, 0, 1, 0, 100, 0), +(12896500, 4, 2041.5881, -5906.801, 105.34805, NULL, 0, 1, 0, 100, 0), +(12896500, 5, 2022.9102, -5905.6533, 104.899635, NULL, 0, 1, 0, 100, 0), +(12896500, 6, 2004.056, -5904.8228, 103.98675, NULL, 0, 1, 0, 100, 0), +(12896500, 7, 1960.9049, -5902.596, 102.14691, NULL, 0, 1, 0, 100, 0), +(12896500, 8, 1920.0485, -5909.797, 101.558655, NULL, 0, 1, 0, 100, 0), +(12896500, 9, 1871.5569, -5910.3486, 104.01594, NULL, 0, 1, 0, 100, 0), +(12896500, 10, 1828.5173, -5925.0347, 110.76521, NULL, 0, 1, 0, 100, 0), +(12896500, 11, 1796.468, -5930.4634, 116.01326, NULL, 0, 1, 0, 100, 0), +(12896500, 12, 1756.4623, -5915.221, 116.10086, NULL, 0, 1, 0, 100, 0), +(12896500, 13, 1716.3547, -5893.5947, 116.14236, NULL, 0, 1, 0, 100, 0), +(12896500, 14, 1682.9327, -5873.7715, 116.17101, NULL, 0, 1, 0, 100, 0), +(12896500, 15, 1663.3423, -5876.8574, 117.27307, NULL, 0, 1, 0, 100, 0); + +DELETE FROM `waypoint_data` WHERE `id` IN (12896700); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(12896700, 1, 1924.832, -5845.7256, 100.16112, NULL, 0, 1, 0, 100, 0), +(12896700, 2, 1895.1543, -5841.2715, 101.08778, NULL, 0, 1, 0, 100, 0), +(12896700, 3, 1878.0494, -5832.7056, 101.27008, NULL, 0, 1, 0, 100, 0), +(12896700, 4, 1835.2166, -5819.3623, 100.88735, NULL, 0, 1, 0, 100, 0), +(12896700, 5, 1796.6736, -5819.528, 110.19136, NULL, 0, 1, 0, 100, 0), +(12896700, 6, 1763.368, -5820.3086, 116.104294, NULL, 0, 1, 0, 100, 0), +(12896700, 7, 1724.2448, -5821.062, 116.12348, NULL, 0, 1, 0, 100, 0), +(12896700, 8, 1711.1307, -5820.6772, 116.12192, NULL, 0, 1, 0, 100, 0), +(12896700, 9, 1698.2572, -5809.4565, 115.92327, NULL, 0, 1, 0, 100, 0), +(12896700, 10, 1664.177, -5784.301, 116.112946, NULL, 0, 1, 0, 100, 0), +(12896700, 11, 1621.61, -5777.791, 116.11258, NULL, 0, 1, 0, 100, 0), +(12896700, 12, 1602.2942, -5754.3105, 119.27875, NULL, 0, 1, 0, 100, 0), +(12896700, 13, 1586.1525, -5721.0815, 121.68814, NULL, 0, 1, 0, 100, 0), +(12896700, 14, 1575.1832, -5725.3354, 120.891266, NULL, 0, 1, 0, 100, 0); + +-- Set Comment +UPDATE `creature` SET `Comment` = "has guid specific SAI" WHERE (`id1` = 28576) AND (`guid` IN (128922, 128927, 128928, 128930, 128924, 128954, 128929, 128934, 128926, 128920, 128916, 128935, 128948, 128910, 128911, 128912, 128913, 128914, 128915, 128917, 128918, 128919)); +UPDATE `creature` SET `Comment` = "has guid specific SAI" WHERE (`id1` = 28577) AND (`guid` IN (128979, 128986, 128970, 128966, 128973, 128976, 128978, 128980, 128981, 128968, 128993, 128991, 128992, 128958, 128959, 128960, 128961, 128962, 128963, 128964, 128965, 128967)); + +-- Add Extra Flag (DONT_OVERRIDE_SAI_ENTRY). This is not a sniff, it is usefull to lighten the fix. +UPDATE `creature_template` SET `flags_extra` = `flags_extra`|134217728 WHERE `entry` IN (28576, 28577); + +-- Change General SmartAI +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 28576; +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 28576) 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 +(28576, 0, 0, 1, 25, 0, 100, 0, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Reset - Set Event Phase 1'), +(28576, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Reset - Set Reactstate Passive'), +(28576, 0, 2, 0, 4, 0, 50, 0, 0, 0, 0, 0, 0, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Aggro - Set Event Phase 2'), +(28576, 0, 3, 4, 0, 1, 100, 0, 0, 0, 0, 0, 0, 0, 11, 51604, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - In Combat - Cast \'Serverside - Stun Self\' (Phase 1)'), +(28576, 0, 4, 5, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 4, 14561, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - In Combat - Play Sound 14561 (Phase 1)'), +(28576, 0, 5, 6, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 17, 431, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - In Combat - Set Emote State 431 (Phase 1)'), +(28576, 0, 6, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - In Combat - Say Line 1 (Phase 1)'), +(28576, 0, 7, 8, 0, 2, 100, 0, 0, 0, 0, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - In Combat - Set Reactstate Aggressive (Phase 2)'), +(28576, 0, 8, 9, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 52262, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - In Combat - Cast \'Cornered and Enraged!\' (Phase 2)'), +(28576, 0, 9, 0, 61, 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, 'Citizen of Havenshire - In Combat - Say Line 0 (Phase 2)'), +(28576, 0, 10, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Just Died - Say Line 2'), +(28576, 0, 11, 0, 4, 0, 50, 0, 0, 0, 0, 0, 0, 0, 86, 58207, 0, 10, 128581, 28765, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Aggro - Cross Cast \'Lich King VO Blocker\''); + +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 28577; +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 28577) 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 +(28577, 0, 0, 1, 25, 0, 100, 0, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Reset - Set Event Phase 1'), +(28577, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Reset - Set Reactstate Passive'), +(28577, 0, 2, 0, 4, 0, 50, 0, 0, 0, 0, 0, 0, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Aggro - Set Event Phase 2'), +(28577, 0, 3, 4, 0, 1, 100, 0, 0, 0, 0, 0, 0, 0, 11, 51604, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - In Combat - Cast \'Serverside - Stun Self\' (Phase 1)'), +(28577, 0, 4, 5, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 4, 14564, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - In Combat - Play Sound 14564 (Phase 1)'), +(28577, 0, 5, 6, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 17, 431, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - In Combat - Set Emote State 431 (Phase 1)'), +(28577, 0, 6, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - In Combat - Say Line 1 (Phase 1)'), +(28577, 0, 7, 8, 0, 2, 100, 0, 0, 0, 0, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - In Combat - Set Reactstate Aggressive (Phase 2)'), +(28577, 0, 8, 9, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 52262, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - In Combat - Cast \'Cornered and Enraged!\' (Phase 2)'), +(28577, 0, 9, 0, 61, 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, 'Citizen of Havenshire - In Combat - Say Line 0 (Phase 2)'), +(28577, 0, 10, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Just Died - Say Line 2'), +(28577, 0, 11, 0, 4, 0, 50, 0, 0, 0, 0, 0, 0, 0, 86, 58207, 0, 10, 128581, 28765, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Aggro - Cross Cast \'Lich King VO Blocker\''); + +-- Set Guid SmartAI +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128919); +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 +(-128919, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896700, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896700'), +(-128919, 0, 13, 0, 109, 0, 100, 0, 0, 12896700, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896700 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128967); +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 +(-128967, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896700, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896700'), +(-128967, 0, 13, 0, 109, 0, 100, 0, 0, 12896700, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896700 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128918); +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 +(-128918, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896500, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896500'), +(-128918, 0, 13, 0, 109, 0, 100, 0, 0, 12896500, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896500 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128965); +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 +(-128965, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896500, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896500'), +(-128965, 0, 13, 0, 109, 0, 100, 0, 0, 12896500, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896500 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128917); +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 +(-128917, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896400, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896400'), +(-128917, 0, 13, 0, 109, 0, 100, 0, 0, 12896400, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896400 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128964); +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 +(-128964, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896400, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896400'), +(-128964, 0, 13, 0, 109, 0, 100, 0, 0, 12896400, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896400 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128915); +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 +(-128915, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896300, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896300'), +(-128915, 0, 13, 0, 109, 0, 100, 0, 0, 12896300, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896300 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128963); +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 +(-128963, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896300, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896300'), +(-128963, 0, 13, 0, 109, 0, 100, 0, 0, 12896300, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896300 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128962); +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 +(-128962, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896200, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896200'), +(-128962, 0, 13, 0, 109, 0, 100, 0, 0, 12896200, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896200 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128914); +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 +(-128914, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896200, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896200'), +(-128914, 0, 13, 0, 109, 0, 100, 0, 0, 12896200, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896200 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128913); +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 +(-128913, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896100'), +(-128913, 0, 13, 0, 109, 0, 100, 0, 0, 12896100, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896100 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128961); +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 +(-128961, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896100'), +(-128961, 0, 13, 0, 109, 0, 100, 0, 0, 12896100, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896100 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128960); +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 +(-128960, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896000'), +(-128960, 0, 13, 0, 109, 0, 100, 0, 0, 12896000, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896000 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128912); +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 +(-128912, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896000'), +(-128912, 0, 13, 0, 109, 0, 100, 0, 0, 12896000, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896000 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128911); +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 +(-128911, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12895900, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12895900'), +(-128911, 0, 13, 0, 109, 0, 100, 0, 0, 12895900, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12895900 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128959); +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 +(-128959, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12895900, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12895900'), +(-128959, 0, 13, 0, 109, 0, 100, 0, 0, 12895900, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12895900 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128922); +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 +(-128922, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12892200, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12892200'), +(-128922, 0, 13, 0, 109, 0, 100, 0, 0, 12892200, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12892200 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128979); +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 +(-128979, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12892200, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12892200'), +(-128979, 0, 13, 0, 109, 0, 100, 0, 0, 12892200, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12892200 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128927); +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 +(-128927, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12892700, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12892700'), +(-128927, 0, 13, 0, 109, 0, 100, 0, 0, 12892700, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12892700 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128986); +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 +(-128986, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12892700, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12892700'), +(-128986, 0, 13, 0, 109, 0, 100, 0, 0, 12892700, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12892700 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128928); +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 +(-128928, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12892800, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12892800'), +(-128928, 0, 13, 0, 109, 0, 100, 0, 0, 12892800, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12892800 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128970); +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 +(-128970, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12892800, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12892800'), +(-128970, 0, 13, 0, 109, 0, 100, 0, 0, 12892800, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12892800 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128930); +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 +(-128930, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12893000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12893000'), +(-128930, 0, 13, 0, 109, 0, 100, 0, 0, 12893000, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12893000 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128966); +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 +(-128966, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12893000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12893000'), +(-128966, 0, 13, 0, 109, 0, 100, 0, 0, 12893000, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12893000 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128973); +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 +(-128973, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12897300, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12897300'), +(-128973, 0, 13, 0, 109, 0, 100, 0, 0, 12897300, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12897300 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128924); +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 +(-128924, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12897300, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12897300'), +(-128924, 0, 13, 0, 109, 0, 100, 0, 0, 12897300, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12897300 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128976); +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 +(-128976, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12897600, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12897600'), +(-128976, 0, 13, 0, 109, 0, 100, 0, 0, 12897600, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12897600 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128954); +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 +(-128954, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12897600, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12897600'), +(-128954, 0, 13, 0, 109, 0, 100, 0, 0, 12897600, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12897600 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128978); +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 +(-128978, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12897800, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12897800'), +(-128978, 0, 13, 0, 109, 0, 100, 0, 0, 12897800, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12897800 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128929); +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 +(-128929, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12897800, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12897800'), +(-128929, 0, 13, 0, 109, 0, 100, 0, 0, 12897800, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12897800 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128980); +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 +(-128980, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12898000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12898000'), +(-128980, 0, 13, 0, 109, 0, 100, 0, 0, 12898000, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12898000 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128934); +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 +(-128934, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12898000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12898000'), +(-128934, 0, 13, 0, 109, 0, 100, 0, 0, 12898000, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12898000 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128981); +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 +(-128981, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12898100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12898100'), +(-128981, 0, 13, 0, 109, 0, 100, 0, 0, 12898100, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12898100 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128926); +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 +(-128926, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12898100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12898100'), +(-128926, 0, 13, 0, 109, 0, 100, 0, 0, 12898100, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12898100 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128968); +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 +(-128968, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896800, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896800'), +(-128968, 0, 13, 0, 109, 0, 100, 0, 0, 12896800, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896800 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128920); +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 +(-128920, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12896800, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12896800'), +(-128920, 0, 13, 0, 109, 0, 100, 0, 0, 12896800, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12896800 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128993); +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 +(-128993, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12899300, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12899300'), +(-128993, 0, 13, 0, 109, 0, 100, 0, 0, 12899300, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12899300 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128916); +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 +(-128916, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12899300, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12899300'), +(-128916, 0, 13, 0, 109, 0, 100, 0, 0, 12899300, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12899300 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128991); +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 +(-128991, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12899100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12899100'), +(-128991, 0, 13, 0, 109, 0, 100, 0, 0, 12899100, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12899100 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128935); +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 +(-128935, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12899100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12899100'), +(-128935, 0, 13, 0, 109, 0, 100, 0, 0, 12899100, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12899100 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128992); +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 +(-128992, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12899200, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12899200'), +(-128992, 0, 13, 0, 109, 0, 100, 0, 0, 12899200, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12899200 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128948); +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 +(-128948, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12899200, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12899200'), +(-128948, 0, 13, 0, 109, 0, 100, 0, 0, 12899200, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12899200 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128958); +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 +(-128958, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12895800, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12895800'), +(-128958, 0, 13, 0, 109, 0, 100, 0, 0, 12895800, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12895800 Finished - Despawn In 2000 ms'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -128910); +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 +(-128910, 0, 12, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 232, 12895800, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Respawn - Start Path 12895800'), +(-128910, 0, 13, 0, 109, 0, 100, 0, 0, 12895800, 0, 0, 0, 0, 41, 2000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Citizen of Havenshire - On Path 12895800 Finished - Despawn In 2000 ms'); + +-- Set Groups +DELETE FROM `pool_template` WHERE (`entry` IN (22386, 22387, 22388, 22389, 22390, 22391, 22392, 22393, 22394, 22395, 22396, 22397, 22398, 22399, 22400, 22401, 22402, 22403, 22404, 22405, 22406, 22407)); +INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES +(22386, 1, 'Citizen of Havenshire random spawn 1'), +(22387, 1, 'Citizen of Havenshire random spawn 2'), +(22388, 1, 'Citizen of Havenshire random spawn 3'), +(22389, 1, 'Citizen of Havenshire random spawn 4'), +(22390, 1, 'Citizen of Havenshire random spawn 5'), +(22391, 1, 'Citizen of Havenshire random spawn 6'), +(22392, 1, 'Citizen of Havenshire random spawn 7'), +(22393, 1, 'Citizen of Havenshire random spawn 8'), +(22394, 1, 'Citizen of Havenshire random spawn 9'), +(22395, 1, 'Citizen of Havenshire random spawn 10'), +(22396, 1, 'Citizen of Havenshire random spawn 11'), +(22397, 1, 'Citizen of Havenshire random spawn 12'), +(22398, 1, 'Citizen of Havenshire random spawn 13'), +(22399, 1, 'Citizen of Havenshire random spawn 14'), +(22400, 1, 'Citizen of Havenshire random spawn 15'), +(22401, 1, 'Citizen of Havenshire random spawn 16'), +(22402, 1, 'Citizen of Havenshire random spawn 17'), +(22403, 1, 'Citizen of Havenshire random spawn 18'), +(22404, 1, 'Citizen of Havenshire random spawn 19'), +(22405, 1, 'Citizen of Havenshire random spawn 20'), +(22406, 1, 'Citizen of Havenshire random spawn 21'), +(22407, 1, 'Citizen of Havenshire random spawn 22'); + +DELETE FROM `pool_creature` WHERE (`pool_entry` IN (22386, 22387, 22388, 22389, 22390, 22391, 22392, 22393, 22394, 22395, 22396, 22397, 22398, 22399, 22400, 22401, 22402, 22403, 22404, 22405, 22406, 22407)) AND (`guid` IN (128922, 128979, 128927, 128986, 128928, 128970, 128930, 128966, 128973, 128924, 128976, 128954, 128978, 128929, 128980, 128934, 128981, 128926, 128968, 128920, 128993, 128916, 128991, 128935, 128992, 128948, 128958, 128910, 128959, 128911, 128960, 128912, 128961, 128913, 128962, 128914, 128963, 128915, 128964, 128917, 128965, 128918, 128967, 128919)); +INSERT INTO `pool_creature` (`guid`, `pool_entry`, `chance`, `description`) VALUES +(128922, 22386, 0, 'Citizen of Havenshire (1/2)'), +(128979, 22386, 0, 'Citizen of Havenshire (2/2)'), +(128927, 22387, 0, 'Citizen of Havenshire (1/2)'), +(128986, 22387, 0, 'Citizen of Havenshire (2/2)'), +(128928, 22388, 0, 'Citizen of Havenshire (1/2)'), +(128970, 22388, 0, 'Citizen of Havenshire (2/2)'), +(128930, 22389, 0, 'Citizen of Havenshire (1/2)'), +(128966, 22389, 0, 'Citizen of Havenshire (2/2)'), +(128973, 22390, 0, 'Citizen of Havenshire (1/2)'), +(128924, 22390, 0, 'Citizen of Havenshire (2/2)'), +(128976, 22391, 0, 'Citizen of Havenshire (1/2)'), +(128954, 22391, 0, 'Citizen of Havenshire (2/2)'), +(128978, 22392, 0, 'Citizen of Havenshire (1/2)'), +(128929, 22392, 0, 'Citizen of Havenshire (2/2)'), +(128980, 22393, 0, 'Citizen of Havenshire (1/2)'), +(128934, 22393, 0, 'Citizen of Havenshire (2/2)'), +(128981, 22394, 0, 'Citizen of Havenshire (1/2)'), +(128926, 22394, 0, 'Citizen of Havenshire (2/2)'), +(128968, 22395, 0, 'Citizen of Havenshire (1/2)'), +(128920, 22395, 0, 'Citizen of Havenshire (2/2)'), +(128993, 22396, 0, 'Citizen of Havenshire (1/2)'), +(128916, 22396, 0, 'Citizen of Havenshire (2/2)'), +(128991, 22397, 0, 'Citizen of Havenshire (1/2)'), +(128935, 22397, 0, 'Citizen of Havenshire (2/2)'), +(128992, 22398, 0, 'Citizen of Havenshire (1/2)'), +(128948, 22398, 0, 'Citizen of Havenshire (2/2)'), +(128958, 22399, 0, 'Citizen of Havenshire (1/2)'), +(128910, 22399, 0, 'Citizen of Havenshire (2/2)'), +(128959, 22400, 0, 'Citizen of Havenshire (1/2)'), +(128911, 22400, 0, 'Citizen of Havenshire (2/2)'), +(128960, 22401, 0, 'Citizen of Havenshire (1/2)'), +(128912, 22401, 0, 'Citizen of Havenshire (2/2)'), +(128961, 22402, 0, 'Citizen of Havenshire (1/2)'), +(128913, 22402, 0, 'Citizen of Havenshire (2/2)'), +(128962, 22403, 0, 'Citizen of Havenshire (1/2)'), +(128914, 22403, 0, 'Citizen of Havenshire (2/2)'), +(128963, 22404, 0, 'Citizen of Havenshire (1/2)'), +(128915, 22404, 0, 'Citizen of Havenshire (2/2)'), +(128964, 22405, 0, 'Citizen of Havenshire (1/2)'), +(128917, 22405, 0, 'Citizen of Havenshire (2/2)'), +(128965, 22406, 0, 'Citizen of Havenshire (1/2)'), +(128918, 22406, 0, 'Citizen of Havenshire (2/2)'), +(128967, 22407, 0, 'Citizen of Havenshire (1/2)'), +(128919, 22407, 0, 'Citizen of Havenshire (2/2)'); + +-- FOR FUTURE FIXES +-- Set Disable Gravity for Sky Darkener Target (Sniffed Flag) +DELETE FROM `creature_template_movement` WHERE (`CreatureId` = 28655); +INSERT INTO `creature_template_movement` (`CreatureId`, `Ground`, `Swim`, `Flight`, `Rooted`, `Chase`, `Random`, `InteractionPauseTimer`) VALUES +(28655, 0, 0, 1, 0, 0, 0, 0); + +-- Change Wander Distance and Movement Type +UPDATE `creature` SET `wander_distance` = 0, `MovementType` = 0 WHERE `guid` IN (129464, 129465, 129466, 129467, 129468, 129469, 129470, 129471, 129472) AND `id1` = 28655; From d7189cf87e130ec8590d39376137dd315f0c1c45 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 31 Dec 2024 08:42:09 +0000 Subject: [PATCH 74/74] chore(DB): import pending files Referenced commit(s): 106e0ed4d2fc1148821d2d831e683ca6cbb440c8 --- .../Citizen_of_Havenshire.sql => db_world/2024_12_31_00.sql} | 1 + .../Scarlet_Peasant.sql => db_world/2024_12_31_01.sql} | 1 + 2 files changed, 2 insertions(+) rename data/sql/updates/{pending_db_world/Citizen_of_Havenshire.sql => db_world/2024_12_31_00.sql} (99%) rename data/sql/updates/{pending_db_world/Scarlet_Peasant.sql => db_world/2024_12_31_01.sql} (97%) diff --git a/data/sql/updates/pending_db_world/Citizen_of_Havenshire.sql b/data/sql/updates/db_world/2024_12_31_00.sql similarity index 99% rename from data/sql/updates/pending_db_world/Citizen_of_Havenshire.sql rename to data/sql/updates/db_world/2024_12_31_00.sql index 42364d73e..92e9c5ed5 100644 --- a/data/sql/updates/pending_db_world/Citizen_of_Havenshire.sql +++ b/data/sql/updates/db_world/2024_12_31_00.sql @@ -1,3 +1,4 @@ +-- DB update 2024_12_30_02 -> 2024_12_31_00 -- Set Run Speed UPDATE `creature_template` SET `speed_run` = 1.05 WHERE `entry` IN (28576, 28577); diff --git a/data/sql/updates/pending_db_world/Scarlet_Peasant.sql b/data/sql/updates/db_world/2024_12_31_01.sql similarity index 97% rename from data/sql/updates/pending_db_world/Scarlet_Peasant.sql rename to data/sql/updates/db_world/2024_12_31_01.sql index e85d06f42..904684fa1 100644 --- a/data/sql/updates/pending_db_world/Scarlet_Peasant.sql +++ b/data/sql/updates/db_world/2024_12_31_01.sql @@ -1,3 +1,4 @@ +-- DB update 2024_12_31_00 -> 2024_12_31_01 UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 28557;