From 83471c655665f207c1495d2a3223a6bdb3e2aeca Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Fri, 17 Feb 2023 16:32:55 -0300 Subject: [PATCH 01/72] fix(DB/Creature): Port Shadowmoon Valley rares from Mangos (#15084) --- .../rev_1676648980335556800.sql | 183 ++++++++++++++++++ 1 file changed, 183 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1676648980335556800.sql diff --git a/data/sql/updates/pending_db_world/rev_1676648980335556800.sql b/data/sql/updates/pending_db_world/rev_1676648980335556800.sql new file mode 100644 index 000000000..85258dfbf --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676648980335556800.sql @@ -0,0 +1,183 @@ +-- Ambassador Jerrikar +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 18695); +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`, `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 +(18695, 0, 0, 0, 0, 0, 100, 0, 3000, 6000, 10000, 15000, 0, 11, 38926, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Ambassador Jerrikar - In Combat - Cast \'Dark Strike\''), +(18695, 0, 1, 0, 0, 0, 100, 0, 8000, 16000, 18000, 24000, 0, 11, 38916, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ambassador Jerrikar - In Combat - Cast \'Diplomatic Immunity\''), +(18695, 0, 2, 0, 0, 0, 100, 0, 9000, 12000, 14000, 19000, 0, 11, 38913, 0, 0, 0, 0, 0, 5, 20, 0, 0, 0, 0, 0, 0, 0, 'Ambassador Jerrikar - In Combat - Cast \'Silence\''); + +-- Kraator +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 18696); +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`, `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 +(18696, 0, 0, 0, 0, 0, 100, 0, 10000, 20000, 20000, 25000, 0, 11, 39293, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Kraator - In Combat - Cast \'Conflagration\''), +(18696, 0, 1, 0, 0, 0, 100, 512, 15000, 15000, 15000, 30000, 0, 11, 24670, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kraator - In Combat - Cast \'Inferno\''); + +SET @CGUID := 24965; + +DELETE FROM `creature` WHERE `id1` IN (18695, 18696); +INSERT INTO `creature` (`guid`, `id1`, `map`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `MovementType`, `wander_distance`) VALUES +-- Ambassador Jerrikar +(@CGUID+0, 18695, 530, 1, -4075.71, 2580.33, 135.002, 1.76514, 86400, 2, 0), +(@CGUID+1, 18695, 530, 1, -4465.49, 1741.74, 159.227, 5.19891, 100800, 2, 0), +(@CGUID+2, 18695, 530, 1, -4169.96, 516.327, 26.1044, 3.79743, 108000, 2, 0), +(@CGUID+3, 18695, 530, 1, -3361.35, 1196.06, 62.5299, 4.75752, 115200, 2, 0), +(@CGUID+4, 18695, 530, 1, -3028.02, 1581.67, 64.2494, 2.03534, 122400, 2, 0), +-- Kraator +(@CGUID+5, 18696, 530, 0, -4428.79, 1879.54, 159.279, 3.89207, 86400, 2, 0), +(@CGUID+6, 18696, 530, 0, -3751.22, 902.85, 71.8097, 0.152557, 93600, 1, 15), +(@CGUID+7, 18696, 530, 0, -2397.45, 1727.58, -0.901711, 3.14493, 100800, 1, 15), +(@CGUID+8, 18696, 530, 0, -3434.12, 1966.03, 73.1387, 4.16987, 115200, 1, 15); + +DELETE FROM `creature_addon` WHERE (`guid` IN (@CGUID+0,@CGUID+1,@CGUID+2,@CGUID+3,@CGUID+4,@CGUID+5)); +INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(@CGUID+0, (@CGUID+0)*10, 0, 0, 1, 0, 0, ''), +(@CGUID+1, (@CGUID+1)*10, 0, 0, 1, 0, 0, ''), +(@CGUID+2, (@CGUID+2)*10, 0, 0, 1, 0, 0, ''), +(@CGUID+3, (@CGUID+3)*10, 0, 0, 1, 0, 0, ''), +(@CGUID+4, (@CGUID+4)*10, 0, 0, 1, 0, 0, ''), +(@CGUID+5, (@CGUID+5)*10, 0, 0, 0, 0, 0, ''); + +DELETE FROM `waypoint_data` WHERE `id` IN ((@CGUID+0)*10,(@CGUID+1)*10,(@CGUID+2)*10,(@CGUID+3)*10,(@CGUID+4)*10,(@CGUID+5)*10); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`) VALUES +-- Ambassador Jerrikar +((@CGUID+0)*10, 1, -4075.71, 2580.33, 135.002), +((@CGUID+0)*10, 2, -4057.45, 2580.98, 129.419), +((@CGUID+0)*10, 3, -4016.42, 2603.85, 114.945), +((@CGUID+0)*10, 4, -3971.13, 2618.28, 105.677), +((@CGUID+0)*10, 5, -3931.96, 2620.31, 103.518), +((@CGUID+0)*10, 6, -3891.68, 2609.75, 94.2714), +((@CGUID+0)*10, 7, -3861.79, 2588.95, 92.7909), +((@CGUID+0)*10, 8, -3811.96, 2593.8, 90.239), +((@CGUID+0)*10, 9, -3798.66, 2606.71, 90.3513), +((@CGUID+0)*10, 10, -3795.06, 2630.71, 92.2314), +((@CGUID+0)*10, 11, -3795.33, 2657.06, 101.73), +((@CGUID+0)*10, 12, -3779.87, 2668.97, 101.232), +((@CGUID+0)*10, 13, -3693.65, 2668.37, 107.487), +((@CGUID+1)*10, 1, -4465.49, 1741.74, 159.227), +((@CGUID+1)*10, 2, -4468.25, 1715.11, 159.499), +((@CGUID+1)*10, 3, -4473.41, 1702.46, 160.759), +((@CGUID+1)*10, 4, -4473.76, 1681.35, 162.28), +((@CGUID+1)*10, 5, -4497.81, 1677.15, 165.846), +((@CGUID+1)*10, 6, -4526.19, 1678.13, 175.257), +((@CGUID+1)*10, 7, -4548.16, 1678.87, 174.776), +((@CGUID+1)*10, 8, -4560.57, 1696.35, 174.429), +((@CGUID+1)*10, 9, -4534.67, 1715.35, 174.333), +((@CGUID+1)*10, 10, -4540.7, 1722.39, 174.364), +((@CGUID+1)*10, 11, -4570.23, 1673.95, 174.765), +((@CGUID+1)*10, 12, -4556.09, 1634.04, 174.413), +((@CGUID+1)*10, 13, -4549.2, 1662.49, 174.447), +((@CGUID+1)*10, 14, -4524.23, 1673.72, 175.252), +((@CGUID+1)*10, 15, -4498.8, 1671.21, 165.909), +((@CGUID+1)*10, 16, -4474.22, 1655.08, 162.994), +((@CGUID+1)*10, 17, -4460.39, 1606.96, 163.121), +((@CGUID+1)*10, 18, -4448.64, 1583.59, 164.034), +((@CGUID+1)*10, 19, -4411.11, 1580.13, 163.702), +((@CGUID+1)*10, 20, -4392.48, 1591.57, 163.285), +((@CGUID+1)*10, 21, -4368.67, 1635.85, 156.371), +((@CGUID+1)*10, 22, -4367.68, 1675.5, 157.308), +((@CGUID+1)*10, 23, -4388.41, 1705.66, 156.436), +((@CGUID+1)*10, 24, -4423.9, 1722.95, 157.067), +((@CGUID+2)*10, 1, -4169.96, 516.327, 26.1044), +((@CGUID+2)*10, 2, -4177.71, 515.877, 25.2113), +((@CGUID+2)*10, 3, -4181.79, 505.748, 27.8272), +((@CGUID+2)*10, 4, -4182.5, 492.379, 29.1442), +((@CGUID+2)*10, 5, -4195.37, 482.944, 29.7653), +((@CGUID+2)*10, 6, -4216.87, 482.478, 33.6687), +((@CGUID+2)*10, 7, -4229.05, 471.532, 40.1721), +((@CGUID+2)*10, 8, -4230.16, 457.913, 45.8716), +((@CGUID+2)*10, 9, -4217.24, 441.858, 47.4628), +((@CGUID+2)*10, 10, -4223.83, 424.661, 49.881), +((@CGUID+2)*10, 11, -4253.25, 378.726, 77.7883), +((@CGUID+2)*10, 12, -4268.08, 376.821, 79.3743), +((@CGUID+2)*10, 13, -4287.69, 350.027, 101.469), +((@CGUID+2)*10, 14, -4299.35, 330.594, 110.523), +((@CGUID+2)*10, 15, -4297.03, 309.694, 118.697), +((@CGUID+2)*10, 16, -4292.15, 296.065, 121.796), +((@CGUID+2)*10, 17, -4238.48, 271.237, 122.493), +((@CGUID+2)*10, 18, -4221.39, 274.691, 122.37), +((@CGUID+2)*10, 19, -4215.31, 280.698, 122.542), +((@CGUID+2)*10, 20, -4210.35, 293.733, 122.793), +((@CGUID+2)*10, 21, -4207.68, 312.923, 123.018), +((@CGUID+2)*10, 22, -4195.38, 321.624, 122.314), +((@CGUID+2)*10, 23, -4196.27, 331.13, 119.068), +((@CGUID+2)*10, 24, -4228.72, 322.865, 122.659), +((@CGUID+3)*10, 1, -3361.35, 1196.06, 62.5307), +((@CGUID+3)*10, 2, -3365.38, 1173.51, 59.1371), +((@CGUID+3)*10, 3, -3373.31, 1147.16, 53.9433), +((@CGUID+3)*10, 4, -3372.94, 1129.12, 49.5635), +((@CGUID+3)*10, 5, -3377.21, 1118.26, 48.4891), +((@CGUID+3)*10, 6, -3367.83, 1077.38, 45.7798), +((@CGUID+3)*10, 7, -3342.6, 1054.95, 45.4535), +((@CGUID+3)*10, 8, -3342.39, 1043.87, 43.4964), +((@CGUID+3)*10, 9, -3357.42, 1034.57, 41.0994), +((@CGUID+3)*10, 10, -3365.29, 1017.92, 33.716), +((@CGUID+3)*10, 11, -3358.28, 986.865, 28.8074), +((@CGUID+3)*10, 12, -3343.54, 975.584, 30.8439), +((@CGUID+3)*10, 13, -3331.61, 970.294, 29.6034), +((@CGUID+3)*10, 14, -3315.27, 966.89, 32.3896), +((@CGUID+3)*10, 15, -3302.97, 967.504, 34.9652), +((@CGUID+3)*10, 16, -3291.19, 975.843, 38.2663), +((@CGUID+3)*10, 17, -3278.5, 991.971, 42.9526), +((@CGUID+3)*10, 18, -3276.74, 1007.7, 47.4324), +((@CGUID+3)*10, 19, -3273.8, 1018.81, 48.3504), +((@CGUID+3)*10, 20, -3247.58, 1044.13, 54.8317), +((@CGUID+3)*10, 21, -3282, 1113.23, 55.3277), +((@CGUID+3)*10, 22, -3281.22, 1143.76, 54.9456), +((@CGUID+3)*10, 23, -3304.47, 1170.87, 57.3955), +((@CGUID+3)*10, 24, -3329.39, 1161.3, 57.2152), +((@CGUID+3)*10, 25, -3343.26, 1173.6, 59.9309), +((@CGUID+3)*10, 26, -3345.25, 1178.61, 60.6426), +((@CGUID+4)*10, 1, -3028.02, 1581.67, 64.2494), +((@CGUID+4)*10, 2, -3028.36, 1586.81, 64.194), +((@CGUID+4)*10, 3, -3028.46, 1596.54, 59.418), +((@CGUID+4)*10, 4, -3064.63, 1628.56, 60.3787), +((@CGUID+4)*10, 5, -3054.28, 1645.89, 64.0629), +((@CGUID+4)*10, 6, -3059.14, 1668.62, 67.1315), +((@CGUID+4)*10, 7, -3097.5, 1706.17, 68.492), +((@CGUID+4)*10, 8, -3082.57, 1740.85, 72.1624), +((@CGUID+4)*10, 9, -3059.49, 1742.78, 75.1391), +((@CGUID+4)*10, 10, -3046.86, 1752.01, 75.399), +((@CGUID+4)*10, 11, -3023.05, 1733.12, 75.1709), +((@CGUID+4)*10, 12, -3001.55, 1739.61, 75.5879), +((@CGUID+4)*10, 13, -2997.25, 1722.5, 74.1977), +((@CGUID+4)*10, 14, -2994.86, 1702.15, 71.6494), +((@CGUID+4)*10, 15, -2967.53, 1666.31, 66.9312), +((@CGUID+4)*10, 16, -2950.68, 1643.32, 57.4303), +((@CGUID+4)*10, 17, -2975.16, 1615.84, 54.3787), +((@CGUID+4)*10, 18, -2979.98, 1606.67, 55.4944), +((@CGUID+4)*10, 19, -3003.71, 1605.77, 58.9754), +((@CGUID+4)*10, 20, -3028.1, 1596.8, 59.3902), +((@CGUID+4)*10, 21, -3027.81, 1585.9, 64.2028), +-- Kraator +((@CGUID+5)*10, 1, -4394.72, 1864.71, 157.072), +((@CGUID+5)*10, 2, -4461.79, 1886.59, 160.185), +((@CGUID+5)*10, 3, -4483.14, 1923.24, 147.075), +((@CGUID+5)*10, 4, -4482.07, 1945.44, 137.237), +((@CGUID+5)*10, 5, -4466.53, 1966.46, 122.571), +((@CGUID+5)*10, 6, -4450.53, 1991.66, 104.083), +((@CGUID+5)*10, 7, -4469.15, 1990.33, 111.189), +((@CGUID+5)*10, 8, -4468.9, 1970.66, 121.295), +((@CGUID+5)*10, 9, -4486.36, 1927.62, 146.364), +((@CGUID+5)*10, 10, -4450.83, 1884.11, 160.943); + +-- Pooling +DELETE FROM `pool_template` WHERE `entry`=1074 AND `description` LIKE '%Ambassador Jerrikar%'; +DELETE FROM `pool_template` WHERE `entry`=1116 AND `description`='Kraator (18696)'; +INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES +(1074, 1, 'Ambassador Jerrikar (18695)'), +(1116, 1, 'Kraator (18696)'); + +DELETE FROM `pool_creature` WHERE `pool_entry`=1074 AND `description` LIKE '%Ambassador Jerrikar%'; +DELETE FROM `pool_creature` WHERE `pool_entry`=1116 AND `description`='Kraator (18696)'; +INSERT INTO `pool_creature` (`guid`, `pool_entry`, `chance`, `description`) VALUES +(@CGUID+0, 1074, 0, 'Ambassador Jerrikar (18695)'), +(@CGUID+1, 1074, 0, 'Ambassador Jerrikar (18695)'), +(@CGUID+2, 1074, 0, 'Ambassador Jerrikar (18695)'), +(@CGUID+3, 1074, 0, 'Ambassador Jerrikar (18695)'), +(@CGUID+4, 1074, 0, 'Ambassador Jerrikar (18695)'), +(@CGUID+5, 1116, 0, 'Kraator (18696)'), +(@CGUID+6, 1116, 0, 'Kraator (18696)'), +(@CGUID+7, 1116, 0, 'Kraator (18696)'), +(@CGUID+8, 1116, 0, 'Kraator (18696)'); + +-- Remove DISABLE_MOVE from Ambassador Jerrikar +UPDATE `creature_template` SET `unit_flags`=`unit_flags`&~4 WHERE (`entry` = 18695); From 276f9f1e969e61b170ee0d864adce94dc0c5bfbc Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Fri, 17 Feb 2023 19:35:28 +0000 Subject: [PATCH 02/72] chore(DB): import pending files Referenced commit(s): 83471c655665f207c1495d2a3223a6bdb3e2aeca --- .../rev_1676648980335556800.sql => db_world/2023_02_17_12.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1676648980335556800.sql => db_world/2023_02_17_12.sql} (99%) diff --git a/data/sql/updates/pending_db_world/rev_1676648980335556800.sql b/data/sql/updates/db_world/2023_02_17_12.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1676648980335556800.sql rename to data/sql/updates/db_world/2023_02_17_12.sql index 85258dfbf..a1e6309e7 100644 --- a/data/sql/updates/pending_db_world/rev_1676648980335556800.sql +++ b/data/sql/updates/db_world/2023_02_17_12.sql @@ -1,3 +1,4 @@ +-- DB update 2023_02_17_11 -> 2023_02_17_12 -- Ambassador Jerrikar DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 18695); 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`, `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 e8b76f2625fdb7181d857b60890557566ac650c1 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sat, 18 Feb 2023 14:16:53 +0100 Subject: [PATCH 03/72] fix(Scripts/BlackMorass): Implemented wipe event. (#14860) --- .../instance_the_black_morass.cpp | 135 +++++++++++++++--- .../TheBlackMorass/the_black_morass.cpp | 36 +---- .../TheBlackMorass/the_black_morass.h | 33 ++++- 3 files changed, 150 insertions(+), 54 deletions(-) diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp index 876dc4a7d..a1539a192 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp @@ -116,6 +116,7 @@ public: case NPC_INFINITE_CRONOMANCER: case NPC_INFINITE_EXECUTIONER: case NPC_INFINITE_VANQUISHER: + case NPC_DP_BEAM_STALKER: encounterNPCs.insert(creature->GetGUID()); break; } @@ -150,26 +151,36 @@ public: switch (type) { case TYPE_AEONUS: + { + encounters[type] = DONE; + SaveToDB(); + + if (Creature* medivh = instance->GetCreature(_medivhGUID)) { - encounters[type] = DONE; - SaveToDB(); - - if (Creature* medivh = instance->GetCreature(_medivhGUID)) - medivh->AI()->DoAction(ACTION_OUTRO); - - Map::PlayerList const& players = instance->GetPlayers(); - if (!players.IsEmpty()) - for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) - if (Player* player = itr->GetSource()) - { - if (player->GetQuestStatus(QUEST_OPENING_PORTAL) == QUEST_STATUS_INCOMPLETE) - player->AreaExploredOrEventHappens(QUEST_OPENING_PORTAL); - - if (player->GetQuestStatus(QUEST_MASTER_TOUCH) == QUEST_STATUS_INCOMPLETE) - player->AreaExploredOrEventHappens(QUEST_MASTER_TOUCH); - } - break; + medivh->AI()->DoAction(ACTION_OUTRO); } + + Map::PlayerList const& players = instance->GetPlayers(); + if (!players.IsEmpty()) + { + for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) + { + if (Player* player = itr->GetSource()) + { + if (player->GetQuestStatus(QUEST_OPENING_PORTAL) == QUEST_STATUS_INCOMPLETE) + { + player->AreaExploredOrEventHappens(QUEST_OPENING_PORTAL); + } + + if (player->GetQuestStatus(QUEST_MASTER_TOUCH) == QUEST_STATUS_INCOMPLETE) + { + player->AreaExploredOrEventHappens(QUEST_MASTER_TOUCH); + } + } + } + } + break; + } case TYPE_CHRONO_LORD_DEJA: case TYPE_TEMPORUS: encounters[type] = DONE; @@ -182,13 +193,36 @@ public: Events.RescheduleEvent(EVENT_NEXT_PORTAL, 4000); break; case DATA_MEDIVH: + { DoUpdateWorldState(WORLD_STATE_BM, 1); DoUpdateWorldState(WORLD_STATE_BM_SHIELD, _shieldPercent); DoUpdateWorldState(WORLD_STATE_BM_RIFT, _currentRift); Events.RescheduleEvent(EVENT_NEXT_PORTAL, 3000); + + for (ObjectGuid const& guid : encounterNPCs) + { + if (guid.GetEntry() == NPC_DP_BEAM_STALKER) + { + if (Creature* creature = instance->GetCreature(guid)) + { + if (!creature->IsAlive()) + { + creature->Respawn(true); + } + } + break; + } + } + break; + } case DATA_DAMAGE_SHIELD: { + if (_shieldPercent <= 0) + { + return; + } + _shieldPercent -= data; if (_shieldPercent < 0) { @@ -203,15 +237,20 @@ public: { if (medivh->IsAlive()) { - Unit::Kill(medivh, medivh); + medivh->SetImmuneToNPC(true); - // Xinef: delete all spawns - GuidSet eCopy = encounterNPCs; - for (ObjectGuid const& guid : eCopy) + if (medivh->IsAIEnabled) + { + medivh->AI()->Talk(SAY_MEDIVH_DEATH); + } + + Events.ScheduleEvent(EVENT_WIPE_1, 4s); + + for (ObjectGuid const& guid : encounterNPCs) { if (Creature* creature = instance->GetCreature(guid)) { - creature->DespawnOrUnsummon(); + creature->InterruptNonMeleeSpells(true); } } } @@ -219,6 +258,8 @@ public: } break; } + default: + break; } } @@ -325,6 +366,54 @@ public: case EVENT_SUMMON_KEEPER: SummonPortalKeeper(); break; + case EVENT_WIPE_1: + if (Creature* medivh = instance->GetCreature(_medivhGUID)) + { + medivh->RemoveAllAuras(); + } + Events.ScheduleEvent(EVENT_WIPE_2, 500ms); + break; + case EVENT_WIPE_2: + if (Creature* medivh = instance->GetCreature(_medivhGUID)) + { + medivh->KillSelf(false); + + GuidSet encounterNPCSCopy = encounterNPCs; + for (ObjectGuid const& guid : encounterNPCSCopy) + { + switch (guid.GetEntry()) + { + case NPC_TIME_RIFT: + case NPC_DP_EMITTER_STALKER: + case NPC_DP_CRYSTAL_STALKER: + case NPC_DP_BEAM_STALKER: + if (Creature* creature = instance->GetCreature(guid)) + { + creature->DespawnOrUnsummon(); + } + break; + default: + break; + } + } + } + Events.ScheduleEvent(EVENT_WIPE_3, 2s); + break; + case EVENT_WIPE_3: + { + GuidSet encounterNPCSCopy = encounterNPCs; + for (ObjectGuid const& guid : encounterNPCSCopy) + { + if (Creature* creature = instance->GetCreature(guid)) + { + creature->CastSpell(creature, SPELL_TELEPORT_VISUAL, true); + creature->DespawnOrUnsummon(1200ms, 0s); + } + } + break; + } + default: + break; } } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp index b3a27299b..cb4abba8f 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp @@ -22,33 +22,8 @@ #include "ScriptedCreature.h" #include "ScriptedGossip.h" -enum medivhSays -{ - SAY_ENTER = 0, - SAY_DEATH = 5, - SAY_WIN = 6, - SAY_ORCS_ENTER = 7, - - SAY_ORCS_ANSWER = 0 -}; - -enum medivhSpells -{ - SPELL_MANA_SHIELD = 31635, - SPELL_MEDIVH_CHANNEL = 31556, - SPELL_BLACK_CRYSTAL = 32563, - SPELL_PORTAL_CRYSTALS = 32564, - SPELL_BANISH_PURPLE = 32566, - SPELL_BANISH_GREEN = 32567, - - SPELL_CORRUPT = 31326, - SPELL_CORRUPT_AEONUS = 37853, -}; - enum medivhMisc { - NPC_DP_EMITTER_STALKER = 18582, - NPC_DP_CRYSTAL_STALKER = 18553, NPC_SHADOW_COUNCIL_ENFORCER = 17023, GO_DARK_PORTAL = 185103, @@ -120,6 +95,8 @@ struct npc_medivh_bm : public ScriptedAI { me->CastSpell(me, SPELL_MEDIVH_CHANNEL, false); } + + me->SetImmuneToNPC(false); } void JustSummoned(Creature* summon) override @@ -156,7 +133,7 @@ struct npc_medivh_bm : public ScriptedAI if (who->GetTypeId() == TYPEID_PLAYER && me->IsWithinDistInMap(who, 20.0f)) { - Talk(SAY_ENTER); + Talk(SAY_MEDIVH_ENTER); _instance->SetData(DATA_MEDIVH, 1); me->CastSpell(me, SPELL_MEDIVH_CHANNEL, false); @@ -189,7 +166,6 @@ struct npc_medivh_bm : public ScriptedAI { me->SetRespawnTime(DAY); events.Reset(); - Talk(SAY_DEATH); } void UpdateAI(uint32 diff) override @@ -216,7 +192,7 @@ struct npc_medivh_bm : public ScriptedAI break; case EVENT_OUTRO_1: me->SetFacingTo(6.21f); - Talk(SAY_WIN); + Talk(SAY_MEDIVH_WIN); events.ScheduleEvent(EVENT_OUTRO_2, 17000); break; case EVENT_OUTRO_2: @@ -240,14 +216,14 @@ struct npc_medivh_bm : public ScriptedAI events.ScheduleEvent(EVENT_OUTRO_7, 7000); break; case EVENT_OUTRO_7: - Talk(SAY_ORCS_ENTER); + Talk(SAY_MEDIVH_ORCS_ENTER); events.ScheduleEvent(EVENT_OUTRO_8, 7000); break; case EVENT_OUTRO_8: if (Creature* cr = me->FindNearestCreature(NPC_SHADOW_COUNCIL_ENFORCER, 20.0f)) { cr->SetFacingTo(3.07f); - cr->AI()->Talk(SAY_ORCS_ANSWER); + cr->AI()->Talk(SAY_MEDIVH_ORCS_ANSWER); } break; } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h index eb6aabd17..1d5325122 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h @@ -77,19 +77,50 @@ enum CreatureIds NPC_INFINITE_WHELP = 21818, NPC_INFINITE_CRONOMANCER = 17892, NPC_INFINITE_EXECUTIONER = 18994, - NPC_INFINITE_VANQUISHER = 18995 + NPC_INFINITE_VANQUISHER = 18995, + + NPC_DP_EMITTER_STALKER = 18582, + NPC_DP_CRYSTAL_STALKER = 18553, + NPC_DP_BEAM_STALKER = 18555 }; enum Misc { SPELL_RIFT_CHANNEL = 31387, + SPELL_TELEPORT_VISUAL = 7791, EVENT_NEXT_PORTAL = 1, EVENT_SUMMON_KEEPER = 2, + EVENT_WIPE_1 = 3, + EVENT_WIPE_2 = 4, + EVENT_WIPE_3 = 5, ACTION_OUTRO = 1 }; +enum medivhSays +{ + SAY_MEDIVH_ENTER = 0, + SAY_MEDIVH_DEATH = 5, + SAY_MEDIVH_WIN = 6, + SAY_MEDIVH_ORCS_ENTER = 7, + + SAY_MEDIVH_ORCS_ANSWER = 0 +}; + +enum medivhSpells +{ + SPELL_MANA_SHIELD = 31635, + SPELL_MEDIVH_CHANNEL = 31556, + SPELL_BLACK_CRYSTAL = 32563, + SPELL_PORTAL_CRYSTALS = 32564, + SPELL_BANISH_PURPLE = 32566, + SPELL_BANISH_GREEN = 32567, + + SPELL_CORRUPT = 31326, + SPELL_CORRUPT_AEONUS = 37853, +}; + template inline AI* GetTheBlackMorassAI(T* obj) { From 333de4c0db6f3c965616950e4207f30620c31563 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sat, 18 Feb 2023 18:20:34 +0100 Subject: [PATCH 04/72] fix(DB/SAI): Lakka escort event. (#15097) Co-authored-by: offl --- .../rev_1676735655098024400.sql | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1676735655098024400.sql diff --git a/data/sql/updates/pending_db_world/rev_1676735655098024400.sql b/data/sql/updates/pending_db_world/rev_1676735655098024400.sql new file mode 100644 index 000000000..654f20200 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676735655098024400.sql @@ -0,0 +1,49 @@ +-- +DELETE FROM `smart_scripts` WHERE `entryorguid`=18956 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`, `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 +(18956, 0, 0, 2, 62, 0, 100, 1, 7868, 0, 0, 0, 0, 80, 1895600, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Lakka - On Gossip Option 0 Selected - Run Script (No Repeat)'), +(18956, 0, 1, 0, 40, 0, 100, 0, 9, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Lakka - On Waypoint 9 Reached - Despawn (0)'), +(18956, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Lakka - On Link - Close Gossip'); + +DELETE FROM `smart_scripts` WHERE `entryorguid`=1895600 AND `source_type`=9; +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`, `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 +(1895600, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 33, 18956, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 'Lakka - On Script - Quest Credit \'Brother Against Brother\''), +(1895600, 9, 1, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Lakka - On Script - Say Line 0'), +(1895600, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Lakka - On Script - Remove NPC Flag Gossip'), +(1895600, 9, 3, 0, 0, 0, 100, 0, 1500, 1500, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 20, 183051, 5, 0, 0, 0, 0, 0, 0, 'Lakka - On Script - Activate Closest Gameobject \'Sethekk Cage\''), +(1895600, 9, 4, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 0, 53, 0, 1895600, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Lakka - On Script - Start Waypoint'); + +DELETE FROM `waypoints` WHERE `entry`=1895600 AND `point_comment`='Lakka'; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `point_comment`) VALUES +(1895600, 1, -156.811, 159.9, 0.552411, NULL, 0, 'Lakka'), +(1895600, 2, -152.811, 162.15, 0.552411, NULL, 0, 'Lakka'), +(1895600, 3, -148.561, 163.65, 0.552411, NULL, 0, 'Lakka'), +(1895600, 4, -141.811, 164.9, 0.552411, NULL, 0, 'Lakka'), +(1895600, 5, -136.061, 167.4, 0.552411, NULL, 0, 'Lakka'), +(1895600, 6, -129.811, 171.4, 0.552411, NULL, 0, 'Lakka'), +(1895600, 7, -118.061, 173.9, 0.552411, NULL, 0, 'Lakka'), +(1895600, 8, -99.0612, 173.4, 0.302411, NULL, 0, 'Lakka'), +(1895600, 9, -79.8091, 172.757, 0.010726, NULL, 0, 'Lakka'); + +DELETE FROM `gossip_menu` WHERE `MenuID`=7868; +INSERT INTO `gossip_menu` (`MenuID`, `TextID`) VALUES +(7868, 9635), +(7868, 9636); + +DELETE FROM `gossip_menu_option` WHERE `MenuID`=7868; +INSERT INTO `gossip_menu_option` (`MenuID`, `OptionID`, `OptionIcon`, `OptionText`, `OptionBroadcastTextID`, `OptionType`, `OptionNpcFlag`, `ActionMenuID`, `ActionPoiID`, `BoxCoded`, `BoxMoney`, `BoxText`, `BoxBroadcastTextID`) VALUES +(7868, 0, 0, 'I\'ll have you out of there in just a moment.', 16054, 1, 1, 0, 0, 0, 0, '', 0); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14, 15) AND `SourceGroup`=7868; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(14, 7868, 9635, 0, 0, 29, 1, 18472, 20, 0, 0, 0, 0, '', 'Gossip text requires boss Darkweaver Sith NOT defeated'), +(14, 7868, 9636, 0, 0, 29, 1, 18472, 20, 1, 0, 0, 0, '', 'Gossip text requires boss Darkweaver Sith defeated'), +(15, 7868, 0, 0, 0, 29, 1, 18472, 20, 1, 0, 0, 0, '', 'Gossip option requires boss Darkweaver Sith defeated'); + +DELETE FROM `npc_text` WHERE `ID`=9635; +INSERT INTO `npc_text` (`ID`, `text0_0`) VALUES +(9635,'Please, $r, get me out of here! Unlocking the cage will surely attract my brother\'s attention. Kill Darkweaver Syth!'); + +DELETE FROM `gameobject_template_addon` WHERE `entry`=183051; +INSERT INTO `gameobject_template_addon` VALUES +(183051,112,32,0,0,0,0,0,0); From 068227c1d97aab46858a9a545b33591261d2c793 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sat, 18 Feb 2023 17:22:58 +0000 Subject: [PATCH 05/72] chore(DB): import pending files Referenced commit(s): 333de4c0db6f3c965616950e4207f30620c31563 --- .../rev_1676735655098024400.sql => db_world/2023_02_18_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1676735655098024400.sql => db_world/2023_02_18_00.sql} (99%) diff --git a/data/sql/updates/pending_db_world/rev_1676735655098024400.sql b/data/sql/updates/db_world/2023_02_18_00.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1676735655098024400.sql rename to data/sql/updates/db_world/2023_02_18_00.sql index 654f20200..26df1a48a 100644 --- a/data/sql/updates/pending_db_world/rev_1676735655098024400.sql +++ b/data/sql/updates/db_world/2023_02_18_00.sql @@ -1,3 +1,4 @@ +-- DB update 2023_02_17_12 -> 2023_02_18_00 -- DELETE FROM `smart_scripts` WHERE `entryorguid`=18956 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`, `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 a7d0b8d0cb91d3b857e4c4b6835b7983ea074890 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Sat, 18 Feb 2023 14:23:48 -0300 Subject: [PATCH 06/72] fix(DB/Creature): Port Terokkar Forest rares from Mangos (#15089) --- .../rev_1676669931339119400.sql | 297 ++++++++++++++++++ 1 file changed, 297 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1676669931339119400.sql diff --git a/data/sql/updates/pending_db_world/rev_1676669931339119400.sql b/data/sql/updates/pending_db_world/rev_1676669931339119400.sql new file mode 100644 index 000000000..075d2f2a4 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676669931339119400.sql @@ -0,0 +1,297 @@ +-- Okrek +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 18685); +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`, `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 +(18685, 0, 0, 0, 9, 0, 100, 0, 0, 40, 3400, 4800, 0, 11, 14034, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Okrek - Within 0-40 Range - Cast \'Fireball\''), +(18685, 0, 1, 0, 0, 0, 100, 0, 6000, 8000, 6000, 10000, 0, 11, 12471, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Okrek - In Combat - Cast \'Shadow Bolt\''), +(18685, 0, 2, 0, 9, 0, 100, 0, 0, 10, 8500, 18000, 0, 11, 32711, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Okrek - Within 0-10 Range - Cast \'Shadow Nova\''), +(18685, 0, 3, 0, 23, 0, 100, 0, 13787, 0, 15000, 30000, 0, 11, 13787, 32, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Okrek - On Missing Aura \'Demon Armor\' - Cast \'Demon Armor\''); + +-- Doomsayer Jurim +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 18686); +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`, `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 +(18686, 0, 0, 0, 0, 0, 100, 0, 14000, 19000, 19000, 25000, 0, 11, 39212, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Doomsayer Jurim - In Combat - Cast \'Corruption\''), +(18686, 0, 1, 0, 0, 0, 100, 0, 9000, 14000, 11000, 16000, 0, 11, 38401, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Doomsayer Jurim - In Combat - Cast \'Incinerate\''), +(18686, 0, 2, 0, 0, 0, 100, 0, 8000, 14000, 15000, 21000, 0, 11, 39210, 64, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Doomsayer Jurim - In Combat - Cast \'Fear\''), +(18686, 0, 3, 0, 0, 0, 100, 0, 3000, 8000, 5000, 11000, 0, 11, 12493, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Doomsayer Jurim - In Combat - Cast \'Curse of Weakness\''), +(18686, 0, 4, 0, 9, 0, 100, 0, 0, 40, 3400, 4800, 0, 11, 12471, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Doomsayer Jurim - Within 0-40 Range - Cast \'Shadow Bolt\''); + +-- The Crippler AI +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 18689); +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`, `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 +(18689, 0, 0, 0, 0, 0, 100, 0, 3000, 5000, 11000, 15000, 0, 11, 39214, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Crippler - In Combat - Cast \'Pierce Armor\''), +(18689, 0, 1, 0, 0, 0, 100, 0, 8000, 12000, 13000, 18000, 0, 11, 38621, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Crippler - In Combat - Cast \'Debilitating Strike\''), +(18689, 0, 2, 0, 2, 0, 100, 1, 0, 50, 0, 0, 0, 11, 38882, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Crippler - Between 0-50% Health - Cast \'Bone Armor\' (No Repeat)'); + +SET @CGUID := 25087; + +DELETE FROM `creature` WHERE `id1` IN (18685, 18686); +INSERT INTO `creature` (`guid`, `id1`, `map`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `MovementType`) VALUES +(@CGUID+0, 18685, 530, 1, -1633.09, 4416.39, 52.1155, 5.98654, 79200, 2), +(@CGUID+1, 18685, 530, 1, -2564.99, 5437.01, 28.0524, 3.10727, 93600, 2), +(@CGUID+2, 18685, 530, 1, -1843.55, 3958.17, 46.5491, 4.04581, 100800, 2), +(@CGUID+3, 18685, 530, 1, -3551.84, 3999.6, 93.7046, 5.20977, 115200, 2), + +(@CGUID+4, 18686, 530, 0, -2847.33, 3195.11, 7.4167, 0.091094, 21600, 2), +(@CGUID+5, 18686, 530, 0, -1842.53, 4231.02, 20.9801, 2.23252, 21600, 2), +(@CGUID+6, 18686, 530, 0, -2595.42, 5118.68, 6.63357, 6.27732, 21600, 2); + +DELETE FROM `creature_addon` WHERE (`guid` IN (@CGUID+0,@CGUID+1,@CGUID+2,@CGUID+3,@CGUID+4,@CGUID+5,@CGUID+6,40470)); +INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(@CGUID+0, (@CGUID+0)*10, 0, 0, 1, 0, 0, ''), +(@CGUID+1, (@CGUID+1)*10, 0, 0, 1, 0, 0, ''), +(@CGUID+2, (@CGUID+2)*10, 0, 0, 1, 0, 0, ''), +(@CGUID+3, (@CGUID+3)*10, 0, 0, 1, 0, 0, ''), +(@CGUID+4, (@CGUID+4)*10, 0, 0, 1, 0, 0, ''), +(@CGUID+5, (@CGUID+5)*10, 0, 0, 1, 0, 0, ''), +(@CGUID+6, (@CGUID+6)*10, 0, 0, 1, 0, 0, ''); + +DELETE FROM `waypoint_data` WHERE `id` IN ((@CGUID+0)*10,(@CGUID+1)*10,(@CGUID+2)*10,(@CGUID+3)*10,(@CGUID+4)*10,(@CGUID+5)*10,(@CGUID+6)*10,404700); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`) VALUES +((@CGUID+0)*10, 1, -1633.09, 4416.39, 52.0432), +((@CGUID+0)*10, 2, -1618.41, 4410.16, 52.5576), +((@CGUID+0)*10, 3, -1606.43, 4420.26, 52.6329), +((@CGUID+0)*10, 4, -1611.34, 4435.12, 52.6265), +((@CGUID+0)*10, 5, -1624.94, 4436.8, 52.6168), +((@CGUID+0)*10, 6, -1633.09, 4416.39, 52.0432), +((@CGUID+1)*10, 1, -2564.99, 5437.01, 27.482), +((@CGUID+1)*10, 2, -2567.62, 5447.4, 27.2306), +((@CGUID+1)*10, 3, -2580.16, 5451.42, 27.2254), +((@CGUID+1)*10, 4, -2591.11, 5437.56, 27.2367), +((@CGUID+1)*10, 5, -2579.75, 5426.12, 26.9373), +((@CGUID+1)*10, 6, -2570.32, 5424.22, 26.635), +((@CGUID+1)*10, 7, -2552.85, 5407.97, 20.0038), +((@CGUID+1)*10, 8, -2535.35, 5390.59, 27.2097), +((@CGUID+1)*10, 9, -2535.96, 5370.64, 27.2342), +((@CGUID+1)*10, 10, -2515.76, 5363.92, 27.2173), +((@CGUID+1)*10, 11, -2515.27, 5379.05, 28.0072), +((@CGUID+2)*10, 1, -1843.55, 3958.17, 46.5491), +((@CGUID+2)*10, 2, -1849.11, 3959.83, 46.5567), +((@CGUID+2)*10, 3, -1856.92, 3952.97, 46.4926), +((@CGUID+2)*10, 4, -1856.12, 3938.67, 46.05), +((@CGUID+2)*10, 5, -1853.1, 3924.98, 45.3693), +((@CGUID+2)*10, 6, -1862.49, 3908.7, 39.1752), +((@CGUID+2)*10, 7, -1879.08, 3879.85, 45.4519), +((@CGUID+2)*10, 8, -1903.73, 3870.84, 45.3793), +((@CGUID+2)*10, 9, -1910.33, 3850.94, 45.4441), +((@CGUID+2)*10, 10, -1887.31, 3837.38, 45.4393), +((@CGUID+2)*10, 11, -1871.41, 3847.16, 45.4412), +((@CGUID+2)*10, 12, -1871.2, 3867.79, 45.4431), +((@CGUID+2)*10, 13, -1880.9, 3877.3, 45.4447), +((@CGUID+2)*10, 14, -1868.93, 3897.99, 39.0142), +((@CGUID+2)*10, 15, -1853.37, 3923.24, 45.3162), +((@CGUID+2)*10, 16, -1826.5, 3934.92, 46.5561), +((@CGUID+2)*10, 17, -1829.69, 3958.36, 46.5588), +((@CGUID+2)*10, 18, -1836.99, 3960.91, 46.5588), +((@CGUID+3)*10, 1, -3551.84, 3999.6, 93.7046), +((@CGUID+3)*10, 2, -3563.29, 4001.41, 91.8348), +((@CGUID+3)*10, 3, -3590.03, 4006.42, 75.3029), +((@CGUID+3)*10, 4, -3555.16, 4040.98, 69.5859), +((@CGUID+3)*10, 5, -3512.02, 4051.49, 60.9738), +((@CGUID+3)*10, 6, -3499.84, 4050.19, 59.424), +((@CGUID+3)*10, 7, -3482.48, 4033.23, 59.8893), +((@CGUID+3)*10, 8, -3461.45, 4028.88, 59.1618), +((@CGUID+3)*10, 9, -3428.89, 4011.93, 62.2547), +((@CGUID+3)*10, 10, -3386.09, 4008.06, 58.385), +((@CGUID+3)*10, 11, -3363.25, 4002.11, 58.7623), +((@CGUID+3)*10, 12, -3386.09, 4008.06, 58.385), +((@CGUID+3)*10, 13, -3428.89, 4011.93, 62.2547), +((@CGUID+3)*10, 14, -3461.45, 4028.88, 59.1618), +((@CGUID+3)*10, 15, -3482.48, 4033.23, 59.8893), +((@CGUID+3)*10, 16, -3499.84, 4050.19, 59.424), +((@CGUID+3)*10, 17, -3512.02, 4051.49, 60.9738), +((@CGUID+3)*10, 18, -3555.16, 4040.98, 69.5859), +((@CGUID+3)*10, 19, -3590.03, 4006.42, 75.3029), +((@CGUID+3)*10, 20, -3563.29, 4001.41, 91.8348), +((@CGUID+4)*10, 1, -2843.86, 3205.97, 5.45323), +((@CGUID+4)*10, 2, -2829.24, 3218.81, 9.59048), +((@CGUID+4)*10, 3, -2814.12, 3235.72, 10.1736), +((@CGUID+4)*10, 4, -2792.54, 3259.91, 5.91885), +((@CGUID+4)*10, 5, -2774.46, 3280.17, 2.8828), +((@CGUID+4)*10, 6, -2751.21, 3306.24, 0.199384), +((@CGUID+4)*10, 7, -2728.55, 3318.21, -0.833018), +((@CGUID+4)*10, 8, -2719.59, 3331.35, -1.04936), +((@CGUID+4)*10, 9, -2708.94, 3349.74, -0.819842), +((@CGUID+4)*10, 10, -2694.72, 3374.29, -0.156626), +((@CGUID+4)*10, 11, -2685.08, 3390.93, 0.328583), +((@CGUID+4)*10, 12, -2675.69, 3407.16, 0.474826), +((@CGUID+4)*10, 13, -2669.68, 3416.29, 0.743526), +((@CGUID+4)*10, 14, -2660.96, 3425.2, 0.805554), +((@CGUID+4)*10, 15, -2654.25, 3430.82, 0.77502), +((@CGUID+4)*10, 16, -2645.46, 3437.83, 1.28666), +((@CGUID+4)*10, 17, -2639.59, 3442.5, 3.25542), +((@CGUID+4)*10, 18, -2630.71, 3449.41, 1.86245), +((@CGUID+4)*10, 19, -2621.54, 3456.21, 0.653284), +((@CGUID+4)*10, 20, -2617.41, 3460.51, 0.593326), +((@CGUID+4)*10, 21, -2611.5, 3471.52, 0.520041), +((@CGUID+4)*10, 22, -2610.04, 3475.69, 0.53993), +((@CGUID+4)*10, 23, -2606.9, 3480.85, 0.492544), +((@CGUID+4)*10, 24, -2590.41, 3502.84, 0.225892), +((@CGUID+4)*10, 25, -2582.03, 3512, 0.101641), +((@CGUID+4)*10, 26, -2566.36, 3522.06, 0.189451), +((@CGUID+4)*10, 27, -2534.38, 3523.07, 1.3404), +((@CGUID+4)*10, 28, -2523.33, 3527.83, 1.66667), +((@CGUID+4)*10, 29, -2516.31, 3533.95, 1.65006), +((@CGUID+4)*10, 30, -2507.47, 3544.67, 1.56155), +((@CGUID+4)*10, 31, -2491.83, 3549.68, 1.43199), +((@CGUID+4)*10, 32, -2471.56, 3551.98, 1.23732), +((@CGUID+4)*10, 33, -2463.14, 3555.66, 1.03546), +((@CGUID+4)*10, 34, -2456.3, 3555.25, 0.942503), +((@CGUID+4)*10, 35, -2452.53, 3537.02, 0.402467), +((@CGUID+4)*10, 36, -2446.32, 3528.59, -0.236494), +((@CGUID+4)*10, 37, -2462.93, 3549.41, 1.08819), +((@CGUID+4)*10, 38, -2460.92, 3557.5, 1.00403), +((@CGUID+4)*10, 39, -2425.49, 3596.2, 0.274173), +((@CGUID+4)*10, 40, -2405.2, 3613.88, 0.217946), +((@CGUID+4)*10, 41, -2391.31, 3632.83, 0.792431), +((@CGUID+4)*10, 42, -2383.97, 3658.54, 0.99065), +((@CGUID+4)*10, 43, -2351.54, 3700.72, 0.420721), +((@CGUID+4)*10, 44, -2314.59, 3729.83, 0.0297019), +((@CGUID+4)*10, 45, -2296.57, 3749.89, 0.363868), +((@CGUID+4)*10, 46, -2285.44, 3767.7, 0.291327), +((@CGUID+4)*10, 47, -2279.3, 3787.95, 0.314858), +((@CGUID+4)*10, 48, -2276.3, 3799.32, 0.521091), +((@CGUID+4)*10, 49, -2254.61, 3831.13, 2.70024), +((@CGUID+4)*10, 50, -2251.75, 3848.92, 5.15061), +((@CGUID+4)*10, 51, -2249.52, 3869.55, 2.39354), +((@CGUID+4)*10, 52, -2244.66, 3893.46, 1.58335), +((@CGUID+4)*10, 53, -2239.88, 3904.19, 1.10899), +((@CGUID+4)*10, 54, -2224.28, 3927.45, 0.706091), +((@CGUID+4)*10, 55, -2187.45, 3958.22, 0.921813), +((@CGUID+4)*10, 56, -2175.09, 3978.98, 0.929392), +((@CGUID+4)*10, 57, -2171.14, 4011.04, 0.450247), +((@CGUID+4)*10, 58, -2175.93, 4027.88, 0.519539), +((@CGUID+4)*10, 59, -2187.96, 4064.43, 1.4281), +((@CGUID+4)*10, 60, -2166.44, 4102.49, 4.27243), +((@CGUID+4)*10, 61, -1700.15, 3993.57, 55.6859), +((@CGUID+4)*10, 62, -1710.59, 4034.97, 60.6101), +((@CGUID+4)*10, 63, -1719.95, 4059.83, 62.7452), +((@CGUID+4)*10, 64, -1718.67, 4104.32, 64.3796), +((@CGUID+4)*10, 65, -1743.77, 4151.6, 62.3929), +((@CGUID+4)*10, 66, -1754.61, 4173.29, 58.3691), +((@CGUID+4)*10, 67, -1788.41, 4206.51, 44.1839), +((@CGUID+4)*10, 68, -1818.93, 4214.12, 33.1137), +((@CGUID+4)*10, 69, -1841.51, 4228.1, 22.0741), +((@CGUID+4)*10, 70, -1871.54, 4263.5, 8.22153), +((@CGUID+4)*10, 71, -1891, 4295.91, 3.23019), +((@CGUID+4)*10, 72, -1911.96, 4351.49, 1.66825), +((@CGUID+4)*10, 73, -1910.12, 4389.42, 1.77078), +((@CGUID+4)*10, 74, -1907.67, 4417.31, 2.99456), +((@CGUID+4)*10, 75, -1917.63, 4452.07, 6.27493), +((@CGUID+4)*10, 76, -1929.4, 4473.47, 8.90937), +((@CGUID+4)*10, 77, -1942.74, 4489.67, 11.1029), +((@CGUID+4)*10, 78, -1958.47, 4508.45, 12.7432), +((@CGUID+4)*10, 79, -1975.36, 4519.94, 13.1616), +((@CGUID+4)*10, 80, -1982.19, 4524.49, 13.0993), +((@CGUID+4)*10, 81, -1983.38, 4507.03, 12.7591), +((@CGUID+4)*10, 82, -1984.02, 4496.55, 11.9535), +((@CGUID+4)*10, 83, -1984.87, 4482.57, 11.1499), +((@CGUID+4)*10, 84, -1978.92, 4509.87, 12.6695), +((@CGUID+4)*10, 85, -1978.12, 4527.35, 13.36), +((@CGUID+4)*10, 86, -1967.33, 4546.79, 12.8741), +((@CGUID+4)*10, 87, -1953.04, 4566.47, 10.1123), +((@CGUID+4)*10, 88, -1946.5, 4582.91, 7.44598), +((@CGUID+4)*10, 89, -1948.3, 4599.58, 4.61956), +((@CGUID+4)*10, 90, -1955.08, 4637.48, -0.0588505), +((@CGUID+4)*10, 91, -1943.63, 4685.04, -2.18987), +((@CGUID+4)*10, 92, -1941.99, 4705.25, -2.67768), +((@CGUID+4)*10, 93, -1945.22, 4727.47, -3.22917), +((@CGUID+4)*10, 94, -1951.89, 4748.79, -2.9388), +((@CGUID+4)*10, 95, -1957.77, 4773.7, -1.42409), +((@CGUID+4)*10, 96, -1957.36, 4798.11, -0.0807409), +((@CGUID+4)*10, 97, -1944.66, 4829.17, 0.67), +((@CGUID+4)*10, 98, -1929.68, 4851.09, 1.64973), +((@CGUID+4)*10, 99, -1918.23, 4883.89, 2.11937), +((@CGUID+4)*10, 100, -1901.18, 4906.49, -1.12705), +((@CGUID+4)*10, 101, -1881.87, 4926.69, -9.60835), +((@CGUID+4)*10, 102, -1870.05, 4946.21, -17.0149), +((@CGUID+4)*10, 103, -1866.49, 4960.25, -20.2899), +((@CGUID+4)*10, 104, -1860.94, 5033.3, -26.0991), +((@CGUID+4)*10, 105, -1869.8, 4962.46, -20.3781), +((@CGUID+4)*10, 106, -1884.86, 4924.67, -8.30171), +((@CGUID+4)*10, 107, -1904.83, 4905.16, -0.202733), +((@CGUID+4)*10, 108, -1922.67, 4912.5, 6.06643), +((@CGUID+4)*10, 109, -1937.46, 4934.99, 14.8054), +((@CGUID+4)*10, 110, -1953.22, 4961.69, 24.7149), +((@CGUID+4)*10, 111, -1958.07, 4992.99, 30.1767), +((@CGUID+4)*10, 112, -1958.74, 5013.42, 32.4293), +((@CGUID+4)*10, 113, -1947.03, 5042.52, 25.2899), +((@CGUID+4)*10, 114, -1942.58, 5058.03, 19.5292), +((@CGUID+4)*10, 115, -1963.32, 5083.08, 11.1075), +((@CGUID+4)*10, 116, -1984.5, 5100.08, 7.82778), +((@CGUID+4)*10, 117, -2004.59, 5114.07, 8.26657), +((@CGUID+4)*10, 118, -2029.48, 5123.26, 8.48839), +((@CGUID+4)*10, 119, -2055.94, 5125.38, 7.48301), +((@CGUID+4)*10, 120, -2089.33, 5115.44, 3.14184), +((@CGUID+4)*10, 121, -2112.53, 5107.32, -2.40737), +((@CGUID+4)*10, 122, -2137.4, 5108.51, -11.5709), +((@CGUID+4)*10, 123, -2155.69, 5115.97, -18.1534), +((@CGUID+4)*10, 124, -2170.6, 5125.13, -21.2824), +((@CGUID+4)*10, 125, -2182.81, 5131.87, -21.667), +((@CGUID+4)*10, 126, -2198.88, 5138.77, -21.2323), +((@CGUID+4)*10, 127, -2219.62, 5144.57, -19.6848), +((@CGUID+4)*10, 128, -2238.57, 5146.29, -17.4706), +((@CGUID+4)*10, 129, -2266.45, 5144.26, -13.0598), +((@CGUID+4)*10, 130, -2290.86, 5142.23, -9.17377), +((@CGUID+4)*10, 131, -2308.35, 5142.09, -7.11532), +((@CGUID+4)*10, 132, -2333.72, 5149.44, -5.0165), +((@CGUID+4)*10, 133, -2365.45, 5157.88, -2.8501), +((@CGUID+4)*10, 134, -2390.26, 5158.22, -1.19618), +((@CGUID+4)*10, 135, -2417.84, 5153.35, 0.775549), +((@CGUID+4)*10, 136, -2442.28, 5142.04, 3.53141), +((@CGUID+4)*10, 137, -2469.81, 5120.56, 6.76948), +((@CGUID+4)*10, 138, -2498.06, 5115.06, 7.87731), +((@CGUID+4)*10, 139, -2532.85, 5118.89, 7.54034), +((@CGUID+4)*10, 140, -2555.6, 5120.59, 7.69492), +((@CGUID+5)*10, 1, -1842.53, 4231.02, 20.9801), +((@CGUID+5)*10, 2, -1869.21, 4261.13, 8.89557), +((@CGUID+5)*10, 3, -1881.34, 4278.1, 5.5224), +((@CGUID+5)*10, 4, -1912.25, 4349.02, 1.68234), +((@CGUID+5)*10, 5, -1914.46, 4374.06, 1.6238), +((@CGUID+5)*10, 6, -1907.34, 4411.19, 2.60279), +((@CGUID+5)*10, 7, -1910.76, 4438.84, 4.91422), +((@CGUID+5)*10, 8, -1931.52, 4475.42, 9.21656), +((@CGUID+5)*10, 9, -1970.77, 4515.64, 13.0504), +((@CGUID+5)*10, 10, -1976.75, 4527.05, 13.3934), +((@CGUID+5)*10, 11, -1972.72, 4539.17, 13.3457), +((@CGUID+5)*10, 12, -1946.46, 4597.88, 4.94647), +((@CGUID+5)*10, 13, -1956.85, 4637.1, 0.01026), +((@CGUID+5)*10, 14, -1940.22, 4702.82, -2.56809), +((@CGUID+5)*10, 15, -1949.24, 4739.94, -3.13258), +((@CGUID+5)*10, 16, -1955.66, 4753.73, -2.74301), +((@CGUID+5)*10, 17, -1959.56, 4796.31, -0.128966), +((@CGUID+5)*10, 18, -1921.66, 4869.82, 1.85516), +((@CGUID+5)*10, 19, -1915.69, 4891.67, 2.15411), +((@CGUID+5)*10, 20, -1888.97, 4918.59, -5.75911), +((@CGUID+5)*10, 21, -1869.05, 4946.2, -17.1173), +((@CGUID+5)*10, 22, -1865.53, 4978.99, -22.5178), +((@CGUID+6)*10, 1, -2595.42, 5118.68, 6.63357), +((@CGUID+6)*10, 2, -2546, 5122.18, 7.52113), +((@CGUID+6)*10, 3, -2485.8, 5112.25, 7.9062), +((@CGUID+6)*10, 4, -2440.9, 5141.97, 3.35802), +((@CGUID+6)*10, 5, -2416.25, 5152.64, 0.680542), +((@CGUID+6)*10, 6, -2378.67, 5159.02, -1.98798), +((@CGUID+6)*10, 7, -2338.08, 5151.37, -4.80083), +((@CGUID+6)*10, 8, -2307.95, 5141.67, -7.15532), +((@CGUID+6)*10, 9, -2276.08, 5142.61, -11.4779), +((@CGUID+6)*10, 10, -2228.73, 5147.82, -18.686), +((@CGUID+6)*10, 11, -2200.59, 5140.23, -21.1159), +((@CGUID+6)*10, 12, -2165.21, 5123.69, -20.855), +((@CGUID+6)*10, 13, -2148.15, 5138.56, -22.1488); + +-- Pooling +DELETE FROM `pool_template` WHERE `entry`=1073 AND `description` LIKE '%Okrek%'; +DELETE FROM `pool_template` WHERE `entry`=1117 AND `description`='Doomsayer Jurim (18686)'; +INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES +(1073, 1, 'Okrek (18685)'), +(1117, 1, 'Doomsayer Jurim (18686)'); + +DELETE FROM `pool_creature` WHERE `pool_entry`=1073 AND `description` LIKE '%Okrek%'; +DELETE FROM `pool_creature` WHERE `pool_entry`=1117 AND `description`='Doomsayer Jurim (18686)'; +INSERT INTO `pool_creature` (`guid`, `pool_entry`, `chance`, `description`) VALUES +(@CGUID+0, 1073, 0, 'Okrek (18685)'), +(@CGUID+1, 1073, 0, 'Okrek (18685)'), +(@CGUID+2, 1073, 0, 'Okrek (18685)'), +(@CGUID+3, 1073, 0, 'Okrek (18685)'), +(@CGUID+4, 1117, 0, 'Doomsayer Jurim (18686)'), +(@CGUID+5, 1117, 0, 'Doomsayer Jurim (18686)'), +(@CGUID+6, 1117, 0, 'Doomsayer Jurim (18686)'); From daa662dd069251c07fbdc0213f5acb0496551ae0 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Sat, 18 Feb 2023 14:24:10 -0300 Subject: [PATCH 07/72] fix(DB/Creature): Port Netherstorm rares from Mangos (#15083) --- .../rev_1676644474129128500.sql | 328 ++++++++++++++++++ 1 file changed, 328 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1676644474129128500.sql diff --git a/data/sql/updates/pending_db_world/rev_1676644474129128500.sql b/data/sql/updates/pending_db_world/rev_1676644474129128500.sql new file mode 100644 index 000000000..4f2bdbcc3 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676644474129128500.sql @@ -0,0 +1,328 @@ +-- Chief Engineer Lorthander +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 18697); +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`, `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 +(18697, 0, 0, 0, 2, 0, 100, 1, 0, 15, 0, 0, 0, 25, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Chief Engineer Lorthander - Between 0-15% Health - Flee For Assist (No Repeat)'), +(18697, 0, 1, 0, 0, 0, 100, 0, 8000, 14000, 12000, 15000, 0, 11, 38898, 64, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Chief Engineer Lorthander - In Combat - Cast \'Arcane Unlocking\''), +(18697, 0, 2, 0, 0, 0, 100, 0, 15000, 21000, 15000, 21000, 0, 11, 36843, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Chief Engineer Lorthander - In Combat - Cast \'Slow\''), +(18697, 0, 3, 0, 0, 0, 100, 0, 0, 0, 3400, 4800, 0, 11, 38204, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Chief Engineer Lorthander - In Combat - Cast \'Arcane Bolt\''); + +-- Ever-Core comments +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 18698) AND (`source_type` = 0) AND (`id` IN (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`, `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 +(18698, 0, 1, 0, 0, 0, 100, 0, 4000, 8000, 18000, 22000, 0, 11, 35892, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ever-Core the Punisher - In Combat - Cast \'Suppression\''), +(18698, 0, 2, 0, 9, 0, 100, 0, 0, 8, 19000, 23000, 0, 11, 33860, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ever-Core the Punisher - Within 0-8 Range - Cast \'Arcane Explosion\''); + +-- Nuramoc +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 20932); +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`, `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 +(20932, 0, 0, 0, 4, 0, 100, 0, 0, 0, 0, 0, 0, 11, 38905, 64, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Nuramoc - On Aggro - Cast \'Prismatic Shield\''), +(20932, 0, 1, 0, 0, 0, 100, 0, 2000, 3000, 4000, 7000, 0, 11, 21971, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Nuramoc - In Combat - Cast \'Poison Bolt\''), +(20932, 0, 2, 0, 0, 0, 100, 0, 0, 0, 2000, 5000, 0, 11, 15797, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Nuramoc - In Combat - Cast \'Lightning Breath\''); + +-- Spawns +SET @CGUID := 24935; + +DELETE FROM `creature` WHERE `id1` IN (18697, 18698, 20932); +INSERT INTO `creature` (`guid`, `id1`, `map`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `MovementType`) VALUES +-- Chief Engineer Lorthander +(@CGUID+0, 18697, 530, 1, 4081.08, 4001.03, 119.01, 4.57457, 75600, 2), +(@CGUID+1, 18697, 530, 1, 2412.86, 2894.41, 131.323, 3.35328, 93600, 2), +(@CGUID+2, 18697, 530, 1, 3000.46, 2187.57, 164.398, 5.2995, 115200, 2), +-- Ever-Core +(@CGUID+3, 18698, 530, 0, 4029.03, 4134.35, 191.496, 4.54011, 86400, 2), +(@CGUID+4, 18698, 530, 0, 2943.06, 4351.28, 142.359, 0.000215, 104400, 2), +(@CGUID+5, 18698, 530, 0, 3706.06, 2078.25, 151.867, 1.03066, 115200, 2), +-- Nuramoc +(@CGUID+6, 20932, 530, 0, 3280.81, 1907.83, 133.229, 1.89858, 28800, 2), +(@CGUID+7, 20932, 530, 0, 2817.23, 2929.54, 130.138, 2.32736, 39600, 2), +(@CGUID+8, 20932, 530, 0, 4788.54, 3503.49, 119.851, 3.12453, 50400, 2); + +DELETE FROM `creature_addon` WHERE (`guid` IN (@CGUID+0,@CGUID+1,@CGUID+2,@CGUID+3,@CGUID+4,@CGUID+5,@CGUID+6,@CGUID+7,@CGUID+8,86860)); +INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(@CGUID+0, (@CGUID+0)*10, 0, 0, 1, 0, 0, ''), +(@CGUID+1, (@CGUID+1)*10, 0, 0, 1, 0, 0, ''), +(@CGUID+2, (@CGUID+2)*10, 0, 0, 1, 0, 0, ''), +(@CGUID+3, (@CGUID+3)*10, 0, 0, 1, 0, 0, ''), +(@CGUID+4, (@CGUID+4)*10, 0, 0, 1, 0, 0, ''), +(@CGUID+5, (@CGUID+5)*10, 0, 0, 1, 0, 0, ''), +(@CGUID+6, (@CGUID+6)*10, 0, 0, 1, 0, 0, ''), +(@CGUID+7, (@CGUID+7)*10, 0, 0, 1, 0, 0, ''), +(@CGUID+8, (@CGUID+8)*10, 0, 0, 1, 0, 0, ''); + +DELETE FROM `waypoint_data` WHERE `id` IN ((@CGUID+0)*10,(@CGUID+1)*10,(@CGUID+2)*10,(@CGUID+3)*10,(@CGUID+4)*10,(@CGUID+5)*10,(@CGUID+6)*10,(@CGUID+7)*10,(@CGUID+8)*10,868600); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`) VALUES +-- Chief Engineer Lorthander +((@CGUID+0)*10, 1, 4081.08, 4001.03, 119.01), +((@CGUID+0)*10, 2, 4087.54, 4006.7, 117.744), +((@CGUID+0)*10, 3, 4097.75, 4003.55, 116.437), +((@CGUID+0)*10, 4, 4107.33, 3987.76, 118.036), +((@CGUID+0)*10, 5, 4074.27, 3980.02, 118.22), +((@CGUID+0)*10, 6, 4079.4, 3988.14, 118.289), +((@CGUID+1)*10, 1, 2412.86, 2894.41, 131.323), +((@CGUID+1)*10, 2, 2435.58, 2900.06, 130.183), +((@CGUID+1)*10, 3, 2463.95, 2909.32, 128.59), +((@CGUID+1)*10, 4, 2477.04, 2917.6, 128.541), +((@CGUID+1)*10, 5, 2484.46, 2904.05, 130.643), +((@CGUID+1)*10, 6, 2488, 2892.2, 132.342), +((@CGUID+1)*10, 7, 2484.72, 2881.2, 133.059), +((@CGUID+1)*10, 8, 2450.92, 2852.48, 131.622), +((@CGUID+1)*10, 9, 2424.88, 2797.83, 134.493), +((@CGUID+1)*10, 10, 2426.77, 2750.39, 133.243), +((@CGUID+1)*10, 11, 2426.77, 2750.39, 133.243), +((@CGUID+1)*10, 12, 2368, 2673.64, 132.39), +((@CGUID+1)*10, 13, 2443.76, 2745.36, 134.493), +((@CGUID+1)*10, 14, 2423.25, 2797.12, 134.491), +((@CGUID+1)*10, 15, 2448.63, 2849.79, 132.632), +((@CGUID+1)*10, 16, 2486.16, 2882.9, 133.075), +((@CGUID+1)*10, 17, 2484.64, 2905.67, 130.354), +((@CGUID+1)*10, 18, 2489.72, 2915.52, 128.954), +((@CGUID+1)*10, 19, 2476.47, 2917.2, 128.513), +((@CGUID+1)*10, 20, 2447.81, 2900.57, 129.188), +((@CGUID+2)*10, 1, 3000.46, 2187.57, 164.398), +((@CGUID+2)*10, 2, 3018.52, 2186.65, 165.329), +((@CGUID+2)*10, 3, 3076.56, 2210.99, 160.886), +((@CGUID+2)*10, 4, 3103.56, 2222.24, 155.355), +((@CGUID+2)*10, 5, 3124.82, 2243.5, 150.057), +((@CGUID+2)*10, 6, 3117.8, 2253.66, 149.953), +((@CGUID+2)*10, 7, 3096.61, 2268.98, 150.102), +((@CGUID+2)*10, 8, 3083.4, 2290.85, 150.485), +((@CGUID+2)*10, 9, 3054.61, 2284.5, 151.691), +((@CGUID+2)*10, 10, 3021.72, 2284.59, 158.405), +((@CGUID+2)*10, 11, 3009.22, 2292.73, 161.266), +((@CGUID+2)*10, 12, 2983.65, 2288.22, 161.706), +((@CGUID+2)*10, 13, 2956.54, 2284.38, 161.727), +((@CGUID+2)*10, 14, 2941.33, 2263.89, 161.708), +((@CGUID+2)*10, 15, 2966.96, 2206.15, 165.329), +-- Ever-Core +((@CGUID+3)*10, 1, 4029.03, 4134.35, 191.496), +((@CGUID+3)*10, 2, 4021.06, 4144.61, 191.502), +((@CGUID+3)*10, 3, 4007.77, 4151.29, 191.586), +((@CGUID+3)*10, 4, 3991.62, 4152.59, 191.401), +((@CGUID+3)*10, 5, 3966.21, 4145.5, 191.295), +((@CGUID+3)*10, 6, 3937.03, 4122.04, 192.695), +((@CGUID+3)*10, 7, 3924.13, 4093.4, 191.789), +((@CGUID+3)*10, 8, 3911.34, 4060.71, 187.287), +((@CGUID+3)*10, 9, 3880.16, 4036.23, 183.365), +((@CGUID+3)*10, 10, 3879.16, 4023.95, 183.11), +((@CGUID+3)*10, 11, 3890.49, 4005.85, 183.428), +((@CGUID+3)*10, 12, 3874, 3968.38, 183.774), +((@CGUID+3)*10, 13, 3873.48, 3953.19, 182.426), +((@CGUID+3)*10, 14, 3884.47, 3936.53, 179.405), +((@CGUID+3)*10, 15, 3915.08, 3918.04, 176.204), +((@CGUID+3)*10, 16, 3952.32, 3889.77, 174.977), +((@CGUID+3)*10, 17, 3965.74, 3872.72, 171.607), +((@CGUID+3)*10, 18, 3972.39, 3852.88, 166.197), +((@CGUID+3)*10, 19, 3969.66, 3840.88, 162.264), +((@CGUID+3)*10, 20, 3961.25, 3833.68, 158.329), +((@CGUID+3)*10, 21, 3908.53, 3834.6, 129.743), +((@CGUID+3)*10, 22, 3898.06, 3828.14, 123.788), +((@CGUID+3)*10, 23, 3898.27, 3787.49, 118.457), +((@CGUID+3)*10, 24, 3881.31, 3790.1, 116.619), +((@CGUID+3)*10, 25, 3865.28, 3804.66, 111.946), +((@CGUID+3)*10, 26, 3853.11, 3824.74, 106.821), +((@CGUID+3)*10, 27, 3847.02, 3830.68, 105.424), +((@CGUID+3)*10, 28, 3830.93, 3836.43, 103.431), +((@CGUID+3)*10, 29, 3817.24, 3851.85, 103.623), +((@CGUID+3)*10, 30, 3807.24, 3877.86, 105.557), +((@CGUID+3)*10, 31, 3792.14, 3888.13, 106.755), +((@CGUID+3)*10, 32, 3790.1, 3912.19, 109.532), +((@CGUID+3)*10, 33, 3798.19, 3938.67, 112.965), +((@CGUID+3)*10, 34, 3789.57, 3968.79, 114.346), +((@CGUID+3)*10, 35, 3790.27, 3993.03, 116.942), +((@CGUID+3)*10, 36, 3801.81, 4011.81, 121.598), +((@CGUID+4)*10, 1, 2943.06, 4351.28, 142.359), +((@CGUID+4)*10, 2, 2976.56, 4326.1, 146.657), +((@CGUID+4)*10, 3, 2984.38, 4318.63, 140.43), +((@CGUID+4)*10, 4, 3003.09, 4297.83, 144.609), +((@CGUID+4)*10, 5, 2997.3, 4273.92, 155.499), +((@CGUID+4)*10, 6, 2992.4, 4259.44, 159.899), +((@CGUID+4)*10, 7, 3011.36, 4227.12, 160.779), +((@CGUID+4)*10, 8, 3014.4, 4166.68, 159.855), +((@CGUID+4)*10, 9, 3022.76, 4153.83, 152.368), +((@CGUID+4)*10, 10, 3020.22, 4124.82, 150.603), +((@CGUID+4)*10, 11, 3010.89, 4107.9, 151.056), +((@CGUID+4)*10, 12, 3002.58, 4075.26, 150.101), +((@CGUID+4)*10, 13, 2986.18, 4047.61, 149.975), +((@CGUID+4)*10, 14, 2977.22, 4041.37, 149.782), +((@CGUID+4)*10, 15, 2967.34, 4049.68, 152.343), +((@CGUID+4)*10, 16, 2950.84, 4040.8, 153.404), +((@CGUID+4)*10, 17, 2910.14, 4011.95, 149.729), +((@CGUID+4)*10, 18, 2903.81, 3989.59, 148.75), +((@CGUID+4)*10, 19, 2888.34, 3972.1, 142.151), +((@CGUID+4)*10, 20, 2863.86, 3981.41, 141.777), +((@CGUID+4)*10, 21, 2836.9, 4004.29, 142.699), +((@CGUID+4)*10, 22, 2781.39, 3991.13, 144.969), +((@CGUID+4)*10, 23, 2758.93, 3999.78, 143.672), +((@CGUID+4)*10, 24, 2709.58, 4046.75, 150.37), +((@CGUID+4)*10, 25, 2650.82, 4095.06, 154.381), +((@CGUID+4)*10, 26, 2643.3, 4149.94, 158.604), +((@CGUID+4)*10, 27, 2636.57, 4196.3, 155.13), +((@CGUID+4)*10, 28, 2660.27, 4236.62, 154.33), +((@CGUID+4)*10, 29, 2669.6, 4252.5, 154.308), +((@CGUID+4)*10, 30, 2720.43, 4272.12, 153.934), +((@CGUID+4)*10, 31, 2742.16, 4288.13, 152.346), +((@CGUID+4)*10, 32, 2800.91, 4303.42, 151.593), +((@CGUID+4)*10, 33, 2830.31, 4316.65, 148.175), +((@CGUID+4)*10, 34, 2859.57, 4281.49, 158.539), +((@CGUID+4)*10, 35, 2870.11, 4280.62, 159.52), +((@CGUID+4)*10, 36, 2904.21, 4279.1, 156.87), +((@CGUID+4)*10, 37, 2931.21, 4314.67, 145.769), +((@CGUID+4)*10, 38, 2936.37, 4335.05, 147.717), +((@CGUID+4)*10, 39, 2935.57, 4348.43, 142.903), +((@CGUID+4)*10, 40, 2943.06, 4351.28, 142.359), +((@CGUID+5)*10, 1, 3706.06, 2078.25, 151.867), +((@CGUID+5)*10, 2, 3726.17, 2118.53, 149.248), +((@CGUID+5)*10, 3, 3753.52, 2168.87, 140.165), +((@CGUID+5)*10, 4, 3775.75, 2208.89, 144.852), +((@CGUID+5)*10, 5, 3780.36, 2229.51, 148.832), +((@CGUID+5)*10, 6, 3787.88, 2241.95, 149.93), +((@CGUID+5)*10, 7, 3805.08, 2254.19, 147.519), +((@CGUID+5)*10, 8, 3817.69, 2273.88, 148.95), +((@CGUID+5)*10, 9, 3855.16, 2269.88, 152.406), +((@CGUID+5)*10, 10, 3882.21, 2283.25, 154.278), +((@CGUID+5)*10, 11, 3916.8, 2277.97, 156.756), +((@CGUID+5)*10, 12, 3945.83, 2280.16, 159.016), +((@CGUID+5)*10, 13, 3994.1, 2271.92, 162.937), +((@CGUID+5)*10, 14, 4012.48, 2250.07, 163.409), +((@CGUID+5)*10, 15, 4052.18, 2235.04, 163.544), +((@CGUID+5)*10, 16, 4068.36, 2220.2, 164.592), +((@CGUID+5)*10, 17, 4079.98, 2202.1, 163.79), +((@CGUID+5)*10, 18, 4097.22, 2184.98, 160.829), +((@CGUID+5)*10, 19, 4103.19, 2154.2, 159.513), +((@CGUID+5)*10, 20, 4112.25, 2148.36, 158.521), +((@CGUID+5)*10, 21, 4143.31, 2141.96, 156.943), +((@CGUID+5)*10, 22, 4167.26, 2149.15, 157.128), +((@CGUID+5)*10, 23, 4200.38, 2173.98, 151.071), +((@CGUID+5)*10, 24, 4233.12, 2141.78, 147.754), +((@CGUID+5)*10, 25, 4244.52, 2118.75, 145.07), +((@CGUID+5)*10, 26, 4247.28, 2078.07, 143.644), +((@CGUID+5)*10, 27, 4263.61, 2039.35, 137.724), +((@CGUID+5)*10, 28, 4262.84, 2019.98, 134.967), +((@CGUID+5)*10, 29, 4256.09, 2007.07, 130.557), +((@CGUID+5)*10, 30, 4250.27, 1995.93, 135.552), +((@CGUID+5)*10, 31, 4250.13, 1967.99, 137.595), +((@CGUID+5)*10, 32, 4265.63, 1935, 137.639), +((@CGUID+5)*10, 33, 4266.21, 1898.98, 138.695), +((@CGUID+5)*10, 34, 4259, 1877.24, 140.059), +((@CGUID+5)*10, 35, 4223.69, 1842.53, 142.999), +((@CGUID+5)*10, 36, 4215.04, 1824.57, 141.276), +((@CGUID+5)*10, 37, 4207.37, 1795.16, 137.364), +((@CGUID+5)*10, 38, 4187.92, 1757.34, 130.795), +((@CGUID+5)*10, 39, 4151.56, 1755.07, 132.442), +((@CGUID+5)*10, 40, 4136.05, 1751.07, 133.77), +((@CGUID+5)*10, 41, 4124.27, 1755.99, 136.623), +((@CGUID+5)*10, 42, 4069.32, 1753.11, 144.431), +((@CGUID+5)*10, 43, 4039.85, 1741.67, 145.595), +((@CGUID+5)*10, 44, 3967.11, 1700.39, 145.255), +((@CGUID+5)*10, 45, 3943.89, 1684.72, 140.837), +((@CGUID+5)*10, 46, 3889.03, 1685.44, 138.774), +((@CGUID+5)*10, 47, 3849.84, 1667.25, 138.58), +((@CGUID+5)*10, 48, 3834.11, 1671.52, 140.663), +((@CGUID+5)*10, 49, 3813.53, 1684.09, 145.686), +((@CGUID+5)*10, 50, 3800.66, 1696.89, 151.409), +((@CGUID+5)*10, 51, 3788.9, 1727.14, 167.273), +((@CGUID+5)*10, 52, 3796.24, 1751.33, 177.772), +((@CGUID+5)*10, 53, 3775.68, 1766.3, 170.866), +((@CGUID+5)*10, 54, 3759.51, 1784.82, 163.141), +((@CGUID+5)*10, 55, 3679.22, 1853.57, 126.875), +((@CGUID+5)*10, 56, 3660.26, 1896.73, 120.891), +((@CGUID+5)*10, 57, 3662.77, 1912.97, 117.708), +((@CGUID+5)*10, 58, 3674.79, 1927.2, 115.677), +((@CGUID+5)*10, 59, 3677.09, 1977.38, 120.129), +((@CGUID+5)*10, 60, 3702.1, 2003.87, 128.244), +((@CGUID+5)*10, 61, 3701.96, 2031.67, 133.85), +((@CGUID+5)*10, 62, 3721.18, 2044.33, 142.94), +((@CGUID+5)*10, 63, 3724.31, 2061.48, 146.105), +-- Nuramoc +((@CGUID+6)*10, 1, 3250.51, 1961.25, 132.385), +((@CGUID+6)*10, 2, 3228.29, 2001.11, 138.882), +((@CGUID+6)*10, 3, 3235.93, 2084.18, 135.385), +((@CGUID+6)*10, 4, 3239.06, 2128.28, 137.825), +((@CGUID+6)*10, 5, 3207.12, 2151.5, 136.752), +((@CGUID+6)*10, 6, 3213.69, 2229.01, 138.009), +((@CGUID+6)*10, 7, 3231.47, 2305.03, 124.795), +((@CGUID+6)*10, 8, 3231.7, 2393.11, 103.663), +((@CGUID+6)*10, 9, 3269.73, 2434.75, 74.4029), +((@CGUID+6)*10, 10, 3332.71, 2467.68, 85.8992), +((@CGUID+6)*10, 11, 3384.93, 2532.03, 110.799), +((@CGUID+6)*10, 12, 3438.84, 2578.09, 142.708), +((@CGUID+6)*10, 13, 3342.11, 2593.94, 188.744), +((@CGUID+6)*10, 14, 3214.78, 2476.76, 98.5975), +((@CGUID+6)*10, 15, 3258.1, 2439.65, 112.365), +((@CGUID+6)*10, 16, 3305.8, 2397.5, 135.329), +((@CGUID+6)*10, 17, 3379.15, 2306.53, 96.941), +((@CGUID+6)*10, 18, 3302.31, 2171.94, 123.625), +((@CGUID+6)*10, 19, 3274.61, 2098.45, 115.694), +((@CGUID+6)*10, 20, 3180.44, 1989.87, 164.138), +((@CGUID+6)*10, 21, 3160.3, 1887, 152.491), +((@CGUID+6)*10, 22, 3152.02, 1758.62, 160.324), +((@CGUID+6)*10, 23, 3155.54, 1702.77, 140.429), +((@CGUID+6)*10, 24, 3255.68, 1751.95, 124.196), +((@CGUID+6)*10, 25, 3290.94, 1785.01, 139.078), +((@CGUID+6)*10, 26, 3301.79, 1853.55, 131.618), +((@CGUID+6)*10, 27, 3283.64, 1905.23, 124.957), +((@CGUID+6)*10, 28, 3280.69, 1911.33, 120.78), +((@CGUID+7)*10, 1, 2817.23, 2929.54, 122.393), +((@CGUID+7)*10, 2, 2730.13, 3012.53, 128.227), +((@CGUID+7)*10, 3, 2675.16, 3059.62, 128.247), +((@CGUID+7)*10, 4, 2645.27, 3091.27, 134.927), +((@CGUID+7)*10, 5, 2624.72, 3174.52, 141.912), +((@CGUID+7)*10, 6, 2596.74, 3254.45, 140.111), +((@CGUID+7)*10, 7, 2552.73, 3278.38, 127.29), +((@CGUID+7)*10, 8, 2510.04, 3311.72, 120.465), +((@CGUID+7)*10, 9, 2465.47, 3374.43, 123.69), +((@CGUID+7)*10, 10, 2499.48, 3465.25, 129.593), +((@CGUID+7)*10, 11, 2509.5, 3562.82, 131.936), +((@CGUID+7)*10, 12, 2486.69, 3644.09, 124.994), +((@CGUID+7)*10, 13, 2483.76, 3717.01, 126.238), +((@CGUID+7)*10, 14, 2452.58, 3773.66, 119.516), +((@CGUID+7)*10, 15, 2449.44, 3869.47, 118.01), +((@CGUID+7)*10, 16, 2441.61, 3954.58, 121.328), +((@CGUID+7)*10, 17, 2416.61, 4001.19, 115.294), +((@CGUID+7)*10, 18, 2434.59, 4063.79, 126.034), +((@CGUID+7)*10, 19, 2500.28, 4197.05, 136.513), +((@CGUID+8)*10, 1, 4788.54, 3503.49, 121.951), +((@CGUID+8)*10, 2, 4706.67, 3520.02, 136.092), +((@CGUID+8)*10, 3, 4637.13, 3533.71, 144.088), +((@CGUID+8)*10, 4, 4573.97, 3523.54, 145.267), +((@CGUID+8)*10, 5, 4513.13, 3569.78, 144.028), +((@CGUID+8)*10, 6, 4426.59, 3569.69, 159.578), +((@CGUID+8)*10, 7, 4352.02, 3594.6, 149.207), +((@CGUID+8)*10, 8, 4265.53, 3590.13, 166.896), +((@CGUID+8)*10, 9, 4201.69, 3563.6, 156.539), +((@CGUID+8)*10, 10, 4265.53, 3590.13, 166.896), +((@CGUID+8)*10, 11, 4352.02, 3594.6, 149.207), +((@CGUID+8)*10, 12, 4426.59, 3569.69, 159.578), +((@CGUID+8)*10, 13, 4513.13, 3569.78, 144.028), +((@CGUID+8)*10, 14, 4573.97, 3523.54, 145.267), +((@CGUID+8)*10, 15, 4637.13, 3533.71, 144.088), +((@CGUID+8)*10, 16, 4706.67, 3520.02, 136.092), +((@CGUID+8)*10, 17, 4788.54, 3503.49, 121.951); + +-- Pooling +DELETE FROM `pool_template` WHERE `entry`=1075; -- Description for this one is wrongly attributed to Okrek +DELETE FROM `pool_template` WHERE `entry`=1078 AND `description` LIKE '%Ever-Core%'; +DELETE FROM `pool_template` WHERE `entry`=1115 AND `description`='Nuramoc (20932)'; +INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES +(1075, 1, 'Chief Engineer Lorthander (18697)'), +(1078, 1, 'Ever-Core the Punisher (18698)'), +(1115, 1, 'Nuramoc (20932)'); + +DELETE FROM `pool_creature` WHERE `pool_entry`=1075 AND `description` LIKE '%Lorthander%'; +DELETE FROM `pool_creature` WHERE `pool_entry`=1078 AND `description` LIKE '%Ever-Core%'; +DELETE FROM `pool_creature` WHERE `pool_entry`=1115 AND `description`='Nuramoc (20932)'; +INSERT INTO `pool_creature` (`guid`, `pool_entry`, `chance`, `description`) VALUES +(@CGUID+0, 1075, 0, 'Chief Engineer Lorthander (18697)'), +(@CGUID+1, 1075, 0, 'Chief Engineer Lorthander (18697)'), +(@CGUID+2, 1075, 0, 'Chief Engineer Lorthander (18697)'), +(@CGUID+3, 1078, 0, 'Ever-Core the Punisher (18698)'), +(@CGUID+4, 1078, 0, 'Ever-Core the Punisher (18698)'), +(@CGUID+5, 1078, 0, 'Ever-Core the Punisher (18698)'), +(@CGUID+6, 1115, 0, 'Nuramoc (20932)'), +(@CGUID+7, 1115, 0, 'Nuramoc (20932)'), +(@CGUID+8, 1115, 0, 'Nuramoc (20932)'); + +-- Nuramoc +DELETE FROM `creature_template_movement` WHERE (`CreatureId` = 20932); +INSERT INTO `creature_template_movement` (`CreatureId`, `Ground`, `Swim`, `Flight`, `Rooted`, `Chase`, `Random`, `InteractionPauseTimer`) VALUES +(20932, 1, 0, 1, 0, 0, 0, 0); From 6f8f33dacf76c7cb1a13bdaab370fc9163b25415 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Sat, 18 Feb 2023 14:25:14 -0300 Subject: [PATCH 08/72] fix(DB/Creature): Add sniffed waypoints to Fenissa the Assassin (#15077) Co-authored-by: neifion-00000000 <91289495+neifion-00000000@users.noreply.github.com> --- .../rev_1676604656261986500.sql | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1676604656261986500.sql diff --git a/data/sql/updates/pending_db_world/rev_1676604656261986500.sql b/data/sql/updates/pending_db_world/rev_1676604656261986500.sql new file mode 100644 index 000000000..8a5f7f775 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676604656261986500.sql @@ -0,0 +1,117 @@ +-- +DELETE from `creature` where `guid`=77831 AND `id1`=22060; +INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`) VALUES +(77831, 22060, 0, 0, 530, 0, 0, 1, 1, 1, -2024.52, -10786.1, 81.9137, 0.664982, 3600, 0, 0, 0, 0, 2, 0, 0, 0, '', 0); + +UPDATE `creature_template_addon` SET `bytes1` = 0 WHERE (`entry` = 22060); + +-- Pathing for Entry: 22060 +SET @NPC := 77831; +SET @CPATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-1970.9095,`position_y`=-10545.881,`position_z`=176.9451 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@CPATH,0,0,1,0,0, '34189'); +DELETE FROM `waypoint_data` WHERE `id`=@CPATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@CPATH,1,-1970.9095,-10545.881,176.9451,0,0,0,0,100,0), +(@CPATH,2,-1940.0586,-10560.943,177.81454,0,0,0,0,100,0), +(@CPATH,3,-1946.3624,-10587.011,172.94002,0,0,0,0,100,0), +(@CPATH,4,-1961.7201,-10607.221,165.48112,0,0,0,0,100,0), +(@CPATH,5,-1988.8058,-10612.373,162.95183,0,0,0,0,100,0), +(@CPATH,6,-2013.801,-10602.308,154.4991,0,0,0,0,100,0), +(@CPATH,7,-2038.0187,-10619.16,146.1079,0,0,0,0,100,0), +(@CPATH,8,-2037.1124,-10638.802,140.50319,0,0,0,0,100,0), +(@CPATH,9,-2012.5981,-10662.126,122.97834,0,0,0,0,100,0), +(@CPATH,10,-1976.1384,-10684.696,112.91368,0,0,0,0,100,0), +(@CPATH,11,-1947.3251,-10695.539,110.90299,0,0,0,0,100,0), +(@CPATH,12,-1908.1012,-10710.498,111.27751,0,0,0,0,100,0), +(@CPATH,13,-1875.1051,-10702.744,111.70239,0,0,0,0,100,0), +(@CPATH,14,-1855.2137,-10689.97,112.97398,0,0,0,0,100,0), +(@CPATH,15,-1824.9171,-10668.398,136.08665,0,0,0,0,100,0), +(@CPATH,16,-1819.2031,-10647.129,144.38739,0,0,0,0,100,0), +(@CPATH,17,-1812.0326,-10612.489,148.245,0,0,0,0,100,0), +(@CPATH,18,-1833.3806,-10588.412,157.1347,0,0,0,0,100,0), +(@CPATH,19,-1867.1841,-10566.302,174.33784,0,0,0,0,100,0), +(@CPATH,20,-1877.4294,-10545.098,177.00142,0,1200,0,0,100,0), +(@CPATH,21,-1867.1841,-10566.302,174.33784,0,0,0,0,100,0), +(@CPATH,22,-1833.3806,-10588.412,157.1347,0,0,0,0,100,0), +(@CPATH,23,-1812.0326,-10612.489,148.245,0,0,0,0,100,0), +(@CPATH,24,-1819.2179,-10647.147,144.46405,0,0,0,0,100,0), +(@CPATH,25,-1824.9171,-10668.398,136.08665,0,0,0,0,100,0), +(@CPATH,26,-1855.2137,-10689.97,112.97398,0,0,0,0,100,0), +(@CPATH,27,-1875.1051,-10702.744,111.70239,0,0,0,0,100,0), +(@CPATH,28,-1908.1012,-10710.498,111.27751,0,0,0,0,100,0), +(@CPATH,29,-1947.3251,-10695.539,110.90299,0,0,0,0,100,0), +(@CPATH,30,-1976.1384,-10684.696,112.91368,0,0,0,0,100,0), +(@CPATH,31,-2012.5981,-10662.126,122.97834,0,0,0,0,100,0), +(@CPATH,32,-2037.1124,-10638.802,140.50319,0,0,0,0,100,0), +(@CPATH,33,-2038.0187,-10619.16,146.1079,0,0,0,0,100,0), +(@CPATH,34,-2013.801,-10602.308,154.4991,0,0,0,0,100,0), +(@CPATH,35,-1988.8058,-10612.373,162.95183,0,0,0,0,100,0), +(@CPATH,36,-1961.7201,-10607.221,165.48112,0,0,0,0,100,0), +(@CPATH,37,-1946.3624,-10587.011,172.94002,0,0,0,0,100,0), +(@CPATH,38,-1940.0586,-10560.943,177.81454,0,0,0,0,100,0); +-- 0x204CB04240158B0000003E0000187A4E .go xyz -1970.9095 -10545.881 176.9451 + +-- Pathing for Entry: 22060 +SET @NPC := 77280; +SET @CPATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-2062.9329,`position_y`=-10801.382,`position_z`=69.16798 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@CPATH,0,0,1,0,0, '34189'); +DELETE FROM `waypoint_data` WHERE `id`=@CPATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@CPATH,1,-2062.9329,-10801.382,69.16798,0,0,0,0,100,0), +(@CPATH,2,-2032.4478,-10792.326,79.548546,0,0,0,0,100,0), +(@CPATH,3,-2011.9824,-10776.279,85.89645,0,0,0,0,100,0), +(@CPATH,4,-1988.4141,-10782.808,89.01292,0,0,0,0,100,0), +(@CPATH,5,-1956.8325,-10795.888,88.076256,0,0,0,0,100,0), +(@CPATH,6,-1941.5137,-10813.049,83.2548,0,0,0,0,100,0), +(@CPATH,7,-1942.2377,-10845.413,71.92745,0,0,0,0,100,0), +(@CPATH,8,-1928.1111,-10873.158,65.57274,0,0,0,0,100,0), +(@CPATH,9,-1907.5723,-10881.021,64.005844,0,0,0,0,100,0), +(@CPATH,10,-1882.5653,-10890.086,67.090805,0,0,0,0,100,0), +(@CPATH,11,-1869.1376,-10890.733,66.91844,0,0,0,0,100,0), +(@CPATH,12,-1863.5938,-10877.981,66.82205,0,0,0,0,100,0), +(@CPATH,13,-1857.8864,-10870.527,66.82205,0,0,0,0,100,0), +(@CPATH,14,-1864.6426,-10848.86,66.77268,0,1200,0,0,100,0), +(@CPATH,15,-1857.8864,-10870.527,66.82205,0,0,0,0,100,0), +(@CPATH,16,-1863.5938,-10877.981,66.82205,0,0,0,0,100,0), +(@CPATH,17,-1869.1376,-10890.733,66.91844,0,0,0,0,100,0), +(@CPATH,18,-1882.5653,-10890.086,67.090805,0,0,0,0,100,0), +(@CPATH,19,-1907.4796,-10881.057,64.12523,0,0,0,0,100,0), +(@CPATH,20,-1928.1111,-10873.158,65.57274,0,0,0,0,100,0), +(@CPATH,21,-1941.4618,-10813.143,83.373695,0,0,0,0,100,0), +(@CPATH,22,-1956.7793,-10795.982,88.01302,0,0,0,0,100,0), +(@CPATH,23,-1988.4141,-10782.808,89.01292,0,0,0,0,100,0), +(@CPATH,24,-2011.9735,-10776.271,85.738,0,0,0,0,100,0), +(@CPATH,25,-2032.4478,-10792.326,79.548546,0,0,0,0,100,0), +(@CPATH,26,-2062.9329,-10801.382,69.16798,0,0,0,0,100,0), +(@CPATH,27,-2090.1667,-10768.454,68.06485,0,1200,0,0,100,0); +-- 0x204CB04240158B0000003E00001879BC .go xyz -2062.9329 -10801.382 69.16798 + +-- Pathing for Entry: 22060 Cryo Core +SET @NPC := 77281; +SET @CPATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-2070.419,`position_y`=-11257.795,`position_z`=68.73054 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@CPATH,0,0,1,0,0, '34189'); +DELETE FROM `waypoint_data` WHERE `id`=@CPATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@CPATH,1,-2070.419,-11257.795,68.73054,0,0,0,0,100,0), +(@CPATH,2,-2103.6235,-11253.354,67.19258,0,0,0,0,100,0), +(@CPATH,3,-2134.2869,-11264.738,67.698784,0,0,0,0,100,0), +(@CPATH,4,-2140.428,-11280.03,65.155426,0,0,0,0,100,0), +(@CPATH,5,-2138.178,-11312.154,62.253426,0,0,0,0,100,0), +(@CPATH,6,-2136.1165,-11343.568,62.17387,0,0,0,0,100,0), +(@CPATH,7,-2126.4175,-11372.446,64.164536,0,0,0,0,100,0), +(@CPATH,8,-2098.3645,-11381.112,63.737923,0,0,0,0,100,0), +(@CPATH,9,-2076.6472,-11386.729,63.017952,0,0,0,0,100,0), +(@CPATH,10,-2055.42,-11392.572,61.29661,0,0,0,0,100,0), +(@CPATH,11,-2030.3889,-11375.75,63.414944,0,0,0,0,100,0), +(@CPATH,12,-2022.589,-11355.197,64.74541,0,0,0,0,100,0), +(@CPATH,13,-2019.8142,-11323.221,65.71863,0,0,0,0,100,0), +(@CPATH,14,-2031.3025,-11303.861,67.92053,0,0,0,0,100,0), +(@CPATH,15,-2026.8136,-11290.435,69.10076,0,0,0,0,100,0), +(@CPATH,16,-2026.6367,-11276.236,68.70916,0,0,0,0,100,0), +(@CPATH,17,-2042.9447,-11261.928,68.52818,0,0,0,0,100,0); From 9aed091dc0b323f379688a8464571d0fef25aa18 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sat, 18 Feb 2023 17:27:44 +0000 Subject: [PATCH 09/72] chore(DB): import pending files Referenced commit(s): 6f8f33dacf76c7cb1a13bdaab370fc9163b25415 --- .../rev_1676604656261986500.sql => db_world/2023_02_18_01.sql} | 1 + .../rev_1676644474129128500.sql => db_world/2023_02_18_02.sql} | 1 + .../rev_1676669931339119400.sql => db_world/2023_02_18_03.sql} | 1 + 3 files changed, 3 insertions(+) rename data/sql/updates/{pending_db_world/rev_1676604656261986500.sql => db_world/2023_02_18_01.sql} (99%) rename data/sql/updates/{pending_db_world/rev_1676644474129128500.sql => db_world/2023_02_18_02.sql} (99%) rename data/sql/updates/{pending_db_world/rev_1676669931339119400.sql => db_world/2023_02_18_03.sql} (99%) diff --git a/data/sql/updates/pending_db_world/rev_1676604656261986500.sql b/data/sql/updates/db_world/2023_02_18_01.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1676604656261986500.sql rename to data/sql/updates/db_world/2023_02_18_01.sql index 8a5f7f775..92fbadca4 100644 --- a/data/sql/updates/pending_db_world/rev_1676604656261986500.sql +++ b/data/sql/updates/db_world/2023_02_18_01.sql @@ -1,3 +1,4 @@ +-- DB update 2023_02_18_00 -> 2023_02_18_01 -- DELETE from `creature` where `guid`=77831 AND `id1`=22060; INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`) VALUES diff --git a/data/sql/updates/pending_db_world/rev_1676644474129128500.sql b/data/sql/updates/db_world/2023_02_18_02.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1676644474129128500.sql rename to data/sql/updates/db_world/2023_02_18_02.sql index 4f2bdbcc3..9eb1196ae 100644 --- a/data/sql/updates/pending_db_world/rev_1676644474129128500.sql +++ b/data/sql/updates/db_world/2023_02_18_02.sql @@ -1,3 +1,4 @@ +-- DB update 2023_02_18_01 -> 2023_02_18_02 -- Chief Engineer Lorthander DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 18697); 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`, `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 diff --git a/data/sql/updates/pending_db_world/rev_1676669931339119400.sql b/data/sql/updates/db_world/2023_02_18_03.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1676669931339119400.sql rename to data/sql/updates/db_world/2023_02_18_03.sql index 075d2f2a4..c81cf1759 100644 --- a/data/sql/updates/pending_db_world/rev_1676669931339119400.sql +++ b/data/sql/updates/db_world/2023_02_18_03.sql @@ -1,3 +1,4 @@ +-- DB update 2023_02_18_02 -> 2023_02_18_03 -- Okrek DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 18685); 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`, `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 fa706a78ff7dd340634de3be8e11dfef483ab436 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Sat, 18 Feb 2023 19:44:00 +0200 Subject: [PATCH 10/72] fix(DB/SAI): Wetlands Dragonmaw Bonewarder missing Skeleton Minion (#15082) --- .../pending_db_world/rev_1676624876337239900.sql | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1676624876337239900.sql diff --git a/data/sql/updates/pending_db_world/rev_1676624876337239900.sql b/data/sql/updates/pending_db_world/rev_1676624876337239900.sql new file mode 100644 index 000000000..d0e631628 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676624876337239900.sql @@ -0,0 +1,16 @@ +-- Dragonmaw Bonewarder - spawn Skeleton on reset +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 1057; + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 1057); +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`, `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 +(1057, 0, 0, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 11, 8853, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dragonmaw Bonewarder - On Reset - Cast \'Summon Skeleton\''), +(1057, 0, 1, 0, 4, 0, 100, 1, 0, 0, 0, 0, 0, 11, 13787, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dragonmaw Bonewarder - On Aggro - Cast \'Demon Armor\' (No Repeat)'), +(1057, 0, 2, 0, 0, 0, 100, 0, 3000, 4000, 120000, 120000, 0, 11, 6205, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Dragonmaw Bonewarder - In Combat - Cast \'Curse of Weakness\''), +(1057, 0, 3, 0, 0, 0, 100, 0, 5000, 6000, 15000, 15000, 0, 11, 707, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Dragonmaw Bonewarder - In Combat - Cast \'Immolate\''); + +-- Skeleton (Dragonmaw Bonewarder's pet) - force despawn on death +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 6412; + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 6412); +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`, `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 +(6412, 0, 0, 0, 6, 0, 100, 513, 0, 0, 0, 0, 0, 41, 1000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Skeleton - On Just Died - Despawn In 1000 ms (No Repeat)'); From 0d1160e205f9c3c87f82ab2c58d18f7efd3fbb92 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Sat, 18 Feb 2023 19:45:31 +0200 Subject: [PATCH 11/72] fix(DB/Quest): Remove Reply-Code Alpha previous quest requirements (10 & 25) (#15086) --- data/sql/updates/pending_db_world/rev_1676663068384320000.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1676663068384320000.sql diff --git a/data/sql/updates/pending_db_world/rev_1676663068384320000.sql b/data/sql/updates/pending_db_world/rev_1676663068384320000.sql new file mode 100644 index 000000000..7e4c830f0 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676663068384320000.sql @@ -0,0 +1,3 @@ +-- Reply-Code Alpha - All Is Well That Ends Well 10 & 25 - Remove requirement for sigil quest completion. +UPDATE `quest_template_addon` SET `PrevQuestID` = 0 WHERE (`ID` = 13631); -- Normal (10m) +UPDATE `quest_template_addon` SET `PrevQuestID` = 0 WHERE (`ID` = 13819); -- Heroic (25m) From 2e9223b99ad0c06f5c6964e5e52b45c3b6d10916 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sat, 18 Feb 2023 18:00:12 +0000 Subject: [PATCH 12/72] chore(DB): import pending files Referenced commit(s): 0d1160e205f9c3c87f82ab2c58d18f7efd3fbb92 --- .../rev_1676624876337239900.sql => db_world/2023_02_18_04.sql} | 1 + .../rev_1676663068384320000.sql => db_world/2023_02_18_05.sql} | 1 + 2 files changed, 2 insertions(+) rename data/sql/updates/{pending_db_world/rev_1676624876337239900.sql => db_world/2023_02_18_04.sql} (98%) rename data/sql/updates/{pending_db_world/rev_1676663068384320000.sql => db_world/2023_02_18_05.sql} (86%) diff --git a/data/sql/updates/pending_db_world/rev_1676624876337239900.sql b/data/sql/updates/db_world/2023_02_18_04.sql similarity index 98% rename from data/sql/updates/pending_db_world/rev_1676624876337239900.sql rename to data/sql/updates/db_world/2023_02_18_04.sql index d0e631628..586cc6568 100644 --- a/data/sql/updates/pending_db_world/rev_1676624876337239900.sql +++ b/data/sql/updates/db_world/2023_02_18_04.sql @@ -1,3 +1,4 @@ +-- DB update 2023_02_18_03 -> 2023_02_18_04 -- Dragonmaw Bonewarder - spawn Skeleton on reset UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 1057; diff --git a/data/sql/updates/pending_db_world/rev_1676663068384320000.sql b/data/sql/updates/db_world/2023_02_18_05.sql similarity index 86% rename from data/sql/updates/pending_db_world/rev_1676663068384320000.sql rename to data/sql/updates/db_world/2023_02_18_05.sql index 7e4c830f0..ffaf0d393 100644 --- a/data/sql/updates/pending_db_world/rev_1676663068384320000.sql +++ b/data/sql/updates/db_world/2023_02_18_05.sql @@ -1,3 +1,4 @@ +-- DB update 2023_02_18_04 -> 2023_02_18_05 -- Reply-Code Alpha - All Is Well That Ends Well 10 & 25 - Remove requirement for sigil quest completion. UPDATE `quest_template_addon` SET `PrevQuestID` = 0 WHERE (`ID` = 13631); -- Normal (10m) UPDATE `quest_template_addon` SET `PrevQuestID` = 0 WHERE (`ID` = 13819); -- Heroic (25m) From b892f60118dd72fb1c43a548e78beb9b709d9042 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Sat, 18 Feb 2023 15:46:21 -0300 Subject: [PATCH 13/72] fix(DB/Creature): Port Vorakem Doomspeaker from Mangos (#15071) --- .../rev_1676594413956062400.sql | 134 ++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1676594413956062400.sql diff --git a/data/sql/updates/pending_db_world/rev_1676594413956062400.sql b/data/sql/updates/pending_db_world/rev_1676594413956062400.sql new file mode 100644 index 000000000..60b5ff366 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676594413956062400.sql @@ -0,0 +1,134 @@ +-- +DELETE FROM `creature` WHERE `id1`=18679; +INSERT INTO `creature` (`guid`, `id1`, `map`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `MovementType`) VALUES +(24922, 18679, 530, 1, -368.807, 1845.98, 86.4098, 2.91794, 28800, 2), +(24923, 18679, 530, 1, -114.012, 1835.66, 73.8411, 0.612791, 28800, 2), +(24924, 18679, 530, 1, 494.112, 2187.12, 131.719, 1.88514, 28800, 2), +(24925, 18679, 530, 1, 442.586, 3516.65, 60.8444, 1.20665, 28800, 2); + +DELETE FROM `creature_addon` WHERE (`guid` IN (24922, 24923, 24924, 24925, 151930)); +INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(24922, 249220, 0, 0, 1, 0, 0, ''), +(24923, 249230, 0, 0, 1, 0, 0, ''), +(24924, 249240, 0, 0, 1, 0, 0, ''), +(24925, 249250, 0, 0, 1, 0, 0, ''); + +DELETE FROM `waypoint_data` WHERE `id` IN (249220, 249230, 249240, 249250, 1519300); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`) VALUES +(249220, 1, -368.807, 1845.98, 86.4098), +(249220, 2, -394.117, 1765.65, 60.0718), +(249220, 3, -430.21, 1735.79, 50.2494), +(249220, 4, -467.137, 1759.59, 46.767), +(249220, 5, -481.167, 1743.93, 41.2044), +(249220, 6, -491.55, 1741.66, 46.4614), +(249220, 7, -501.393, 1756.58, 49.219), +(249220, 8, -534.742, 1790.65, 56.8644), +(249220, 9, -563.301, 1812.43, 66.1833), +(249220, 10, -582.342, 1829.4, 70.716), +(249220, 11, -541.357, 1879.13, 77.7951), +(249220, 12, -484.344, 1898.96, 87.2478), +(249220, 13, -392.494, 1897.04, 104.712), +(249230, 1, -114.012, 1835.66, 73.8411), +(249230, 2, -91.4783, 1847.82, 69.2832), +(249230, 3, -48.3747, 1834.22, 56.2454), +(249230, 4, -27.769, 1751.28, 45.8751), +(249230, 5, 7.84103, 1727.88, 42.7232), +(249230, 6, 61.2473, 1718.28, 40.0149), +(249230, 7, 83.7766, 1696.73, 39.1369), +(249230, 8, 100.682, 1697.19, 40.2013), +(249230, 9, 173.49, 1699.2, 29.6471), +(249230, 10, 187.283, 1739.6, 31.9241), +(249230, 11, 204.008, 1746.78, 24.8385), +(249230, 12, 211.648, 1786.65, 19.2764), +(249230, 13, 199.708, 1790.54, 22.2977), +(249230, 14, 173.246, 1781.3, 26.3822), +(249230, 15, 155.866, 1781.44, 33.661), +(249230, 16, 134.747, 1779.92, 34.6875), +(249230, 17, 128.552, 1783.87, 37.7445), +(249230, 18, 79.8076, 1800.09, 45.2287), +(249230, 19, 63.0398, 1800.49, 48.2331), +(249230, 20, 32.4485, 1861.2, 49.7156), +(249230, 21, 29.9901, 1871.98, 47.1418), +(249230, 22, 9.29734, 1874.98, 51.9819), +(249230, 23, -22.6535, 1868.99, 57.1755), +(249230, 24, -43.6076, 1863.96, 64.0862), +(249230, 25, -78.5294, 1861.73, 71.2376), +(249240, 1, 494.112, 2187.12, 131.719), +(249240, 2, 490.009, 2150.51, 126.99), +(249240, 3, 476.108, 2147.86, 118.362), +(249240, 4, 447.068, 2146.79, 117.958), +(249240, 5, 391.824, 2120.25, 115.876), +(249240, 6, 364.498, 2141.12, 120.353), +(249240, 7, 366.106, 2174.26, 120.116), +(249240, 8, 369.158, 2196.83, 119.376), +(249240, 9, 343.484, 2215.23, 117.934), +(249240, 10, 340.956, 2232.1, 118.971), +(249240, 11, 391.441, 2247.7, 117.091), +(249240, 12, 432.466, 2259.06, 117.991), +(249240, 13, 437.614, 2269.6, 114.766), +(249240, 14, 438.826, 2278.85, 118.556), +(249240, 15, 438.178, 2332.83, 119.533), +(249240, 16, 430.33, 2389.52, 125.334), +(249240, 17, 424.122, 2410.58, 132.903), +(249240, 18, 409.936, 2426.29, 140.293), +(249240, 19, 391.569, 2441.42, 147.378), +(249240, 20, 372.028, 2450.85, 153.994), +(249240, 21, 351.563, 2501.71, 158.671), +(249240, 22, 358.341, 2519.12, 157.017), +(249240, 23, 362.253, 2540.77, 155.273), +(249240, 24, 393.193, 2549.76, 151.156), +(249240, 25, 422.271, 2538.3, 151.843), +(249240, 26, 443.763, 2554.36, 162.211), +(249240, 27, 446.835, 2632.73, 179.099), +(249240, 28, 487.397, 2745.97, 201.314), +(249240, 29, 524.691, 2778.75, 213.732), +(249240, 30, 529.078, 2770.99, 213.393), +(249240, 31, 516.915, 2750.16, 211.931), +(249240, 32, 474.551, 2663.26, 192.277), +(249240, 33, 463.675, 2628.29, 184.522), +(249240, 34, 463.409, 2570.53, 174.952), +(249240, 35, 459.304, 2541.33, 164.87), +(249240, 36, 465.254, 2485.88, 156.33), +(249240, 37, 428.184, 2445.82, 139.387), +(249240, 38, 428.213, 2414.12, 133.002), +(249240, 39, 447.828, 2392.86, 133.544), +(249240, 40, 454.476, 2300.08, 124.765), +(249240, 41, 478.859, 2261.73, 129.556), +(249240, 42, 490.589, 2224.36, 131.317), +(249250, 1, 442.586, 3516.65, 60.8444), +(249250, 2, 430.167, 3506.58, 62.984), +(249250, 3, 380.869, 3507.06, 62.9783), +(249250, 4, 364.828, 3502.97, 62.3136), +(249250, 5, 359.136, 3482.24, 62.8538), +(249250, 6, 350.932, 3469.66, 61.7651), +(249250, 7, 333.588, 3465.64, 62.0532), +(249250, 8, 332.589, 3436.69, 61.9835), +(249250, 9, 344.644, 3424.99, 63.3763), +(249250, 10, 346.874, 3386.66, 64.2423), +(249250, 11, 341.957, 3361.83, 68.1707), +(249250, 12, 354.937, 3358.04, 62.9527), +(249250, 13, 373.619, 3362.38, 62.5949), +(249250, 14, 395.768, 3352.65, 62.7729), +(249250, 15, 417.721, 3338.98, 61.9029), +(249250, 16, 438.161, 3340.84, 62.9257), +(249250, 17, 463.486, 3377.86, 73.8103), +(249250, 18, 466.918, 3398.15, 69.5736), +(249250, 19, 505.131, 3430.84, 73.9158), +(249250, 20, 508.783, 3437.74, 73.853), +(249250, 21, 516.238, 3459.83, 74.7222), +(249250, 22, 527.515, 3486.28, 77.0556), +(249250, 23, 489.114, 3523.57, 65.8445), +(249250, 24, 468.23, 3526.64, 63.9368); + +DELETE FROM `pool_template` WHERE `entry`=1085 AND `description` LIKE '%Vorakem%'; +INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES (1085, 1, 'Vorakem Doomspeaker (18679)'); + +DELETE FROM `pool_creature` WHERE `pool_entry`=1085 AND `description` LIKE '%Vorakem%'; +INSERT INTO `pool_creature` (`guid`, `pool_entry`, `chance`, `description`) VALUES +(24922, 1085, 0, 'Vorakem Doomspeaker (18679)'), +(24923, 1085, 0, 'Vorakem Doomspeaker (18679)'), +(24924, 1085, 0, 'Vorakem Doomspeaker (18679)'), +(24925, 1085, 0, 'Vorakem Doomspeaker (18679)'); + +-- It's another rare with DISABLE_MOVE added to it +UPDATE `creature_template` SET `unit_flags`=`unit_flags`&~4 WHERE (`entry` = 18679); From c238cefc267b34917e908a1939105ac222d63d9a Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sat, 18 Feb 2023 18:53:13 +0000 Subject: [PATCH 14/72] chore(DB): import pending files Referenced commit(s): b892f60118dd72fb1c43a548e78beb9b709d9042 --- .../rev_1676594413956062400.sql => db_world/2023_02_18_06.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1676594413956062400.sql => db_world/2023_02_18_06.sql} (99%) diff --git a/data/sql/updates/pending_db_world/rev_1676594413956062400.sql b/data/sql/updates/db_world/2023_02_18_06.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1676594413956062400.sql rename to data/sql/updates/db_world/2023_02_18_06.sql index 60b5ff366..f92dcb232 100644 --- a/data/sql/updates/pending_db_world/rev_1676594413956062400.sql +++ b/data/sql/updates/db_world/2023_02_18_06.sql @@ -1,3 +1,4 @@ +-- DB update 2023_02_18_05 -> 2023_02_18_06 -- DELETE FROM `creature` WHERE `id1`=18679; INSERT INTO `creature` (`guid`, `id1`, `map`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `MovementType`) VALUES From 098a21f98759964c260c4e889a21ef1481cd153c Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Sat, 18 Feb 2023 15:54:48 -0300 Subject: [PATCH 15/72] fix(DB/Creature): Stonegazer spawn and waypoints (#15030) --- .../rev_1676319745646135600.sql | 139 ++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1676319745646135600.sql diff --git a/data/sql/updates/pending_db_world/rev_1676319745646135600.sql b/data/sql/updates/pending_db_world/rev_1676319745646135600.sql new file mode 100644 index 000000000..2be59bbe9 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676319745646135600.sql @@ -0,0 +1,139 @@ +-- +DELETE FROM `creature` WHERE `id1`=18648 AND `guid`=86357; +INSERT INTO `creature`(`guid`, `id1`, `map`, `spawnMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `MovementType`) VALUES +(86357, 18648, 530, 1, -1996.77, 3691.44, -55.336, 4.15348, 300, 2); + +DELETE FROM `creature_addon` WHERE (`guid` = 86357); +INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(86357, 863570, 0, 0, 0, 0, 0, ''); + +DELETE FROM `waypoint_data` WHERE `id`=863570; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`) VALUES +(863570, 1, -1996.77, 3691.44, -55.336), +(863570, 2, -2003.93, 3680, -62.9563), +(863570, 3, -2012.14, 3673.5, -70.4843), +(863570, 4, -2017.82, 3668.26, -70.9137), +(863570, 5, -2025.06, 3661.79, -69.4269), +(863570, 6, -2038.99, 3660.38, -66.7324), +(863570, 7, -2053.45, 3649.44, -65.0682), +(863570, 8, -2060.97, 3637.63, -65.2084), +(863570, 9, -2065.82, 3627.13, -66.8755), +(863570, 10, -2069.63, 3618.56, -63.7202), +(863570, 11, -2075.9, 3605.38, -62.2908), +(863570, 12, -2080.72, 3593.47, -63.6726), +(863570, 13, -2086.85, 3577.68, -63.0435), +(863570, 14, -2091.53, 3561.27, -63.9136), +(863570, 15, -2091.9, 3558.99, -64.593), +(863570, 16, -2093.33, 3551.36, -71.5948), +(863570, 17, -2093.09, 3545.55, -60.957), +(863570, 18, -2095.03, 3534.02, -57.587), +(863570, 19, -2096.72, 3521.29, -56.1821), +(863570, 20, -2097.01, 3513.11, -57.028), +(863570, 21, -2099.07, 3493.34, -64.6929), +(863570, 22, -2103.58, 3483.31, -63.2184), +(863570, 23, -2105.74, 3475.41, -65.6768), +(863570, 24, -2106.44, 3467.97, -64.468), +(863570, 25, -2107.1, 3461.39, -65.8403), +(863570, 26, -2108.14, 3449.75, -63.965), +(863570, 27, -2108.91, 3436.89, -59.7906), +(863570, 28, -2109.66, 3423.51, -52.8207), +(863570, 29, -2112.76, 3413.32, -48.142), +(863570, 30, -2121.64, 3404.88, -46.3506), +(863570, 31, -2131.1, 3396.23, -44.9126), +(863570, 32, -2134.37, 3389.37, -46.1489), +(863570, 33, -2131.79, 3383.86, -49.3395), +(863570, 34, -2128.36, 3376.67, -55.9128), +(863570, 35, -2126.56, 3368.71, -56.1998), +(863570, 36, -2127.56, 3362.95, -53.5525), +(863570, 37, -2131.19, 3357.47, -46.1145), +(863570, 38, -2125.85, 3347.14, -45.6573), +(863570, 39, -2119.3, 3334.73, -47.1481), +(863570, 40, -2110.68, 3321.54, -47.8091), +(863570, 41, -2100.88, 3310.8, -48.6787), +(863570, 42, -2090.47, 3299.05, -50.4756), +(863570, 43, -2083.33, 3293.68, -55.9256), +(863570, 44, -2078.28, 3287.97, -51.4244), +(863570, 45, -2073.34, 3281.43, -52.9969), +(863570, 46, -2063.93, 3268.75, -56.6561), +(863570, 47, -2055.24, 3257.03, -59.2205), +(863570, 48, -2053.2, 3252.83, -62.8816), +(863570, 49, -2047.24, 3246.85, -73.0043), +(863570, 50, -2043.23, 3243.11, -72.4173), +(863570, 51, -2037.29, 3237.16, -69.086), +(863570, 52, -2031.93, 3231.8, -70.0572), +(863570, 53, -2037.81, 3237.48, -69.2409), +(863570, 54, -2043.55, 3243.31, -72.4278), +(863570, 55, -2047.31, 3246.89, -72.9844), +(863570, 56, -2053.51, 3253.16, -62.3759), +(863570, 57, -2055.88, 3257.93, -58.9112), +(863570, 58, -2063.94, 3268.6, -56.6398), +(863570, 59, -2073.83, 3281.86, -52.7742), +(863570, 60, -2078.86, 3288.44, -51.4462), +(863570, 61, -2083.72, 3293.82, -55.8937), +(863570, 62, -2090.97, 3299.89, -50.4188), +(863570, 63, -2101.03, 3310.92, -48.6276), +(863570, 64, -2110.38, 3321.34, -47.8336), +(863570, 65, -2118.06, 3332.77, -47.2585), +(863570, 66, -2125.31, 3345.69, -45.7645), +(863570, 67, -2131.76, 3358.36, -46.2777), +(863570, 68, -2127.94, 3363.14, -53.5166), +(863570, 69, -2126.84, 3369.1, -56.2019), +(863570, 70, -2128.84, 3377.25, -55.5198), +(863570, 71, -2132.2, 3383.99, -49.3382), +(863570, 72, -2134.55, 3389.79, -45.954), +(863570, 73, -2131.32, 3396.31, -44.8486), +(863570, 74, -2121.76, 3405.02, -46.3264), +(863570, 75, -2113.32, 3413.32, -47.9902), +(863570, 76, -2110.22, 3423.3, -52.2944), +(863570, 77, -2109.28, 3437.47, -60.2717), +(863570, 78, -2108.45, 3449.68, -63.8449), +(863570, 79, -2107.3, 3461.64, -65.6918), +(863570, 80, -2106.68, 3468.04, -64.4831), +(863570, 81, -2105.94, 3475.72, -65.4231), +(863570, 82, -2103.89, 3483.71, -63.0018), +(863570, 83, -2099.3, 3493.67, -64.4541), +(863570, 84, -2097.45, 3513.67, -56.8631), +(863570, 85, -2097.2, 3521.95, -56.0993), +(863570, 86, -2095.39, 3534.9, -57.5393), +(863570, 87, -2093.37, 3546, -61.2589), +(863570, 88, -2093.66, 3551.82, -71.882), +(863570, 89, -2092.36, 3558.82, -64.4532), +(863570, 90, -2091.93, 3561.65, -63.5573), +(863570, 91, -2086.94, 3578.34, -63.0179), +(863570, 92, -2081, 3593.7, -63.4996), +(863570, 93, -2076.34, 3605.29, -62.0478), +(863570, 94, -2070.21, 3619.16, -63.7059), +(863570, 95, -2066.15, 3627.76, -66.6732), +(863570, 96, -2061.21, 3637.91, -65.0062), +(863570, 97, -2053.49, 3650.07, -64.9078), +(863570, 98, -2039.41, 3660.59, -66.5091), +(863570, 99, -2025.45, 3662.06, -69.2666), +(863570, 100, -2018.42, 3668.33, -70.7122), +(863570, 101, -2012.08, 3674.36, -69.8961), +(863570, 102, -2003.99, 3680.59, -62.4553), +(863570, 103, -1996.95, 3691.94, -54.9681), +(863570, 104, -1987.92, 3710.84, -41.6305), +(863570, 105, -1980.74, 3729.54, -30.1387), +(863570, 106, -1970.21, 3735.92, -23.6044), +(863570, 107, -1956.11, 3741.73, -15.3974), +(863570, 108, -1944.91, 3748.26, -11.1596), +(863570, 109, -1935.12, 3754.11, -9.51987), +(863570, 110, -1918.06, 3762.94, -6.23739), +(863570, 111, -1907.43, 3768.79, -2.98779), +(863570, 112, -1894.27, 3775.38, 5.33932), +(863570, 113, -1885.92, 3779.56, 7.72026), +(863570, 114, -1865.18, 3795.66, 7.24442), +(863570, 115, -1848.48, 3803.51, 12.059), +(863570, 116, -1830.9, 3805.41, 17.8008), +(863570, 117, -1849.35, 3803.04, 11.8302), +(863570, 118, -1866.25, 3795.23, 7.0094), +(863570, 119, -1885.98, 3779.49, 7.72068), +(863570, 120, -1892.23, 3776.35, 6.22982), +(863570, 121, -1904.74, 3769.73, -1.31481), +(863570, 122, -1917.84, 3762.46, -6.18441), +(863570, 123, -1935.54, 3754.11, -9.53416), +(863570, 124, -1944.97, 3748.29, -11.1474), +(863570, 125, -1956.71, 3741.05, -16.0124), +(863570, 126, -1970.67, 3735.79, -23.8129), +(863570, 127, -1981.2, 3729.16, -30.45), +(863570, 128, -1988.06, 3710.37, -41.9423); From e759ac3c7153e895d7e93c4f4036638d32545859 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sat, 18 Feb 2023 18:57:12 +0000 Subject: [PATCH 16/72] chore(DB): import pending files Referenced commit(s): 098a21f98759964c260c4e889a21ef1481cd153c --- .../rev_1676319745646135600.sql => db_world/2023_02_18_07.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1676319745646135600.sql => db_world/2023_02_18_07.sql} (99%) diff --git a/data/sql/updates/pending_db_world/rev_1676319745646135600.sql b/data/sql/updates/db_world/2023_02_18_07.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1676319745646135600.sql rename to data/sql/updates/db_world/2023_02_18_07.sql index 2be59bbe9..18bd5d2f9 100644 --- a/data/sql/updates/pending_db_world/rev_1676319745646135600.sql +++ b/data/sql/updates/db_world/2023_02_18_07.sql @@ -1,3 +1,4 @@ +-- DB update 2023_02_18_06 -> 2023_02_18_07 -- DELETE FROM `creature` WHERE `id1`=18648 AND `guid`=86357; INSERT INTO `creature`(`guid`, `id1`, `map`, `spawnMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `MovementType`) VALUES From c2208318ea8315d9a403ce946f541c97eec7bff2 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sat, 18 Feb 2023 17:26:52 -0300 Subject: [PATCH 17/72] fix(Scripts/SethekkHalls): Update Talon King Ikiss script (#15098) --- .../rev_1676739457090257600.sql | 4 + src/server/game/AI/CoreAI/UnitAI.cpp | 21 + src/server/game/AI/CoreAI/UnitAI.h | 3 + .../SethekkHalls/boss_talon_king_ikiss.cpp | 462 ++++++++---------- .../SethekkHalls/instance_sethekk_halls.cpp | 94 +--- .../Auchindoun/SethekkHalls/sethekk_halls.h | 18 + 6 files changed, 279 insertions(+), 323 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1676739457090257600.sql diff --git a/data/sql/updates/pending_db_world/rev_1676739457090257600.sql b/data/sql/updates/pending_db_world/rev_1676739457090257600.sql new file mode 100644 index 000000000..4cf66fe89 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676739457090257600.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `spell_script_names` WHERE `spell_id` = 38194; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(38194, 'spell_talon_king_ikiss_blink'); diff --git a/src/server/game/AI/CoreAI/UnitAI.cpp b/src/server/game/AI/CoreAI/UnitAI.cpp index 86a331eed..24ba8e825 100644 --- a/src/server/game/AI/CoreAI/UnitAI.cpp +++ b/src/server/game/AI/CoreAI/UnitAI.cpp @@ -264,6 +264,27 @@ SpellCastResult UnitAI::DoCastRandomTarget(uint32 spellId, uint32 threatTablePos return SPELL_FAILED_BAD_TARGETS; } +/** + * @brief Cast spell on the max threat target, which may not always be the current victim. + * + * @param uint32 spellId Spell ID to cast. + * @param uint32 Threat table position. + * @param float dist Distance from caster to target. + * @param bool playerOnly Select players only, excludes pets and other npcs. + * @param bool triggered Triggered cast (full triggered mask). + * + * @return SpellCastResult + */ +SpellCastResult UnitAI::DoCastMaxThreat(uint32 spellId, uint32 threatTablePosition, float dist, bool playerOnly, bool triggered) +{ + if (Unit* target = SelectTarget(SelectTargetMethod::MaxThreat, threatTablePosition, dist, playerOnly)) + { + return DoCast(target, spellId, triggered); + } + + return SPELL_FAILED_BAD_TARGETS; +} + #define UPDATE_TARGET(a) {if (AIInfo->targettarget=a;} void UnitAI::FillAISpellInfo() diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h index ce7e8a177..e69c9811d 100644 --- a/src/server/game/AI/CoreAI/UnitAI.h +++ b/src/server/game/AI/CoreAI/UnitAI.h @@ -372,6 +372,9 @@ public: SpellCastResult DoCastAOE(uint32 spellId, bool triggered = false); SpellCastResult DoCastRandomTarget(uint32 spellId, uint32 threatTablePosition = 0, float dist = 0.0f, bool playerOnly = true, bool triggered = false); + // Cast spell on the top threat target, which may not be the current victim. + SpellCastResult DoCastMaxThreat(uint32 spellId, uint32 threatTablePosition = 0, float dist = 0.0f, bool playerOnly = true, bool triggered = false); + float DoGetSpellMaxRange(uint32 spellId, bool positive = false); void DoMeleeAttackIfReady(); diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp index c8e350ae9..fc0a37e42 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp @@ -17,6 +17,7 @@ #include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "SpellScript.h" #include "sethekk_halls.h" enum TailonkingIkiss @@ -26,143 +27,146 @@ enum TailonkingIkiss SAY_SLAY = 2, SAY_DEATH = 3, EMOTE_ARCANE_EXP = 4, +}; +enum Spells +{ SPELL_BLINK = 38194, SPELL_BLINK_TELEPORT = 38203, SPELL_MANA_SHIELD = 38151, SPELL_ARCANE_BUBBLE = 9438, SPELL_SLOW = 35032, - SPELL_POLYMORPH_N = 38245, // Difficulty data - SPELL_POLYMORPH_H = 43309, - SPELL_ARCANE_VOLLEY_N = 35059, // Difficulty data - SPELL_ARCANE_VOLLEY_H = 40424, - SPELL_ARCANE_EXPLOSION_N = 38197, // Difficulty data - SPELL_ARCANE_EXPLOSION_H = 40425, - - EVENT_SPELL_BLINK = 1, - EVENT_SPELL_POLYMORPH = 2, - EVENT_SPELL_SLOW = 3, - EVENT_SPELL_ARCANE_VOLLEY = 4, - EVENT_SPELL_ARCANE_EXPLO = 5, - EVENT_HEALTH_CHECK = 6, - EVENT_SPELL_BLINK_2 = 7 + SPELL_POLYMORPH = 38245, + SPELL_ARCANE_VOLLEY = 35059, + SPELL_ARCANE_EXPLOSION = 38197, }; -class boss_talon_king_ikiss : public CreatureScript +struct boss_talon_king_ikiss : public BossAI { -public: - boss_talon_king_ikiss() : CreatureScript("boss_talon_king_ikiss") { } - - CreatureAI* GetAI(Creature* creature) const override + boss_talon_king_ikiss(Creature* creature) : BossAI(creature, DATA_IKISS), _spoken(false), _manaShield(false) { - return GetSethekkHallsAI(creature); + scheduler.SetValidator([this] + { + return !me->HasUnitState(UNIT_STATE_CASTING); + }); } - struct boss_talon_king_ikissAI : public ScriptedAI + void Reset() override { - boss_talon_king_ikissAI(Creature* creature) : ScriptedAI(creature) + _Reset(); + _spoken = false; + _manaShield = false; + } + + void MoveInLineOfSight(Unit* who) override + { + if (!_spoken && who->IsPlayer()) { + Talk(SAY_INTRO); + _spoken = true; } - EventMap events; + ScriptedAI::MoveInLineOfSight(who); + } + + void JustEngagedWith(Unit* /*who*/) override + { + _JustEngagedWith(); + Talk(SAY_AGGRO); + + scheduler.Schedule(35s, [this](TaskContext context) + { + me->InterruptNonMeleeSpells(false); + DoCastAOE(SPELL_BLINK); + Talk(EMOTE_ARCANE_EXP); + context.Repeat(35s, 40s); + + scheduler.Schedule(1s, [this](TaskContext) + { + DoCastAOE(SPELL_ARCANE_EXPLOSION); + DoCastSelf(SPELL_ARCANE_BUBBLE, true); + }); + }).Schedule(5s, [this](TaskContext context) + { + DoCastAOE(SPELL_ARCANE_VOLLEY); + context.Repeat(7s, 12s); + }).Schedule(8s, [this](TaskContext context) + { + IsHeroic() ? DoCastRandomTarget(SPELL_POLYMORPH) : DoCastMaxThreat(SPELL_POLYMORPH); + context.Repeat(15s, 17500ms); + }); + + if (IsHeroic()) + { + scheduler.Schedule(15s, 25s, [this](TaskContext context) + { + DoCastAOE(SPELL_SLOW); + context.Repeat(15s, 30s); + }); + } + } + + void JustDied(Unit* /*killer*/) override + { + _JustDied(); + Talk(SAY_DEATH); + + if (GameObject* coffer = instance->GetGameObject(DATA_GO_TALON_KING_COFFER)) + { + coffer->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE | GO_FLAG_INTERACT_COND); + } + } + + void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*damagetype*/, SpellSchoolMask /*damageSchoolMask*/) override + { + if (!_manaShield && me->HealthBelowPctDamaged(20, damage)) + { + DoCast(me, SPELL_MANA_SHIELD); + _manaShield = true; + } + } + + void KilledUnit(Unit* /*victim*/) override + { + if (urand(0, 1)) + Talk(SAY_SLAY); + } + + private: bool _spoken; + bool _manaShield; +}; - void Reset() override +// 38194 - Blink +class spell_talon_king_ikiss_blink : public SpellScript +{ + PrepareSpellScript(spell_talon_king_ikiss_blink); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return sSpellMgr->GetSpellInfo(SPELL_BLINK); + } + + void FilterTargets(std::list& targets) + { + uint8 maxSize = 1; + if (targets.size() > maxSize) { - _spoken = false; + Acore::Containers::RandomResize(targets, maxSize); } + } - void MoveInLineOfSight(Unit* who) override - { - if (!_spoken && who->GetTypeId() == TYPEID_PLAYER) - { - Talk(SAY_INTRO); - _spoken = true; - } + void HandleDummyHitTarget(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + GetHitUnit()->CastSpell(GetCaster(), SPELL_BLINK_TELEPORT, true); + } - ScriptedAI::MoveInLineOfSight(who); - } - - void JustEngagedWith(Unit* /*who*/) override - { - Talk(SAY_AGGRO); - - events.ScheduleEvent(EVENT_SPELL_BLINK, 35000); - events.ScheduleEvent(EVENT_SPELL_ARCANE_VOLLEY, 5000); - events.ScheduleEvent(EVENT_SPELL_POLYMORPH, 8000); - events.ScheduleEvent(EVENT_HEALTH_CHECK, 2000); - if (IsHeroic()) - events.ScheduleEvent(EVENT_SPELL_SLOW, urand(15000, 25000)); - } - - void JustDied(Unit* /*killer*/) override - { - Talk(SAY_DEATH); - - if (InstanceScript* instance = me->GetInstanceScript()) - instance->SetData(DATA_IKISSDOOREVENT, DONE); - } - - void KilledUnit(Unit* /*victim*/) override - { - if (urand(0, 1)) - Talk(SAY_SLAY); - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (events.ExecuteEvent()) - { - case EVENT_SPELL_ARCANE_VOLLEY: - me->CastSpell(me, SPELL_ARCANE_VOLLEY_N, false); - events.RepeatEvent(urand(7000, 12000)); - break; - case EVENT_SPELL_POLYMORPH: - if (Unit* target = (IsHeroic() ? SelectTarget(SelectTargetMethod::Random, 0) : SelectTarget(SelectTargetMethod::MaxThreat, 1))) - me->CastSpell(target, SPELL_POLYMORPH_N, false); - events.RepeatEvent(urand(15000, 17500)); - break; - case EVENT_SPELL_SLOW: - me->CastSpell(me, SPELL_SLOW, false); - events.RepeatEvent(urand(15000, 30000)); - break; - case EVENT_HEALTH_CHECK: - if (me->HealthBelowPct(20)) - { - me->CastSpell(me, SPELL_MANA_SHIELD, false); - return; - } - events.RepeatEvent(1000); - break; - case EVENT_SPELL_BLINK: - Talk(EMOTE_ARCANE_EXP); - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) - { - me->CastSpell(target, SPELL_BLINK, false); - me->NearTeleportTo(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), target->GetOrientation()); - - DoCast(target, SPELL_BLINK_TELEPORT); - } - events.RepeatEvent(urand(35000, 40000)); - events.DelayEvents(500); - events.ScheduleEvent(EVENT_SPELL_BLINK_2, 0); - return; - case EVENT_SPELL_BLINK_2: - me->CastSpell(me, SPELL_ARCANE_EXPLOSION_N, false); - me->CastSpell(me, SPELL_ARCANE_BUBBLE, true); - break; - } - - DoMeleeAttackIfReady(); - } - }; + void Register() override + { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_talon_king_ikiss_blink::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); + OnEffectHitTarget += SpellEffectFn(spell_talon_king_ikiss_blink::HandleDummyHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY); + } }; enum Anzu @@ -184,150 +188,116 @@ enum Anzu EVENT_ANZU_HEALTH2 = 5 }; -class boss_anzu : public CreatureScript +struct boss_anzu : public BossAI { -public: - boss_anzu() : CreatureScript("boss_anzu") { } - - CreatureAI* GetAI(Creature* creature) const override + boss_anzu(Creature* creature) : BossAI(creature, DATA_ANZU) { - return GetSethekkHallsAI(creature); + talkTimer = 1; + me->ReplaceAllUnitFlags(UNIT_FLAG_NON_ATTACKABLE); + me->AddAura(SPELL_SHADOWFORM, me); } - struct boss_anzuAI : public ScriptedAI + uint32 talkTimer; + + void SummonedCreatureDies(Creature* summon, Unit*) override { - boss_anzuAI(Creature* creature) : ScriptedAI(creature), summons(me) + summons.Despawn(summon); + summons.RemoveNotExisting(); + if (summons.empty()) + me->RemoveAurasDueToSpell(SPELL_BANISH_SELF); + } + + void JustEngagedWith(Unit* /*who*/) override + { + _JustEngagedWith(); + events.Reset(); + events.ScheduleEvent(EVENT_SPELL_SCREECH, 14000); + events.ScheduleEvent(EVENT_SPELL_BOMB, 5000); + events.ScheduleEvent(EVENT_SPELL_CYCLONE, 8000); + events.ScheduleEvent(EVENT_ANZU_HEALTH1, 2000); + events.ScheduleEvent(EVENT_ANZU_HEALTH2, 2001); + } + + void SummonBroods() + { + Talk(SAY_SUMMON); + me->CastSpell(me, SPELL_BANISH_SELF, true); + for (uint8 i = 0; i < 5; ++i) + me->SummonCreature(23132 /*NPC_BROOD_OF_ANZU*/, me->GetPositionX() + 20 * cos((float)i), me->GetPositionY() + 20 * std::sin((float)i), me->GetPositionZ() + 25.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); + } + + void UpdateAI(uint32 diff) override + { + if (talkTimer) { - talkTimer = 1; - me->ReplaceAllUnitFlags(UNIT_FLAG_NON_ATTACKABLE); - me->AddAura(SPELL_SHADOWFORM, me); - } - - EventMap events; - SummonList summons; - uint32 talkTimer; - - void Reset() override - { - summons.DespawnAll(); - if (InstanceScript* instance = me->GetInstanceScript()) - if (instance->GetData(TYPE_ANZU_ENCOUNTER) != DONE) - instance->SetData(TYPE_ANZU_ENCOUNTER, NOT_STARTED); - } - - void JustSummoned(Creature* summon) override - { - summons.Summon(summon); - summon->AI()->AttackStart(me->GetVictim()); - } - - void SummonedCreatureDies(Creature* summon, Unit*) override - { - summons.Despawn(summon); - summons.RemoveNotExisting(); - if (summons.empty()) - me->RemoveAurasDueToSpell(SPELL_BANISH_SELF); - } - - void JustEngagedWith(Unit* /*who*/) override - { - events.Reset(); - events.ScheduleEvent(EVENT_SPELL_SCREECH, 14000); - events.ScheduleEvent(EVENT_SPELL_BOMB, 5000); - events.ScheduleEvent(EVENT_SPELL_CYCLONE, 8000); - events.ScheduleEvent(EVENT_ANZU_HEALTH1, 2000); - events.ScheduleEvent(EVENT_ANZU_HEALTH2, 2001); - - if (InstanceScript* instance = me->GetInstanceScript()) - instance->SetData(TYPE_ANZU_ENCOUNTER, IN_PROGRESS); - } - - void JustDied(Unit* /*killer*/) override - { - if (InstanceScript* instance = me->GetInstanceScript()) - instance->SetData(TYPE_ANZU_ENCOUNTER, DONE); - } - - void SummonBroods() - { - Talk(SAY_SUMMON); - me->CastSpell(me, SPELL_BANISH_SELF, true); - for (uint8 i = 0; i < 5; ++i) - me->SummonCreature(23132 /*NPC_BROOD_OF_ANZU*/, me->GetPositionX() + 20 * cos((float)i), me->GetPositionY() + 20 * std::sin((float)i), me->GetPositionZ() + 25.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); - } - - void UpdateAI(uint32 diff) override - { - if (talkTimer) + talkTimer += diff; + if (talkTimer >= 1000 && talkTimer < 10000) { - talkTimer += diff; - if (talkTimer >= 1000 && talkTimer < 10000) - { - Talk(SAY_ANZU_INTRO1); - talkTimer = 10000; - } - else if (talkTimer >= 16000) - { - me->ReplaceAllUnitFlags(UNIT_FLAG_NONE); - me->RemoveAurasDueToSpell(SPELL_SHADOWFORM); - Talk(SAY_ANZU_INTRO2); - talkTimer = 0; - } + Talk(SAY_ANZU_INTRO1); + talkTimer = 10000; } - - if (!UpdateVictim()) - return; - - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING | UNIT_STATE_STUNNED)) - return; - - switch (events.ExecuteEvent()) + else if (talkTimer >= 16000) { - case EVENT_SPELL_SCREECH: - me->CastSpell(me, SPELL_PARALYZING_SCREECH, false); - events.RepeatEvent(23000); - events.DelayEvents(3000); - break; - case EVENT_SPELL_BOMB: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true)) - me->CastSpell(target, SPELL_SPELL_BOMB, false); - events.RepeatEvent(urand(16000, 24500)); - events.DelayEvents(3000); - break; - case EVENT_SPELL_CYCLONE: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 45.0f, true)) - me->CastSpell(target, SPELL_CYCLONE, false); - events.RepeatEvent(urand(22000, 27000)); - events.DelayEvents(3000); - break; - case EVENT_ANZU_HEALTH1: - if (me->HealthBelowPct(66)) - { - SummonBroods(); - events.DelayEvents(10000); - return; - } - events.RepeatEvent(1000); - break; - case EVENT_ANZU_HEALTH2: - if (me->HealthBelowPct(33)) - { - SummonBroods(); - events.DelayEvents(10000); - return; - } - events.RepeatEvent(1000); - break; + me->ReplaceAllUnitFlags(UNIT_FLAG_NONE); + me->RemoveAurasDueToSpell(SPELL_SHADOWFORM); + Talk(SAY_ANZU_INTRO2); + talkTimer = 0; } - - DoMeleeAttackIfReady(); } - }; + + if (!UpdateVictim()) + return; + + events.Update(diff); + if (me->HasUnitState(UNIT_STATE_CASTING | UNIT_STATE_STUNNED)) + return; + + switch (events.ExecuteEvent()) + { + case EVENT_SPELL_SCREECH: + me->CastSpell(me, SPELL_PARALYZING_SCREECH, false); + events.RepeatEvent(23000); + events.DelayEvents(3000); + break; + case EVENT_SPELL_BOMB: + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true)) + me->CastSpell(target, SPELL_SPELL_BOMB, false); + events.RepeatEvent(urand(16000, 24500)); + events.DelayEvents(3000); + break; + case EVENT_SPELL_CYCLONE: + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 45.0f, true)) + me->CastSpell(target, SPELL_CYCLONE, false); + events.RepeatEvent(urand(22000, 27000)); + events.DelayEvents(3000); + break; + case EVENT_ANZU_HEALTH1: + if (me->HealthBelowPct(66)) + { + SummonBroods(); + events.DelayEvents(10000); + return; + } + events.RepeatEvent(1000); + break; + case EVENT_ANZU_HEALTH2: + if (me->HealthBelowPct(33)) + { + SummonBroods(); + events.DelayEvents(10000); + return; + } + events.RepeatEvent(1000); + break; + } + + DoMeleeAttackIfReady(); + } }; void AddSC_boss_talon_king_ikiss() { - new boss_talon_king_ikiss(); - new boss_anzu(); + RegisterSethekkHallsCreatureAI(boss_talon_king_ikiss); + RegisterSpellScript(spell_talon_king_ikiss_blink); + RegisterSethekkHallsCreatureAI(boss_anzu); } diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp index 0faee5fd1..d122ab260 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp @@ -19,6 +19,17 @@ #include "ScriptMgr.h" #include "sethekk_halls.h" +DoorData const doorData[] = +{ + { GO_IKISS_DOOR, DATA_IKISS, DOOR_TYPE_PASSAGE }, + { 0, 0, DOOR_TYPE_ROOM } // END +}; + +ObjectData const gameObjectData[] = +{ + { GO_THE_TALON_KINGS_COFFER, DATA_GO_TALON_KING_COFFER } +}; + class instance_sethekk_halls : public InstanceMapScript { public: @@ -31,91 +42,20 @@ public: struct instance_sethekk_halls_InstanceMapScript : public InstanceScript { - instance_sethekk_halls_InstanceMapScript(Map* map) : InstanceScript(map) {} - - uint32 AnzuEncounter; - ObjectGuid m_uiIkissDoorGUID; - ObjectGuid _talonKingsCofferGUID; - - void Initialize() override + instance_sethekk_halls_InstanceMapScript(Map* map) : InstanceScript(map) { - AnzuEncounter = NOT_STARTED; + SetHeaders(DataHeaders); + SetBossNumber(EncounterCount); + LoadDoorData(doorData); + LoadObjectData(nullptr, gameObjectData); } void OnCreatureCreate(Creature* creature) override { if (creature->GetEntry() == NPC_ANZU || creature->GetEntry() == NPC_VOICE_OF_THE_RAVEN_GOD) - if (AnzuEncounter >= IN_PROGRESS) + if (GetBossState(DATA_ANZU) == DONE) creature->DespawnOrUnsummon(1); } - - void OnGameObjectCreate(GameObject* go) override - { - switch (go->GetEntry()) - { - case GO_IKISS_DOOR: - m_uiIkissDoorGUID = go->GetGUID(); - break; - case GO_THE_TALON_KINGS_COFFER: - _talonKingsCofferGUID = go->GetGUID(); - break; - } - } - - void SetData(uint32 type, uint32 data) override - { - switch (type) - { - case DATA_IKISSDOOREVENT: - if (data == DONE) - { - DoUseDoorOrButton(m_uiIkissDoorGUID, DAY * IN_MILLISECONDS); - if (GameObject* coffer = instance->GetGameObject(_talonKingsCofferGUID)) - coffer->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE | GO_FLAG_INTERACT_COND); - } - break; - case TYPE_ANZU_ENCOUNTER: - AnzuEncounter = data; - SaveToDB(); - break; - } - } - - std::string GetSaveData() override - { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "S H " << AnzuEncounter; - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); - } - - void Load(const char* strIn) override - { - if (!strIn) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(strIn); - - char dataHead1, dataHead2; - - std::istringstream loadStream(strIn); - loadStream >> dataHead1 >> dataHead2; - - if (dataHead1 == 'S' && dataHead2 == 'H') - { - loadStream >> AnzuEncounter; - if (AnzuEncounter == IN_PROGRESS) - AnzuEncounter = NOT_STARTED; - } - - OUT_LOAD_INST_DATA_COMPLETE; - } }; }; diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/sethekk_halls.h b/src/server/scripts/Outland/Auchindoun/SethekkHalls/sethekk_halls.h index 6f47cce0a..69bf90cb8 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/sethekk_halls.h +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/sethekk_halls.h @@ -20,14 +20,30 @@ #include "CreatureAIImpl.h" +#define DataHeaders "SH" + +uint32 constexpr EncounterCount = 3; + #define SethekkHallsScriptName "instance_sethekk_halls" +enum Encounters +{ + DATA_DARKWEAVER_SYTH, + DATA_ANZU, + DATA_IKISS, +}; + enum eTypes { DATA_IKISSDOOREVENT = 1, TYPE_ANZU_ENCOUNTER = 2, }; +enum InstanceData +{ + DATA_GO_TALON_KING_COFFER +}; + enum eIds { NPC_VOICE_OF_THE_RAVEN_GOD = 21851, @@ -43,4 +59,6 @@ inline AI* GetSethekkHallsAI(T* obj) return GetInstanceAI(obj, SethekkHallsScriptName); } +#define RegisterSethekkHallsCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetSethekkHallsAI) + #endif From e6abccfdb3b0b23c2ca41bae1a5fe71d95d4131a Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sat, 18 Feb 2023 20:30:27 +0000 Subject: [PATCH 18/72] chore(DB): import pending files Referenced commit(s): c2208318ea8315d9a403ce946f541c97eec7bff2 --- .../rev_1676739457090257600.sql => db_world/2023_02_18_08.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1676739457090257600.sql => db_world/2023_02_18_08.sql} (79%) diff --git a/data/sql/updates/pending_db_world/rev_1676739457090257600.sql b/data/sql/updates/db_world/2023_02_18_08.sql similarity index 79% rename from data/sql/updates/pending_db_world/rev_1676739457090257600.sql rename to data/sql/updates/db_world/2023_02_18_08.sql index 4cf66fe89..962161611 100644 --- a/data/sql/updates/pending_db_world/rev_1676739457090257600.sql +++ b/data/sql/updates/db_world/2023_02_18_08.sql @@ -1,3 +1,4 @@ +-- DB update 2023_02_18_07 -> 2023_02_18_08 -- DELETE FROM `spell_script_names` WHERE `spell_id` = 38194; INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES From 65471801e698ffc0ebd3560f0a2a40ba6233b54b Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sat, 18 Feb 2023 18:47:29 -0300 Subject: [PATCH 19/72] chore(Scripts/SethekkHalls): Move Anzu script to its own file (#15109) --- .../Auchindoun/SethekkHalls/boss_anzu.cpp | 152 ++++++++++++++++++ .../SethekkHalls/boss_talon_king_ikiss.cpp | 127 --------------- .../scripts/Outland/outland_script_loader.cpp | 2 + 3 files changed, 154 insertions(+), 127 deletions(-) create mode 100644 src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp new file mode 100644 index 000000000..32ffb66d3 --- /dev/null +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp @@ -0,0 +1,152 @@ +/* + * 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 . + */ + +#include "ScriptMgr.h" +#include "ScriptedCreature.h" +#include "SpellScript.h" +#include "sethekk_halls.h" + +enum Anzu +{ + SAY_ANZU_INTRO1 = 0, + SAY_ANZU_INTRO2 = 1, + SAY_SUMMON = 2, + + SPELL_PARALYZING_SCREECH = 40184, + SPELL_SPELL_BOMB = 40303, + SPELL_CYCLONE = 40321, + SPELL_BANISH_SELF = 42354, + SPELL_SHADOWFORM = 40973, + + EVENT_SPELL_SCREECH = 1, + EVENT_SPELL_BOMB = 2, + EVENT_SPELL_CYCLONE = 3, + EVENT_ANZU_HEALTH1 = 4, + EVENT_ANZU_HEALTH2 = 5 +}; + +struct boss_anzu : public BossAI +{ + boss_anzu(Creature* creature) : BossAI(creature, DATA_ANZU) + { + talkTimer = 1; + me->ReplaceAllUnitFlags(UNIT_FLAG_NON_ATTACKABLE); + me->AddAura(SPELL_SHADOWFORM, me); + } + + uint32 talkTimer; + + void SummonedCreatureDies(Creature* summon, Unit*) override + { + summons.Despawn(summon); + summons.RemoveNotExisting(); + if (summons.empty()) + me->RemoveAurasDueToSpell(SPELL_BANISH_SELF); + } + + void JustEngagedWith(Unit* /*who*/) override + { + _JustEngagedWith(); + events.Reset(); + events.ScheduleEvent(EVENT_SPELL_SCREECH, 14000); + events.ScheduleEvent(EVENT_SPELL_BOMB, 5000); + events.ScheduleEvent(EVENT_SPELL_CYCLONE, 8000); + events.ScheduleEvent(EVENT_ANZU_HEALTH1, 2000); + events.ScheduleEvent(EVENT_ANZU_HEALTH2, 2001); + } + + void SummonBroods() + { + Talk(SAY_SUMMON); + me->CastSpell(me, SPELL_BANISH_SELF, true); + for (uint8 i = 0; i < 5; ++i) + me->SummonCreature(23132 /*NPC_BROOD_OF_ANZU*/, me->GetPositionX() + 20 * cos((float)i), me->GetPositionY() + 20 * std::sin((float)i), me->GetPositionZ() + 25.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); + } + + void UpdateAI(uint32 diff) override + { + if (talkTimer) + { + talkTimer += diff; + if (talkTimer >= 1000 && talkTimer < 10000) + { + Talk(SAY_ANZU_INTRO1); + talkTimer = 10000; + } + else if (talkTimer >= 16000) + { + me->ReplaceAllUnitFlags(UNIT_FLAG_NONE); + me->RemoveAurasDueToSpell(SPELL_SHADOWFORM); + Talk(SAY_ANZU_INTRO2); + talkTimer = 0; + } + } + + if (!UpdateVictim()) + return; + + events.Update(diff); + if (me->HasUnitState(UNIT_STATE_CASTING | UNIT_STATE_STUNNED)) + return; + + switch (events.ExecuteEvent()) + { + case EVENT_SPELL_SCREECH: + me->CastSpell(me, SPELL_PARALYZING_SCREECH, false); + events.RepeatEvent(23000); + events.DelayEvents(3000); + break; + case EVENT_SPELL_BOMB: + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true)) + me->CastSpell(target, SPELL_SPELL_BOMB, false); + events.RepeatEvent(urand(16000, 24500)); + events.DelayEvents(3000); + break; + case EVENT_SPELL_CYCLONE: + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 45.0f, true)) + me->CastSpell(target, SPELL_CYCLONE, false); + events.RepeatEvent(urand(22000, 27000)); + events.DelayEvents(3000); + break; + case EVENT_ANZU_HEALTH1: + if (me->HealthBelowPct(66)) + { + SummonBroods(); + events.DelayEvents(10000); + return; + } + events.RepeatEvent(1000); + break; + case EVENT_ANZU_HEALTH2: + if (me->HealthBelowPct(33)) + { + SummonBroods(); + events.DelayEvents(10000); + return; + } + events.RepeatEvent(1000); + break; + } + + DoMeleeAttackIfReady(); + } +}; + +void AddSC_boss_anzu() +{ + RegisterSethekkHallsCreatureAI(boss_anzu); +} diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp index fc0a37e42..0f89a7116 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp @@ -169,135 +169,8 @@ class spell_talon_king_ikiss_blink : public SpellScript } }; -enum Anzu -{ - SAY_ANZU_INTRO1 = 0, - SAY_ANZU_INTRO2 = 1, - SAY_SUMMON = 2, - - SPELL_PARALYZING_SCREECH = 40184, - SPELL_SPELL_BOMB = 40303, - SPELL_CYCLONE = 40321, - SPELL_BANISH_SELF = 42354, - SPELL_SHADOWFORM = 40973, - - EVENT_SPELL_SCREECH = 1, - EVENT_SPELL_BOMB = 2, - EVENT_SPELL_CYCLONE = 3, - EVENT_ANZU_HEALTH1 = 4, - EVENT_ANZU_HEALTH2 = 5 -}; - -struct boss_anzu : public BossAI -{ - boss_anzu(Creature* creature) : BossAI(creature, DATA_ANZU) - { - talkTimer = 1; - me->ReplaceAllUnitFlags(UNIT_FLAG_NON_ATTACKABLE); - me->AddAura(SPELL_SHADOWFORM, me); - } - - uint32 talkTimer; - - void SummonedCreatureDies(Creature* summon, Unit*) override - { - summons.Despawn(summon); - summons.RemoveNotExisting(); - if (summons.empty()) - me->RemoveAurasDueToSpell(SPELL_BANISH_SELF); - } - - void JustEngagedWith(Unit* /*who*/) override - { - _JustEngagedWith(); - events.Reset(); - events.ScheduleEvent(EVENT_SPELL_SCREECH, 14000); - events.ScheduleEvent(EVENT_SPELL_BOMB, 5000); - events.ScheduleEvent(EVENT_SPELL_CYCLONE, 8000); - events.ScheduleEvent(EVENT_ANZU_HEALTH1, 2000); - events.ScheduleEvent(EVENT_ANZU_HEALTH2, 2001); - } - - void SummonBroods() - { - Talk(SAY_SUMMON); - me->CastSpell(me, SPELL_BANISH_SELF, true); - for (uint8 i = 0; i < 5; ++i) - me->SummonCreature(23132 /*NPC_BROOD_OF_ANZU*/, me->GetPositionX() + 20 * cos((float)i), me->GetPositionY() + 20 * std::sin((float)i), me->GetPositionZ() + 25.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); - } - - void UpdateAI(uint32 diff) override - { - if (talkTimer) - { - talkTimer += diff; - if (talkTimer >= 1000 && talkTimer < 10000) - { - Talk(SAY_ANZU_INTRO1); - talkTimer = 10000; - } - else if (talkTimer >= 16000) - { - me->ReplaceAllUnitFlags(UNIT_FLAG_NONE); - me->RemoveAurasDueToSpell(SPELL_SHADOWFORM); - Talk(SAY_ANZU_INTRO2); - talkTimer = 0; - } - } - - if (!UpdateVictim()) - return; - - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING | UNIT_STATE_STUNNED)) - return; - - switch (events.ExecuteEvent()) - { - case EVENT_SPELL_SCREECH: - me->CastSpell(me, SPELL_PARALYZING_SCREECH, false); - events.RepeatEvent(23000); - events.DelayEvents(3000); - break; - case EVENT_SPELL_BOMB: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true)) - me->CastSpell(target, SPELL_SPELL_BOMB, false); - events.RepeatEvent(urand(16000, 24500)); - events.DelayEvents(3000); - break; - case EVENT_SPELL_CYCLONE: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 45.0f, true)) - me->CastSpell(target, SPELL_CYCLONE, false); - events.RepeatEvent(urand(22000, 27000)); - events.DelayEvents(3000); - break; - case EVENT_ANZU_HEALTH1: - if (me->HealthBelowPct(66)) - { - SummonBroods(); - events.DelayEvents(10000); - return; - } - events.RepeatEvent(1000); - break; - case EVENT_ANZU_HEALTH2: - if (me->HealthBelowPct(33)) - { - SummonBroods(); - events.DelayEvents(10000); - return; - } - events.RepeatEvent(1000); - break; - } - - DoMeleeAttackIfReady(); - } -}; - void AddSC_boss_talon_king_ikiss() { RegisterSethekkHallsCreatureAI(boss_talon_king_ikiss); RegisterSpellScript(spell_talon_king_ikiss_blink); - RegisterSethekkHallsCreatureAI(boss_anzu); } diff --git a/src/server/scripts/Outland/outland_script_loader.cpp b/src/server/scripts/Outland/outland_script_loader.cpp index dc084c74a..86be80f95 100644 --- a/src/server/scripts/Outland/outland_script_loader.cpp +++ b/src/server/scripts/Outland/outland_script_loader.cpp @@ -23,6 +23,7 @@ void AddSC_boss_nexusprince_shaffar(); //Auchindoun Mana Tombs void AddSC_boss_pandemonius(); void AddSC_instance_mana_tombs(); void AddSC_boss_talon_king_ikiss(); //Auchindoun Sekketh Halls +void AddSC_boss_anzu(); void AddSC_instance_sethekk_halls(); void AddSC_instance_shadow_labyrinth(); //Auchindoun Shadow Labyrinth void AddSC_boss_ambassador_hellmaw(); @@ -119,6 +120,7 @@ void AddOutlandScripts() AddSC_boss_pandemonius(); AddSC_instance_mana_tombs(); AddSC_boss_talon_king_ikiss(); //Auchindoun Sekketh Halls + AddSC_boss_anzu(); AddSC_instance_sethekk_halls(); AddSC_instance_shadow_labyrinth(); //Auchindoun Shadow Labyrinth AddSC_boss_ambassador_hellmaw(); From 2953d97354dda09f0df3f0352ea4103c7ea6d73d Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Sat, 18 Feb 2023 22:50:56 -0300 Subject: [PATCH 20/72] fix(DB/Creature): Remove custom-placed Shadowmoon Retainers in Eclipse Point (#15112) --- data/sql/updates/pending_db_world/rev_1676764417910573100.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1676764417910573100.sql diff --git a/data/sql/updates/pending_db_world/rev_1676764417910573100.sql b/data/sql/updates/pending_db_world/rev_1676764417910573100.sql new file mode 100644 index 000000000..2ace94520 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676764417910573100.sql @@ -0,0 +1,2 @@ +-- +DELETE FROM `creature` WHERE `id1`=22102 AND `guid` IN (86101, 86102); From 84dc9e2ac8182e53dfca1540b3eb4f1a601128ea Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sun, 19 Feb 2023 01:53:21 +0000 Subject: [PATCH 21/72] chore(DB): import pending files Referenced commit(s): 2953d97354dda09f0df3f0352ea4103c7ea6d73d --- .../rev_1676764417910573100.sql => db_world/2023_02_19_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1676764417910573100.sql => db_world/2023_02_19_00.sql} (62%) diff --git a/data/sql/updates/pending_db_world/rev_1676764417910573100.sql b/data/sql/updates/db_world/2023_02_19_00.sql similarity index 62% rename from data/sql/updates/pending_db_world/rev_1676764417910573100.sql rename to data/sql/updates/db_world/2023_02_19_00.sql index 2ace94520..e1241d2ce 100644 --- a/data/sql/updates/pending_db_world/rev_1676764417910573100.sql +++ b/data/sql/updates/db_world/2023_02_19_00.sql @@ -1,2 +1,3 @@ +-- DB update 2023_02_18_08 -> 2023_02_19_00 -- DELETE FROM `creature` WHERE `id1`=22102 AND `guid` IN (86101, 86102); From a9fac92c8048f3c144d742cbb01130fefe840308 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sat, 18 Feb 2023 23:11:36 -0300 Subject: [PATCH 22/72] =?UTF-8?q?feat(Core/Instance):=20Implement=20helper?= =?UTF-8?q?s=20to=20easily=20save/retrieve=20persist=E2=80=A6=20(#15113)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/Instances/InstanceScript.cpp | 29 +++++++++++++++++++ src/server/game/Instances/InstanceScript.h | 7 +++++ .../Mechanar/instance_mechanar.cpp | 16 +++++----- .../Outland/TempestKeep/Mechanar/mechanar.h | 6 ++++ 4 files changed, 49 insertions(+), 9 deletions(-) diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp index daba9b609..c97a6a59f 100644 --- a/src/server/game/Instances/InstanceScript.cpp +++ b/src/server/game/Instances/InstanceScript.cpp @@ -351,6 +351,17 @@ bool InstanceScript::SetBossState(uint32 id, EncounterState state) return false; } +void InstanceScript::StorePersistentData(uint32 index, uint32 data) +{ + if (index > persistentData.size()) + { + LOG_ERROR("scripts", "InstanceScript::StorePersistentData() index larger than storage size. Index: {} Size: {} Data: {}.", index, persistentData.size(), data); + return; + } + + persistentData[index] = data; +} + void InstanceScript::Load(const char* data) { if (!data) @@ -366,6 +377,7 @@ void InstanceScript::Load(const char* data) if (ReadSaveDataHeaders(loadStream)) { ReadSaveDataBossStates(loadStream); + ReadSavePersistentData(loadStream); ReadSaveDataMore(loadStream); } else @@ -403,6 +415,14 @@ void InstanceScript::ReadSaveDataBossStates(std::istringstream& data) } } +void InstanceScript::ReadSavePersistentData(std::istringstream& data) +{ + for (uint32 i = 0; i < persistentData.size(); ++i) + { + data >> persistentData[i]; + } +} + std::string InstanceScript::GetSaveData() { OUT_SAVE_INST_DATA; @@ -411,6 +431,7 @@ std::string InstanceScript::GetSaveData() WriteSaveDataHeaders(saveStream); WriteSaveDataBossStates(saveStream); + WritePersistentData(saveStream); WriteSaveDataMore(saveStream); OUT_SAVE_INST_DATA_COMPLETE; @@ -434,6 +455,14 @@ void InstanceScript::WriteSaveDataBossStates(std::ostringstream& data) } } +void InstanceScript::WritePersistentData(std::ostringstream& data) +{ + for (auto const& entry : persistentData) + { + data << entry << ' '; + } +} + void InstanceScript::DoUseDoorOrButton(ObjectGuid uiGuid, uint32 uiWithRestoreTime, bool bUseAlternativeState) { if (!uiGuid) diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h index 92c98110d..158ccced2 100644 --- a/src/server/game/Instances/InstanceScript.h +++ b/src/server/game/Instances/InstanceScript.h @@ -229,6 +229,9 @@ public: CreatureBoundary const* GetBossBoundary(uint32 id) const { return id < bosses.size() ? &bosses[id].boundary : nullptr; } BossInfo const* GetBossInfo(uint32 id) const { return &bosses[id]; } + uint32 GetPersistentData(uint32 index) const { return index < persistentData.size() ? persistentData[index] : 0; }; + void StorePersistentData(uint32 index, uint32 data); + // Achievement criteria additional requirements check // NOTE: not use this if same can be checked existed requirement types from AchievementCriteriaRequirementType virtual bool CheckAchievementCriteriaMeet(uint32 /*criteria_id*/, Player const* /*source*/, Unit const* /*target*/ = nullptr, uint32 /*miscvalue1*/ = 0); @@ -257,6 +260,7 @@ public: protected: void SetHeaders(std::string const& dataHeaders); void SetBossNumber(uint32 number) { bosses.resize(number); } + void SetPersistentDataCount(uint32 number) { persistentData.resize(number); } void LoadBossBoundaries(BossBoundaryData const& data); void LoadDoorData(DoorData const* data); void LoadMinionData(MinionData const* data); @@ -275,9 +279,11 @@ protected: // Instance Load and Save bool ReadSaveDataHeaders(std::istringstream& data); void ReadSaveDataBossStates(std::istringstream& data); + void ReadSavePersistentData(std::istringstream& data); virtual void ReadSaveDataMore(std::istringstream& /*data*/) { } void WriteSaveDataHeaders(std::ostringstream& data); void WriteSaveDataBossStates(std::ostringstream& data); + void WritePersistentData(std::ostringstream& data); virtual void WriteSaveDataMore(std::ostringstream& /*data*/) { } private: @@ -285,6 +291,7 @@ private: std::vector headers; std::vector bosses; + std::vector persistentData; DoorInfoMap doors; MinionInfoMap minions; ObjectInfoMap _creatureInfo; diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp index a13c4d32e..acb7b1e45 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp @@ -38,6 +38,7 @@ public: { SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUNTER); + SetPersistentDataCount(MAX_DATA_INDEXES); LoadDoorData(doorData); _passageEncounter = 0; @@ -149,7 +150,8 @@ public: DoSummonAction(creature, player); } } - _passageEncounter++; + + StorePersistentData(DATA_INDEX_PASSAGE_ENCOUNTER, _passageEncounter++); SaveToDB(); } } @@ -186,16 +188,17 @@ public: if (Creature* creature = instance->GetCreature(_pathaleonGUID)) creature->AI()->DoAction(1); } - _passageEncounter++; + + StorePersistentData(DATA_INDEX_PASSAGE_ENCOUNTER, _passageEncounter++); SaveToDB(); } } } } - void ReadSaveDataMore(std::istringstream& data) override + void ReadSaveDataMore(std::istringstream& /*data*/) override { - data >> _passageEncounter; + _passageEncounter = GetPersistentData(DATA_INDEX_PASSAGE_ENCOUNTER); if (_passageEncounter == ENCOUNTER_PASSAGE_DONE) { @@ -203,11 +206,6 @@ public: } } - void WriteSaveDataMore(std::ostringstream& data) override - { - data << _passageEncounter; - } - private: ObjectGuid _pathaleonGUID; uint32 _passageTimer; diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h b/src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h index bcd8fae64..7eac01cc2 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h @@ -70,6 +70,12 @@ enum SpellIds SPELL_TELEPORT_VISUAL = 35517 }; +enum DataIndex +{ + DATA_INDEX_PASSAGE_ENCOUNTER = 0, + MAX_DATA_INDEXES +}; + template inline AI* GetMechanarAI(T* obj) { From 3a6e8adbc8c680a3bba67a4cc2eb115c57a279a5 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Sun, 19 Feb 2023 00:39:53 -0300 Subject: [PATCH 23/72] fix(DB/Creature): Rebuild the Coilskar Cistern (#15114) --- .../rev_1676756504407801100.sql | 376 ++++++++++++++++++ 1 file changed, 376 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1676756504407801100.sql diff --git a/data/sql/updates/pending_db_world/rev_1676756504407801100.sql b/data/sql/updates/pending_db_world/rev_1676756504407801100.sql new file mode 100644 index 000000000..9ff311d48 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676756504407801100.sql @@ -0,0 +1,376 @@ +-- Add Burning Spikes to Domesticated Helboar +UPDATE `creature_template_addon` SET `bytes2` = 0, `auras` = '33908' WHERE (`entry` = 21195); + +-- Water Bubble to Captured Water Spirit +DELETE FROM `creature_template_addon` WHERE (`entry` = 21029); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(21029, 0, 0, 0, 0, 0, 0, '35929'); + +-- Delete ALL Creatures exclusive to Coilskar Cistern +DELETE FROM `creature` WHERE `map`=530 AND `id1` IN ( +19765, -- Coilskar Myrmidon +19767, -- Coilskar Sorceress +19788, -- Coilskar Muckwatcher +21029, -- Captured Water Spirit +21041, -- Earthmender Wilda Trigger +21027, -- Earthmender Wilda +21044, -- Coilskar Assassin (Spawned from Escort Quest) +20795 -- Keeper of the Cistern +); + +-- Delete Coilskar Cobra in Coilskar Cistern +DELETE FROM `creature` WHERE `id1`=19784 AND `guid` BETWEEN 70801 AND 70807; + +DELETE FROM `creature` WHERE `id1` IN (19765,19767,19784,19788,21029,21041,21027,20795) AND `map`=530 AND `ZoneId`=3520 AND `guid` IN (23745,24189,24190,24191,24777,24788,24868,24869,24870,24915,24931,24944,24945,24946,24947,24948,24974,24975,24977,24978,24979,24980,24981,24982,24983,25010,25065,25094,25095,25096,25097,25098,25099,25111,25112,25113,25114,25115,25116,25117,25118,25119,25120,25121,25122,25123,25124,25125,25126,25127,25128,25129,25130,25713,25714,25715,25716,25717,25718,25719,25720,25721,25722,25723,25724,25725,25726,25727,25738,25739,25740,25741,25742,25743,25744); +INSERT INTO `creature` (`guid`, `id1`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `MovementType`, `VerifiedBuild`) VALUES +(23745, 19765, 530, 3520, 3749, 1, 1, 1, -2898.98, 1382.11, 6.15595, 1.85005, 300, 0, 0, 48069), +(24189, 19765, 530, 3520, 3749, 1, 1, 1, -2913.56, 1391.4, 7.13094, 1.0472, 300, 0, 0, 48069), +(24190, 19765, 530, 3520, 3749, 1, 1, 1, -2937.48, 1354.87, 6.92214, 4.7822, 300, 0, 0, 48069), +(24191, 19765, 530, 3520, 3749, 1, 1, 1, -2902.86, 1303.16, 7.15851, 2.37365, 300, 0, 0, 48069), +(24777, 19765, 530, 3520, 3749, 1, 1, 1, -2889.05, 1314.18, 6.65059, 3.40339, 300, 0, 0, 48069), +(24788, 19765, 530, 3520, 3749, 1, 1, 1, -2902.24, 1330.04, 6.77553, 2.79253, 300, 0, 0, 48069), +(24868, 19765, 530, 3520, 3749, 1, 1, 1, -2983.65, 1309.24, 8.58929, 3.71475, 300, 8, 1, 48069), +(24869, 19765, 530, 3520, 3749, 1, 1, 1, -2942.56, 1284.57, 8.16425, 1.88496, 300, 0, 0, 48069), +(24870, 19765, 530, 3520, 3749, 1, 1, 1, -2779.55, 1304.42, 33.4497, 5.93412, 300, 0, 0, 48069), +(24915, 19765, 530, 3520, 3749, 1, 1, 1, -2817.55, 1224.34, 6.25537, 5.38328, 300, 0, 0, 48069), +(24931, 19765, 530, 3520, 3749, 1, 1, 1, -2768.09, 1273.42, 33.7681, 1.5708, 300, 0, 0, 48069), +(24944, 19765, 530, 3520, 3749, 1, 1, 1, -2764.94, 1317.1, 33.5025, 4.85202, 300, 0, 0, 48069), +(24945, 19765, 530, 3520, 3749, 1, 1, 1, -2749.51, 1247.11, 33.245, 1.84797, 300, 0, 0, 48069), +(24946, 19765, 530, 3520, 3749, 1, 1, 2, -2798.67, 1160.3, 6.693, 4.86947, 300, 0, 0, 48069), +(24947, 19765, 530, 3520, 3749, 1, 1, 1, -2787.35, 1148.32, 7.55367, 1.06465, 300, 0, 0, 48069), +(24948, 19765, 530, 3520, 3749, 1, 1, 1, -2628.65, 1223.29, 14.6047, 4.37468, 300, 0, 0, 48069), +(24974, 19765, 530, 3520, 3749, 1, 1, 2, -2725.46, 1268.64, 33.3154, 1.15192, 300, 0, 0, 48069), +(24975, 19765, 530, 3520, 3749, 1, 1, 1, -2641.38, 1229.79, 10.9875, 0.170716, 300, 3, 1, 48069), +(24977, 19765, 530, 3520, 3749, 1, 1, 1, -2677.05, 1381.3, 38.0509, 5.044, 300, 0, 0, 48069), +(24978, 19765, 530, 3520, 3749, 1, 1, 1, -2703.08, 1375.09, 38.6636, 5.88176, 300, 0, 0, 48069), +(24979, 19767, 530, 3520, 3749, 1, 1, 1, -2976.08, 1333.87, 8.76729, 2.2356, 300, 4, 1, 48069), +(24980, 19767, 530, 3520, 3749, 1, 1, 1, -2905.72, 1359.48, 6.14664, 4.48575, 300, 10, 1, 48069), +(24981, 19767, 530, 3520, 3749, 1, 1, 1, -2934.01, 1326.69, 8.1525, 2.81793, 300, 6, 1, 48069), +(24982, 19767, 530, 3520, 3749, 1, 1, 1, -2773.13, 1157.78, 7.20267, 1.13446, 300, 0, 0, 48069), +(24983, 19767, 530, 3520, 3749, 1, 1, 1, -2731.41, 1259.01, 33.7358, 2.93215, 300, 0, 0, 48069), +(25010, 19767, 530, 3520, 3749, 1, 1, 1, -2736.81, 1278.36, 33.3747, 3.22886, 300, 0, 0, 48069), +(25065, 19767, 530, 3520, 3749, 1, 1, 1, -2690.81, 1366.14, 37.1067, 3.80006, 300, 0, 0, 48069), +(25094, 19767, 530, 3520, 3749, 1, 1, 1, -2671.05, 1273.61, 27.3407, 2.36121, 300, 4, 1, 48069), +(25095, 19767, 530, 3520, 3749, 1, 1, 1, -2650.98, 1287.83, 27.5096, 1.27681, 300, 4, 1, 48069), +(25096, 19767, 530, 3520, 3749, 1, 1, 1, -2691.4, 1388.28, 38.6635, 6.05283, 300, 4, 1, 48069), +(25097, 19767, 530, 3520, 3749, 1, 1, 1, -2655.43, 1354.2, 34.7295, 1.23625, 300, 8, 1, 48069), +(25098, 19788, 530, 3520, 3749, 1, 1, 1, -2886.79, 1306.95, 5.7373, 2.81133, 300, 0, 0, 48069), +(25099, 19788, 530, 3520, 3749, 1, 1, 1, -2805.56, 1369.56, 37.8528, 4.43144, 300, 0, 0, 48069), +(25111, 19788, 530, 3520, 3749, 1, 1, 1, -2753.25, 1307.42, 33.4562, 3.61969, 300, 0, 0, 48069), +(25112, 19788, 530, 3520, 3749, 1, 1, 1, -2729.97, 1141.34, 1.72704, 2.91288, 300, 0, 0, 48069), +(25113, 19788, 530, 3520, 3749, 1, 1, 1, -2691.24, 1173.31, 5.5279, 3.77395, 300, 0, 0, 48069), +(25114, 19788, 530, 3520, 3749, 1, 1, 1, -2670.11, 1283.01, 28.1491, 2.8624, 300, 0, 0, 48069), +(25115, 19788, 530, 3520, 3749, 1, 1, 1, -2620.26, 1353.72, 37.1255, 3.66914, 300, 0, 0, 48069), +(25116, 19788, 530, 3520, 3749, 1, 1, 1, -2636.63, 1372.52, 36.0204, 3.98698, 300, 0, 0, 48069), +(25117, 19788, 530, 3520, 3749, 1, 1, 1, -2641.96, 1270.84, 24.3307, 2.474, 300, 0, 0, 48069), +(25118, 20795, 530, 3520, 3749, 1, 1, 1, -2594.66, 1384.33, 44.3154, 6.12077, 300, 5, 1, 48069), +(25119, 21027, 530, 3520, 3749, 1, 1, 0, -2616.36, 1372.07, 46.0286, 3.85718, 300, 0, 0, 48069), +(25120, 21029, 530, 3520, 3749, 1, 1, 0, -2729.85, 1215.23, 48.2141, 1.5708, 300, 0, 0, 48069), +(25121, 21029, 530, 3520, 3749, 1, 1, 0, -2721.25, 1216.49, 41.7782, 1.79769, 300, 0, 0, 48069), +(25122, 21029, 530, 3520, 3749, 1, 1, 0, -2713.19, 1221.69, 38.1432, 2.0944, 300, 0, 0, 48069), +(25123, 21029, 530, 3520, 3749, 1, 1, 0, -2711.53, 1230.92, 37.3221, 2.54818, 300, 0, 0, 48069), +(25124, 21029, 530, 3520, 3749, 1, 1, 0, -2708.88, 1239.1, 38.1921, 3.08923, 300, 0, 0, 48069), +(25125, 21041, 530, 3520, 3749, 1, 1, 0, -2638.89, 1358.96, 36.0438, 3.90954, 300, 0, 0, 48069), +(25126, 21041, 530, 3520, 3749, 1, 1, 0, -2605.25, 1369.39, 49.1248, 4.03171, 300, 0, 0, 48069), +(25127, 21041, 530, 3520, 3749, 1, 1, 0, -2605.53, 1374.24, 45.3846, 5.55015, 300, 0, 0, 48069), +(25128, 21041, 530, 3520, 3749, 1, 1, 0, -2614.51, 1381.27, 51.6831, 5.55015, 300, 0, 0, 48069), +(25129, 21041, 530, 3520, 3749, 1, 1, 0, -2610.76, 1377.7, 41.1437, 3.50811, 300, 0, 0, 48069), +(25130, 21041, 530, 3520, 3749, 1, 1, 0, -2590.76, 1387.65, 55.0794, 4.10152, 300, 0, 0, 48069), +(25713, 19784, 530, 3520, 3749, 1, 1, 0, -2924.55, 1371.39, 9.52825, 5.55015, 300, 0, 0, 48069), +(25714, 19784, 530, 3520, 3749, 1, 1, 0, -2919.43, 1372.64, 8.37301, 6.12611, 300, 0, 0, 48069), +(25715, 19784, 530, 3520, 3749, 1, 1, 0, -2960.01, 1304.2, 7.36165, 0.226893, 300, 0, 0, 48069), +(25716, 19784, 530, 3520, 3749, 1, 1, 0, -2964.3, 1312.32, 7.70759, 0.890118, 300, 0, 0, 48069), +(25717, 19784, 530, 3520, 3749, 1, 1, 0, -2851.26, 1239.81, 6.79606, 3.09596, 300, 5, 1, 48069), +(25718, 19784, 530, 3520, 3749, 1, 1, 0, -2809.98, 1254.89, 26.471, 6.0912, 300, 0, 0, 48069), +(25719, 19784, 530, 3520, 3749, 1, 1, 0, -2842.61, 1249.25, 6.79606, 1.18107, 300, 5, 1, 48069), +(25720, 19784, 530, 3520, 3749, 1, 1, 0, -2810.6, 1257.84, 26.8763, 6.23417, 300, 0, 0, 48069), +(25721, 19784, 530, 3520, 3749, 1, 1, 0, -2738.38, 1148.7, 3.50024, 3.33358, 300, 0, 0, 48069), +(25722, 19784, 530, 3520, 3749, 1, 1, 0, -2741.38, 1138.88, 4.15881, 2.46091, 300, 0, 0, 48069), +(25723, 19784, 530, 3520, 3749, 1, 1, 0, -2639.01, 1256.11, 21.8693, 5.35816, 300, 0, 0, 48069), +(25724, 19784, 530, 3520, 3749, 1, 1, 0, -2628.61, 1256.51, 19.4139, 4.7473, 300, 0, 0, 48069), +(25725, 19784, 530, 3520, 3749, 1, 1, 0, -2702.76, 1318.11, 34.033, 4.45059, 300, 0, 0, 48069), +(25726, 19784, 530, 3520, 3749, 1, 1, 0, -2714.62, 1310.4, 34.1854, 5.3058, 300, 0, 0, 48069), +(25727, 19784, 530, 3520, 3749, 1, 1, 0, -2580.79, 1389.61, 42.4415, 0.820305, 300, 0, 0, 48069), +(25738, 19784, 530, 3520, 3749, 1, 1, 0, -2583.63, 1393.74, 42.5982, 0.471239, 300, 0, 0, 48069), +(25739, 19784, 530, 3520, 3749, 1, 1, 0, -2780.42, 1393.01, 38.8631, 0.873989, 300, 5, 1, 48069), +(25740, 19784, 530, 3520, 3749, 1, 1, 0, -2790.03, 1393.41, 39.1302, 1.59271, 300, 5, 1, 48069), +(25741, 19784, 530, 3520, 3749, 1, 1, 0, -2708.27, 1223.95, 32.8727, 1.35922, 300, 5, 1, 48069), +(25742, 19784, 530, 3520, 3749, 1, 1, 0, -2720.86, 1215.66, 37.045, 2.45076, 300, 5, 1, 48069), +(25743, 19784, 530, 3520, 3749, 1, 1, 0, -2779.55, 1279.2603, 34.014435, 2.45076, 300, 0, 0, 48069), +(25744, 19784, 530, 3520, 3749, 1, 1, 0, -2779.55, 1279.2603, 34.014435, 2.45076, 300, 0, 0, 48069); + +SET @NPC := 24915; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-2823.2131,`position_y`=1231.4794,`position_z`=6.2438025 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2823.2131,1231.4794,6.2438025,NULL,0,0,0,100,0), +(@PATH,2,-2812.9219,1218.5132,6.26481,NULL,0,0,0,100,0), +(@PATH,3,-2809.2012,1208.1838,6.32249,NULL,0,0,0,100,0), +(@PATH,4,-2806.4219,1203.8843,6.3185363,NULL,0,0,0,100,0), +(@PATH,5,-2809.2012,1208.1838,6.32249,NULL,0,0,0,100,0), +(@PATH,6,-2812.9219,1218.5132,6.26481,NULL,0,0,0,100,0); + +SET @NPC := 24948; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-2644.4155,`position_y`=1194.6781,`position_z`=6.600725 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2644.4155,1194.6781,6.600725,NULL,0,0,0,100,0), +(@PATH,2,-2634.681,1206.1174,10.327223,NULL,0,0,0,100,0), +(@PATH,3,-2625.3433,1232.7086,16.544775,NULL,0,0,0,100,0), +(@PATH,4,-2634.681,1206.1174,10.327223,NULL,0,0,0,100,0); + +SET @NPC := 24945; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-2748.4146,`position_y`=1268.3123,`position_z`=33.184956 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2748.4146,1268.3123,33.184956,NULL,0,0,0,100,0), +(@PATH,2,-2753.3994,1260.7609,33.38965,NULL,0,0,0,100,0), +(@PATH,3,-2749.2388,1246.1364,33.239746,NULL,0,0,0,100,0), +(@PATH,4,-2740.1255,1235.6766,33.070683,NULL,0,0,0,100,0), +(@PATH,5,-2722.9575,1231.541,33.249657,NULL,0,0,0,100,0), +(@PATH,6,-2740.1255,1235.6766,33.070683,NULL,0,0,0,100,0), +(@PATH,7,-2749.2388,1246.1364,33.239746,NULL,0,0,0,100,0), +(@PATH,8,-2753.3994,1260.7609,33.38965,NULL,0,0,0,100,0); + +SET @NPC := 25112; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-2762.0657,`position_y`=1151.654,`position_z`=6.546216 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2762.0657,1151.654,6.546216,NULL,0,0,0,100,0), +(@PATH,2,-2748.221,1145.59,4.7005005,NULL,0,0,0,100,0), +(@PATH,3,-2728.986,1141.1119,1.6215124,NULL,0,0,0,100,0), +(@PATH,4,-2712.8843,1145.7828,2.4614542,NULL,0,0,0,100,0), +(@PATH,5,-2704.414,1160.1536,5.125069,NULL,0,0,0,100,0), +(@PATH,6,-2712.8843,1145.7828,2.4614542,NULL,0,0,0,100,0), +(@PATH,7,-2728.986,1141.1119,1.6215124,NULL,0,0,0,100,0), +(@PATH,8,-2748.221,1145.59,4.7005005,NULL,0,0,0,100,0); + +SET @NPC := 25111; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-2759.5168,`position_y`=1304.1704,`position_z`=33.314373 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2759.5168,1304.1704,33.314373,NULL,0,0,0,100,0), +(@PATH,2,-2746.1182,1311.1138,33.605423,NULL,0,0,0,100,0), +(@PATH,3,-2719.3152,1324.5756,33.971096,NULL,0,0,0,100,0), +(@PATH,4,-2698.994,1332.9515,34.436684,NULL,0,0,0,100,0), +(@PATH,5,-2683.1274,1345.1252,34.436684,NULL,0,0,0,100,0), +(@PATH,6,-2668.0637,1348.902,34.48238,NULL,0,0,0,100,0), +(@PATH,7,-2683.1274,1345.1252,34.436684,NULL,0,0,0,100,0), +(@PATH,8,-2698.9836,1332.9558,34.436684,NULL,0,0,0,100,0), +(@PATH,9,-2719.3152,1324.5756,33.971096,NULL,0,0,0,100,0), +(@PATH,10,-2746.1182,1311.1138,33.605423,NULL,0,0,0,100,0); + +SET @NPC := 25117; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-2641.9058,`position_y`=1268.142,`position_z`=23.927183 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1 ,-2641.9058,1268.142,23.927183,NULL,0,0,0,100,0), +(@PATH,2 ,-2650.1309,1277.2792,25.416039,NULL,0,0,0,100,0), +(@PATH,3 ,-2673.4944,1283.977,29.292665,NULL,0,0,0,100,0), +(@PATH,4 ,-2691.0823,1290.7217,33.745926,NULL,0,0,0,100,0), +(@PATH,5 ,-2705.8076,1298.7185,32.94668,NULL,0,0,0,100,0), +(@PATH,6 ,-2709.4016,1314.3235,33.262363,NULL,0,0,0,100,0), +(@PATH,7 ,-2705.8076,1298.7185,32.94668,NULL,0,0,0,100,0), +(@PATH,8 ,-2691.0823,1290.7217,33.745926,NULL,0,0,0,100,0), +(@PATH,9 ,-2673.4944,1283.977,29.292665,NULL,0,0,0,100,0), +(@PATH,10,-2650.1309,1277.2792,25.416039,NULL,0,0,0,100,0); + +SET @NPC := 25098; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-2912.6753,`position_y`=1318.8967,`position_z`=6.3883452 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1 ,-2912.6753,1318.8967,6.3883452,NULL,0,0,0,100,0), +(@PATH,2 ,-2906.6418,1313.7617,6.6383452,NULL,0,0,0,100,0), +(@PATH,3 ,-2893.7417,1307.0945,6.3466606,NULL,0,0,0,100,0), +(@PATH,4 ,-2880.6794,1305.1588,5.410137,NULL,0,0,0,100,0), +(@PATH,5 ,-2858.01,1298.7424,6.7960815,NULL,0,0,0,100,0), +(@PATH,6 ,-2842.9072,1292.9916,6.1282473,NULL,0,0,0,100,0), +(@PATH,7 ,-2843.1912,1280.0597,7.683124,NULL,0,0,0,100,0), +(@PATH,8 ,-2848.1216,1266.8289,8.083833,NULL,0,0,0,100,0), +(@PATH,9 ,-2853.8364,1255.8324,6.9199033,NULL,0,0,0,100,0), +(@PATH,10,-2842.4497,1243.7681,6.7960606,NULL,0,0,0,100,0), +(@PATH,11,-2853.8364,1255.8324,6.9199033,NULL,0,0,0,100,0), +(@PATH,12,-2848.1216,1266.8289,8.083833,NULL,0,0,0,100,0), +(@PATH,13,-2843.1912,1280.0597,7.683124,NULL,0,0,0,100,0), +(@PATH,14,-2842.9072,1292.9916,6.1282473,NULL,0,0,0,100,0), +(@PATH,15,-2858.01,1298.7424,6.7960815,NULL,0,0,0,100,0), +(@PATH,16,-2880.6794,1305.1588,5.410137,NULL,0,0,0,100,0), +(@PATH,17,-2893.7417,1307.0945,6.3466606,NULL,0,0,0,100,0), +(@PATH,18,-2906.6418,1313.7617,6.6383452,NULL,0,0,0,100,0); + +SET @NPC := 25114; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-2709.4016,`position_y`=1314.3235,`position_z`=33.262363 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1 ,-2709.4016,1314.3235,33.262363,NULL,0,0,0,100,0), +(@PATH,2 ,-2705.8076,1298.7185,32.94668,NULL,0,0,0,100,0), +(@PATH,3 ,-2691.0823,1290.7217,33.745926,NULL,0,0,0,100,0), +(@PATH,4 ,-2673.4944,1283.977,29.292665,NULL,0,0,0,100,0), +(@PATH,5 ,-2650.1309,1277.2792,25.416039,NULL,0,0,0,100,0), +(@PATH,6 ,-2641.9058,1268.142,23.927183,NULL,0,0,0,100,0), +(@PATH,7 ,-2650.1309,1277.2792,25.416039,NULL,0,0,0,100,0), +(@PATH,8 ,-2673.4944,1283.977,29.292665,NULL,0,0,0,100,0), +(@PATH,9 ,-2691.0823,1290.7217,33.745926,NULL,0,0,0,100,0), +(@PATH,10,-2705.8076,1298.7185,32.94668,NULL,0,0,0,100,0); + +SET @NPC := 25116; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-2643.4558,`position_y`=1364.8234,`position_z`=35.86493 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1 ,-2643.4558,1364.8234,35.86493,NULL,0,0,0,100,0), +(@PATH,2 ,-2634.716,1374.6797,36.22216,NULL,0,0,0,100,0), +(@PATH,3 ,-2626.5833,1383.2074,37.50213,NULL,0,0,0,100,0), +(@PATH,4 ,-2618.2117,1387.6519,39.28746,NULL,0,0,0,100,0), +(@PATH,5 ,-2611.0234,1393.2262,41.428757,NULL,0,0,0,100,0), +(@PATH,6 ,-2602.1787,1400.6476,41.767567,NULL,0,0,0,100,0), +(@PATH,7 ,-2611.0234,1393.2262,41.428757,NULL,0,0,0,100,0), +(@PATH,8 ,-2618.2117,1387.6519,39.28746,NULL,0,0,0,100,0), +(@PATH,9 ,-2626.5833,1383.2074,37.50213,NULL,0,0,0,100,0), +(@PATH,10,-2634.716,1374.6797,36.22216,NULL,0,0,0,100,0); + +SET @NPC := 25099; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-2809.3833,`position_y`=1356.3115,`position_z`=37.325497 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2809.3833,1356.3115,37.325497,NULL,0,0,0,100,0), +(@PATH,2,-2804.8496,1338.0927,36.000645,NULL,0,0,0,100,0), +(@PATH,3,-2784.9128,1322.3423,33.37369,NULL,0,0,0,100,0), +(@PATH,4,-2772.6155,1327.1848,33.624535,NULL,0,0,0,100,0), +(@PATH,5,-2767.8467,1360.8962,35.79723,NULL,0,0,0,100,0), +(@PATH,6,-2784.864,1388.3601,38.49067,NULL,0,0,0,100,0), +(@PATH,7,-2801.9087,1382.2137,38.60972,NULL,0,0,0,100,0); + +SET @NPC := 25113; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-2655.3274,`position_y`=1202.3822,`position_z`=6.115521 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2655.3274,1202.3822,6.115521,NULL,0,0,0,100,0), +(@PATH,2,-2666.605,1190.8188,3.529532,NULL,0,0,0,100,0), +(@PATH,3,-2679.0286,1182.2574,4.7928033,NULL,0,0,0,100,0), +(@PATH,4,-2699.4224,1167.3142,5.547194,NULL,0,0,0,100,0), +(@PATH,5,-2679.0286,1182.2574,4.7928033,NULL,0,0,0,100,0), +(@PATH,6,-2666.6719,1190.7727,3.5094023,NULL,0,0,0,100,0); + +SET @NPC := 25115; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-2634.4636,`position_y`=1345.4458,`position_z`=35.481934 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2634.4636,1345.4458,35.481934,NULL,0,0,0,100,0), +(@PATH,2,-2620.018,1353.861,37.13554,NULL,0,0,0,100,0), +(@PATH,3,-2598.73,1358.416,38.889954,NULL,0,0,0,100,0), +(@PATH,4,-2590.0383,1365.4989,40.473846,NULL,0,0,0,100,0), +(@PATH,5,-2598.73,1358.416,38.889954,NULL,0,0,0,100,0), +(@PATH,6,-2620.018,1353.861,37.13554,NULL,0,0,0,100,0); + +SET @NPC := 25743; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-2779.55,`position_y`=1279.2603,`position_z`=34.014435 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2779.55,1279.2603,34.014435,NULL,0,0,0,100,0), +(@PATH,2,-2799.971,1261.2897,33.647408,NULL,0,0,0,100,0), +(@PATH,3,-2810.8,1254.8387,31.11925,NULL,0,0,0,100,0), +(@PATH,4,-2799.971,1261.2897,33.647408,NULL,0,0,0,100,0); + +DELETE FROM `creature_formations` WHERE `memberGUID` IN (25743, 25744); +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(25743, 25743, 0, 0, 3), +(25743, 25744, 3, 90, 515); + +-- Sorceress (-25065) +DELETE FROM `waypoints` WHERE `entry`=1976700 AND `point_comment`='Coilskar Sorceress'; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `orientation`, `point_comment`) VALUES +(1976700,1,-2699.7734,1352.9802,32.96573,NULL,'Coilskar Sorceress'), +(1976700,2,-2695.3882,1362.5975,35.82666,NULL,'Coilskar Sorceress'), +(1976700,3,-2687.7195,1368.574,37.474815,NULL,'Coilskar Sorceress'), +(1976700,4,-2677.8486,1371.7639,36.15712,NULL,'Coilskar Sorceress'), +(1976700,5,-2668.1536,1368.8298,33.586617,NULL,'Coilskar Sorceress'), +(1976700,6,-2677.8486,1371.7639,36.15712,NULL,'Coilskar Sorceress'), +(1976700,7,-2687.6226,1368.6053,37.475197,NULL,'Coilskar Sorceress'), +(1976700,8,-2695.3882,1362.5975,35.82666,NULL,'Coilskar Sorceress'), +(1976700,9,-2699.7734,1352.9802,32.96573,NULL,'Coilskar Sorceress'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 19767); +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`, `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 +(19767, 0, 0, 0, 0, 0, 100, 0, 0, 1000, 2500, 4700, 0, 11, 32011, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilskar Sorceress - In Combat - Cast \'Water Bolt\''), +(19767, 0, 1, 0, 2, 0, 100, 1, 0, 80, 0, 0, 0, 11, 38026, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilskar Sorceress - Between 0-80% Health - Cast \'Viscous Shield\' (No Repeat)'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -25065); +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`, `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 +(-25065, 0, 0, 0, 0, 0, 100, 0, 0, 1000, 2500, 4700, 0, 11, 32011, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilskar Sorceress - In Combat - Cast \'Water Bolt\''), +(-25065, 0, 1, 0, 2, 0, 100, 1, 0, 80, 0, 0, 0, 11, 38026, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilskar Sorceress - Between 0-80% Health - Cast \'Viscous Shield\' (No Repeat)'), +(-25065, 0, 1001, 1002, 11, 0, 100, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilskar Sorceress - On Respawn - Set Event Phase 1'), +(-25065, 0, 1002, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 53, 0, 1976700, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilskar Sorceress - On Respawn - Start Waypoint'), +(-25065, 0, 1003, 0, 1, 0, 100, 0, 60000, 120000, 60000, 120000, 0, 80, 1976700, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilskar Sorceress - Out of Combat - Run Script'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 1976700); +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`, `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 +(1976700, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 54, 13000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilskar Sorceress - Actionlist - Pause Waypoint'), +(1976700, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 2, 0, 0, 19, 19765, 30, 0, 0, 0, 0, 0, 0, 'Coilskar Sorceress - Actionlist - Move To Closest Creature \'Coilskar Myrmidon\''), +(1976700, 9, 2, 0, 0, 0, 100, 0, 3600, 3600, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilskar Sorceress - Actionlist - Say Line 0'), +(1976700, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 19765, 10, 0, 0, 0, 0, 0, 0, 'Coilskar Sorceress - Actionlist - Set Data 1 1'), +(1976700, 9, 5, 0, 0, 0, 100, 0, 2600, 2600, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 19, 19765, 10, 0, 0, 0, 0, 0, 0, 'Coilskar Sorceress - Actionlist - Set Data 2 2'), +(1976700, 9, 6, 0, 0, 0, 100, 0, 1200, 1200, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilskar Sorceress - Actionlist - Play Emote 15'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 19765); +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`, `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 +(19765, 0, 0, 0, 9, 0, 100, 0, 0, 20, 11500, 13000, 0, 11, 38027, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilskar Myrmidon - Within 0-20 Range - Cast \'Boiling Blood\''), +(19765, 0, 1, 0, 38, 0, 100, 0, 1, 1, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 19, 19767, 10, 0, 0, 0, 0, 0, 0, 'Coilskar Myrmidon - On Data Set 1 1 - Set Orientation Closest Creature \'Coilskar Sorceress\''), +(19765, 0, 2, 0, 38, 0, 100, 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilskar Myrmidon - On Data Set 2 2 - Say Line 0'); + +DELETE FROM `creature_text` WHERE `CreatureID` IN (19767, 19765) AND `GroupID`=0; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Probability`, `Emote`, `BroadcastTextId`, `comment`) VALUES +(19767, 0, 0, 'Stay alert!', 12, 100, 1, 17711, 'Coilskar Sorceress'), +(19767, 0, 1, 'Be wary of intruders.', 12, 100, 1, 17713, 'Coilskar Sorceress'), +(19767, 0, 2, 'We must not fail the master.', 12, 100, 1, 17715, 'Coilskar Sorceress'), +(19765, 0, 0, 'Understood.', 12, 100, 1, 18146, 'Coilskar Myrmidon'), +(19765, 0, 1, 'We will not fail.', 12, 100, 1, 18410, 'Coilskar Myrmidon'); + +-- EmoteState for Myrmidons +DELETE FROM `creature_equip_template` WHERE (`CreatureID` = 19765); +INSERT INTO `creature_equip_template` (`CreatureID`, `ID`, `ItemID1`, `ItemID2`, `ItemID3`, `VerifiedBuild`) VALUES +(19765, 1, 28965, 0, 0, 18019), +(19765, 2, 2028, 0, 0, 18019); + +DELETE FROM `creature_addon` WHERE `guid` IN (24946, 24974); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES +(24946,0,0,0,1,173,0, ''), +(24974,0,0,0,1,173,0, ''); From e207694bbe107fa291d0f07fb74387dfe2112749 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sun, 19 Feb 2023 03:42:17 +0000 Subject: [PATCH 24/72] chore(DB): import pending files Referenced commit(s): 3a6e8adbc8c680a3bba67a4cc2eb115c57a279a5 --- .../rev_1676756504407801100.sql => db_world/2023_02_19_01.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1676756504407801100.sql => db_world/2023_02_19_01.sql} (99%) diff --git a/data/sql/updates/pending_db_world/rev_1676756504407801100.sql b/data/sql/updates/db_world/2023_02_19_01.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1676756504407801100.sql rename to data/sql/updates/db_world/2023_02_19_01.sql index 9ff311d48..2b8e8928c 100644 --- a/data/sql/updates/pending_db_world/rev_1676756504407801100.sql +++ b/data/sql/updates/db_world/2023_02_19_01.sql @@ -1,3 +1,4 @@ +-- DB update 2023_02_19_00 -> 2023_02_19_01 -- Add Burning Spikes to Domesticated Helboar UPDATE `creature_template_addon` SET `bytes2` = 0, `auras` = '33908' WHERE (`entry` = 21195); From e750aedb6a4532aa6f8d0dd78954d7f64568c093 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sun, 19 Feb 2023 05:22:20 +0100 Subject: [PATCH 25/72] =?UTF-8?q?fix(DB/SAI):=20Ethereal=20Crypt=20Raider'?= =?UTF-8?q?s=20Charge=20should=20be=20casted=20on=20rando=E2=80=A6=20(#151?= =?UTF-8?q?01)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/sql/updates/pending_db_world/rev_1676742228456978900.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1676742228456978900.sql diff --git a/data/sql/updates/pending_db_world/rev_1676742228456978900.sql b/data/sql/updates/pending_db_world/rev_1676742228456978900.sql new file mode 100644 index 000000000..c01ad3664 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676742228456978900.sql @@ -0,0 +1,2 @@ +-- +UPDATE `smart_scripts` SET `event_type`=0, `event_param1`=2000, `event_param2`=6000, `event_param3`=12000, `target_type`=5, `target_param1`=25 WHERE `entryorguid`=18311 AND `source_type`=0 AND `id`=4; From 23a68b694eec559a8968db67d74813ec88ddc2e4 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sun, 19 Feb 2023 05:22:27 +0100 Subject: [PATCH 26/72] =?UTF-8?q?fix(DB/Creatures):=20Fixed=20reputation?= =?UTF-8?q?=20gained=20on=20Ethereal=20Wraith/Arcane=20=E2=80=A6=20(#15100?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../updates/pending_db_world/rev_1676740896495351500.sql | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1676740896495351500.sql diff --git a/data/sql/updates/pending_db_world/rev_1676740896495351500.sql b/data/sql/updates/pending_db_world/rev_1676740896495351500.sql new file mode 100644 index 000000000..19a2829f0 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676740896495351500.sql @@ -0,0 +1,6 @@ +-- +UPDATE `creature_onkill_reputation` SET `MaxStanding1`=4 WHERE `creature_id` IN (18394,18429); +DELETE FROM `creature_onkill_reputation` WHERE `creature_id` IN (20262,20252); +INSERT INTO `creature_onkill_reputation` VALUES +(20262,933,0,7,0,15,0,0,0,0), +(20252,933,0,7,0,15,0,0,0,0); From c3a8d26109e5ac57be50ee68538661339d58de9d Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sun, 19 Feb 2023 05:22:35 +0100 Subject: [PATCH 27/72] =?UTF-8?q?fix(Scripts/OldHilsbradFoothills):=20Corr?= =?UTF-8?q?ected=20spawn=20position=20and=20waypo=E2=80=A6=20(#15099)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rev_1676740140245965800.sql | 43 +++++++++++++ .../boss_lieutenant_drake.cpp | 62 +++++++++++-------- .../instance_old_hillsbrad.cpp | 15 ++--- 3 files changed, 84 insertions(+), 36 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1676740140245965800.sql diff --git a/data/sql/updates/pending_db_world/rev_1676740140245965800.sql b/data/sql/updates/pending_db_world/rev_1676740140245965800.sql new file mode 100644 index 000000000..5618fbe51 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676740140245965800.sql @@ -0,0 +1,43 @@ +-- +DELETE FROM `waypoints` WHERE `entry`=17848; + +DELETE FROM `waypoint_data` WHERE `id` IN (178480,178481); +INSERT INTO `waypoint_data` VALUES +(178480,1,2145.6123,124.77572,76.18501,NULL,0,1,0,100,0), +(178480,2,2146.5122,117.58604,76.04292,NULL,0,1,0,100,0), +(178480,3,2148.4314,101.62945,73.041336,NULL,0,1,0,100,0), +(178480,4,2151.864,88.83778,69.48506,NULL,0,1,0,100,0), +(178480,5,2149.0708,83.53852,69.1086,NULL,0,1,0,100,0), +(178480,6,2142.1206,79.21365,68.06233,NULL,0,1,0,100,0), +(178480,7,2132.0854,73.20009,64.77117,NULL,0,1,0,100,0), +(178480,8,2128.2366,71.17936,64.41205,NULL,1200,1,0,100,0), +(178480,9,2125.2478,89.376305,54.71777,NULL,0,1,0,100,0), +(178480,10,2119.832,93.372505,52.565914,NULL,0,1,0,100,0), +(178480,11,2113.8572,93.34234,52.590572,NULL,0,1,0,100,0), + +(178481,1,2113.8572,93.34234,52.590572,NULL,0,0,0,100,0), +(178481,2,2111.2415,103.42893,52.565914,NULL,0,0,0,100,0), +(178481,3,2109.1719,113.15994,52.90283,NULL,0,0,0,100,0), +(178481,4,2107.6462,126.1786,52.565914,NULL,0,0,0,100,0), +(178481,5,2107.979,138.13727,52.546013,NULL,0,0,0,100,0), +(178481,6,2112.6594,153.49968,52.56591,NULL,0,0,0,100,0), +(178481,7,2120.5117,168.8968,52.81591,NULL,0,0,0,100,0), +(178481,8,2124.643,175.81912,52.92492,NULL,0,0,0,100,0), +(178481,9,2128.9448,182.75977,53.179924,NULL,0,0,0,100,0), +(178481,10,2138.4214,195.35818,52.565907,NULL,0,0,0,100,0), +(178481,11,2147.3398,204.56651,52.92638,NULL,0,0,0,100,0), +(178481,12,2160.0496,214.06728,52.56542,NULL,0,0,0,100,0), +(178481,13,2172.4766,224.48166,52.56554,NULL,0,0,0,100,0), +(178481,14,2179.8486,230.77225,52.565907,NULL,0,0,0,100,0), +(178481,15,2172.4766,224.48166,52.56554,NULL,0,0,0,100,0), +(178481,16,2160.0496,214.06728,52.56542,NULL,0,0,0,100,0), +(178481,17,2147.3398,204.56651,52.92638,NULL,0,0,0,100,0), +(178481,18,2138.4214,195.35818,52.565907,NULL,0,0,0,100,0), +(178481,19,2128.9448,182.75977,53.179924,NULL,0,0,0,100,0), +(178481,20,2124.643,175.81912,52.92492,NULL,0,0,0,100,0), +(178481,21,2120.5117,168.8968,52.81591,NULL,0,0,0,100,0), +(178481,22,2112.6594,153.49968,52.56591,NULL,0,0,0,100,0), +(178481,23,2107.979,138.13727,52.546013,NULL,0,0,0,100,0), +(178481,24,2107.6462,126.1786,52.565914,NULL,0,0,0,100,0), +(178481,25,2109.1719,113.15994,52.90283,NULL,0,0,0,100,0), +(178481,26,2111.2415,103.42893,52.565914,NULL,0,0,0,100,0); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_lieutenant_drake.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_lieutenant_drake.cpp index 5288c3cec..dc0d744be 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_lieutenant_drake.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_lieutenant_drake.cpp @@ -57,36 +57,13 @@ public: { boss_lieutenant_drakeAI(Creature* creature) : ScriptedAI(creature) { - pathPoints.clear(); - WPPath* path = sSmartWaypointMgr->GetPath(me->GetEntry()); - if (!path || path->empty()) - return; - - pathPoints.push_back(G3D::Vector3(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ())); - - uint32 wpCounter = 1; - WPPath::const_iterator itr; - while ((itr = path->find(wpCounter++)) != path->end()) - { - WayPoint* wp = itr->second; - pathPoints.push_back(G3D::Vector3(wp->x, wp->y, wp->z)); - } } void InitializeAI() override { - ScriptedAI::InitializeAI(); - //Talk(SAY_ENTER); - JustReachedHome(); - } - - void JustReachedHome() override - { - me->SetWalk(true); - Movement::MoveSplineInit init(me); - init.MovebyPath(pathPoints); - init.SetCyclic(); - init.Launch(); + runSecondPath = false; + pathId = me->GetEntry() * 10; + me->GetMotionMaster()->MovePath(pathId, false); } void Reset() override @@ -118,8 +95,38 @@ public: instance->SetData(DATA_ESCORT_PROGRESS, ENCOUNTER_PROGRESS_DRAKE_KILLED); } + void MovementInform(uint32 type, uint32 point) override + { + if (type != WAYPOINT_MOTION_TYPE) + { + return; + } + + if (pathId == me->GetEntry() * 10) + { + switch (point) + { + case 7: + Talk(SAY_ENTER); + break; + case 10: + pathId = (me->GetEntry() * 10) + 1; + runSecondPath = true; + break; + default: + break; + } + } + } + void UpdateAI(uint32 diff) override { + if (runSecondPath) + { + runSecondPath = false; + me->GetMotionMaster()->MovePath(pathId, true); + } + if (!UpdateVictim()) return; @@ -161,7 +168,8 @@ public: private: EventMap events; - Movement::PointsArray pathPoints; + uint32 pathId; + bool runSecondPath; }; }; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp index d11b888a9..b0c0f0e53 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp @@ -21,11 +21,11 @@ #include "ScriptMgr.h" #include "old_hillsbrad.h" -const Position instancePositions[INSTANCE_POSITIONS_COUNT] = +static Position const instancePositions[INSTANCE_POSITIONS_COUNT] = { - {2188.18f, 228.90f, 53.025f, 1.77f}, // Orcs Gather Point 1 - {2103.23f, 93.55f, 53.096f, 3.78f}, // Orcs Gather Point 2 - {2128.43f, 71.01f, 64.42f, 1.74f} // Lieutenant Drake Summon Position + { 2188.18f, 228.90f, 53.025f, 1.77f }, // Orcs Gather Point 1 + { 2103.23f, 93.550f, 53.096f, 3.78f }, // Orcs Gather Point 2 + { 2172.76f, 149.54f, 87.981f, 4.19f } // Lieutenant Drake Summon Position }; const Position thrallPositions[THRALL_POSITIONS_COUNT] = @@ -248,11 +248,8 @@ public: case EVENT_SUMMON_LIEUTENANT: { instance->LoadGrid(instancePositions[2].GetPositionX(), instancePositions[2].GetPositionY()); - if (Creature* drake = instance->SummonCreature(NPC_LIEUTENANT_DRAKE, instancePositions[2])) - { - drake->AI()->Talk(0); - } - [[fallthrough]]; /// @todo: Not sure whether the fallthrough was a mistake (forgetting a break) or intended. This should be double-checked. + instance->SummonCreature(NPC_LIEUTENANT_DRAKE, instancePositions[2]); + break; } case EVENT_THRALL_REPOSITION: { From d7071e87029123a00a0d84fa5f71ba322e0c6dea Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Sun, 19 Feb 2023 06:22:42 +0200 Subject: [PATCH 28/72] fix(DB/SAI): Increase range of Set Data for Fenrus the Devourer. (#15107) --- data/sql/updates/pending_db_world/rev_1676750377001449200.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1676750377001449200.sql diff --git a/data/sql/updates/pending_db_world/rev_1676750377001449200.sql b/data/sql/updates/pending_db_world/rev_1676750377001449200.sql new file mode 100644 index 000000000..5d25f96de --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676750377001449200.sql @@ -0,0 +1,2 @@ +-- Fenrus the Devourer - Increase MaxDistance from 100 to 200 +UPDATE `smart_scripts` SET `target_param2` = 200 WHERE `entryorguid` = 4274 AND `target_param1` = 4275; From c5ea8a747899c9930d72b01773442877dd890c42 Mon Sep 17 00:00:00 2001 From: ZhengPeiRu21 <98835050+ZhengPeiRu21@users.noreply.github.com> Date: Sat, 18 Feb 2023 21:23:02 -0700 Subject: [PATCH 29/72] fix(DB/Creature): Andormu should not sell ammunition (#15090) --- data/sql/updates/pending_db_world/rev_1676678339159333800.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1676678339159333800.sql diff --git a/data/sql/updates/pending_db_world/rev_1676678339159333800.sql b/data/sql/updates/pending_db_world/rev_1676678339159333800.sql new file mode 100644 index 000000000..4f498beeb --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676678339159333800.sql @@ -0,0 +1,3 @@ +-- +DELETE FROM `npc_vendor` WHERE `entry` = 20130; +UPDATE `creature_template` SET `npcflag` = `npcflag`&~(128) WHERE `entry` = 20130; From 195c99124cd649cbe25086e1382dd7c2bf9398dd Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sun, 19 Feb 2023 04:25:26 +0000 Subject: [PATCH 30/72] chore(DB): import pending files Referenced commit(s): c5ea8a747899c9930d72b01773442877dd890c42 --- .../rev_1676678339159333800.sql => db_world/2023_02_19_02.sql} | 1 + .../rev_1676740140245965800.sql => db_world/2023_02_19_03.sql} | 1 + .../rev_1676740896495351500.sql => db_world/2023_02_19_04.sql} | 1 + .../rev_1676742228456978900.sql => db_world/2023_02_19_05.sql} | 1 + .../rev_1676750377001449200.sql => db_world/2023_02_19_06.sql} | 1 + 5 files changed, 5 insertions(+) rename data/sql/updates/{pending_db_world/rev_1676678339159333800.sql => db_world/2023_02_19_02.sql} (75%) rename data/sql/updates/{pending_db_world/rev_1676740140245965800.sql => db_world/2023_02_19_03.sql} (98%) rename data/sql/updates/{pending_db_world/rev_1676740896495351500.sql => db_world/2023_02_19_04.sql} (86%) rename data/sql/updates/{pending_db_world/rev_1676742228456978900.sql => db_world/2023_02_19_05.sql} (82%) rename data/sql/updates/{pending_db_world/rev_1676750377001449200.sql => db_world/2023_02_19_06.sql} (79%) diff --git a/data/sql/updates/pending_db_world/rev_1676678339159333800.sql b/data/sql/updates/db_world/2023_02_19_02.sql similarity index 75% rename from data/sql/updates/pending_db_world/rev_1676678339159333800.sql rename to data/sql/updates/db_world/2023_02_19_02.sql index 4f498beeb..f6653fb98 100644 --- a/data/sql/updates/pending_db_world/rev_1676678339159333800.sql +++ b/data/sql/updates/db_world/2023_02_19_02.sql @@ -1,3 +1,4 @@ +-- DB update 2023_02_19_01 -> 2023_02_19_02 -- DELETE FROM `npc_vendor` WHERE `entry` = 20130; UPDATE `creature_template` SET `npcflag` = `npcflag`&~(128) WHERE `entry` = 20130; diff --git a/data/sql/updates/pending_db_world/rev_1676740140245965800.sql b/data/sql/updates/db_world/2023_02_19_03.sql similarity index 98% rename from data/sql/updates/pending_db_world/rev_1676740140245965800.sql rename to data/sql/updates/db_world/2023_02_19_03.sql index 5618fbe51..afa19d40a 100644 --- a/data/sql/updates/pending_db_world/rev_1676740140245965800.sql +++ b/data/sql/updates/db_world/2023_02_19_03.sql @@ -1,3 +1,4 @@ +-- DB update 2023_02_19_02 -> 2023_02_19_03 -- DELETE FROM `waypoints` WHERE `entry`=17848; diff --git a/data/sql/updates/pending_db_world/rev_1676740896495351500.sql b/data/sql/updates/db_world/2023_02_19_04.sql similarity index 86% rename from data/sql/updates/pending_db_world/rev_1676740896495351500.sql rename to data/sql/updates/db_world/2023_02_19_04.sql index 19a2829f0..fec6b2a57 100644 --- a/data/sql/updates/pending_db_world/rev_1676740896495351500.sql +++ b/data/sql/updates/db_world/2023_02_19_04.sql @@ -1,3 +1,4 @@ +-- DB update 2023_02_19_03 -> 2023_02_19_04 -- UPDATE `creature_onkill_reputation` SET `MaxStanding1`=4 WHERE `creature_id` IN (18394,18429); DELETE FROM `creature_onkill_reputation` WHERE `creature_id` IN (20262,20252); diff --git a/data/sql/updates/pending_db_world/rev_1676742228456978900.sql b/data/sql/updates/db_world/2023_02_19_05.sql similarity index 82% rename from data/sql/updates/pending_db_world/rev_1676742228456978900.sql rename to data/sql/updates/db_world/2023_02_19_05.sql index c01ad3664..c4f57c7fa 100644 --- a/data/sql/updates/pending_db_world/rev_1676742228456978900.sql +++ b/data/sql/updates/db_world/2023_02_19_05.sql @@ -1,2 +1,3 @@ +-- DB update 2023_02_19_04 -> 2023_02_19_05 -- UPDATE `smart_scripts` SET `event_type`=0, `event_param1`=2000, `event_param2`=6000, `event_param3`=12000, `target_type`=5, `target_param1`=25 WHERE `entryorguid`=18311 AND `source_type`=0 AND `id`=4; diff --git a/data/sql/updates/pending_db_world/rev_1676750377001449200.sql b/data/sql/updates/db_world/2023_02_19_06.sql similarity index 79% rename from data/sql/updates/pending_db_world/rev_1676750377001449200.sql rename to data/sql/updates/db_world/2023_02_19_06.sql index 5d25f96de..aecbaca83 100644 --- a/data/sql/updates/pending_db_world/rev_1676750377001449200.sql +++ b/data/sql/updates/db_world/2023_02_19_06.sql @@ -1,2 +1,3 @@ +-- DB update 2023_02_19_05 -> 2023_02_19_06 -- Fenrus the Devourer - Increase MaxDistance from 100 to 200 UPDATE `smart_scripts` SET `target_param2` = 200 WHERE `entryorguid` = 4274 AND `target_param1` = 4275; From 6e7aec3b958d91b7ecd135e700530c8437acb3d5 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sun, 19 Feb 2023 05:48:12 +0100 Subject: [PATCH 31/72] fix(Scripts/BlackMorass): Improved Opening the Dark portal encounter. (#14861) --- .../instance_the_black_morass.cpp | 156 +++++++++++++++--- .../TheBlackMorass/the_black_morass.cpp | 2 +- .../TheBlackMorass/the_black_morass.h | 11 +- 3 files changed, 138 insertions(+), 31 deletions(-) diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp index a1539a192..aa80861ad 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp @@ -23,7 +23,8 @@ #include "TemporarySummon.h" #include "the_black_morass.h" -const Position PortalLocation[4] = +#define MAX_PORTAL_LOCATIONS 4 +const Position PortalLocation[MAX_PORTAL_LOCATIONS] = { { -2030.8318f, 7024.9443f, 23.071817f, 3.14159f }, { -1961.7335f, 7029.5280f, 21.811401f, 2.12931f }, @@ -58,6 +59,7 @@ public: _currentRift = 0; _shieldPercent = 100; encounterNPCs.clear(); + _timerToNextBoss = 0; } void CleanupInstance() @@ -66,6 +68,8 @@ public: _currentRift = 0; _shieldPercent = 100; + _usedRiftPostions.fill(ObjectGuid::Empty); + instance->LoadGrid(-2023.0f, 7121.0f); if (Creature* medivh = instance->GetCreature(_medivhGUID)) { @@ -183,21 +187,48 @@ public: } case TYPE_CHRONO_LORD_DEJA: case TYPE_TEMPORUS: + { + GuidSet eCopy = encounterNPCs; + for (ObjectGuid const& guid : eCopy) + { + if (Creature* creature = instance->GetCreature(guid)) + { + switch (creature->GetEntry()) + { + case NPC_RIFT_KEEPER_WARLOCK: + case NPC_RIFT_KEEPER_MAGE: + case NPC_RIFT_LORD: + case NPC_RIFT_LORD_2: + case NPC_TIME_RIFT: + creature->DespawnOrUnsummon(); + break; + default: + break; + } + } + } encounters[type] = DONE; - Events.RescheduleEvent(EVENT_NEXT_PORTAL, 60000); + + if (!_timerToNextBoss || _timerToNextBoss > 30 * IN_MILLISECONDS) + { + Events.RescheduleEvent(EVENT_NEXT_PORTAL, 30 * IN_MILLISECONDS); + } + else + { + Events.RescheduleEvent(EVENT_NEXT_PORTAL, _timerToNextBoss); + } Events.SetPhase(1); SaveToDB(); + _timerToNextBoss = (instance->IsHeroic() ? 300 : 150) * IN_MILLISECONDS; break; - case DATA_RIFT_KILLED: - if (!Events.IsInPhase(1)) - Events.RescheduleEvent(EVENT_NEXT_PORTAL, 4000); - break; + } case DATA_MEDIVH: { DoUpdateWorldState(WORLD_STATE_BM, 1); DoUpdateWorldState(WORLD_STATE_BM_SHIELD, _shieldPercent); DoUpdateWorldState(WORLD_STATE_BM_RIFT, _currentRift); Events.RescheduleEvent(EVENT_NEXT_PORTAL, 3000); + _timerToNextBoss = (instance->IsHeroic() ? 300 : 150) * IN_MILLISECONDS; for (ObjectGuid const& guid : encounterNPCs) { @@ -285,6 +316,34 @@ public: encounterNPCs.insert(data); else if (type == DATA_DELETED_NPC) encounterNPCs.erase(data); + else if (type == DATA_RIFT_KILLED) + { + if (!Events.IsInPhase(1)) + { + uint8 emptySpots = 0; + for (uint8 i = 0; i < MAX_PORTAL_LOCATIONS; ++i) + { + if (!_usedRiftPostions[i]) + { + ++emptySpots; + } + + if (_usedRiftPostions[i] == data) + { + _usedRiftPostions[i].Clear(); + } + } + + if (emptySpots >= MAX_PORTAL_LOCATIONS - 1) + { + Events.RescheduleEvent(EVENT_NEXT_PORTAL, 4000); + } + else if (!emptySpots) + { + Events.RescheduleEvent(EVENT_NEXT_PORTAL, (_currentRift >= 13 ? 120 : 90) * IN_MILLISECONDS); + } + } + } } ObjectGuid GetGuidData(uint32 data) const override @@ -295,17 +354,11 @@ public: return ObjectGuid::Empty; } - void SummonPortalKeeper() + void SummonPortalKeeper(uint32 eventId) { - Creature* rift = nullptr; - for (ObjectGuid const& guid : encounterNPCs) - if (Creature* summon = instance->GetCreature(guid)) - if (summon->GetEntry() == NPC_TIME_RIFT) - { - rift = summon; - break; - } - + uint8 riftPosition = eventId - EVENT_SUMMON_KEEPER_1; + ObjectGuid const& riftGUID = _usedRiftPostions[riftPosition]; + Creature* rift = instance->GetCreature(riftGUID); if (!rift) return; @@ -348,23 +401,72 @@ public: void Update(uint32 diff) override { + if (_timerToNextBoss) + { + if (_timerToNextBoss <= diff) + { + _timerToNextBoss = 0; + } + else + { + _timerToNextBoss -= diff; + } + } + Events.Update(diff); - switch (Events.ExecuteEvent()) + + uint32 eventId = Events.ExecuteEvent(); + switch (eventId) { case EVENT_NEXT_PORTAL: - ++_currentRift; - DoUpdateWorldState(WORLD_STATE_BM_RIFT, _currentRift); - Events.ScheduleEvent(EVENT_SUMMON_KEEPER, 6000); - Events.SetPhase(0); - + { if (instance->GetCreature(_medivhGUID)) { - uint8 position = (_currentRift - 1) % 4; - instance->SummonCreature(NPC_TIME_RIFT, PortalLocation[position]); + uint8 position = MAX_PORTAL_LOCATIONS; + + std::vector possibleSpots; + for (uint8 i = 0; i < MAX_PORTAL_LOCATIONS; ++i) + { + if (!_usedRiftPostions[i]) + { + possibleSpots.push_back(i); + } + } + + if (!possibleSpots.empty()) + { + position = Acore::Containers::SelectRandomContainerElement(possibleSpots); + } + + if (position < MAX_PORTAL_LOCATIONS) + { + ++_currentRift; + DoUpdateWorldState(WORLD_STATE_BM_RIFT, _currentRift); + Events.ScheduleEvent(EVENT_SUMMON_KEEPER_1 + position, 6000); + Events.SetPhase(0); + + if (Creature* rift = instance->SummonCreature(NPC_TIME_RIFT, PortalLocation[position])) + { + _usedRiftPostions[position] = rift->GetGUID(); + + for (uint8 i = 0; i < MAX_PORTAL_LOCATIONS; ++i) + { + if (!_usedRiftPostions[i]) + { + Events.RescheduleEvent(EVENT_NEXT_PORTAL, (_currentRift >= 13 ? 120 : 90) * IN_MILLISECONDS); + break; + } + } + } + } } break; - case EVENT_SUMMON_KEEPER: - SummonPortalKeeper(); + } + case EVENT_SUMMON_KEEPER_1: + case EVENT_SUMMON_KEEPER_2: + case EVENT_SUMMON_KEEPER_3: + case EVENT_SUMMON_KEEPER_4: + SummonPortalKeeper(eventId); break; case EVENT_WIPE_1: if (Creature* medivh = instance->GetCreature(_medivhGUID)) @@ -433,6 +535,8 @@ public: protected: EventMap Events; + std::array _usedRiftPostions; + uint32 _timerToNextBoss; }; }; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp index cb4abba8f..873411b44 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp @@ -326,7 +326,7 @@ struct npc_time_rift : public NullCreatureAI Creature* riftKeeper = ObjectAccessor::GetCreature(*me, _riftKeeperGUID); if (!riftKeeper || !riftKeeper->IsAlive()) { - _instance->SetData(DATA_RIFT_KILLED, 1); + _instance->SetGuidData(DATA_RIFT_KILLED, me->GetGUID()); me->DespawnOrUnsummon(0); break; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h index 1d5325122..6d895c210 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h @@ -90,10 +90,13 @@ enum Misc SPELL_TELEPORT_VISUAL = 7791, EVENT_NEXT_PORTAL = 1, - EVENT_SUMMON_KEEPER = 2, - EVENT_WIPE_1 = 3, - EVENT_WIPE_2 = 4, - EVENT_WIPE_3 = 5, + EVENT_SUMMON_KEEPER_1 = 2, + EVENT_SUMMON_KEEPER_2 = 3, + EVENT_SUMMON_KEEPER_3 = 4, + EVENT_SUMMON_KEEPER_4 = 5, + EVENT_WIPE_1 = 6, + EVENT_WIPE_2 = 7, + EVENT_WIPE_3 = 8, ACTION_OUTRO = 1 }; From cefbf94448c34c19f3334867453ff9f047fcffff Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Sun, 19 Feb 2023 02:54:11 -0300 Subject: [PATCH 32/72] fix(DB/Quest): The Stone Watcher (#15102) --- .../pending_db_world/rev_1676741293045096600.sql | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1676741293045096600.sql diff --git a/data/sql/updates/pending_db_world/rev_1676741293045096600.sql b/data/sql/updates/pending_db_world/rev_1676741293045096600.sql new file mode 100644 index 000000000..a968a9461 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676741293045096600.sql @@ -0,0 +1,16 @@ +-- +DELETE FROM `gameobject_queststarter` WHERE (`quest` = 2954) AND (`id` IN (142343)); +INSERT INTO `gameobject_queststarter` (`id`, `quest`) VALUES +(142343, 2954); + +DELETE FROM `creature_queststarter` WHERE `quest` = 2954; + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 142343) AND (`source_type` = 1) AND (`id` IN (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`, `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 +(142343, 1, 2, 0, 19, 0, 100, 0, 2954, 0, 0, 0, 0, 80, 14234300, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Uldum Pedestal - On Quest \'The Stone Watcher\' Taken - Run Script'); + +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 22) AND (`SourceEntry` = 142343); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22, 1, 142343, 1, 0, 29, 1, 7918, 10, 0, 1, 0, 0, '', 'Only summon Stone Watcher of Norgannon if there isn\'t one already spawned'), +(22, 2, 142343, 1, 0, 29, 1, 7918, 10, 0, 1, 0, 0, '', 'Only summon Stone Watcher of Norgannon if there isn\'t one already spawned'), +(22, 3, 142343, 1, 0, 29, 1, 7918, 10, 0, 1, 0, 0, '', 'Only summon Stone Watcher of Norgannon if there isn\'t one already spawned'); From 62447a2a8efaa4eba43a40a692f5df21fd8c5520 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Sun, 19 Feb 2023 02:56:34 -0300 Subject: [PATCH 33/72] fix(DB/Creature): Port Zangarmarsh rares from Mangos (#15091) --- .../rev_1676672751811724500.sql | 246 ++++++++++++++++++ 1 file changed, 246 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1676672751811724500.sql diff --git a/data/sql/updates/pending_db_world/rev_1676672751811724500.sql b/data/sql/updates/pending_db_world/rev_1676672751811724500.sql new file mode 100644 index 000000000..7b0b9a548 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676672751811724500.sql @@ -0,0 +1,246 @@ +-- Marticar (18680) +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 18680); +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`, `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 +(18680, 0, 0, 0, 4, 0, 100, 0, 0, 0, 0, 0, 0, 11, 32039, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Marticar - On Aggro - Cast \'Magnetic Pull\''), +(18680, 0, 1, 0, 9, 0, 100, 0, 0, 8, 12000, 16000, 0, 11, 35493, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Marticar - Within 0-8 Range - Cast \'Forked Lightning Tether\''), +(18680, 0, 2, 0, 9, 0, 100, 0, 10, 40, 12000, 16000, 0, 11, 32039, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Marticar - Within 10-40 Range - Cast \'Magnetic Pull\''); + +-- Coilfang Emissary (18681) +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 18681); +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`, `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 +(18681, 0, 0, 0, 9, 0, 100, 0, 0, 10, 8000, 15000, 0, 11, 33860, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Emissary - Within 0-10 Range - Cast \'Arcane Explosion\''), +(18681, 0, 1, 0, 0, 0, 100, 0, 6000, 10000, 14000, 21000, 0, 11, 39207, 64, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Emissary - In Combat - Cast \'Water Spout\''), +(18681, 0, 2, 0, 9, 0, 100, 0, 0, 10, 12000, 16000, 0, 11, 11831, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Emissary - Within 0-10 Range - Cast \'Frost Nova\''), +(18681, 0, 3, 0, 9, 0, 100, 0, 0, 40, 3400, 4800, 0, 11, 20297, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Emissary - Within 0-40 Range - Cast \'Frostbolt\''); + +-- Bog Lurker (18682) +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 18682); +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`, `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 +(18682, 0, 0, 0, 9, 0, 100, 0, 0, 5, 12000, 16000, 0, 11, 35238, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Bog Lurker - Within 0-5 Range - Cast \'War Stomp\''), +(18682, 0, 1, 0, 2, 0, 100, 0, 0, 50, 22000, 26000, 0, 11, 34163, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Bog Lurker - Between 0-50% Health - Cast \'Fungal Regrowth\''); + +SET @CGUID := 25101; + +DELETE FROM `creature` WHERE `id1` IN (18680, 18681, 18682); +INSERT INTO `creature` (`guid`, `id1`, `map`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `MovementType`, `wander_distance`) VALUES +-- Marticar +(@CGUID+0, 18680, 530, 0, 909.798, 6974.82, 20.7275, 4.35157, 82800, 2, 0), +(@CGUID+1, 18680, 530, 0, 641.629, 5601.53, 21.7289, 1.20404, 104400, 2, 0), +(@CGUID+2, 18680, 530, 0, -35.4279, 8945.68, 18.9934, 0.34089, 122400, 2, 0), +-- Coilfang Emissary +(@CGUID+3, 18681, 530, 1, 356.366, 8154.59, 23.4664, 5.86458, 79200, 1, 20), +(@CGUID+4, 18681, 530, 1, 658.75, 6322.29, 20.6887, 2.45849, 93600, 1, 20), +(@CGUID+5, 18681, 530, 1, -246.269, 6272.19, 21.7947, 4.60655, 100800, 1, 20), +(@CGUID+6, 18681, 530, 1, -706.367, 5922.93, 21.7108, 2.34853, 115200, 1, 20), +-- Bog Lurker +(@CGUID+7, 18682, 530, 0, -294.88, 6951.41, 19.3571, 5.86619, 10506, 2, 0), +(@CGUID+8, 18682, 530, 0, -1023.69, 5095.25, 17.3841, 6.16307, 10506, 2, 0), +(@CGUID+9, 18682, 530, 0, 1172.09, 8023.15, 17.7483, 0.670779, 10506, 2, 0); + +DELETE FROM `creature_addon` WHERE (`guid` IN (@CGUID+0,@CGUID+1,@CGUID+2,@CGUID+7,@CGUID+8,@CGUID+9)); +INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(@CGUID+0, (@CGUID+0)*10, 0, 0, 0, 0, 0, ''), +(@CGUID+1, (@CGUID+1)*10, 0, 0, 0, 0, 0, ''), +(@CGUID+2, (@CGUID+2)*10, 0, 0, 0, 0, 0, ''), +(@CGUID+7, (@CGUID+7)*10, 0, 0, 0, 0, 0, ''), +(@CGUID+8, (@CGUID+8)*10, 0, 0, 0, 0, 0, ''), +(@CGUID+9, (@CGUID+9)*10, 0, 0, 0, 0, 0, ''); + +DELETE FROM `waypoint_data` WHERE `id` IN ((@CGUID+0)*10,(@CGUID+1)*10,(@CGUID+2)*10,(@CGUID+7)*10,(@CGUID+8)*10,(@CGUID+9)*10); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`) VALUES +((@CGUID+0)*10, 1, 909.798, 6974.82, 20.6049), +((@CGUID+0)*10, 2, 925.955, 6984.85, 17.5734), +((@CGUID+0)*10, 3, 942.871, 7042.5, 17.8393), +((@CGUID+0)*10, 4, 934.748, 7083.6, 17.8208), +((@CGUID+0)*10, 5, 909.849, 7105.03, 19.3418), +((@CGUID+0)*10, 6, 882.136, 7096.42, 17.9662), +((@CGUID+0)*10, 7, 817.75, 7147.84, 17.446), +((@CGUID+0)*10, 8, 805.416, 7221.27, 17.3745), +((@CGUID+0)*10, 9, 770.959, 7293.45, 17.4865), +((@CGUID+0)*10, 10, 833.662, 7369.67, 17.6963), +((@CGUID+0)*10, 11, 811.041, 7439.55, 17.6798), +((@CGUID+0)*10, 12, 822.635, 7511.4, 17.7967), +((@CGUID+0)*10, 13, 777.672, 7550.08, 17.6132), +((@CGUID+0)*10, 14, 663.722, 7553.98, 17.3779), +((@CGUID+0)*10, 15, 606.491, 7575.89, 17.434), +((@CGUID+0)*10, 16, 663.722, 7553.98, 17.3779), +((@CGUID+0)*10, 17, 777.672, 7550.08, 17.6132), +((@CGUID+0)*10, 18, 822.635, 7511.4, 17.7967), +((@CGUID+0)*10, 19, 811.041, 7439.55, 17.6798), +((@CGUID+0)*10, 20, 833.662, 7369.67, 17.6963), +((@CGUID+0)*10, 21, 770.959, 7293.45, 17.4865), +((@CGUID+0)*10, 22, 805.416, 7221.27, 17.3745), +((@CGUID+0)*10, 23, 817.75, 7147.84, 17.446), +((@CGUID+0)*10, 24, 882.136, 7096.42, 17.9662), +((@CGUID+0)*10, 25, 909.849, 7105.03, 19.3418), +((@CGUID+0)*10, 26, 934.748, 7083.6, 17.8208), +((@CGUID+0)*10, 27, 942.871, 7042.5, 17.8393), +((@CGUID+0)*10, 28, 925.955, 6984.85, 17.5734), +((@CGUID+1)*10, 1, 641.629, 5601.53, 21.7289), +((@CGUID+1)*10, 2, 681.779, 5664.12, 23.5277), +((@CGUID+1)*10, 3, 719.717, 5699.03, 21.9689), +((@CGUID+1)*10, 4, 718.233, 5734.3, 17.5044), +((@CGUID+1)*10, 5, 724.722, 5783.54, 17.7705), +((@CGUID+1)*10, 6, 745.975, 5811.38, 17.2784), +((@CGUID+1)*10, 7, 739.645, 5898.54, 17.3483), +((@CGUID+1)*10, 8, 700.262, 5944.62, 17.5259), +((@CGUID+1)*10, 9, 653.386, 5949.96, 17.3741), +((@CGUID+1)*10, 10, 616.609, 5975.77, 17.3742), +((@CGUID+1)*10, 11, 594.179, 5962.99, 17.3778), +((@CGUID+1)*10, 12, 583.11, 5926.56, 17.4075), +((@CGUID+1)*10, 13, 552.184, 5898.35, 17.3766), +((@CGUID+1)*10, 14, 528.946, 5873.05, 22.473), +((@CGUID+1)*10, 15, 507.433, 5839.19, 21.8951), +((@CGUID+1)*10, 16, 496.027, 5819.39, 17.3948), +((@CGUID+1)*10, 17, 449.619, 5753.03, 17.3779), +((@CGUID+1)*10, 18, 429.245, 5718.28, 17.3731), +((@CGUID+1)*10, 19, 386.39, 5727.86, 17.3775), +((@CGUID+1)*10, 20, 334.89, 5652.7, 17.3743), +((@CGUID+1)*10, 21, 235.352, 5652.17, 17.3747), +((@CGUID+1)*10, 22, 191.524, 5600.89, 17.3743), +((@CGUID+1)*10, 23, 155.669, 5576.97, 17.3743), +((@CGUID+1)*10, 24, 115.796, 5504.53, 17.6996), +((@CGUID+1)*10, 25, 155.669, 5576.97, 17.3743), +((@CGUID+1)*10, 26, 191.524, 5600.89, 17.3743), +((@CGUID+1)*10, 27, 235.352, 5652.17, 17.3747), +((@CGUID+1)*10, 28, 334.89, 5652.7, 17.3743), +((@CGUID+1)*10, 29, 386.39, 5727.86, 17.3775), +((@CGUID+1)*10, 30, 429.245, 5718.28, 17.3731), +((@CGUID+1)*10, 31, 449.619, 5753.03, 17.3779), +((@CGUID+1)*10, 32, 496.027, 5819.39, 17.3948), +((@CGUID+1)*10, 33, 507.433, 5839.19, 21.8951), +((@CGUID+1)*10, 34, 528.946, 5873.05, 22.473), +((@CGUID+1)*10, 35, 552.184, 5898.35, 17.3766), +((@CGUID+1)*10, 36, 583.11, 5926.56, 17.4075), +((@CGUID+1)*10, 37, 594.179, 5962.99, 17.3778), +((@CGUID+1)*10, 38, 616.609, 5975.77, 17.3742), +((@CGUID+1)*10, 39, 653.386, 5949.96, 17.3741), +((@CGUID+1)*10, 40, 700.262, 5944.62, 17.5259), +((@CGUID+1)*10, 41, 739.645, 5898.54, 17.3483), +((@CGUID+1)*10, 42, 745.975, 5811.38, 17.2784), +((@CGUID+1)*10, 43, 724.722, 5783.54, 17.7705), +((@CGUID+1)*10, 44, 718.233, 5734.3, 17.5044), +((@CGUID+1)*10, 45, 719.717, 5699.03, 21.9689), +((@CGUID+1)*10, 46, 681.779, 5664.12, 23.5277), +((@CGUID+2)*10, 1, -35.4279, 8945.68, 18.9934), +((@CGUID+2)*10, 2, 17.7719, 8948.13, 20.111), +((@CGUID+2)*10, 3, 61.182, 8973.75, 24.6196), +((@CGUID+2)*10, 4, 91.2396, 8982.79, 25.6668), +((@CGUID+2)*10, 5, 106.845, 8982.03, 21.4199), +((@CGUID+2)*10, 6, 201.82, 8958.88, 17.6188), +((@CGUID+2)*10, 7, 222.732, 8932.57, 19.2304), +((@CGUID+2)*10, 8, 241.119, 8925.89, 24.0813), +((@CGUID+2)*10, 9, 278.243, 8917.19, 26.3384), +((@CGUID+2)*10, 10, 312.837, 8915.34, 28.0207), +((@CGUID+2)*10, 11, 330.796, 8887.92, 18.6883), +((@CGUID+2)*10, 12, 345.415, 8860.49, 19.3178), +((@CGUID+2)*10, 13, 395.666, 8822.86, 18.57), +((@CGUID+2)*10, 14, 381.241, 8782.36, 19.5365), +((@CGUID+2)*10, 15, 400.399, 8721.9, 19.935), +((@CGUID+2)*10, 16, 394.703, 8695.2, 22.0397), +((@CGUID+2)*10, 17, 450.314, 8638.34, 20.7326), +((@CGUID+2)*10, 18, 493.008, 8666.39, 19.728), +((@CGUID+2)*10, 19, 502.636, 8691.85, 22.1677), +((@CGUID+2)*10, 20, 555.124, 8676.63, 20.9415), +((@CGUID+2)*10, 21, 648.747, 8661.43, 18.4553), +((@CGUID+2)*10, 22, 674.204, 8656.4, 21.7503), +((@CGUID+2)*10, 23, 714.707, 8638.13, 18.9595), +((@CGUID+2)*10, 24, 760.368, 8597.12, 17.3747), +((@CGUID+2)*10, 25, 902.179, 8556.58, 17.3745), +((@CGUID+2)*10, 26, 760.368, 8597.12, 17.3747), +((@CGUID+2)*10, 27, 714.707, 8638.13, 18.9595), +((@CGUID+2)*10, 28, 674.204, 8656.4, 21.7503), +((@CGUID+2)*10, 29, 648.747, 8661.43, 18.4553), +((@CGUID+2)*10, 30, 555.124, 8676.63, 20.9415), +((@CGUID+2)*10, 31, 502.636, 8691.85, 22.1677), +((@CGUID+2)*10, 32, 493.008, 8666.39, 19.728), +((@CGUID+2)*10, 33, 450.314, 8638.34, 20.7326), +((@CGUID+2)*10, 34, 394.703, 8695.2, 22.0397), +((@CGUID+2)*10, 35, 400.399, 8721.9, 19.935), +((@CGUID+2)*10, 36, 381.241, 8782.36, 19.5365), +((@CGUID+2)*10, 37, 395.666, 8822.86, 18.57), +((@CGUID+2)*10, 38, 345.415, 8860.49, 19.3178), +((@CGUID+2)*10, 39, 330.796, 8887.92, 18.6883), +((@CGUID+2)*10, 40, 312.837, 8915.34, 28.0207), +((@CGUID+2)*10, 41, 278.243, 8917.19, 26.3384), +((@CGUID+2)*10, 42, 241.119, 8925.89, 24.0813), +((@CGUID+2)*10, 43, 222.732, 8932.57, 19.2304), +((@CGUID+2)*10, 44, 201.82, 8958.88, 17.6188), +((@CGUID+2)*10, 45, 106.845, 8982.03, 21.4199), +((@CGUID+2)*10, 46, 91.2396, 8982.79, 25.6668), +((@CGUID+2)*10, 47, 61.182, 8973.75, 24.6196), +((@CGUID+2)*10, 48, 17.7719, 8948.13, 20.111), + +((@CGUID+7)*10, 1, -294.88, 6951.41, 19.3571), +((@CGUID+7)*10, 2, -264.713, 6967.21, 18.5643), +((@CGUID+7)*10, 3, -238.936, 6962.83, 18.4649), +((@CGUID+7)*10, 4, -223.667, 6933.64, 18.847), +((@CGUID+7)*10, 5, -206.707, 6923.1, 19.2127), +((@CGUID+7)*10, 6, -174.357, 6912.01, 23.7861), +((@CGUID+7)*10, 7, -133.379, 6904.8, 19.1708), +((@CGUID+7)*10, 8, -89.2117, 6888.52, 18.7763), +((@CGUID+7)*10, 9, -10.2975, 6909.53, 18.2978), +((@CGUID+7)*10, 10, -18.0022, 6939.27, 21.741), +((@CGUID+7)*10, 11, -25.1892, 6997.55, 20.889), +((@CGUID+7)*10, 12, -24.8436, 7035.61, 17.8247), +((@CGUID+7)*10, 13, 6.85314, 7099.44, 17.3786), +((@CGUID+7)*10, 14, 25.5966, 7264.21, 17.4588), +((@CGUID+7)*10, 15, 12.2616, 7293.45, 17.3838), +((@CGUID+7)*10, 16, -41.0481, 7273.87, 17.9097), +((@CGUID+7)*10, 17, -85.6322, 7318.57, 17.6278), +((@CGUID+7)*10, 18, -89.8231, 7394.33, 17.6309), +((@CGUID+7)*10, 19, -163.533, 7388.21, 17.2929), +((@CGUID+7)*10, 20, -188.143, 7374.22, 17.5246), +((@CGUID+7)*10, 21, -209.081, 7387.84, 19.2417), +((@CGUID+7)*10, 22, -223.03, 7406.85, 17.6799), +((@CGUID+7)*10, 23, -316.638, 7413.45, 17.396), +((@CGUID+8)*10, 1, -1023.69, 5095.25, 17.3839), +((@CGUID+8)*10, 2, -931.962, 5086.47, 17.7585), +((@CGUID+8)*10, 3, -814.518, 5125.51, 17.8079), +((@CGUID+8)*10, 4, -777.376, 5149.43, 17.8128), +((@CGUID+8)*10, 5, -680.908, 5288.44, 17.7527), +((@CGUID+8)*10, 6, -689.065, 5349.76, 17.9837), +((@CGUID+9)*10, 1, 1172.09, 8023.15, 17.7483), +((@CGUID+9)*10, 2, 1205.67, 8081.13, 18.0472), +((@CGUID+9)*10, 3, 1246.97, 8119.73, 18.0185), +((@CGUID+9)*10, 4, 1244.49, 8164.48, 19.4185), +((@CGUID+9)*10, 5, 1223.65, 8202.27, 17.7094), +((@CGUID+9)*10, 6, 1221.96, 8226.97, 17.6808), +((@CGUID+9)*10, 7, 1197.53, 8287.43, 18.2173), +((@CGUID+9)*10, 8, 1216.92, 8311.79, 18.6032), +((@CGUID+9)*10, 9, 1196.57, 8343.54, 17.3991), +((@CGUID+9)*10, 10, 1088.8, 8342.08, 17.3746), +((@CGUID+9)*10, 11, 1045.06, 8342.71, 21.9398), +((@CGUID+9)*10, 12, 1011.94, 8349.03, 19.6497), +((@CGUID+9)*10, 13, 930.204, 8321.25, 17.427), +((@CGUID+9)*10, 14, 906.417, 8281.23, 18.9275), +((@CGUID+9)*10, 15, 908.587, 8226.88, 18.308), +((@CGUID+9)*10, 16, 942.57, 8148.69, 17.3847), +((@CGUID+9)*10, 17, 1006.13, 8155.76, 17.3811), +((@CGUID+9)*10, 18, 1059.14, 8110.92, 17.4296), +((@CGUID+9)*10, 19, 1108.14, 8112.69, 17.3877), +((@CGUID+9)*10, 20, 1140.55, 8059.55, 17.6974), +((@CGUID+9)*10, 21, 1151.68, 8029.68, 17.6969); + +DELETE FROM `pool_template` WHERE `entry`=1118 AND `description`='Marticar (18680)'; +DELETE FROM `pool_template` WHERE `entry`=1119 AND `description`='Coilfang Emissary (18681)'; +DELETE FROM `pool_template` WHERE `entry`=1120 AND `description`='Bog Lurker (18682)'; +INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES +(1118, 1, 'Marticar (18680)'), +(1119, 1, 'Coilfang Emissary (18681)'), +(1120, 1, 'Bog Lurker (18682)'); + +DELETE FROM `pool_creature` WHERE `pool_entry`=1118 AND `description`='Marticar (18680)'; +DELETE FROM `pool_creature` WHERE `pool_entry`=1119 AND `description`='Coilfang Emissary (18681)'; +DELETE FROM `pool_creature` WHERE `pool_entry`=1120 AND `description`='Bog Lurker (18682)'; +INSERT INTO `pool_creature` (`guid`, `pool_entry`, `chance`, `description`) VALUES +(@CGUID+0, 1118, 0, 'Marticar (18680)'), +(@CGUID+1, 1118, 0, 'Marticar (18680)'), +(@CGUID+2, 1118, 0, 'Marticar (18680)'), +(@CGUID+3, 1119, 0, 'Coilfang Emissary (18681)'), +(@CGUID+4, 1119, 0, 'Coilfang Emissary (18681)'), +(@CGUID+5, 1119, 0, 'Coilfang Emissary (18681)'), +(@CGUID+6, 1119, 0, 'Coilfang Emissary (18681)'), +(@CGUID+7, 1120, 0, 'Bog Lurker (18682)'), +(@CGUID+8, 1120, 0, 'Bog Lurker (18682)'), +(@CGUID+9, 1120, 0, 'Bog Lurker (18682)'); From 5b602508808a134e5df6051af7774952df00a7d0 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sun, 19 Feb 2023 05:59:10 +0000 Subject: [PATCH 34/72] chore(DB): import pending files Referenced commit(s): 62447a2a8efaa4eba43a40a692f5df21fd8c5520 --- .../rev_1676672751811724500.sql => db_world/2023_02_19_07.sql} | 1 + .../rev_1676741293045096600.sql => db_world/2023_02_19_08.sql} | 1 + 2 files changed, 2 insertions(+) rename data/sql/updates/{pending_db_world/rev_1676672751811724500.sql => db_world/2023_02_19_07.sql} (99%) rename data/sql/updates/{pending_db_world/rev_1676741293045096600.sql => db_world/2023_02_19_08.sql} (97%) diff --git a/data/sql/updates/pending_db_world/rev_1676672751811724500.sql b/data/sql/updates/db_world/2023_02_19_07.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1676672751811724500.sql rename to data/sql/updates/db_world/2023_02_19_07.sql index 7b0b9a548..d3c656248 100644 --- a/data/sql/updates/pending_db_world/rev_1676672751811724500.sql +++ b/data/sql/updates/db_world/2023_02_19_07.sql @@ -1,3 +1,4 @@ +-- DB update 2023_02_19_06 -> 2023_02_19_07 -- Marticar (18680) DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 18680); 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`, `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 diff --git a/data/sql/updates/pending_db_world/rev_1676741293045096600.sql b/data/sql/updates/db_world/2023_02_19_08.sql similarity index 97% rename from data/sql/updates/pending_db_world/rev_1676741293045096600.sql rename to data/sql/updates/db_world/2023_02_19_08.sql index a968a9461..39ffed3b9 100644 --- a/data/sql/updates/pending_db_world/rev_1676741293045096600.sql +++ b/data/sql/updates/db_world/2023_02_19_08.sql @@ -1,3 +1,4 @@ +-- DB update 2023_02_19_07 -> 2023_02_19_08 -- DELETE FROM `gameobject_queststarter` WHERE (`quest` = 2954) AND (`id` IN (142343)); INSERT INTO `gameobject_queststarter` (`id`, `quest`) VALUES From e9937e3b7c25b91cccf784245e847a8c254f8ab1 Mon Sep 17 00:00:00 2001 From: Tereneckla <50233983+Tereneckla@users.noreply.github.com> Date: Sun, 19 Feb 2023 11:50:43 +0000 Subject: [PATCH 35/72] fix(DB/Loot) Droprate of Doctor's Key from Doctor Gutrick (#15106) Co-authored-by: Kitzunu <24550914+Kitzunu@users.noreply.github.com> --- data/sql/updates/pending_db_world/rev_1676755297977733200.sql | 1 + 1 file changed, 1 insertion(+) create mode 100644 data/sql/updates/pending_db_world/rev_1676755297977733200.sql diff --git a/data/sql/updates/pending_db_world/rev_1676755297977733200.sql b/data/sql/updates/pending_db_world/rev_1676755297977733200.sql new file mode 100644 index 000000000..6c1eb368d --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676755297977733200.sql @@ -0,0 +1 @@ +UPDATE `creature_loot_template` SET `Chance` = 100 WHERE (`Entry` = 21778) AND (`Item` = 30712); From 9d717aaa9f633988bb8c26c45c2a8e6c6f885b32 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sun, 19 Feb 2023 11:53:07 +0000 Subject: [PATCH 36/72] chore(DB): import pending files Referenced commit(s): e9937e3b7c25b91cccf784245e847a8c254f8ab1 --- .../rev_1676755297977733200.sql => db_world/2023_02_19_09.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1676755297977733200.sql => db_world/2023_02_19_09.sql} (68%) diff --git a/data/sql/updates/pending_db_world/rev_1676755297977733200.sql b/data/sql/updates/db_world/2023_02_19_09.sql similarity index 68% rename from data/sql/updates/pending_db_world/rev_1676755297977733200.sql rename to data/sql/updates/db_world/2023_02_19_09.sql index 6c1eb368d..ca7893a33 100644 --- a/data/sql/updates/pending_db_world/rev_1676755297977733200.sql +++ b/data/sql/updates/db_world/2023_02_19_09.sql @@ -1 +1,2 @@ +-- DB update 2023_02_19_08 -> 2023_02_19_09 UPDATE `creature_loot_template` SET `Chance` = 100 WHERE (`Entry` = 21778) AND (`Item` = 30712); From abedfe245f176fd421a91301d97ba89a73251ab6 Mon Sep 17 00:00:00 2001 From: Kitzunu <24550914+Kitzunu@users.noreply.github.com> Date: Sun, 19 Feb 2023 13:33:46 +0100 Subject: [PATCH 37/72] fix(Core/PacketIO): Remove wrong QueuePacket() (#15124) --- src/server/game/Server/WorldSession.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index 4381e2e03..0fd338f40 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -332,11 +332,10 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater) //! the client to be in world yet. We will re-add the packets to the bottom of the queue and process them later. if (!m_playerRecentlyLogout) { - requeuePackets.push_back(packet); + // requeuePackets.push_back(packet); deletePacket = false; - QueuePacket(packet); - LOG_DEBUG("network", "Re-enqueueing packet with opcode %s with with status STATUS_LOGGEDIN. " + LOG_DEBUG("network", "Re-enqueueing packet with opcode {} with with status STATUS_LOGGEDIN. " "Player {} is currently not in world yet.", GetOpcodeNameForLogging(static_cast(packet->GetOpcode())), GetPlayerInfo()); } } From a76c07698c0b0224abe30686a11440e6496bd524 Mon Sep 17 00:00:00 2001 From: patou01 <2592673+patou01@users.noreply.github.com> Date: Sun, 19 Feb 2023 19:39:02 +0100 Subject: [PATCH 38/72] fix(Scripts/Scholomance): Kirtonos the Herald event now starts correctly again (#15131) --- .../rev_1676822987463062600.sql | 3 +++ .../Scholomance/boss_kirtonos_the_herald.cpp | 26 ++++++++++++------- .../Scholomance/instance_scholomance.cpp | 5 +++- 3 files changed, 23 insertions(+), 11 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1676822987463062600.sql diff --git a/data/sql/updates/pending_db_world/rev_1676822987463062600.sql b/data/sql/updates/pending_db_world/rev_1676822987463062600.sql new file mode 100644 index 000000000..869b2f4d0 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676822987463062600.sql @@ -0,0 +1,3 @@ +-- add NO_MOVEMENT_UPDATE flag + +UPDATE `creature_template` SET `flags_extra` = 512 WHERE (`entry` = 10506); diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp index 51f14aad9..b29c2e291 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp @@ -106,16 +106,6 @@ public: me->DespawnOrUnsummon(1); } - void IsSummonedBy(WorldObject* /*summoner*/) override - { - events2.Reset(); - events2.ScheduleEvent(INTRO_1, 1s); - me->SetDisableGravity(true); - me->SetReactState(REACT_PASSIVE); - me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); - me->SetImmuneToAll(true); // for some reason he aggroes if we don't have this. - } - void MovementInform(uint32 type, uint32 id) override { if (type == WAYPOINT_MOTION_TYPE && id == POINT_KIRTONOS_LAND) @@ -128,6 +118,21 @@ public: } } + void DoAction(int32 action) override + { + if (action == IN_PROGRESS) + { + events2.Reset(); + events2.ScheduleEvent(INTRO_1, 1s); + me->SetCanFly(true); + me->SetDisableGravity(true); + me->SendMovementFlagUpdate(); + me->SetReactState(REACT_PASSIVE); + me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + me->SetImmuneToAll(true); // for some reason he aggroes if we don't have this. + } + } + void UpdateAI(uint32 diff) override { events2.Update(diff); @@ -148,6 +153,7 @@ public: me->SetCanFly(false); me->SetDisableGravity(false); me->CastSpell(me, SPELL_KIRTONOS_TRANSFORM, true); + me->SendMovementFlagUpdate(); break; case INTRO_5: me->HandleEmoteCommand(EMOTE_ONESHOT_ROAR); diff --git a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp index e13e4a5b3..3bafef4d7 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp @@ -131,7 +131,10 @@ public: // summon kirtonos and close door if (_kirtonosState == NOT_STARTED) { - instance->SummonCreature(NPC_KIRTONOS, KirtonosSpawn); + if (Creature* kirtonos = instance->SummonCreature(NPC_KIRTONOS, KirtonosSpawn)) + { + kirtonos->AI()->DoAction(IN_PROGRESS); + } if (GameObject* gate = instance->GetGameObject(GetGuidData(GO_GATE_KIRTONOS))) { gate->SetGoState(GO_STATE_READY); From 86966bae732e9f2db2408cbb731ddc4808d78305 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sun, 19 Feb 2023 18:41:33 +0000 Subject: [PATCH 39/72] chore(DB): import pending files Referenced commit(s): a76c07698c0b0224abe30686a11440e6496bd524 --- .../rev_1676822987463062600.sql => db_world/2023_02_19_10.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1676822987463062600.sql => db_world/2023_02_19_10.sql} (71%) diff --git a/data/sql/updates/pending_db_world/rev_1676822987463062600.sql b/data/sql/updates/db_world/2023_02_19_10.sql similarity index 71% rename from data/sql/updates/pending_db_world/rev_1676822987463062600.sql rename to data/sql/updates/db_world/2023_02_19_10.sql index 869b2f4d0..fc336d4cf 100644 --- a/data/sql/updates/pending_db_world/rev_1676822987463062600.sql +++ b/data/sql/updates/db_world/2023_02_19_10.sql @@ -1,3 +1,4 @@ +-- DB update 2023_02_19_09 -> 2023_02_19_10 -- add NO_MOVEMENT_UPDATE flag UPDATE `creature_template` SET `flags_extra` = 512 WHERE (`entry` = 10506); From a4dcec5e420e5655bf917af4af764e17ec867686 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 19 Feb 2023 19:20:15 -0300 Subject: [PATCH 40/72] feat(Core/Disables): Implement DISABLE_TYPE_LOOT (#15136) --- src/server/game/Conditions/DisableMgr.cpp | 13 +++++++++++-- src/server/game/Conditions/DisableMgr.h | 3 ++- src/server/game/Loot/LootMgr.cpp | 6 ++++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/server/game/Conditions/DisableMgr.cpp b/src/server/game/Conditions/DisableMgr.cpp index cb2dbc159..1f745391d 100644 --- a/src/server/game/Conditions/DisableMgr.cpp +++ b/src/server/game/Conditions/DisableMgr.cpp @@ -44,7 +44,7 @@ namespace DisableMgr DisableMap m_DisableMap; - uint8 MAX_DISABLE_TYPES = 10; + uint8 MAX_DISABLE_TYPES = 11; } void LoadDisables() @@ -258,6 +258,8 @@ namespace DisableMgr } break; } + case DISABLE_TYPE_LOOT: + break; default: break; } @@ -303,7 +305,12 @@ namespace DisableMgr bool IsDisabledFor(DisableType type, uint32 entry, Unit const* unit, uint8 flags) { - ASSERT(type < MAX_DISABLE_TYPES); + if (type > MAX_DISABLE_TYPES) + { + LOG_ERROR("server", "Disables::IsDisabledFor() called with unknown disable type {}! (entry {}, flags {}).", type, entry, flags); + return false; + } + if (m_DisableMap[type].empty()) return false; @@ -389,6 +396,8 @@ namespace DisableMgr return true; case DISABLE_TYPE_GAME_EVENT: return true; + case DISABLE_TYPE_LOOT: + return true; } return false; diff --git a/src/server/game/Conditions/DisableMgr.h b/src/server/game/Conditions/DisableMgr.h index d3ea93ac9..d4cb043d9 100644 --- a/src/server/game/Conditions/DisableMgr.h +++ b/src/server/game/Conditions/DisableMgr.h @@ -35,7 +35,8 @@ enum DisableType DISABLE_TYPE_VMAP = 6, DISABLE_TYPE_GO_LOS = 7, DISABLE_TYPE_LFG_MAP = 8, - DISABLE_TYPE_GAME_EVENT = 9 + DISABLE_TYPE_GAME_EVENT = 9, + DISABLE_TYPE_LOOT = 10 }; enum SpellDisableTypes diff --git a/src/server/game/Loot/LootMgr.cpp b/src/server/game/Loot/LootMgr.cpp index 7316843fa..7b76b47bb 100644 --- a/src/server/game/Loot/LootMgr.cpp +++ b/src/server/game/Loot/LootMgr.cpp @@ -17,6 +17,7 @@ #include "LootMgr.h" #include "Containers.h" +#include "DisableMgr.h" #include "Group.h" #include "Log.h" #include "ObjectMgr.h" @@ -413,6 +414,11 @@ bool LootItem::AllowedForPlayer(Player const* player, ObjectGuid source) const return false; } + if (DisableMgr::IsDisabledFor(DISABLE_TYPE_LOOT, itemid, nullptr)) + { + return false; + } + bool isMasterLooter = player->GetGroup() && player->GetGroup()->GetMasterLooterGuid() == player->GetGUID(); bool itemVisibleForMasterLooter = !needs_quest && (!follow_loot_rules || !is_underthreshold); From 62d8743dd277611c6dae11145e390f4bed2049da Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Sun, 19 Feb 2023 20:14:57 -0300 Subject: [PATCH 41/72] fix(DB/Conditions): Increase range check for Lakka gossip (#15139) --- data/sql/updates/pending_db_world/rev_1676847290281165300.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1676847290281165300.sql diff --git a/data/sql/updates/pending_db_world/rev_1676847290281165300.sql b/data/sql/updates/pending_db_world/rev_1676847290281165300.sql new file mode 100644 index 000000000..9ba484a6d --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676847290281165300.sql @@ -0,0 +1,2 @@ +-- +UPDATE `conditions` SET `ConditionValue2`=100 WHERE `SourceGroup`=7868 AND `SourceTypeOrReferenceId` IN (14, 15); From bd7f139bb8861e4c89651017b2371b9fa035a4a5 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sun, 19 Feb 2023 23:17:25 +0000 Subject: [PATCH 42/72] chore(DB): import pending files Referenced commit(s): 62d8743dd277611c6dae11145e390f4bed2049da --- .../rev_1676847290281165300.sql => db_world/2023_02_19_11.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1676847290281165300.sql => db_world/2023_02_19_11.sql} (72%) diff --git a/data/sql/updates/pending_db_world/rev_1676847290281165300.sql b/data/sql/updates/db_world/2023_02_19_11.sql similarity index 72% rename from data/sql/updates/pending_db_world/rev_1676847290281165300.sql rename to data/sql/updates/db_world/2023_02_19_11.sql index 9ba484a6d..2458b7255 100644 --- a/data/sql/updates/pending_db_world/rev_1676847290281165300.sql +++ b/data/sql/updates/db_world/2023_02_19_11.sql @@ -1,2 +1,3 @@ +-- DB update 2023_02_19_10 -> 2023_02_19_11 -- UPDATE `conditions` SET `ConditionValue2`=100 WHERE `SourceGroup`=7868 AND `SourceTypeOrReferenceId` IN (14, 15); From 0c4feb674444210da295751a0c4e5eefb9c771f1 Mon Sep 17 00:00:00 2001 From: Kitzunu <24550914+Kitzunu@users.noreply.github.com> Date: Mon, 20 Feb 2023 22:07:26 +0100 Subject: [PATCH 43/72] refactor(Core/Motd): Move motd from conf to db (#15111) --- .../rev_1676759011048897700.sql | 11 ++++++ .../rev_1676761525437802000.sql | 9 +++++ .../pendings/changes_1676759248142739600.md | 17 ++++++++ .../apps/worldserver/worldserver.conf.dist | 24 ------------ .../Database/Implementation/LoginDatabase.cpp | 2 + .../Database/Implementation/LoginDatabase.h | 2 + src/server/game/Motd/ServerMotd.cpp | 7 ---- src/server/game/World/IWorld.h | 1 + src/server/game/World/World.cpp | 39 ++++++++++++++++++- src/server/game/World/World.h | 1 + src/server/scripts/Commands/cs_reload.cpp | 12 ++++++ src/server/scripts/Commands/cs_server.cpp | 36 +++++++++++++++-- src/test/mocks/WorldMock.h | 1 + 13 files changed, 126 insertions(+), 36 deletions(-) create mode 100644 data/sql/updates/pending_db_auth/rev_1676759011048897700.sql create mode 100644 data/sql/updates/pending_db_world/rev_1676761525437802000.sql create mode 100644 doc/changelog/pendings/changes_1676759248142739600.md diff --git a/data/sql/updates/pending_db_auth/rev_1676759011048897700.sql b/data/sql/updates/pending_db_auth/rev_1676759011048897700.sql new file mode 100644 index 000000000..8718dc169 --- /dev/null +++ b/data/sql/updates/pending_db_auth/rev_1676759011048897700.sql @@ -0,0 +1,11 @@ +-- +DROP TABLE IF EXISTS `motd`; +CREATE TABLE `motd` ( + `realmid` INT NOT NULL, + `text` LONGTEXT NULL DEFAULT NULL, + PRIMARY KEY (`realmid`) +) ENGINE=InnoDB; + +DELETE FROM `motd` WHERE `realmid`=1; +INSERT INTO `motd` (`realmid`, `text`) VALUES +(-1, 'Welcome to an AzerothCore server.'); diff --git a/data/sql/updates/pending_db_world/rev_1676761525437802000.sql b/data/sql/updates/pending_db_world/rev_1676761525437802000.sql new file mode 100644 index 000000000..29750ceff --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676761525437802000.sql @@ -0,0 +1,9 @@ +-- +DELETE FROM `command` WHERE `name` = 'reload motd'; +INSERT INTO `command` (`name`, `security`, `help`) VALUES +('reload motd', 3, 'Syntax: .reload motd +Reload motd table.'); + +UPDATE `command` SET `help`='Syntax: .server set motd $realmId $MOTD\r\n\r\nSet server Message of the day for the specified realm.' WHERE `name`='server set motd'; + +UPDATE `acore_string` SET `content_default`='Message of the day in realm %i changed to:\r\n%s', `locale_deDE`='Nachricht des Tages in Realm %i wurde geändert zu:\r\n%s', `locale_zhCN`='每日消息更改为 in realm %i:\r\n%s' WHERE `entry`=1101; diff --git a/doc/changelog/pendings/changes_1676759248142739600.md b/doc/changelog/pendings/changes_1676759248142739600.md new file mode 100644 index 000000000..f4f8c945b --- /dev/null +++ b/doc/changelog/pendings/changes_1676759248142739600.md @@ -0,0 +1,17 @@ +### How to upgrade + +Motd is removed from config file + +Motd is can now be found in auth database table `motd` + +`realmid` = Realm ID or -1 for all realms. +`text` = Text for Motd + +Specified realmId is prioritized over -1 (All Realms) + +For example: + +You have realm 1, 2, 3 + +(-1, "This Motd will show for 2, 3") +(1, "This Motd will show for 1") diff --git a/src/server/apps/worldserver/worldserver.conf.dist b/src/server/apps/worldserver/worldserver.conf.dist index 4ef0b35d3..02210dd41 100644 --- a/src/server/apps/worldserver/worldserver.conf.dist +++ b/src/server/apps/worldserver/worldserver.conf.dist @@ -1257,30 +1257,6 @@ BeepAtStart = 1 FlashAtStart = 1 -# -# Motd -# Description: Message of the Day, displayed at login. -# Use '@' for a newline and be sure to escape special characters. -# Example: "Welcome to John\'s Server@" -# Default: "Welcome to an AzerothCore server." - -Motd = "Welcome to an AzerothCore server." - -# PLEASE NOTE: another (hardcoded) text will appear below the MOTD: -# -# "This server runs on AzerothCore www.azerothcore.org" -# -# All the AzerothCore contributors, as well as its father projects (MaNGOS, TrinityCore, etc..), -# have worked for free to provide you this software. Please do not remove the credits. -# -# Changing or removing such hardcoded text is considered a violation of our license -# and it's not allowed. We reserve the right to take legal action in case of violations. -# Furthermore, any kind of support will be always denied. -# -# All AzerothCore contributors and its father projects are publicly listed in -# our official repository. Credits to open source contributions should always be shown. -# - # # Server.LoginInfo # Description: Display core version (.server info) on login. diff --git a/src/server/database/Database/Implementation/LoginDatabase.cpp b/src/server/database/Database/Implementation/LoginDatabase.cpp index 5a393a3cc..482430974 100644 --- a/src/server/database/Database/Implementation/LoginDatabase.cpp +++ b/src/server/database/Database/Implementation/LoginDatabase.cpp @@ -114,6 +114,8 @@ void LoginDatabaseConnection::DoPrepareStatements() PrepareStatement(LOGIN_SEL_REALMLIST_SECURITY_LEVEL, "SELECT allowedSecurityLevel from realmlist WHERE id = ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_DEL_ACCOUNT, "DELETE FROM account WHERE id = ?", CONNECTION_ASYNC); PrepareStatement(LOGIN_SEL_AUTOBROADCAST, "SELECT id, weight, text FROM autobroadcast WHERE realmid = ? OR realmid = -1", CONNECTION_SYNCH); + PrepareStatement(LOGIN_SEL_MOTD, "SELECT text FROM motd WHERE realmid = ? OR realmid = -1 ORDER BY realmid DESC", CONNECTION_SYNCH); + PrepareStatement(LOGIN_REP_MOTD, "REPLACE INTO motd (realmid, text) VALUES (?, ?)", CONNECTION_ASYNC); PrepareStatement(LOGIN_INS_ACCOUNT_MUTE, "INSERT INTO account_muted VALUES (?, UNIX_TIMESTAMP(), ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(LOGIN_SEL_ACCOUNT_MUTE_INFO, "SELECT mutedate, mutetime, mutereason, mutedby FROM account_muted WHERE guid = ? ORDER BY mutedate ASC", CONNECTION_SYNCH); PrepareStatement(LOGIN_DEL_ACCOUNT_MUTED, "DELETE FROM account_muted WHERE guid = ?", CONNECTION_ASYNC); diff --git a/src/server/database/Database/Implementation/LoginDatabase.h b/src/server/database/Database/Implementation/LoginDatabase.h index 3a9bb4a82..c7fb2be48 100644 --- a/src/server/database/Database/Implementation/LoginDatabase.h +++ b/src/server/database/Database/Implementation/LoginDatabase.h @@ -96,6 +96,8 @@ enum LoginDatabaseStatements : uint32 LOGIN_SEL_REALMLIST_SECURITY_LEVEL, LOGIN_DEL_ACCOUNT, LOGIN_SEL_AUTOBROADCAST, + LOGIN_SEL_MOTD, + LOGIN_REP_MOTD, LOGIN_SEL_LAST_ATTEMPT_IP, LOGIN_SEL_LAST_IP, LOGIN_INS_ALDL_IP_LOGGING, diff --git a/src/server/game/Motd/ServerMotd.cpp b/src/server/game/Motd/ServerMotd.cpp index 0ff8eab9e..589cca55e 100644 --- a/src/server/game/Motd/ServerMotd.cpp +++ b/src/server/game/Motd/ServerMotd.cpp @@ -31,13 +31,6 @@ namespace void Motd::SetMotd(std::string motd) { - motd = /* fctlsup << //0x338// "63"+"cx""d2"+"1e""dd"+"cx""ds"+"ce""dd"+"ce""7D"+ << */ motd - /*"d3"+"ce"*/ + "@|" + "cf" +/*"as"+"k4"*/"fF" +"F4" +/*"d5"+"f3"*/"A2" +"DT"/*"F4"+"Az"*/ + "hi" + "s " - /*"fd"+"hy"*/ + "se" + "rv" +/*"nh"+"k3"*/"er" +" r" +/*"x1"+"A2"*/"un" +"s "/*"F2"+"Ay"*/ + "on" + " Az" - /*"xs"+"5n"*/ + "er" + "ot" +/*"xs"+"A2"*/"hC" +"or" +/*"a4"+"f3"*/"e|" +"r "/*"f2"+"A2"*/ + "|c" + "ff" - /*"5g"+"A2"*/ + "3C" + "E7" +/*"k5"+"AX"*/"FF" +"ww" +/*"sx"+"Gj"*/"w." +"az"/*"a1"+"vf"*/ + "er" + "ot" - /*"ds"+"sx"*/ + "hc" + "or" +/*"F4"+"k5"*/"e." +"or" +/*"po"+"xs"*/"g|r"/*"F4"+"p2"+"o4"+"A2"+"i2"*/; - // scripts may change motd sScriptMgr->OnMotdChange(motd); diff --git a/src/server/game/World/IWorld.h b/src/server/game/World/IWorld.h index cd7e2f369..663b54f8f 100644 --- a/src/server/game/World/IWorld.h +++ b/src/server/game/World/IWorld.h @@ -597,6 +597,7 @@ public: virtual void LoadDBVersion() = 0; [[nodiscard]] virtual char const* GetDBVersion() const = 0; virtual void LoadAutobroadcasts() = 0; + virtual void LoadMotd() = 0; virtual void UpdateAreaDependentAuras() = 0; [[nodiscard]] virtual uint32 GetCleaningFlags() const = 0; virtual void SetCleaningFlags(uint32 flags) = 0; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 568cf32a9..ec41ac44e 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -442,8 +442,6 @@ void World::LoadConfigSettings(bool reload) SetPlayerAmountLimit(sConfigMgr->GetOption("PlayerLimit", 1000)); } - Motd::SetMotd(sConfigMgr->GetOption("Motd", "Welcome to an AzerothCore server")); - ///- Read ticket system setting from the config file _bool_configs[CONFIG_ALLOW_TICKETS] = sConfigMgr->GetOption("AllowTickets", true); _bool_configs[CONFIG_DELETE_CHARACTER_TICKET_TRACE] = sConfigMgr->GetOption("DeletedCharacterTicketTrace", false); @@ -1993,6 +1991,10 @@ void World::SetInitialWorldSettings() LOG_INFO("server.loading", "Loading Autobroadcasts..."); LoadAutobroadcasts(); + ///- Load Motd + LOG_INFO("server.loading", "Loading MotD..."); + LoadMotd(); + ///- Load and initialize scripts sObjectMgr->LoadSpellScripts(); // must be after load Creature/Gameobject(Template/Data) sObjectMgr->LoadEventScripts(); // must be after load Creature/Gameobject(Template/Data) @@ -2257,6 +2259,39 @@ void World::LoadAutobroadcasts() LOG_INFO("server.loading", " "); } +void World::LoadMotd() +{ + uint32 oldMSTime = getMSTime(); + + uint32 realmId = sConfigMgr->GetOption("RealmID", 0); + LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_MOTD); + stmt->SetData(0, realmId); + PreparedQueryResult result = LoginDatabase.Query(stmt); + std::string motd; + + if (result) + { + Field* fields = result->Fetch(); + motd = fields[0].Get(); + } + else + { + LOG_WARN("server.loading", ">> Loaded 0 motd definitions. DB table `motd` is empty for this realm!"); + LOG_INFO("server.loading", " "); + } + + motd = /* fctlsup << //0x338// "63"+"cx""d2"+"1e""dd"+"cx""ds"+"ce""dd"+"ce""7D"+ << */ motd + /*"d3"+"ce"*/ + "@|" + "cf" +/*"as"+"k4"*/"fF" + "F4" +/*"d5"+"f3"*/"A2" + "DT"/*"F4"+"Az"*/ + "hi" + "s " + /*"fd"+"hy"*/ + "se" + "rv" +/*"nh"+"k3"*/"er" + " r" +/*"x1"+"A2"*/"un" + "s "/*"F2"+"Ay"*/ + "on" + " Az" + /*"xs"+"5n"*/ + "er" + "ot" +/*"xs"+"A2"*/"hC" + "or" +/*"a4"+"f3"*/"e|" + "r "/*"f2"+"A2"*/ + "|c" + "ff" + /*"5g"+"A2"*/ + "3C" + "E7" +/*"k5"+"AX"*/"FF" + "ww" +/*"sx"+"Gj"*/"w." + "az"/*"a1"+"vf"*/ + "er" + "ot" + /*"ds"+"sx"*/ + "hc" + "or" +/*"F4"+"k5"*/"e." + "or" +/*"po"+"xs"*/"g|r"/*"F4"+"p2"+"o4"+"A2"+"i2"*/;; + Motd::SetMotd(motd); + + LOG_INFO("server.loading", ">> Loaded Motd Definitions in {} ms", GetMSTimeDiffToNow(oldMSTime)); + LOG_INFO("server.loading", " "); +} + /// Update the World ! void World::Update(uint32 diff) { diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 20ce7f137..6b53fbf8a 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -342,6 +342,7 @@ public: [[nodiscard]] char const* GetDBVersion() const override { return _dbVersion.c_str(); } void LoadAutobroadcasts() override; + void LoadMotd() override; void UpdateAreaDependentAuras() override; diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp index 2fee7b3b6..5eefe3a81 100644 --- a/src/server/scripts/Commands/cs_reload.cpp +++ b/src/server/scripts/Commands/cs_reload.cpp @@ -32,6 +32,7 @@ EndScriptData */ #include "LFGMgr.h" #include "Language.h" #include "MapMgr.h" +#include "ServerMotd.h" #include "ObjectMgr.h" #include "ScriptMgr.h" #include "SkillDiscovery.h" @@ -80,6 +81,7 @@ public: { "areatrigger_tavern", HandleReloadAreaTriggerTavernCommand, SEC_ADMINISTRATOR, Console::Yes }, { "areatrigger_teleport", HandleReloadAreaTriggerTeleportCommand, SEC_ADMINISTRATOR, Console::Yes }, { "autobroadcast", HandleReloadAutobroadcastCommand, SEC_ADMINISTRATOR, Console::Yes }, + { "motd", HandleReloadMotdCommand, SEC_ADMINISTRATOR, Console::Yes }, { "broadcast_text", HandleReloadBroadcastTextCommand, SEC_ADMINISTRATOR, Console::Yes }, { "battleground_template", HandleReloadBattlegroundTemplate, SEC_ADMINISTRATOR, Console::Yes }, { "command", HandleReloadCommandCommand, SEC_ADMINISTRATOR, Console::Yes }, @@ -209,6 +211,7 @@ public: HandleReloadVehicleTemplateAccessoryCommand(handler); HandleReloadAutobroadcastCommand(handler); + HandleReloadMotdCommand(handler); HandleReloadBroadcastTextCommand(handler); HandleReloadBattlegroundTemplate(handler); return true; @@ -403,6 +406,15 @@ public: return true; } + static bool HandleReloadMotdCommand(ChatHandler* handler) + { + LOG_INFO("server.loading", "Re-Loading Motd..."); + sWorld->LoadMotd(); + handler->SendGlobalGMSysMessage("DB table `motd` reloaded."); + handler->SendGlobalSysMessage(Motd::GetMotd()); + return true; + } + static bool HandleReloadBroadcastTextCommand(ChatHandler* handler) { LOG_INFO("server.loading", "Re-Loading Broadcast texts..."); diff --git a/src/server/scripts/Commands/cs_server.cpp b/src/server/scripts/Commands/cs_server.cpp index 63c65caab..4c89715f7 100644 --- a/src/server/scripts/Commands/cs_server.cpp +++ b/src/server/scripts/Commands/cs_server.cpp @@ -498,10 +498,40 @@ public: } // Define the 'Message of the day' for the realm - static bool HandleServerSetMotdCommand(ChatHandler* handler, std::string motd) + static bool HandleServerSetMotdCommand(ChatHandler* handler, std::string realmId, Tail motd) { - Motd::SetMotd(motd); - handler->PSendSysMessage(LANG_MOTD_NEW, motd); + std::wstring wMotd = std::wstring(); + std::string strMotd = std::string(); + + if (realmId.empty()) + { + return false; + } + + if (motd.empty()) + { + return false; + } + + if (!Utf8toWStr(motd, wMotd)) + { + return false; + } + + if (!WStrToUtf8(wMotd, strMotd)) + { + return false; + } + + LoginDatabaseTransaction trans = LoginDatabase.BeginTransaction(); + LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_REP_MOTD); + stmt->SetData(0, Acore::StringTo(realmId).value()); + stmt->SetData(1, strMotd); + trans->Append(stmt); + LoginDatabase.CommitTransaction(trans); + + sWorld->LoadMotd(); + handler->PSendSysMessage(LANG_MOTD_NEW, Acore::StringTo(realmId).value(), strMotd); return true; } diff --git a/src/test/mocks/WorldMock.h b/src/test/mocks/WorldMock.h index 73742627a..d4e0247f1 100644 --- a/src/test/mocks/WorldMock.h +++ b/src/test/mocks/WorldMock.h @@ -113,6 +113,7 @@ public: MOCK_METHOD(void, LoadDBVersion, ()); MOCK_METHOD(char const *, GetDBVersion, (), (const)); MOCK_METHOD(void, LoadAutobroadcasts, ()); + MOCK_METHOD(void, LoadMotd, ()); MOCK_METHOD(void, UpdateAreaDependentAuras, ()); MOCK_METHOD(uint32, GetCleaningFlags, (), (const)); MOCK_METHOD(void, SetCleaningFlags, (uint32 flags), ()); From eacd9247cc85279dde20258b3357d210e1110804 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Mon, 20 Feb 2023 21:10:00 +0000 Subject: [PATCH 44/72] chore(DB): import pending files Referenced commit(s): 0c4feb674444210da295751a0c4e5eefb9c771f1 --- acore.json | 2 +- .../2023_02_20_00.sql} | 1 + .../2023_02_20_00.sql} | 1 + doc/changelog/master.md | 22 +++++++++++++++++++ .../pendings/changes_1676759248142739600.md | 17 -------------- 5 files changed, 25 insertions(+), 18 deletions(-) rename data/sql/updates/{pending_db_auth/rev_1676759011048897700.sql => db_auth/2023_02_20_00.sql} (87%) rename data/sql/updates/{pending_db_world/rev_1676761525437802000.sql => db_world/2023_02_20_00.sql} (93%) delete mode 100644 doc/changelog/pendings/changes_1676759248142739600.md diff --git a/acore.json b/acore.json index e56615d0b..603a439b8 100644 --- a/acore.json +++ b/acore.json @@ -1,5 +1,5 @@ { "name": "azerothcore-wotlk", - "version": "7.0.0-dev.0", + "version": "7.0.0-dev.1", "license": "AGPL3" } diff --git a/data/sql/updates/pending_db_auth/rev_1676759011048897700.sql b/data/sql/updates/db_auth/2023_02_20_00.sql similarity index 87% rename from data/sql/updates/pending_db_auth/rev_1676759011048897700.sql rename to data/sql/updates/db_auth/2023_02_20_00.sql index 8718dc169..5df0d6814 100644 --- a/data/sql/updates/pending_db_auth/rev_1676759011048897700.sql +++ b/data/sql/updates/db_auth/2023_02_20_00.sql @@ -1,3 +1,4 @@ +-- DB update 2023_01_31_00 -> 2023_02_20_00 -- DROP TABLE IF EXISTS `motd`; CREATE TABLE `motd` ( diff --git a/data/sql/updates/pending_db_world/rev_1676761525437802000.sql b/data/sql/updates/db_world/2023_02_20_00.sql similarity index 93% rename from data/sql/updates/pending_db_world/rev_1676761525437802000.sql rename to data/sql/updates/db_world/2023_02_20_00.sql index 29750ceff..2ffd4daf8 100644 --- a/data/sql/updates/pending_db_world/rev_1676761525437802000.sql +++ b/data/sql/updates/db_world/2023_02_20_00.sql @@ -1,3 +1,4 @@ +-- DB update 2023_02_19_11 -> 2023_02_20_00 -- DELETE FROM `command` WHERE `name` = 'reload motd'; INSERT INTO `command` (`name`, `security`, `help`) VALUES diff --git a/doc/changelog/master.md b/doc/changelog/master.md index bc889f228..b64820713 100644 --- a/doc/changelog/master.md +++ b/doc/changelog/master.md @@ -1,3 +1,25 @@ +## 7.0.0-dev.1 | Commit: [0c4feb674444210da295751a0c4e5eefb9c771f1 +](https://github.com/azerothcore/azerothcore-wotlk/commit/0c4feb674444210da295751a0c4e5eefb9c771f1 + + +### How to upgrade + +Motd is removed from config file + +Motd is can now be found in auth database table `motd` + +`realmid` = Realm ID or -1 for all realms. +`text` = Text for Motd + +Specified realmId is prioritized over -1 (All Realms) + +For example: + +You have realm 1, 2, 3 + +(-1, "This Motd will show for 2, 3") +(1, "This Motd will show for 1") + ## 6.0.0-dev.3 | Commit: [44b7a0666c78dc99ab0bbc94045abb6685b3ad86 ](https://github.com/azerothcore/azerothcore-wotlk/commit/44b7a0666c78dc99ab0bbc94045abb6685b3ad86 diff --git a/doc/changelog/pendings/changes_1676759248142739600.md b/doc/changelog/pendings/changes_1676759248142739600.md deleted file mode 100644 index f4f8c945b..000000000 --- a/doc/changelog/pendings/changes_1676759248142739600.md +++ /dev/null @@ -1,17 +0,0 @@ -### How to upgrade - -Motd is removed from config file - -Motd is can now be found in auth database table `motd` - -`realmid` = Realm ID or -1 for all realms. -`text` = Text for Motd - -Specified realmId is prioritized over -1 (All Realms) - -For example: - -You have realm 1, 2, 3 - -(-1, "This Motd will show for 2, 3") -(1, "This Motd will show for 1") From cc6fcb69126f461fa93978de0a82bf846d366909 Mon Sep 17 00:00:00 2001 From: Kitzunu <24550914+Kitzunu@users.noreply.github.com> Date: Tue, 21 Feb 2023 04:33:18 +0100 Subject: [PATCH 45/72] fix(Core/PacketIO): Reintroduce requeueing packets that are sent during login but need you to be logged in (#15145) --- src/server/game/Server/WorldSession.cpp | 8 +++----- src/server/game/Server/WorldSession.h | 3 --- src/server/game/World/World.cpp | 7 ------- 3 files changed, 3 insertions(+), 15 deletions(-) diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index 0fd338f40..3aa618656 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -140,7 +140,6 @@ WorldSession::WorldSession(uint32 id, std::string&& name, std::shared_ptrsecond; _offlineSessions.erase(iter); - tmp->SetShouldSetOfflineInDB(false); delete tmp; } oldSession->SetOfflineTime(GameTime::GetGameTime().count()); @@ -298,7 +297,6 @@ void World::AddSession_(WorldSession* s) } else { - oldSession->SetShouldSetOfflineInDB(false); // pussywizard: don't set offline in db because new session for that acc is already created delete oldSession; } } @@ -2975,7 +2973,6 @@ void World::UpdateSessions(uint32 diff) { WorldSession* tmp = iter->second; _offlineSessions.erase(iter); - tmp->SetShouldSetOfflineInDB(false); delete tmp; } pSession->SetOfflineTime(GameTime::GetGameTime().count()); @@ -2991,8 +2988,6 @@ void World::UpdateSessions(uint32 diff) if (!RemoveQueuedPlayer(pSession) && getIntConfig(CONFIG_INTERVAL_DISCONNECT_TOLERANCE)) _disconnects[pSession->GetAccountId()] = GameTime::GetGameTime().count(); _sessions.erase(itr); - if (_offlineSessions.find(pSession->GetAccountId()) != _offlineSessions.end()) // pussywizard: don't set offline in db because offline session for that acc is present (character is in world) - pSession->SetShouldSetOfflineInDB(false); delete pSession; } } @@ -3009,8 +3004,6 @@ void World::UpdateSessions(uint32 diff) if (!pSession->GetPlayer() || pSession->GetOfflineTime() + 60 < currTime || pSession->IsKicked()) { _offlineSessions.erase(itr); - if (_sessions.find(pSession->GetAccountId()) != _sessions.end()) - pSession->SetShouldSetOfflineInDB(false); // pussywizard: don't set offline in db because new session for that acc is already created delete pSession; } } From 99f5fa79aa1f9b4213306be0242afdd21507dba8 Mon Sep 17 00:00:00 2001 From: Kitzunu <24550914+Kitzunu@users.noreply.github.com> Date: Tue, 21 Feb 2023 20:18:25 +0100 Subject: [PATCH 46/72] refactor(Core/Autobroadcast): Move autobroadcast to it's own file (#15147) --- .../apps/worldserver/worldserver.conf.dist | 1 + .../game/Autobroadcast/AutobroadcastMgr.cpp | 142 ++++++++++++++++++ .../game/Autobroadcast/AutobroadcastMgr.h | 54 +++++++ src/server/game/World/IWorld.h | 2 - src/server/game/World/World.cpp | 103 +------------ src/server/game/World/World.h | 8 - src/server/scripts/Commands/cs_reload.cpp | 3 +- src/test/mocks/WorldMock.h | 2 - 8 files changed, 202 insertions(+), 113 deletions(-) create mode 100644 src/server/game/Autobroadcast/AutobroadcastMgr.cpp create mode 100644 src/server/game/Autobroadcast/AutobroadcastMgr.h diff --git a/src/server/apps/worldserver/worldserver.conf.dist b/src/server/apps/worldserver/worldserver.conf.dist index 02210dd41..d18bea3ad 100644 --- a/src/server/apps/worldserver/worldserver.conf.dist +++ b/src/server/apps/worldserver/worldserver.conf.dist @@ -3931,6 +3931,7 @@ Logger.module=4,Console Server #Logger.addon=4,Console Server #Logger.ahbot=4,Console Server #Logger.auctionHouse=4,Console Server +#Logger.autobroadcast=4, Console Server #Logger.bg.arena=4,Console Server #Logger.bg.battlefield=4,Console Server #Logger.bg.battleground=4,Console Server diff --git a/src/server/game/Autobroadcast/AutobroadcastMgr.cpp b/src/server/game/Autobroadcast/AutobroadcastMgr.cpp new file mode 100644 index 000000000..1ed046685 --- /dev/null +++ b/src/server/game/Autobroadcast/AutobroadcastMgr.cpp @@ -0,0 +1,142 @@ +/* + * 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 . + */ + +#include "AutobroadcastMgr.h" +#include "Config.h" +#include "Chat.h" +#include "Player.h" +#include "GridNotifiers.h" + +AutobroadcastMgr* AutobroadcastMgr::instance() +{ + static AutobroadcastMgr instance; + return &instance; +} + +void AutobroadcastMgr::LoadAutobroadcasts() +{ + uint32 oldMSTime = getMSTime(); + + _autobroadcasts.clear(); + _autobroadcastsWeights.clear(); + + uint32 realmId = sConfigMgr->GetOption("RealmID", 0); + LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_AUTOBROADCAST); + stmt->SetData(0, realmId); + PreparedQueryResult result = LoginDatabase.Query(stmt); + + if (!result) + { + LOG_WARN("autobroadcast", ">> Loaded 0 autobroadcasts definitions. DB table `autobroadcast` is empty for this realm!"); + LOG_INFO("autobroadcast", " "); + return; + } + + _announceType = static_cast(sWorld->getIntConfig(CONFIG_AUTOBROADCAST_CENTER)); + + if (_announceType < AnnounceType::World || _announceType > AnnounceType::Both) + { + LOG_ERROR("autobroadcast", "AutobroadcastMgr::LoadAutobroadcasts: Config option AutoBroadcast.Center set to not allowed value {}. Set to default value 0", (int8)_announceType); + _announceType = AnnounceType::World; + } + + uint32 count = 0; + + do + { + Field* fields = result->Fetch(); + uint8 id = fields[0].Get(); + + _autobroadcasts[id] = fields[2].Get(); + _autobroadcastsWeights[id] = fields[1].Get(); + + ++count; + } while (result->NextRow()); + + LOG_INFO("autobroadcast", ">> Loaded {} Autobroadcast Definitions in {} ms", count, GetMSTimeDiffToNow(oldMSTime)); + LOG_INFO("autobroadcast", " "); +} + +void AutobroadcastMgr::SendAutobroadcasts() +{ + if (_autobroadcasts.empty()) + { + return; + } + + uint32 weight = 0; + AutobroadcastsWeightMap selectionWeights; + + std::string msg; + + for (AutobroadcastsWeightMap::const_iterator it = _autobroadcastsWeights.begin(); it != _autobroadcastsWeights.end(); ++it) + { + if (it->second) + { + weight += it->second; + selectionWeights[it->first] = it->second; + } + } + + if (weight) + { + uint32 selectedWeight = urand(0, weight - 1); + weight = 0; + for (AutobroadcastsWeightMap::const_iterator it = selectionWeights.begin(); it != selectionWeights.end(); ++it) + { + weight += it->second; + if (selectedWeight < weight) + { + msg = _autobroadcasts[it->first]; + break; + } + } + } + else + { + msg = _autobroadcasts[urand(0, _autobroadcasts.size())]; + } + + switch (_announceType) + { + case AnnounceType::World: + SendWorldAnnouncement(msg); + break; + case AnnounceType::Notification: + SendNotificationAnnouncement(msg); + break; + case AnnounceType::Both: + SendWorldAnnouncement(msg); + SendNotificationAnnouncement(msg); + default: + break; + } + + LOG_DEBUG("autobroadcast", "AutobroadcastMgr::SendAutobroadcasts: '{}'", msg); +} + +void AutobroadcastMgr::SendWorldAnnouncement(std::string_view msg) +{ + sWorld->SendWorldTextOptional(LANG_AUTO_BROADCAST, ANNOUNCER_FLAG_DISABLE_AUTOBROADCAST, msg.data()); +} + +void AutobroadcastMgr::SendNotificationAnnouncement(std::string_view msg) +{ + WorldPacket data(SMSG_NOTIFICATION, (msg.size() + 1)); + data << msg.data(); + sWorld->SendGlobalMessage(&data); +} diff --git a/src/server/game/Autobroadcast/AutobroadcastMgr.h b/src/server/game/Autobroadcast/AutobroadcastMgr.h new file mode 100644 index 000000000..2a45d48dd --- /dev/null +++ b/src/server/game/Autobroadcast/AutobroadcastMgr.h @@ -0,0 +1,54 @@ +/* + * 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 _AUTOBROADCASTMGR_H_ +#define _AUTOBROADCASTMGR_H_ + +#include "Common.h" +#include + +enum class AnnounceType : uint8 +{ + World = 0, + Notification = 1, + Both = 2, +}; + +class AC_GAME_API AutobroadcastMgr +{ +public: + static AutobroadcastMgr* instance(); + + void LoadAutobroadcasts(); + void SendAutobroadcasts(); + +private: + void SendWorldAnnouncement(std::string_view msg); + void SendNotificationAnnouncement(std::string_view msg); + + typedef std::map AutobroadcastsMap; + typedef std::map AutobroadcastsWeightMap; + + AutobroadcastsMap _autobroadcasts; + AutobroadcastsWeightMap _autobroadcastsWeights; + + AnnounceType _announceType; +}; + +#define sAutobroadcastMgr AutobroadcastMgr::instance() + +#endif // _AUTOBROADCASTMGR_H_ diff --git a/src/server/game/World/IWorld.h b/src/server/game/World/IWorld.h index 663b54f8f..6e340c515 100644 --- a/src/server/game/World/IWorld.h +++ b/src/server/game/World/IWorld.h @@ -520,7 +520,6 @@ public: [[nodiscard]] virtual WorldSession* FindOfflineSession(uint32 id) const = 0; [[nodiscard]] virtual WorldSession* FindOfflineSessionForCharacterGUID(ObjectGuid::LowType guidLow) const = 0; virtual void AddSession(WorldSession* s) = 0; - virtual void SendAutoBroadcast() = 0; virtual bool KickSession(uint32 id) = 0; virtual void UpdateMaxSessionCounters() = 0; [[nodiscard]] virtual const SessionMap& GetAllSessions() const = 0; @@ -596,7 +595,6 @@ public: [[nodiscard]] virtual LocaleConstant GetAvailableDbcLocale(LocaleConstant locale) const = 0; virtual void LoadDBVersion() = 0; [[nodiscard]] virtual char const* GetDBVersion() const = 0; - virtual void LoadAutobroadcasts() = 0; virtual void LoadMotd() = 0; virtual void UpdateAreaDependentAuras() = 0; [[nodiscard]] virtual uint32 GetCleaningFlags() const = 0; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 6342d1057..cbc2fb82d 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -26,6 +26,7 @@ #include "ArenaTeamMgr.h" #include "AsyncAuctionListing.h" #include "AuctionHouseMgr.h" +#include "AutobroadcastMgr.h" #include "BattlefieldMgr.h" #include "BattlegroundMgr.h" #include "CalendarMgr.h" @@ -1987,7 +1988,7 @@ void World::SetInitialWorldSettings() ///- Load AutoBroadCast LOG_INFO("server.loading", "Loading Autobroadcasts..."); - LoadAutobroadcasts(); + sAutobroadcastMgr->LoadAutobroadcasts(); ///- Load Motd LOG_INFO("server.loading", "Loading MotD..."); @@ -2221,42 +2222,6 @@ void World::DetectDBCLang() LOG_INFO("server.loading", " "); } -void World::LoadAutobroadcasts() -{ - uint32 oldMSTime = getMSTime(); - - _autobroadcasts.clear(); - _autobroadcastsWeights.clear(); - - uint32 realmId = sConfigMgr->GetOption("RealmID", 0); - LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_AUTOBROADCAST); - stmt->SetData(0, realmId); - PreparedQueryResult result = LoginDatabase.Query(stmt); - - if (!result) - { - LOG_WARN("server.loading", ">> Loaded 0 autobroadcasts definitions. DB table `autobroadcast` is empty for this realm!"); - LOG_INFO("server.loading", " "); - return; - } - - uint32 count = 0; - - do - { - Field* fields = result->Fetch(); - uint8 id = fields[0].Get(); - - _autobroadcasts[id] = fields[2].Get(); - _autobroadcastsWeights[id] = fields[1].Get(); - - ++count; - } while (result->NextRow()); - - LOG_INFO("server.loading", ">> Loaded {} Autobroadcast Definitions in {} ms", count, GetMSTimeDiffToNow(oldMSTime)); - LOG_INFO("server.loading", " "); -} - void World::LoadMotd() { uint32 oldMSTime = getMSTime(); @@ -2449,7 +2414,7 @@ void World::Update(uint32 diff) { METRIC_TIMER("world_update_time", METRIC_TAG("type", "Send autobroadcast")); _timers[WUPDATE_AUTOBROADCAST].Reset(); - SendAutoBroadcast(); + sAutobroadcastMgr->SendAutobroadcasts(); } } @@ -3028,68 +2993,6 @@ void World::ProcessCliCommands() } } -void World::SendAutoBroadcast() -{ - if (_autobroadcasts.empty()) - return; - - uint32 weight = 0; - AutobroadcastsWeightMap selectionWeights; - - std::string msg; - - for (AutobroadcastsWeightMap::const_iterator it = _autobroadcastsWeights.begin(); it != _autobroadcastsWeights.end(); ++it) - { - if (it->second) - { - weight += it->second; - selectionWeights[it->first] = it->second; - } - } - - if (weight) - { - uint32 selectedWeight = urand(0, weight - 1); - weight = 0; - for (AutobroadcastsWeightMap::const_iterator it = selectionWeights.begin(); it != selectionWeights.end(); ++it) - { - weight += it->second; - if (selectedWeight < weight) - { - msg = _autobroadcasts[it->first]; - break; - } - } - } - else - msg = _autobroadcasts[urand(0, _autobroadcasts.size())]; - - uint32 abcenter = sWorld->getIntConfig(CONFIG_AUTOBROADCAST_CENTER); - - if (abcenter == 0) - { - sWorld->SendWorldTextOptional(LANG_AUTO_BROADCAST, ANNOUNCER_FLAG_DISABLE_AUTOBROADCAST, msg.c_str()); - } - - else if (abcenter == 1) - { - WorldPacket data(SMSG_NOTIFICATION, (msg.size() + 1)); - data << msg; - sWorld->SendGlobalMessage(&data); - } - - else if (abcenter == 2) - { - sWorld->SendWorldTextOptional(LANG_AUTO_BROADCAST, ANNOUNCER_FLAG_DISABLE_AUTOBROADCAST, msg.c_str()); - - WorldPacket data(SMSG_NOTIFICATION, (msg.size() + 1)); - data << msg; - sWorld->SendGlobalMessage(&data); - } - - LOG_DEBUG("server.worldserver", "AutoBroadcast: '{}'", msg); -} - void World::UpdateRealmCharCount(uint32 accountId) { CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_COUNT); diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 6b53fbf8a..bb1ec8b84 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -163,7 +163,6 @@ public: [[nodiscard]] WorldSession* FindOfflineSession(uint32 id) const override; [[nodiscard]] WorldSession* FindOfflineSessionForCharacterGUID(ObjectGuid::LowType guidLow) const override; void AddSession(WorldSession* s) override; - void SendAutoBroadcast() override; bool KickSession(uint32 id) override; /// Get the number of current active sessions void UpdateMaxSessionCounters() override; @@ -341,7 +340,6 @@ public: void LoadDBVersion() override; [[nodiscard]] char const* GetDBVersion() const override { return _dbVersion.c_str(); } - void LoadAutobroadcasts() override; void LoadMotd() override; void UpdateAreaDependentAuras() override; @@ -438,12 +436,6 @@ private: // used versions std::string _dbVersion; - typedef std::map AutobroadcastsMap; - AutobroadcastsMap _autobroadcasts; - - typedef std::map AutobroadcastsWeightMap; - AutobroadcastsWeightMap _autobroadcastsWeights; - void ProcessQueryCallbacks(); QueryCallbackProcessor _queryProcessor; diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp index 5eefe3a81..a0d2fad31 100644 --- a/src/server/scripts/Commands/cs_reload.cpp +++ b/src/server/scripts/Commands/cs_reload.cpp @@ -24,6 +24,7 @@ EndScriptData */ #include "AchievementMgr.h" #include "AuctionHouseMgr.h" +#include "AutobroadcastMgr.h" #include "BattlegroundMgr.h" #include "Chat.h" #include "CreatureTextMgr.h" @@ -401,7 +402,7 @@ public: static bool HandleReloadAutobroadcastCommand(ChatHandler* handler) { LOG_INFO("server.loading", "Re-Loading Autobroadcasts..."); - sWorld->LoadAutobroadcasts(); + sAutobroadcastMgr->LoadAutobroadcasts(); handler->SendGlobalGMSysMessage("DB table `autobroadcast` reloaded."); return true; } diff --git a/src/test/mocks/WorldMock.h b/src/test/mocks/WorldMock.h index d4e0247f1..aa8e88d6f 100644 --- a/src/test/mocks/WorldMock.h +++ b/src/test/mocks/WorldMock.h @@ -36,7 +36,6 @@ public: MOCK_METHOD(WorldSession*, FindOfflineSession, (uint32 id), (const)); MOCK_METHOD(WorldSession*, FindOfflineSessionForCharacterGUID, (ObjectGuid::LowType guidLow),(const)); MOCK_METHOD(void, AddSession, (WorldSession* s), ()); - MOCK_METHOD(void, SendAutoBroadcast, ()); MOCK_METHOD(bool, KickSession, (uint32 id), ()); MOCK_METHOD(void, UpdateMaxSessionCounters, ()); MOCK_METHOD(const SessionMap&, GetAllSessions, (), (const)); @@ -112,7 +111,6 @@ public: MOCK_METHOD(LocaleConstant, GetAvailableDbcLocale, (LocaleConstant locale), (const)); MOCK_METHOD(void, LoadDBVersion, ()); MOCK_METHOD(char const *, GetDBVersion, (), (const)); - MOCK_METHOD(void, LoadAutobroadcasts, ()); MOCK_METHOD(void, LoadMotd, ()); MOCK_METHOD(void, UpdateAreaDependentAuras, ()); MOCK_METHOD(uint32, GetCleaningFlags, (), (const)); From 9b858e465394f454fa2c5efaa1276442b8be0d67 Mon Sep 17 00:00:00 2001 From: Kitzunu <24550914+Kitzunu@users.noreply.github.com> Date: Tue, 21 Feb 2023 21:12:13 +0100 Subject: [PATCH 47/72] chore(Core/Misc): For Azeroth! (#15155) --- src/server/apps/authserver/resource.h | 2 +- src/server/apps/worldserver/resource.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/apps/authserver/resource.h b/src/server/apps/authserver/resource.h index 5415d15d8..41e569f41 100644 --- a/src/server/apps/authserver/resource.h +++ b/src/server/apps/authserver/resource.h @@ -1,6 +1,6 @@ //{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. -// Used by SunwellCore.rc +// Used by AzerothCore.rc // // Next default values for new objects diff --git a/src/server/apps/worldserver/resource.h b/src/server/apps/worldserver/resource.h index 5415d15d8..41e569f41 100644 --- a/src/server/apps/worldserver/resource.h +++ b/src/server/apps/worldserver/resource.h @@ -1,6 +1,6 @@ //{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. -// Used by SunwellCore.rc +// Used by AzerothCore.rc // // Next default values for new objects From fff0e1713393e69e2dfd43461df3d126e801883d Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Wed, 22 Feb 2023 23:00:18 -0300 Subject: [PATCH 48/72] =?UTF-8?q?fix(Core/Cooldown):=20Implement=20spell?= =?UTF-8?q?=20cooldown=20overrides=20to=20address=20cha=E2=80=A6=20(#15143?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rev_1676897566022575900.sql | 10 +++ .../game/Entities/Creature/Creature.cpp | 10 +++ src/server/game/Entities/Unit/Unit.cpp | 18 +++++ src/server/game/Spells/SpellMgr.cpp | 72 ++++++++++++++++++- src/server/game/Spells/SpellMgr.h | 15 ++++ src/server/game/World/World.cpp | 3 + 6 files changed, 126 insertions(+), 2 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1676897566022575900.sql diff --git a/data/sql/updates/pending_db_world/rev_1676897566022575900.sql b/data/sql/updates/pending_db_world/rev_1676897566022575900.sql new file mode 100644 index 000000000..2071fcb89 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676897566022575900.sql @@ -0,0 +1,10 @@ +-- +DROP TABLE IF EXISTS `spell_cooldown_overrides`; +CREATE TABLE `spell_cooldown_overrides` ( + `Id` INT UNSIGNED NOT NULL, + `RecoveryTime` INT UNSIGNED NOT NULL DEFAULT '0', + `CategoryRecoveryTime` INT UNSIGNED NOT NULL DEFAULT '0', + `StartRecoveryTime` INT UNSIGNED NOT NULL DEFAULT '0', + `StartRecoveryCategory` INT UNSIGNED NOT NULL DEFAULT '0', + PRIMARY KEY (`Id`) +); diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 987191e96..2d8e49251 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -2804,6 +2804,16 @@ void Creature::AddSpellCooldown(uint32 spell_id, uint32 /*itemid*/, uint32 end_t { _AddCreatureSpellCooldown(spellInfo->Id, 0, spellcooldown); } + + if (sSpellMgr->HasSpellCooldownOverride(spellInfo->Id)) + { + if (IsCharmed() && GetCharmer()->IsPlayer()) + { + WorldPacket data; + BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_NONE, spellInfo->Id, spellcooldown); + GetCharmer()->ToPlayer()->SendDirectMessage(&data); + } + } } uint32 Creature::GetSpellCooldown(uint32 spell_id) const diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 2c4cc920c..87555d8cd 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -15876,6 +15876,24 @@ bool CharmInfo::AddSpellToActionBar(SpellInfo const* spellInfo, ActiveStates new if (!PetActionBar[i].GetAction() && PetActionBar[i].IsActionBarForSpell()) { SetActionBar(i, spell_id, newstate == ACT_DECIDE ? spellInfo->IsAutocastable() ? ACT_DISABLED : ACT_PASSIVE : newstate); + + if (_unit->GetCharmer() && _unit->GetCharmer()->IsPlayer()) + { + if (Creature* creature = _unit->ToCreature()) + { + // Processing this packet needs to be delayed + _unit->m_Events.AddEventAtOffset([creature, spell_id]() + { + if (uint32 cooldown = creature->GetSpellCooldown(spell_id)) + { + WorldPacket data; + creature->BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_NONE, spell_id, cooldown); + creature->GetCharmer()->ToPlayer()->SendDirectMessage(&data); + } + }, 500ms); + } + } + return true; } } diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 3729e7bfa..9b8aba867 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -2725,6 +2725,48 @@ void SpellMgr::LoadSpellInfoStore() LOG_INFO("server.loading", " "); } +void SpellMgr::LoadSpellCooldownOverrides() +{ + uint32 oldMSTime = getMSTime(); + + mSpellCooldownOverrideMap.clear(); + + QueryResult result = WorldDatabase.Query("SELECT Id, RecoveryTime, CategoryRecoveryTime, StartRecoveryTime, StartRecoveryCategory FROM spell_cooldown_overrides"); + + uint32 count = 0; + + if (result) + { + do + { + Field* fields = result->Fetch(); + SpellCooldownOverride spellCooldown; + uint32 spellId = fields[0].Get(); + spellCooldown.RecoveryTime = fields[1].Get(); + spellCooldown.CategoryRecoveryTime = fields[2].Get(); + spellCooldown.StartRecoveryTime = fields[3].Get(); + spellCooldown.StartRecoveryCategory = fields[4].Get(); + mSpellCooldownOverrideMap[spellId] = spellCooldown; + + ++count; + } while (result->NextRow()); + } + + LOG_INFO("server.loading", ">> Loaded {} Spell Cooldown Overrides entries in {} ms", count, GetMSTimeDiffToNow(oldMSTime)); + LOG_INFO("server.loading", " "); +} + +bool SpellMgr::HasSpellCooldownOverride(uint32 spellId) const +{ + return mSpellCooldownOverrideMap.find(spellId) != mSpellCooldownOverrideMap.end(); +} + +SpellCooldownOverride SpellMgr::GetSpellCooldownOverride(uint32 spellId) const +{ + auto range = mSpellCooldownOverrideMap.find(spellId); + return range->second; +} + void SpellMgr::UnloadSpellInfoStore() { for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i) @@ -3412,9 +3454,35 @@ void SpellMgr::LoadSpellInfoCustomAttributes() } } } - spellInfo->_InitializeExplicitTargetMask(); - sScriptMgr->OnLoadSpellCustomAttr(spellInfo); + spellInfo->_InitializeExplicitTargetMask(); + + if (sSpellMgr->HasSpellCooldownOverride(spellInfo->Id)) + { + SpellCooldownOverride spellOverride = sSpellMgr->GetSpellCooldownOverride(spellInfo->Id); + + if (spellInfo->RecoveryTime != spellOverride.RecoveryTime) + { + spellInfo->RecoveryTime = spellOverride.RecoveryTime; + } + + if (spellInfo->CategoryRecoveryTime != spellOverride.CategoryRecoveryTime) + { + spellInfo->CategoryRecoveryTime = spellOverride.CategoryRecoveryTime; + } + + if (spellInfo->StartRecoveryTime != spellOverride.StartRecoveryTime) + { + spellInfo->RecoveryTime = spellOverride.RecoveryTime; + } + + if (spellInfo->StartRecoveryCategory != spellOverride.StartRecoveryCategory) + { + spellInfo->RecoveryTime = spellOverride.RecoveryTime; + } + } + + sScriptMgr->OnLoadSpellCustomAttr(spellInfo); } // Xinef: addition for binary spells, ommit spells triggering other spells diff --git a/src/server/game/Spells/SpellMgr.h b/src/server/game/Spells/SpellMgr.h index 4c18ceecf..2ee19ecc3 100644 --- a/src/server/game/Spells/SpellMgr.h +++ b/src/server/game/Spells/SpellMgr.h @@ -596,6 +596,16 @@ typedef std::vector SpellInfoMap; typedef std::map > SpellLinkedMap; +struct SpellCooldownOverride +{ + uint32 RecoveryTime; + uint32 CategoryRecoveryTime; + uint32 StartRecoveryTime; + uint32 StartRecoveryCategory; +}; + +typedef std::map SpellCooldownOverrideMap; + bool IsPrimaryProfessionSkill(uint32 skill); inline bool IsProfessionSkill(uint32 skill) @@ -736,6 +746,9 @@ public: // Talent Additional Set [[nodiscard]] bool IsAdditionalTalentSpell(uint32 spellId) const; + [[nodiscard]] bool HasSpellCooldownOverride(uint32 spellId) const; + [[nodiscard]] SpellCooldownOverride GetSpellCooldownOverride(uint32 spellId) const; + private: SpellInfo* _GetSpellInfo(uint32 spellId) { return spellId < GetSpellInfoStoreSize() ? mSpellInfoMap[spellId] : nullptr; } @@ -764,6 +777,7 @@ public: void LoadPetDefaultSpells(); void LoadSpellAreas(); void LoadSpellInfoStore(); + void LoadSpellCooldownOverrides(); void UnloadSpellInfoStore(); void UnloadSpellInfoImplicitTargetConditionLists(); void LoadSpellInfoCustomAttributes(); @@ -797,6 +811,7 @@ private: PetLevelupSpellMap mPetLevelupSpellMap; PetDefaultSpellsMap mPetDefaultSpellsMap; // only spells not listed in related mPetLevelupSpellMap entry SpellInfoMap mSpellInfoMap; + SpellCooldownOverrideMap mSpellCooldownOverrideMap; TalentAdditionalSet mTalentSpellAdditionalSet; }; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index cbc2fb82d..9a74e7494 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1582,6 +1582,9 @@ void World::SetInitialWorldSettings() LOG_INFO("server.loading", "Loading SpellInfo Store..."); sSpellMgr->LoadSpellInfoStore(); + LOG_INFO("server.loading", "Loading Spell Cooldown Overrides..."); + sSpellMgr->LoadSpellCooldownOverrides(); + LOG_INFO("server.loading", "Loading SpellInfo Data Corrections..."); sSpellMgr->LoadSpellInfoCorrections(); From de2d8e0d46d3c4ea6db48ad99ca41e483db3884c Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Wed, 22 Feb 2023 23:01:08 -0300 Subject: [PATCH 49/72] fix(DB/Quest): Fix quest You're Fired! from being unable to be completed by more than one player. (#15141) --- .../pending_db_world/rev_1676861818921548600.sql | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1676861818921548600.sql diff --git a/data/sql/updates/pending_db_world/rev_1676861818921548600.sql b/data/sql/updates/pending_db_world/rev_1676861818921548600.sql new file mode 100644 index 000000000..9cb9ce1ab --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676861818921548600.sql @@ -0,0 +1,16 @@ +-- +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 2242200); +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`, `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 +(2242200, 9, 0, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 0, 86, 40227, 0, 10, 73126, 20736, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Blade\'s Edge - Legion - Anger Camp - Invis Bunny - Actionlist - Cross Cast \'Green Beam\''), +(2242200, 9, 1, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 0, 86, 40227, 0, 10, 73126, 20736, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Blade\'s Edge - Legion - Anger Camp - Invis Bunny - Actionlist - Cross Cast \'Green Beam\''), +(2242200, 9, 2, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 0, 86, 40227, 0, 10, 73129, 20736, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Blade\'s Edge - Legion - Anger Camp - Invis Bunny - Actionlist - Cross Cast \'Green Beam\''), +(2242200, 9, 3, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 0, 86, 40227, 0, 10, 73130, 20736, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Blade\'s Edge - Legion - Anger Camp - Invis Bunny - Actionlist - Cross Cast \'Green Beam\''), +(2242200, 9, 4, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 0, 86, 40227, 0, 10, 73133, 20736, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Blade\'s Edge - Legion - Anger Camp - Invis Bunny - Actionlist - Cross Cast \'Green Beam\''), +(2242200, 9, 5, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 0, 12, 19963, 4, 120000, 0, 0, 0, 8, 0, 0, 0, 0, 2870.55, 4814.18, 283.66, 0.34, 'Blade\'s Edge - Legion - Anger Camp - Invis Bunny - Actionlist - Summon Creature \'Doomcryer\''), +(2242200, 9, 6, 0, 0, 0, 100, 0, 30000, 30000, 0, 0, 0, 63, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Blade\'s Edge - Legion - Anger Camp - Invis Bunny - Actionlist - Reset Counter'), +(2242200, 9, 7, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 11, 20736, 100, 0, 0, 0, 0, 0, 0, 'Blade\'s Edge - Legion - Anger Camp - Invis Bunny - Actionlist - Interrupt Spell'), +(2242200, 9, 8, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 104, 4, 0, 0, 0, 0, 0, 20, 185193, 100, 0, 0, 0, 0, 0, 0, 'Blade\'s Edge - Legion - Anger Camp - Invis Bunny - Actionlist - Set Gameobject Flags Interact Condition'), +(2242200, 9, 9, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 104, 4, 0, 0, 0, 0, 0, 20, 185195, 100, 0, 0, 0, 0, 0, 0, 'Blade\'s Edge - Legion - Anger Camp - Invis Bunny - Actionlist - Set Gameobject Flags Interact Condition'), +(2242200, 9, 10, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 104, 4, 0, 0, 0, 0, 0, 20, 185196, 100, 0, 0, 0, 0, 0, 0, 'Blade\'s Edge - Legion - Anger Camp - Invis Bunny - Actionlist - Set Gameobject Flags Interact Condition'), +(2242200, 9, 11, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 104, 4, 0, 0, 0, 0, 0, 20, 185197, 100, 0, 0, 0, 0, 0, 0, 'Blade\'s Edge - Legion - Anger Camp - Invis Bunny - Actionlist - Set Gameobject Flags Interact Condition'), +(2242200, 9, 12, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 104, 4, 0, 0, 0, 0, 0, 20, 185198, 100, 0, 0, 0, 0, 0, 0, 'Blade\'s Edge - Legion - Anger Camp - Invis Bunny - Actionlist - Set Gameobject Flags Interact Condition'); From b263f45189f6c3b1fff7d4638f963ba4bdd3196d Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Thu, 23 Feb 2023 02:03:41 +0000 Subject: [PATCH 50/72] chore(DB): import pending files Referenced commit(s): de2d8e0d46d3c4ea6db48ad99ca41e483db3884c --- .../rev_1676861818921548600.sql => db_world/2023_02_23_00.sql} | 1 + .../rev_1676897566022575900.sql => db_world/2023_02_23_01.sql} | 1 + 2 files changed, 2 insertions(+) rename data/sql/updates/{pending_db_world/rev_1676861818921548600.sql => db_world/2023_02_23_00.sql} (98%) rename data/sql/updates/{pending_db_world/rev_1676897566022575900.sql => db_world/2023_02_23_01.sql} (89%) diff --git a/data/sql/updates/pending_db_world/rev_1676861818921548600.sql b/data/sql/updates/db_world/2023_02_23_00.sql similarity index 98% rename from data/sql/updates/pending_db_world/rev_1676861818921548600.sql rename to data/sql/updates/db_world/2023_02_23_00.sql index 9cb9ce1ab..ab1413a1c 100644 --- a/data/sql/updates/pending_db_world/rev_1676861818921548600.sql +++ b/data/sql/updates/db_world/2023_02_23_00.sql @@ -1,3 +1,4 @@ +-- DB update 2023_02_20_00 -> 2023_02_23_00 -- DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 2242200); 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`, `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 diff --git a/data/sql/updates/pending_db_world/rev_1676897566022575900.sql b/data/sql/updates/db_world/2023_02_23_01.sql similarity index 89% rename from data/sql/updates/pending_db_world/rev_1676897566022575900.sql rename to data/sql/updates/db_world/2023_02_23_01.sql index 2071fcb89..c8b7633b8 100644 --- a/data/sql/updates/pending_db_world/rev_1676897566022575900.sql +++ b/data/sql/updates/db_world/2023_02_23_01.sql @@ -1,3 +1,4 @@ +-- DB update 2023_02_23_00 -> 2023_02_23_01 -- DROP TABLE IF EXISTS `spell_cooldown_overrides`; CREATE TABLE `spell_cooldown_overrides` ( From 0de75fa7b756c1d2056a21a6c73026ef7110f7d9 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Sat, 25 Feb 2023 13:45:42 +0200 Subject: [PATCH 51/72] fix(DB/Spell): Crusader Strike now stacks from multiple sources (#15181) --- data/sql/updates/pending_db_world/rev_1677181094686770100.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1677181094686770100.sql diff --git a/data/sql/updates/pending_db_world/rev_1677181094686770100.sql b/data/sql/updates/pending_db_world/rev_1677181094686770100.sql new file mode 100644 index 000000000..9ccda8380 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677181094686770100.sql @@ -0,0 +1,3 @@ +-- Scarlet Gallant - Crusader Strike - single aura stack +DELETE FROM `spell_custom_attr` WHERE `spell_id` = 14517; +INSERT INTO `spell_custom_attr` (`spell_id`, `attributes`) VALUES (14517, 4194304); From 9c18275b0a377501b479a0f7d735685367ac7076 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sat, 25 Feb 2023 11:48:10 +0000 Subject: [PATCH 52/72] chore(DB): import pending files Referenced commit(s): 0de75fa7b756c1d2056a21a6c73026ef7110f7d9 --- .../rev_1677181094686770100.sql => db_world/2023_02_25_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1677181094686770100.sql => db_world/2023_02_25_00.sql} (81%) diff --git a/data/sql/updates/pending_db_world/rev_1677181094686770100.sql b/data/sql/updates/db_world/2023_02_25_00.sql similarity index 81% rename from data/sql/updates/pending_db_world/rev_1677181094686770100.sql rename to data/sql/updates/db_world/2023_02_25_00.sql index 9ccda8380..f9511cae4 100644 --- a/data/sql/updates/pending_db_world/rev_1677181094686770100.sql +++ b/data/sql/updates/db_world/2023_02_25_00.sql @@ -1,3 +1,4 @@ +-- DB update 2023_02_23_01 -> 2023_02_25_00 -- Scarlet Gallant - Crusader Strike - single aura stack DELETE FROM `spell_custom_attr` WHERE `spell_id` = 14517; INSERT INTO `spell_custom_attr` (`spell_id`, `attributes`) VALUES (14517, 4194304); From 6581b07934c2b49cae0a1ecde9e33690d9ecc307 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Sat, 25 Feb 2023 14:48:35 +0200 Subject: [PATCH 53/72] fix(DB/SAI): Defias Gunpowder - add no repeat flag. (#15184) --- data/sql/updates/pending_db_world/rev_1677239119416820500.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1677239119416820500.sql diff --git a/data/sql/updates/pending_db_world/rev_1677239119416820500.sql b/data/sql/updates/pending_db_world/rev_1677239119416820500.sql new file mode 100644 index 000000000..5e1e8f5d0 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677239119416820500.sql @@ -0,0 +1,2 @@ +-- Defias Gunpowder - add missing No Repeat flag (was already in the SAI comment) +UPDATE `smart_scripts` SET `event_flags` = `event_flags`|1 WHERE `entryorguid` = 17155 AND `source_type` = 1 AND `id` = 0; From bae273c778ba27dff22a9e6455b6a895f73184cb Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sat, 25 Feb 2023 12:51:04 +0000 Subject: [PATCH 54/72] chore(DB): import pending files Referenced commit(s): 6581b07934c2b49cae0a1ecde9e33690d9ecc307 --- .../rev_1677239119416820500.sql => db_world/2023_02_25_01.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1677239119416820500.sql => db_world/2023_02_25_01.sql} (82%) diff --git a/data/sql/updates/pending_db_world/rev_1677239119416820500.sql b/data/sql/updates/db_world/2023_02_25_01.sql similarity index 82% rename from data/sql/updates/pending_db_world/rev_1677239119416820500.sql rename to data/sql/updates/db_world/2023_02_25_01.sql index 5e1e8f5d0..a185c2fa3 100644 --- a/data/sql/updates/pending_db_world/rev_1677239119416820500.sql +++ b/data/sql/updates/db_world/2023_02_25_01.sql @@ -1,2 +1,3 @@ +-- DB update 2023_02_25_00 -> 2023_02_25_01 -- Defias Gunpowder - add missing No Repeat flag (was already in the SAI comment) UPDATE `smart_scripts` SET `event_flags` = `event_flags`|1 WHERE `entryorguid` = 17155 AND `source_type` = 1 AND `id` = 0; From 50cd58e1a4dddc7f2c28f0efb388b43648ce3308 Mon Sep 17 00:00:00 2001 From: AnchyDev <35346484+AnchyDev@users.noreply.github.com> Date: Mon, 27 Feb 2023 09:49:34 +1100 Subject: [PATCH 55/72] fix(Core/Hook): Call OnUnitDeath for all unit types. (#15213) --- src/server/game/Entities/Unit/Unit.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 87555d8cd..7bdb3d14b 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -18096,7 +18096,6 @@ void Unit::Kill(Unit* killer, Unit* victim, bool durabilityLoss, WeaponAttackTyp if (CreatureAI* ai = creature->AI()) { ai->JustDied(killer); - sScriptMgr->OnUnitDeath(creature, killer); } if (TempSummon* summon = creature->ToTempSummon()) @@ -18178,6 +18177,8 @@ void Unit::Kill(Unit* killer, Unit* victim, bool durabilityLoss, WeaponAttackTyp sScriptMgr->OnPlayerKilledByCreature(killerCre, killed); } } + + sScriptMgr->OnUnitDeath(victim, killer); } void Unit::SetControlled(bool apply, UnitState state, Unit* source /*= nullptr*/, bool isFear /*= false*/) From a2d722e80d30cd2b9147a2e1534c96cac742533f Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 26 Feb 2023 23:06:50 -0300 Subject: [PATCH 56/72] chore(Scripts/Ulduar): fix typo/misc when loading instance data (#15215) --- src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp index 22a2ec38f..3547fc546 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp @@ -1061,6 +1061,7 @@ public: { data >> m_auiEncounter[0]; data >> m_auiEncounter[1]; + data >> m_auiEncounter[2]; data >> m_auiEncounter[3]; data >> m_auiEncounter[4]; data >> m_auiEncounter[5]; From 90bc88d469caaa02f108060a68a6abc5bebf2a03 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 26 Feb 2023 23:24:29 -0300 Subject: [PATCH 57/72] fix(DB/Conditions): Koren requires at least honored with Violet Eye (#14795) --- data/sql/updates/pending_db_world/rev_1675023968959068200.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1675023968959068200.sql diff --git a/data/sql/updates/pending_db_world/rev_1675023968959068200.sql b/data/sql/updates/pending_db_world/rev_1675023968959068200.sql new file mode 100644 index 000000000..a101ea64f --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1675023968959068200.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceID` = 15 AND `SourceGroup` = 7435; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15, 7435, 0, 0, 0, 5, 0, 967, 224, 0, 0, 0, 0, '', 'Koren - Show vendor option only if atleast Honored with Violet Eye'); From fc5a222b34528b7842b04882be67ba6a6277d2b3 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Mon, 27 Feb 2023 02:26:51 +0000 Subject: [PATCH 58/72] chore(DB): import pending files Referenced commit(s): 90bc88d469caaa02f108060a68a6abc5bebf2a03 --- .../rev_1675023968959068200.sql => db_world/2023_02_27_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1675023968959068200.sql => db_world/2023_02_27_00.sql} (92%) diff --git a/data/sql/updates/pending_db_world/rev_1675023968959068200.sql b/data/sql/updates/db_world/2023_02_27_00.sql similarity index 92% rename from data/sql/updates/pending_db_world/rev_1675023968959068200.sql rename to data/sql/updates/db_world/2023_02_27_00.sql index a101ea64f..eec5262d3 100644 --- a/data/sql/updates/pending_db_world/rev_1675023968959068200.sql +++ b/data/sql/updates/db_world/2023_02_27_00.sql @@ -1,3 +1,4 @@ +-- DB update 2023_02_25_01 -> 2023_02_27_00 -- DELETE FROM `conditions` WHERE `SourceTypeOrReferenceID` = 15 AND `SourceGroup` = 7435; INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES From 7e3ae7001bdfd14e92c38a14d58abf0f6e595369 Mon Sep 17 00:00:00 2001 From: Grimgravy Date: Mon, 27 Feb 2023 00:13:13 -0300 Subject: [PATCH 59/72] fix(DB/SAI): Theradrim Guardian (#13384) --- data/sql/updates/pending_db_world/rev_1665490688133533600.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1665490688133533600.sql diff --git a/data/sql/updates/pending_db_world/rev_1665490688133533600.sql b/data/sql/updates/pending_db_world/rev_1665490688133533600.sql new file mode 100644 index 000000000..44e281c51 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1665490688133533600.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 11784) AND (`source_type` = 0) AND (`id` IN (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`, `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 +(11784, 0, 0, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 11, 21057, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Theradrim Guardian - On Just Died - Cast \'Summon Theradrim Shardling\''); From c296407eae5b663a13723311067a1361ca418531 Mon Sep 17 00:00:00 2001 From: Mathematical Shitpost Emissary Date: Sun, 26 Feb 2023 22:13:32 -0500 Subject: [PATCH 60/72] fix(DB/Loot): Tamed Sporebats have drops and Giant Plains Creeper spider should not be skinnable (#14797) --- .../updates/pending_db_world/rev_1675037344657947800.sql | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1675037344657947800.sql diff --git a/data/sql/updates/pending_db_world/rev_1675037344657947800.sql b/data/sql/updates/pending_db_world/rev_1675037344657947800.sql new file mode 100644 index 000000000..4f53b92de --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1675037344657947800.sql @@ -0,0 +1,7 @@ +-- + +DELETE FROM `creature_loot_template` WHERE `entry`= 18201 AND `Item`= 22787; +UPDATE `creature_template` SET `mingold`=0, `maxgold`=0, `lootid`=0 WHERE `entry`=18201; + +DELETE FROM `skinning_loot_template` WHERE `Entry`= 2565 AND `Item`= 4234; +UPDATE `creature_template` SET `skinloot`=0 WHERE `entry`=2565; From 5673855e5028ec3b2d31a830452b90ad4502000b Mon Sep 17 00:00:00 2001 From: Mathematical Shitpost Emissary Date: Sun, 26 Feb 2023 22:13:45 -0500 Subject: [PATCH 61/72] fix(DB/Creature) Scout Jyoba should be dead (#14799) --- .../sql/updates/pending_db_world/rev_1675054031508722800.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1675054031508722800.sql diff --git a/data/sql/updates/pending_db_world/rev_1675054031508722800.sql b/data/sql/updates/pending_db_world/rev_1675054031508722800.sql new file mode 100644 index 000000000..89b081d20 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1675054031508722800.sql @@ -0,0 +1,5 @@ +-- + +UPDATE `creature_template` SET `unit_flags`=`unit_flags`|536871680, `unit_flags2`=`unit_flags2`|2048 WHERE `entry` = 18035; + +UPDATE `creature_template_addon` SET `bytes1` = 0, `bytes2` = 0, `auras` = '29266' WHERE `Entry` = 18035; From 940bf5991c838124a9babdecf284e6dc7949231f Mon Sep 17 00:00:00 2001 From: v-mstrs <104088833+v-mstrs@users.noreply.github.com> Date: Mon, 27 Feb 2023 05:14:08 +0200 Subject: [PATCH 62/72] fix(DB/ShatteredHalls): Sharpshooter Guard use Viper Sting in Normal mode (#15080) --- data/sql/updates/pending_db_world/rev_1676626501770430659.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1676626501770430659.sql diff --git a/data/sql/updates/pending_db_world/rev_1676626501770430659.sql b/data/sql/updates/pending_db_world/rev_1676626501770430659.sql new file mode 100644 index 000000000..cc245ec83 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676626501770430659.sql @@ -0,0 +1,2 @@ +-- +UPDATE `smart_scripts` SET `event_flags`=4 WHERE `entryorguid`=17622 AND `source_type`=0 AND `id`=4; From f4a6f8ea32dea757516bb4570bdb60cd3b022e43 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Mon, 27 Feb 2023 05:14:17 +0200 Subject: [PATCH 63/72] fix(DB/Conditions): Baron Revilgaz - correct gossip for Pirates' Day (#15188) --- data/sql/updates/pending_db_world/rev_1677266850243629600.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1677266850243629600.sql diff --git a/data/sql/updates/pending_db_world/rev_1677266850243629600.sql b/data/sql/updates/pending_db_world/rev_1677266850243629600.sql new file mode 100644 index 000000000..6eb66afcb --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677266850243629600.sql @@ -0,0 +1,4 @@ +-- Baron Revilgaz - On Pirates' Day - Show appropriate gossip +DELETE FROM `conditions` WHERE `SourceGroup`=6685 AND `SourceEntry`=13062; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(14, 6685, 13062, 0, 0, 12, 0, 50, 0, 0, 0, 0, 0, '', 'Baron Revilgaz - On Pirates\' Day event - Show appropriate gossip'); From 7538a594356b93c497ff26986c2209f294010b0c Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Mon, 27 Feb 2023 03:16:53 +0000 Subject: [PATCH 64/72] chore(DB): import pending files Referenced commit(s): f4a6f8ea32dea757516bb4570bdb60cd3b022e43 --- .../rev_1665490688133533600.sql => db_world/2023_02_27_01.sql} | 1 + .../rev_1675037344657947800.sql => db_world/2023_02_27_02.sql} | 1 + .../rev_1675054031508722800.sql => db_world/2023_02_27_03.sql} | 1 + .../rev_1676626501770430659.sql => db_world/2023_02_27_04.sql} | 1 + .../rev_1677266850243629600.sql => db_world/2023_02_27_05.sql} | 1 + 5 files changed, 5 insertions(+) rename data/sql/updates/{pending_db_world/rev_1665490688133533600.sql => db_world/2023_02_27_01.sql} (94%) rename data/sql/updates/{pending_db_world/rev_1675037344657947800.sql => db_world/2023_02_27_02.sql} (87%) rename data/sql/updates/{pending_db_world/rev_1675054031508722800.sql => db_world/2023_02_27_03.sql} (84%) rename data/sql/updates/{pending_db_world/rev_1676626501770430659.sql => db_world/2023_02_27_04.sql} (70%) rename data/sql/updates/{pending_db_world/rev_1677266850243629600.sql => db_world/2023_02_27_05.sql} (92%) diff --git a/data/sql/updates/pending_db_world/rev_1665490688133533600.sql b/data/sql/updates/db_world/2023_02_27_01.sql similarity index 94% rename from data/sql/updates/pending_db_world/rev_1665490688133533600.sql rename to data/sql/updates/db_world/2023_02_27_01.sql index 44e281c51..35c0f0098 100644 --- a/data/sql/updates/pending_db_world/rev_1665490688133533600.sql +++ b/data/sql/updates/db_world/2023_02_27_01.sql @@ -1,3 +1,4 @@ +-- DB update 2023_02_27_00 -> 2023_02_27_01 -- DELETE FROM `smart_scripts` WHERE (`entryorguid` = 11784) AND (`source_type` = 0) AND (`id` IN (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`, `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 diff --git a/data/sql/updates/pending_db_world/rev_1675037344657947800.sql b/data/sql/updates/db_world/2023_02_27_02.sql similarity index 87% rename from data/sql/updates/pending_db_world/rev_1675037344657947800.sql rename to data/sql/updates/db_world/2023_02_27_02.sql index 4f53b92de..3999292b0 100644 --- a/data/sql/updates/pending_db_world/rev_1675037344657947800.sql +++ b/data/sql/updates/db_world/2023_02_27_02.sql @@ -1,3 +1,4 @@ +-- DB update 2023_02_27_01 -> 2023_02_27_02 -- DELETE FROM `creature_loot_template` WHERE `entry`= 18201 AND `Item`= 22787; diff --git a/data/sql/updates/pending_db_world/rev_1675054031508722800.sql b/data/sql/updates/db_world/2023_02_27_03.sql similarity index 84% rename from data/sql/updates/pending_db_world/rev_1675054031508722800.sql rename to data/sql/updates/db_world/2023_02_27_03.sql index 89b081d20..c61876566 100644 --- a/data/sql/updates/pending_db_world/rev_1675054031508722800.sql +++ b/data/sql/updates/db_world/2023_02_27_03.sql @@ -1,3 +1,4 @@ +-- DB update 2023_02_27_02 -> 2023_02_27_03 -- UPDATE `creature_template` SET `unit_flags`=`unit_flags`|536871680, `unit_flags2`=`unit_flags2`|2048 WHERE `entry` = 18035; diff --git a/data/sql/updates/pending_db_world/rev_1676626501770430659.sql b/data/sql/updates/db_world/2023_02_27_04.sql similarity index 70% rename from data/sql/updates/pending_db_world/rev_1676626501770430659.sql rename to data/sql/updates/db_world/2023_02_27_04.sql index cc245ec83..e9bf2521b 100644 --- a/data/sql/updates/pending_db_world/rev_1676626501770430659.sql +++ b/data/sql/updates/db_world/2023_02_27_04.sql @@ -1,2 +1,3 @@ +-- DB update 2023_02_27_03 -> 2023_02_27_04 -- UPDATE `smart_scripts` SET `event_flags`=4 WHERE `entryorguid`=17622 AND `source_type`=0 AND `id`=4; diff --git a/data/sql/updates/pending_db_world/rev_1677266850243629600.sql b/data/sql/updates/db_world/2023_02_27_05.sql similarity index 92% rename from data/sql/updates/pending_db_world/rev_1677266850243629600.sql rename to data/sql/updates/db_world/2023_02_27_05.sql index 6eb66afcb..f4f14fbcb 100644 --- a/data/sql/updates/pending_db_world/rev_1677266850243629600.sql +++ b/data/sql/updates/db_world/2023_02_27_05.sql @@ -1,3 +1,4 @@ +-- DB update 2023_02_27_04 -> 2023_02_27_05 -- Baron Revilgaz - On Pirates' Day - Show appropriate gossip DELETE FROM `conditions` WHERE `SourceGroup`=6685 AND `SourceEntry`=13062; INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES From e5c0c7227a8b7249266222ce36fc7a9197aa6d34 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Mon, 27 Feb 2023 01:38:02 -0300 Subject: [PATCH 65/72] fix(Scripts/Karazhan): Rework Prince Malchezaar (#14877) --- .../rev_1675610065127875400.sql | 4 + .../Karazhan/boss_prince_malchezaar.cpp | 632 +++++++----------- 2 files changed, 239 insertions(+), 397 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1675610065127875400.sql diff --git a/data/sql/updates/pending_db_world/rev_1675610065127875400.sql b/data/sql/updates/pending_db_world/rev_1675610065127875400.sql new file mode 100644 index 000000000..1587f3115 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1675610065127875400.sql @@ -0,0 +1,4 @@ +-- +UPDATE `creature_template` SET `ScriptName` = 'npc_malchezaar_axe', `unit_flags` = `unit_flags`|33554432 WHERE `entry` = 17650; +UPDATE `creature_template` SET `ScriptName` = 'npc_netherspite_infernal' WHERE `entry` = 17646; +UPDATE `creature_template` SET `flags_extra` = `flags_extra` |2147483648 WHERE `entry` = 15690; diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp index 643413d12..5d9e76d65 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp @@ -22,36 +22,50 @@ enum PrinceSay { - SAY_AGGRO = 0, + SAY_AGGRO = 0, SAY_AXE_TOSS1 = 1, SAY_AXE_TOSS2 = 2, - SAY_SLAY = 6, - SAY_SUMMON = 7, - SAY_DEATH = 8, + SAY_SLAY = 6, + SAY_SUMMON = 7, + SAY_DEATH = 8, }; enum Spells { - SPELL_ENFEEBLE = 30843, //Enfeeble during phase 1 and 2 - SPELL_ENFEEBLE_EFFECT = 41624, - SPELL_SHADOWNOVA = 30852, //Shadownova used during all phases - SPELL_SW_PAIN = 30854, //Shadow word pain during phase 1 and 3 (different targeting rules though) - SPELL_THRASH_PASSIVE = 12787, //Extra attack chance during phase 2 - SPELL_SUNDER_ARMOR = 30901, //Sunder armor during phase 2 - SPELL_THRASH_AURA = 12787, //Passive proc chance for thrash - SPELL_EQUIP_AXES = 30857, //Visual for axe equiping - SPELL_AMPLIFY_DAMAGE = 39095, //Amplifiy during phase 3 - SPELL_CLEAVE = 30131, //Same as Nightbane. - SPELL_HELLFIRE = 30859, //Infenals' hellfire aura + SPELL_ENFEEBLE = 30843, + SPELL_ENFEEBLE_EFFECT = 41624, + SPELL_SHADOW_NOVA = 30852, + SPELL_SHADOW_WORD_PAIN = 30854, + SPELL_THRASH_PASSIVE = 12787, + SPELL_SUNDER_ARMOR = 30901, + SPELL_THRASH_AURA = 12787, + SPELL_EQUIP_AXES = 30857, + SPELL_AMPLIFY_DAMAGE = 39095, + SPELL_CLEAVE = 30131, + SPELL_HELLFIRE = 30859, }; enum creatures { - NETHERSPITE_INFERNAL = 17646, - MALCHEZARS_AXE = 17650, + NPC_NETHERSPITE_INFERNAL = 17646, + NPC_MALCHEZARS_AXE = 17650, INFERNAL_MODEL_INVISIBLE = 11686, - SPELL_INFERNAL_RELAY = 33814, // 30835, - EQUIP_ID_AXE = 33542 + SPELL_INFERNAL_RELAY = 33814, // 30835, + EQUIP_ID_AXE = 33542 +}; + +enum EventGroups +{ + GROUP_ENFEEBLE, + GROUP_SHADOW_NOVA, + GROUP_SHADOW_WORD_PAIN, +}; + +enum Phases +{ + PHASE_ONE = 1, + PHASE_TWO = 2, + PHASE_THREE = 3 }; struct InfernalPoint @@ -83,416 +97,242 @@ struct InfernalPoint { -10935.7f, -1996.0f } };*/ -//---------Infernal code first -class netherspite_infernal : public CreatureScript +struct boss_malchezaar : public BossAI { -public: - netherspite_infernal() : CreatureScript("netherspite_infernal") { } + boss_malchezaar(Creature* creature) : BossAI(creature, DATA_MALCHEZZAR) { } - CreatureAI* GetAI(Creature* creature) const override + void Initialize() { - return new netherspite_infernalAI(creature); + _phase = 1; + clearweapons(); + positions.clear(); + instance->HandleGameObject(instance->GetGuidData(DATA_GO_NETHER_DOOR), true); } - struct netherspite_infernalAI : public ScriptedAI + void clearweapons() { - netherspite_infernalAI(Creature* creature) : ScriptedAI(creature), - HellfireTimer(0), CleanupTimer(0), point(nullptr) { } - - uint32 HellfireTimer; - uint32 CleanupTimer; - ObjectGuid malchezaar; - InfernalPoint* point; - - void Reset() override { } - void JustEngagedWith(Unit* /*who*/) override { } - void MoveInLineOfSight(Unit* /*who*/) override { } - - void UpdateAI(uint32 diff) override - { - if (HellfireTimer) - { - if (HellfireTimer <= diff) - { - DoCast(me, SPELL_HELLFIRE); - HellfireTimer = 0; - } - else - HellfireTimer -= diff; - } - - if (CleanupTimer) - { - if (CleanupTimer <= diff) - { - CleanupTimer = 0; - } - else - CleanupTimer -= diff; - } - } - - void KilledUnit(Unit* who) override - { - if (Unit* unit = ObjectAccessor::GetUnit(*me, malchezaar)) - if (Creature* creature = unit->ToCreature()) - creature->AI()->KilledUnit(who); - } - - void SpellHit(Unit* /*who*/, SpellInfo const* spell) override - { - if (spell->Id == SPELL_INFERNAL_RELAY) - { - me->SetDisplayId(me->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID)); - me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - HellfireTimer = 4000; - CleanupTimer = 170000; - } - } - - void DamageTaken(Unit* done_by, uint32& damage, DamageEffectType, SpellSchoolMask) override - { - if (!done_by || done_by->GetGUID() != malchezaar) - damage = 0; - } - }; -}; - -class boss_malchezaar : public CreatureScript -{ -public: - boss_malchezaar() : CreatureScript("boss_malchezaar") { } - - CreatureAI* GetAI(Creature* creature) const override - { - return GetKarazhanAI(creature); + SetEquipmentSlots(false, EQUIP_UNEQUIP, EQUIP_UNEQUIP, EQUIP_NO_CHANGE); + me->SetCanDualWield(false); } - struct boss_malchezaarAI : public ScriptedAI + void Reset() override { - boss_malchezaarAI(Creature* creature) : ScriptedAI(creature) + Initialize(); + _Reset(); + } + + void KilledUnit(Unit* /*victim*/) override + { + Talk(SAY_SLAY); + } + + void JustDied(Unit* /*killer*/) override + { + _JustDied(); + Talk(SAY_DEATH); + instance->HandleGameObject(instance->GetGuidData(DATA_GO_NETHER_DOOR), true); + } + + void JustEngagedWith(Unit* /*who*/) override + { + Talk(SAY_AGGRO); + _JustEngagedWith(); + instance->HandleGameObject(instance->GetGuidData(DATA_GO_NETHER_DOOR), false); + + scheduler.Schedule(30s, [this](TaskContext context) { - instance = creature->GetInstanceScript(); - } + EnfeebleHealthEffect(); - InstanceScript* instance; - uint32 EnfeebleTimer; - uint32 EnfeebleResetTimer; - uint32 ShadowNovaTimer; - uint32 SWPainTimer; - uint32 SunderArmorTimer; - uint32 AmplifyDamageTimer; - uint32 InfernalTimer; - uint32 InfernalCleanupTimer; - uint32 phase; - uint32 enfeeble_health[5]; - ObjectGuid enfeeble_targets[5]; - - GuidVector infernals; - std::vector positions; - - void Initialize() - { - EnfeebleTimer = 30000; - EnfeebleResetTimer = 38000; - ShadowNovaTimer = 35500; - SWPainTimer = 20000; - InfernalCleanupTimer = 47000; - AmplifyDamageTimer = 5000; - SunderArmorTimer = urand(5000, 10000); - InfernalTimer = 40000; - phase = 1; - clearweapons(); - positions.clear(); - instance->HandleGameObject(instance->GetGuidData(DATA_GO_NETHER_DOOR), true); - } - - void clearweapons() - { - SetEquipmentSlots(false, EQUIP_UNEQUIP, EQUIP_UNEQUIP, EQUIP_NO_CHANGE); - me->SetCanDualWield(false); - } - - void Reset() override - { - Initialize(); - } - - void KilledUnit(Unit* /*victim*/) override - { - Talk(SAY_SLAY); - } - - void JustDied(Unit* /*killer*/) override - { - Talk(SAY_DEATH); - instance->HandleGameObject(instance->GetGuidData(DATA_GO_NETHER_DOOR), true); - if (Creature* Axe = me->FindNearestCreature(MALCHEZARS_AXE, 100.0f)) + scheduler.Schedule(9s, [this](TaskContext) { - Axe->DespawnOrUnsummon(); - } - } + EnfeebleResetHealth(); + }); - void JustEngagedWith(Unit* /*who*/) override + context.SetGroup(GROUP_ENFEEBLE); + scheduler.DelayGroup(GROUP_SHADOW_NOVA, 5s); + context.Repeat(); + }).Schedule(35500ms, [this](TaskContext context) { - Talk(SAY_AGGRO); - DoZoneInCombat(); - instance->HandleGameObject(instance->GetGuidData(DATA_GO_NETHER_DOOR), false); - } - - void SummonAxes() + DoCastAOE(SPELL_SHADOW_NOVA); + context.SetGroup(GROUP_SHADOW_NOVA); + context.Repeat(); + }).Schedule(40s, [this](TaskContext context) { - me->SummonCreature(MALCHEZARS_AXE, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000); - } + Position pos = me->GetRandomNearPosition(40.0);; - void EnfeebleHealthEffect() - { - SpellInfo const* info = sSpellMgr->GetSpellInfo(SPELL_ENFEEBLE_EFFECT); - if (!info) - return; - - ThreatContainer::StorageType const& t_list = me->GetThreatMgr().GetThreatList(); - std::vector targets; - - if (t_list.empty()) - return; - - //begin + 1, so we don't target the one with the highest threat - ThreatContainer::StorageType::const_iterator itr = t_list.begin(); - std::advance(itr, 1); - for (; itr != t_list.end(); ++itr) //store the threat list in a different container - if (Unit* target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid())) - if (target->IsAlive() && target->GetTypeId() == TYPEID_PLAYER) - targets.push_back(target); - - //cut down to size if we have more than 5 targets - while (targets.size() > 5) - targets.erase(targets.begin() + rand() % targets.size()); - - uint32 i = 0; - for (std::vector::const_iterator iter = targets.begin(); iter != targets.end(); ++iter, ++i) - if (Unit* target = *iter) - { - enfeeble_targets[i] = target->GetGUID(); - enfeeble_health[i] = target->GetHealth(); - - me->CastSpell(target, SPELL_ENFEEBLE, true, 0, 0, me->GetGUID()); - target->SetHealth(1); - } - } - - void EnfeebleResetHealth() - { - for (uint8 i = 0; i < 5; ++i) + if (Creature* RELAY = me->FindNearestCreature(NPC_RELAY, 100.0f)) { - Unit* target = ObjectAccessor::GetUnit(*me, enfeeble_targets[i]); - if (target && target->IsAlive()) - target->SetHealth(enfeeble_health[i]); - enfeeble_targets[i].Clear(); - enfeeble_health[i] = 0; - } - } - - void SummonInfernal() - { - Position pos; - - if ((me->GetMapId() == 532)) - { - pos = me->GetRandomNearPosition(40.0); - } - else - { - InfernalPoint* point = Acore::Containers::SelectRandomContainerElement(positions); - pos.Relocate(point->x, point->y, INFERNAL_Z, frand(0.0f, float(M_PI * 2))); - } - - if (Creature* RELAY = me->FindNearestCreature(NPC_RELAY, 100.0f)) - { - Creature* infernal = RELAY->SummonCreature(NETHERSPITE_INFERNAL, pos, TEMPSUMMON_TIMED_DESPAWN, 180000); - - if (infernal) + if (Creature* infernal = RELAY->SummonCreature(NPC_NETHERSPITE_INFERNAL, pos, TEMPSUMMON_TIMED_DESPAWN, 180000)) { infernal->SetDisplayId(INFERNAL_MODEL_INVISIBLE); infernal->SetFaction(me->GetFaction()); - infernals.push_back(infernal->GetGUID()); infernal->SetControlled(true, UNIT_STATE_ROOT); RELAY->AI()->DoCast(infernal, SPELL_INFERNAL_RELAY); + summons.Summon(infernal); } } - Talk(SAY_SUMMON); - } - void Phase2() + context.Repeat(_phase == PHASE_THREE ? 15s : 45s); + + Talk(SAY_SUMMON); + }).Schedule(20s, [this](TaskContext context) + { + DoCastVictim(SPELL_SHADOW_WORD_PAIN); + context.SetGroup(GROUP_SHADOW_WORD_PAIN); + context.Repeat(); + }); + } + + void DamageTaken(Unit* /*done_by*/, uint32& damage, DamageEffectType, SpellSchoolMask) override + { + if (me->HealthBelowPctDamaged(60, damage) && _phase == PHASE_ONE) { me->InterruptNonMeleeSpells(false); - phase = 2; - DoCast(me, SPELL_EQUIP_AXES); + _phase = 2; + DoCastSelf( SPELL_EQUIP_AXES); Talk(SAY_AXE_TOSS1); - DoCast(me, SPELL_THRASH_AURA, true); + DoCastSelf( SPELL_THRASH_AURA, true); SetEquipmentSlots(false, EQUIP_ID_AXE, EQUIP_ID_AXE, EQUIP_NO_CHANGE); me->SetCanDualWield(true); me->SetAttackTime(OFF_ATTACK, (me->GetAttackTime(BASE_ATTACK) * 150) / 100); - SunderArmorTimer = urand(5000, 10000); - } - void Phase3() + scheduler.Schedule(5s, 10s, [this](TaskContext context) + { + DoCastVictim(SPELL_SUNDER_ARMOR); + context.Repeat(); + }); + + scheduler.CancelGroup(GROUP_SHADOW_WORD_PAIN); + } + else if (me->HealthBelowPctDamaged(30, damage) && _phase == PHASE_TWO) { me->RemoveAurasDueToSpell(SPELL_THRASH_AURA); Talk(SAY_AXE_TOSS2); - phase = 3; + _phase = PHASE_THREE; clearweapons(); - SummonAxes(); - AmplifyDamageTimer = urand(20000, 30000); + + me->SummonCreature(NPC_MALCHEZARS_AXE, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000); + + scheduler.Schedule(20s, 30s, [this](TaskContext context) + { + DoCastRandomTarget(SPELL_AMPLIFY_DAMAGE, 1); + context.Repeat(); + }).Schedule(20s, [this](TaskContext context) + { + DoCastRandomTarget(SPELL_SHADOW_WORD_PAIN); + context.SetGroup(GROUP_SHADOW_WORD_PAIN); + context.Repeat(); + });; } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - if (EnfeebleResetTimer && EnfeebleResetTimer <= diff) // Let's not forget to reset that - { - EnfeebleResetHealth(); - EnfeebleResetTimer = 0; - } - else EnfeebleResetTimer -= diff; - - if (InfernalTimer <= diff) - { - SummonInfernal(); - InfernalTimer = phase == 3 ? 14500 : 44500; // 15 secs in phase 3, 45 otherwise - } - else InfernalTimer -= diff; - - if (phase != 2) - { - if (SWPainTimer <= diff) - { - - // if phase == 1 target the tank, otherwise anyone but the tank - Unit* target = phase == 1 - ? me->GetVictim() - : SelectTarget(SelectTargetMethod::Random, 1, 100, true); - - if (target) - { - DoCast(target, SPELL_SW_PAIN); - } - - SWPainTimer = 20000; - } - else - SWPainTimer -= diff; - } - - if (ShadowNovaTimer <= diff) - { - DoCast(SPELL_SHADOWNOVA); - ShadowNovaTimer = 35500; - } - else - ShadowNovaTimer -= diff; - - if (phase == 1) - { - if (HealthBelowPct(60)) - { - Phase2(); - } - } - - if (phase == 2) - { - if (SunderArmorTimer <= diff) - { - DoCast(SPELL_SUNDER_ARMOR); - SunderArmorTimer = urand(5000, 10000); - } - else - SunderArmorTimer -= diff; - - if (HealthBelowPct(30)) - { - Phase3(); - } - } - - if (phase == 3) - { - if (AmplifyDamageTimer <= diff) - { - Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 100, true); - - if (target) - { - DoCast(target, SPELL_AMPLIFY_DAMAGE); - AmplifyDamageTimer = urand(20000, 30000); - } - } - else - { - AmplifyDamageTimer -= diff; - } - } - - if (phase != 3) - { - if (EnfeebleTimer <= diff) - { - EnfeebleHealthEffect(); - EnfeebleTimer = 30000; - ShadowNovaTimer = 5000; - EnfeebleResetTimer = 9000; - } - else EnfeebleTimer -= diff; - } - - DoMeleeAttackIfReady(); - } - }; -}; - -class prince_axes : public CreatureScript -{ -public: - prince_axes() : CreatureScript("prince_axes") { } - - CreatureAI* GetAI(Creature* creature) const override - { - return GetKarazhanAI(creature); } - struct prince_axesAI : public ScriptedAI + void EnfeebleHealthEffect() { - prince_axesAI(Creature* creature) : ScriptedAI(creature) + std::list targetList; + SelectTargetList(targetList, 5, SelectTargetMethod::Random, 1, [&](Unit* u) { return u->IsAlive() && u->IsPlayer(); }); + + if (targetList.empty()) + return; + + for (auto const& target : targetList) { - Initialize(); - instance = creature->GetInstanceScript(); + if (target) + { + _enfeebleTargets[target->GetGUID()] = target->GetHealth(); + + me->CastSpell(target, SPELL_ENFEEBLE, true); + target->SetHealth(1); + } } + } - uint32 AxesTargetSwitchTimer; - InstanceScript* instance; - - void Initialize() + void EnfeebleResetHealth() + { + for (auto targets : _enfeebleTargets) { - AxesTargetSwitchTimer = 7500; + if (Unit* target = ObjectAccessor::GetUnit(*me, targets.first)) + { + if (target->IsAlive()) + { + target->SetHealth(targets.second); + } + } + } + } + + private: + uint32 _phase; + std::map _enfeebleTargets; + std::vector positions; +}; + +struct npc_netherspite_infernal : public ScriptedAI +{ + npc_netherspite_infernal(Creature* creature) : ScriptedAI(creature) { } + + void JustEngagedWith(Unit* /*who*/) override { } + void MoveInLineOfSight(Unit* /*who*/) override { } + + void UpdateAI(uint32 diff) override + { + _scheduler.Update(diff); + } + + void KilledUnit(Unit* who) override + { + if (me->ToTempSummon()) + { + if (WorldObject* summoner = me->ToTempSummon()->GetSummoner()) + { + if (Creature* creature = summoner->ToCreature()) + { + creature->AI()->KilledUnit(who); + } + } + } + } + + void SpellHit(Unit* /*who*/, SpellInfo const* spell) override + { + if (spell->Id == SPELL_INFERNAL_RELAY) + { + me->SetDisplayId(me->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID)); me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - me->SetCanDualWield(true); - } - void Reset() override - { + _scheduler.Schedule(4s, [this](TaskContext /*context*/) + { + DoCastSelf(SPELL_HELLFIRE); + }); } + } - void JustEngagedWith(Unit* /*who*/) override - { - DoZoneInCombat(); - } + void DamageTaken(Unit* /*done_by*/, uint32& damage, DamageEffectType, SpellSchoolMask) override + { + damage = 0; + } - void changetarget() + private: + TaskScheduler _scheduler; +}; + +struct npc_malchezaar_axe : public ScriptedAI +{ + npc_malchezaar_axe(Creature* creature) : ScriptedAI(creature) + { + creature->SetCanDualWield(true); + } + + void Initialize() + { + me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + } + + void JustEngagedWith(Unit* /*who*/) override + { + DoZoneInCombat(); + _scheduler.Schedule(7500ms, [this](TaskContext context) { - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100, true)) + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true)) { if (me->GetVictim()) { @@ -501,29 +341,27 @@ public: me->AddThreat(target, 1000000.0f); } - } - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; + context.Repeat(7500ms, 20s); + }); + } - if (AxesTargetSwitchTimer <= diff) - { - AxesTargetSwitchTimer = urand(7500, 20000); - changetarget(); - } - else - AxesTargetSwitchTimer -= diff; + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; - DoMeleeAttackIfReady(); - } - }; + _scheduler.Update(diff, + std::bind(&ScriptedAI::DoMeleeAttackIfReady, this)); + } + + private: + TaskScheduler _scheduler; }; void AddSC_boss_malchezaar() { - new boss_malchezaar(); - new prince_axes(); - new netherspite_infernal(); + RegisterKarazhanCreatureAI(boss_malchezaar); + RegisterKarazhanCreatureAI(npc_malchezaar_axe); + RegisterKarazhanCreatureAI(npc_netherspite_infernal); } From 0c3e73252fd199bab6396bcfeb154724ae868adc Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Mon, 27 Feb 2023 04:40:37 +0000 Subject: [PATCH 66/72] chore(DB): import pending files Referenced commit(s): e5c0c7227a8b7249266222ce36fc7a9197aa6d34 --- .../rev_1675610065127875400.sql => db_world/2023_02_27_06.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1675610065127875400.sql => db_world/2023_02_27_06.sql} (88%) diff --git a/data/sql/updates/pending_db_world/rev_1675610065127875400.sql b/data/sql/updates/db_world/2023_02_27_06.sql similarity index 88% rename from data/sql/updates/pending_db_world/rev_1675610065127875400.sql rename to data/sql/updates/db_world/2023_02_27_06.sql index 1587f3115..a4aafae0f 100644 --- a/data/sql/updates/pending_db_world/rev_1675610065127875400.sql +++ b/data/sql/updates/db_world/2023_02_27_06.sql @@ -1,3 +1,4 @@ +-- DB update 2023_02_27_05 -> 2023_02_27_06 -- UPDATE `creature_template` SET `ScriptName` = 'npc_malchezaar_axe', `unit_flags` = `unit_flags`|33554432 WHERE `entry` = 17650; UPDATE `creature_template` SET `ScriptName` = 'npc_netherspite_infernal' WHERE `entry` = 17646; From 185892f153b0dec825138e799850ec5daf496736 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Mon, 27 Feb 2023 13:05:27 -0300 Subject: [PATCH 67/72] fix(DB/Quest): Port Escape from Coilskar Cistern to SAI and improve it. (#15137) Co-authored-by: Skjalf <47818697+Nyeriah@users.noreply.github.com> --- .../rev_1676784619979772300.sql | 214 ++++++++++++++++++ .../Outland/zone_shadowmoon_valley.cpp | 174 +------------- 2 files changed, 215 insertions(+), 173 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1676784619979772300.sql diff --git a/data/sql/updates/pending_db_world/rev_1676784619979772300.sql b/data/sql/updates/pending_db_world/rev_1676784619979772300.sql new file mode 100644 index 000000000..fbdf6348a --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676784619979772300.sql @@ -0,0 +1,214 @@ +-- +UPDATE `creature_template` SET `unit_flags`=`unit_flags`|32768, `AIName` = 'SmartAI', `ScriptName` = '' WHERE (`entry` = 21027); + +DELETE FROM `creature_template_movement` WHERE (`CreatureId` = 21027); +INSERT INTO `creature_template_movement` (`CreatureId`, `Ground`, `Swim`, `Flight`, `Rooted`, `Chase`, `Random`, `InteractionPauseTimer`) VALUES +(21027, 1, 1, 0, 0, 0, 0, 0); + +DELETE FROM `script_waypoint` WHERE `entry`=21027; + +DELETE FROM `waypoints` WHERE `entry` IN (2102700, 2102701, 2102702) AND `point_comment`='Earthmender Wilda'; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `orientation`, `point_comment`) VALUES +(2102700,1,-2673.4028,1347.086,34.450996,NULL,'Earthmender Wilda'), +(2102700,2,-2698.3552,1336.2699,34.436684,NULL,'Earthmender Wilda'), +(2102700,3,-2717.746,1327.2448,33.727425,NULL,'Earthmender Wilda'), +(2102700,4,-2750.501,1308.4788,33.51492,NULL,'Earthmender Wilda'), +(2102700,5,-2758.456,1291.1246,33.21175,NULL,'Earthmender Wilda'), +(2102700,6,-2749.859,1271.7311,33.179966,NULL,'Earthmender Wilda'), +(2102700,7,-2735.675,1250.0884,33.481762,NULL,'Earthmender Wilda'), +(2102700,8,-2728.0457,1239.5994,33.55585,NULL,'Earthmender Wilda'), +(2102700,9,-2724.7705,1235.3615,33.36293,NULL,'Earthmender Wilda'), + +(2102701,1 ,-2747.9248,1267.6305,33.185226,NULL,'Earthmender Wilda'), +(2102701,2 ,-2759.827,1286.5345,33.22729,NULL,'Earthmender Wilda'), +(2102701,3 ,-2756.9617,1306.5089,33.385166,NULL,'Earthmender Wilda'), +(2102701,4 ,-2725.8306,1321.6727,33.399662,NULL,'Earthmender Wilda'), +(2102701,5 ,-2713.258,1311.8943,33.88253,NULL,'Earthmender Wilda'), +(2102701,6 ,-2703.6812,1297.7561,32.952988,NULL,'Earthmender Wilda'), +(2102701,7 ,-2696.5117,1290.1486,34.049046,NULL,'Earthmender Wilda'), +(2102701,8 ,-2676.7317,1285.51,30.529482,NULL,'Earthmender Wilda'), +(2102701,9 ,-2654.9558,1274.1897,25.2051,NULL,'Earthmender Wilda'), +(2102701,10,-2644.617,1264.0071,23.524517,NULL,'Earthmender Wilda'), +(2102701,11,-2638.541,1253.4718,21.101715,NULL,'Earthmender Wilda'), +(2102701,12,-2646.6775,1220.6115,7.959275,NULL,'Earthmender Wilda'), +(2102701,13,-2656.3025,1203.6542,6.292024,NULL,'Earthmender Wilda'), +(2102701,14,-2672.9521,1186.2338,3.1785104,NULL,'Earthmender Wilda'), +(2102701,15,-2686.0994,1175.7258,5.3469415,NULL,'Earthmender Wilda'), +(2102701,16,-2697.5493,1163.4832,5.5097775,NULL,'Earthmender Wilda'), +(2102701,17,-2712.2507,1149.6624,4.1310344,NULL,'Earthmender Wilda'), +(2102701,18,-2731.7368,1141.202,2.0495586,NULL,'Earthmender Wilda'), +(2102701,19,-2755.1863,1145.8915,6.0910826,NULL,'Earthmender Wilda'), -- It shouldn't be much further + +(2102702,1,-2775.921,1163.6531,6.2431016,NULL,'Earthmender Wilda'), +(2102702,2,-2785.0398,1176.4891,5.9446754,NULL,'Earthmender Wilda'), +(2102702,3,-2805.2222,1203.5836,6.2892222,NULL,'Earthmender Wilda'), +(2102702,4,-2823.8367,1230.3197,6.2648115,NULL,'Earthmender Wilda'), +(2102702,5,-2841.9836,1247.9833,6.7960606,NULL,'Earthmender Wilda'), +(2102702,6,-2850.0354,1263.7803,7.0559444,NULL,'Earthmender Wilda'), +(2102702,7,-2842.1345,1282.2969,8.041483,NULL,'Earthmender Wilda'), +(2102702,8,-2845.81,1293.1658,6.371023,NULL,'Earthmender Wilda'), +(2102702,9,-2870.9836,1302.0223,6.796061,NULL,'Earthmender Wilda'); + +DELETE FROM `creature_text` WHERE `CreatureID` IN (21027, 21029, 21044); +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(21027, 0, 0, 'Thank you, kind soul. You have freed me from the watery prison of Coilskar but many more are being held prisoner nearby. Will you assist me in freeing them as well?', 12, 0, 100, 2, 0, 0, 18665, 0, 'Earthmender Wilda - Freed'), +(21027, 1, 0, 'I sense the tortured spirits, $n. They are this way. Come quickly!', 12, 0, 100, 0, 0, 0, 18668, 0, 'Earthmender Wilda - Escort Start'), +(21027, 2, 0, 'Watch out!', 12, 0, 100, 0, 0, 0, 18687, 0, 'Earthmender Wilda - Aggro'), +(21027, 2, 1, 'Naga attackers! Defend yourself!', 12, 0, 100, 0, 0, 0, 18688, 0, 'Earthmender Wilda - Aggro'), +(21027, 3, 0, 'Grant me protection, $n. I must break through their foul magic!', 12, 0, 100, 0, 0, 0, 18669, 0, 'Earthmender Wilda - Free Water Spirits'), +(21027, 4, 0, 'Now we must find the exit.', 12, 0, 100, 1, 0, 0, 18670, 0, 'Earthmender Wilda - Finished Water Spirits'), +(21027, 5, 0, 'The naga of Coilskar are exceptionally cruel to their prisoners. It is a miracle that I survived inside that watery prison for as long as I did. Earthmother be praised.', 12, 0, 100, 0, 0, 0, 18685, 0, 'Earthmender Wilda - Say Random'), +(21027, 5, 1, 'Lady Vashj must answer for these atrocities. She must be brought to justice!', 12, 0, 100, 0, 0, 0, 18684, 0, 'Earthmender Wilda - Say Random'), +(21027, 5, 2, 'The tumultuous nature of the great waterways of Azeroth and Draenor are a direct result of tormented water spirits.', 12, 0, 100, 0, 0, 0, 18675, 0, 'Earthmender Wilda - Say Random'), +(21027, 5, 3, 'The naga do not respect nature. They twist and corrupt it to meet their needs. They live to agitate the spirits.', 12, 0, 100, 0, 0, 0, 18673, 0, 'Earthmender Wilda - Say Random'), +(21027, 6, 0, 'It shouldn\'t be much further, $n. The exit is just up ahead.', 12, 0, 100, 1, 0, 0, 18671, 0, 'Earthmender Wilda - Escort Progress'), +(21027, 7, 0, 'Thank you, $n. Please return to my brethren at the Altar of Damnation, near the Hand of Gul\'dan, and tell them that Wilda is safe. May the Earthmother watch over you...', 12, 0, 100, 0, 0, 0, 18672, 0, 'Earthmender Wilda - Escort End'), +(21029, 0, 0, 'Thank you, earthmender.', 12, 12, 100, 0, 0, 0, 18664, 0, 'Captured Water Spirit - Earthmender Wilda Escort'), +(21044, 0, 0, 'Kill them all!', 12, 0, 100, 0, 0, 0, 18692, 0, 'Coilskar Assassin'), +(21044, 0, 1, 'You will never essscape Coilssskarrr...', 12, 0, 100, 0, 0, 0, 18693, 0, 'Coilskar Assassin'); + +-- Earthmender Wilda Trigger +UPDATE `creature_template_movement` SET `Rooted` = 1 WHERE (`CreatureId` = 21041); +UPDATE `creature_template` SET `unit_flags`=`unit_flags`|33555200 WHERE (`entry` = 21041); + +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 21041; +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 21041); +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`, `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 +(21041, 0, 0, 0, 38, 0, 100, 0, 1, 1, 0, 0, 0, 11, 35928, 0, 0, 0, 0, 0, 10, 25119, 21027, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda Trigger - On Data Set 1 1 - Cast \'Watery Prison\''), +(21041, 0, 1, 0, 38, 0, 100, 0, 2, 2, 0, 0, 0, 92, 0, 35928, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda Trigger - On Data Set 2 2 - Interrupt Spell \'Watery Prison\''); + +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 22) AND (`SourceEntry` = 21041) AND (`SourceId` = 0); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22, 1, 21041, 0, 0, 31, 1, 3, 21041, 25125, 1, 0, 0, '', 'Earthmender Wilda Trigger GUID 25125 acts as movement target, does not cast spells'), +(22, 2, 21041, 0, 0, 31, 1, 3, 21041, 25125, 1, 0, 0, '', 'Earthmender Wilda Trigger GUID 25125 acts as movement target, does not cast spells'); + +-- Keeper of the Cistern +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 20795); +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`, `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 +(20795, 0, 0, 0, 0, 0, 100, 0, 0, 1000, 2500, 4700, 0, 11, 32011, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Keeper of the Cistern - In Combat - Cast \'Water Bolt\''), +(20795, 0, 1, 0, 9, 0, 100, 0, 0, 10, 12000, 16500, 0, 11, 11831, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Keeper of the Cistern - Within 0-10 Range - Cast \'Frost Nova\''), +(20795, 0, 2, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 21027, 100, 0, 0, 0, 0, 0, 0, 'Keeper of the Cistern - On Just Died - Set Data 1 1'); + +-- Earthmender Wilda +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 21027); +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`, `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 +(21027, 0, 0, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 80, 2102700, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - On Respawn - Run Script'), +(21027, 0, 1, 0, 38, 0, 100, 0, 1, 1, 0, 0, 0, 80, 2102701, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - On Data Set 1 1 - Run Script'), +(21027, 0, 2, 3, 19, 0, 100, 0, 10451, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - On Quest \'Escape from Coilskar Cistern\' Taken - Store Targetlist'), +(21027, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 80, 2102702, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - On Quest \'Escape from Coilskar Cistern\' Taken - Run Script'), +(21027, 0, 4, 0, 58, 0, 100, 0, 9, 2102700, 0, 0, 0, 80, 2102703, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - On Waypoint Finished - Run Script'), +(21027, 0, 5, 0, 58, 0, 100, 0, 19, 2102701, 0, 0, 0, 80, 2102704, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - On Waypoint Finished - Run Script'), +(21027, 0, 6, 0, 58, 0, 100, 0, 9, 2102702, 0, 0, 0, 80, 2102705, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - On Waypoint Finished - Run Script'), +(21027, 0, 7, 0, 40, 0, 8, 0, 0, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - On Waypoint 0 Reached - Say Line 5'), +(21027, 0, 8, 0, 40, 0, 10, 0, 0, 0, 0, 0, 0, 11, 35937, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - On Waypoint 0 Reached - Cast \'Serverside - Summon Ambush\''), +(21027, 0, 9, 0, 4, 0, 50, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - On Aggro - Say Line 2'), +(21027, 0, 10, 0, 0, 0, 100, 0, 1000, 3500, 1500, 4500, 0, 11, 16006, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - In Combat - Cast \'Chain Lightning\''), +(21027, 0, 11, 0, 0, 0, 100, 0, 10000, 20000, 15000, 30000, 0, 11, 15786, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - In Combat - Cast \'Earthbind Totem\''), +(21027, 0, 12, 0, 14, 0, 100, 0, 1000, 30, 5000, 15000, 0, 11, 12491, 64, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Friendly At 1000 Health - Cast \'Healing Wave\''), +(21027, 0, 13, 0, 0, 0, 100, 0, 7500, 15000, 12000, 21000, 0, 11, 12548, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - In Combat - Cast \'Frost Shock\''), +(21027, 0, 14, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 6, 10451, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - On Just Died - Fail Quest \'Escape from Coilskar Cistern\''); + +-- Actionlists for Earthmender Wilda +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` IN (2102700, 2102701, 2102702, 2102703, 2102704, 2102705)); +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`, `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 +(2102700, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 60, 0, 30, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Disable Gravity'), +(2102700, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 83, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Remove Npc Flags Questgiver'), +(2102700, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 11, 35921, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Cast \'Water Bubble\''), +(2102700, 9, 3, 0, 0, 0, 100, 0, 500, 500, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 9, 21041, 0, 40, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Set Data 1 1'), + +(2102701, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 9, 21041, 0, 50, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Set Data 2 2'), +(2102701, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 10, 25125, 21041, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Move To Closest Creature \'Earthmender Wilda Trigger\''), +(2102701, 9, 2, 0, 0, 0, 100, 0, 12000, 12000, 0, 0, 0, 28, 35921, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Remove Aura \'Water Bubble\''), +(2102701, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 60, 0, 100, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Set Fly Off'), +(2102701, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Fall'), +(2102701, 9, 5, 0, 0, 0, 100, 0, 2400, 2400, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 21, 100, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Set Orientation Closest Player'), +(2102701, 9, 6, 0, 0, 0, 100, 0, 1200, 1200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Say Line 0'), +(2102701, 9, 7, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 0, 82, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Add Npc Flags Questgiver'), + +(2102702, 9, 0, 0, 0, 0, 100, 0, 2400, 2400, 0, 0, 0, 83, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Remove Npc Flags Questgiver'), +(2102702, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 2, 495, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Set Faction 495'), +(2102702, 9, 2, 0, 0, 0, 100, 0, 1300, 1300, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Say Line 1'), +(2102702, 9, 3, 0, 0, 0, 100, 0, 3600, 3600, 0, 0, 0, 53, 0, 2102700, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Start Waypoint'), + +(2102703, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Set Reactstate Passive'), +(2102703, 9, 1, 0, 0, 0, 100, 0, 3600, 3600, 0, 0, 0, 1, 3, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Say Line 3'), +(2102703, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 11, 35933, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Cast \'Break Water Prison\''), +(2102703, 9, 3, 0, 0, 0, 100, 0, 15800, 15800, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 21, 40, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Set Orientation Closest Player'), +(2102703, 9, 4, 0, 0, 0, 100, 0, 1200, 1200, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 9, 21029, 0, 100, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Set Data 1 1'), +(2102703, 9, 5, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Say Line 4'), +(2102703, 9, 6, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 0, 53, 0, 2102701, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Start Waypoint'), +(2102703, 9, 7, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Set Reactstate Aggressive'), + +(2102704, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 6, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Say Line 6'), +(2102704, 9, 1, 0, 0, 0, 100, 0, 3300, 3300, 0, 0, 0, 53, 0, 2102702, 0, 10451, 6000, 2, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Start Waypoint'), + +(2102705, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 7, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Say Line 7'), +(2102705, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 9, 21029, 0, 100, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Set Data 2 2'), +(2102705, 9, 2, 0, 0, 0, 100, 0, 2400, 2400, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Play Emote 5'); + +-- Captured Water Spirits +UPDATE `creature_template` SET `unit_flags`=`unit_flags`|33024 WHERE (`entry` = 21029); +UPDATE `creature_template_addon` SET `auras` = '' WHERE (`entry` = 21029); + +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 21029; +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` IN (-25120, -25121, -25122, -25123, -25124)); +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`, `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 +(-25120, 0, 0, 0, 38, 0, 100, 0, 1, 1, 0, 0, 0, 80, 2102900, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - On Data Set 1 1 - Run Script'), +(-25120, 0, 1, 0, 38, 0, 100, 0, 2, 2, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - On Data Set 2 2 - Despawn Instant'), +(-25120, 0, 2, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 11, 35929, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - On Respawn - Cast \'Water Bubble\''), + +(-25121, 0, 0, 0, 38, 0, 100, 0, 1, 1, 0, 0, 0, 80, 2102901, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - On Data Set 1 1 - Run Script'), +(-25121, 0, 1, 0, 38, 0, 100, 0, 2, 2, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - On Data Set 2 2 - Despawn Instant'), +(-25121, 0, 2, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 11, 35929, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - On Respawn - Cast \'Water Bubble\''), + +(-25122, 0, 0, 0, 38, 0, 100, 0, 1, 1, 0, 0, 0, 80, 2102902, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - On Data Set 1 1 - Run Script'), +(-25122, 0, 1, 0, 38, 0, 100, 0, 2, 2, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - On Data Set 2 2 - Despawn Instant'), +(-25122, 0, 2, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 11, 35929, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - On Respawn - Cast \'Water Bubble\''), + +(-25124, 0, 0, 0, 38, 0, 100, 0, 1, 1, 0, 0, 0, 80, 2102904, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - On Data Set 1 1 - Run Script'), +(-25124, 0, 1, 0, 38, 0, 100, 0, 2, 2, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - On Data Set 2 2 - Despawn Instant'), +(-25124, 0, 2, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 11, 35929, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - On Respawn - Cast \'Water Bubble\''), + +(-25123, 0, 0, 0, 38, 0, 100, 0, 1, 1, 0, 0, 0, 80, 2102903, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - On Data Set 1 1 - Run Script'), +(-25123, 0, 1, 0, 38, 0, 100, 0, 2, 2, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - On Data Set 2 2 - Despawn Instant'), +(-25123, 0, 2, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 11, 35929, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - On Respawn - Cast \'Water Bubble\''); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` BETWEEN 2102900 AND 2102904); +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`, `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 +(2102900, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 28, 35929, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Remove Aura \'Water Bubble\''), +(2102900, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 2, 495, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Set Faction 495'), +(2102900, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 29, 1, 90, 0, 0, 0, 0, 10, 25123, 21029, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Start Follow Closest Creature \'Captured Water Spirit\''), +(2102900, 9, 3, 0, 0, 0, 100, 0, 3600, 3600, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Set Fly Off'), +(2102900, 9, 4, 0, 0, 0, 100, 0, 800, 800, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Say Line 0'), +(2102900, 9, 5, 0, 0, 0, 100, 0, 2400, 2400, 0, 0, 0, 29, 2, 215, 0, 0, 0, 0, 10, 25123, 21029, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Start Follow Closest Creature \'Captured Water Spirit\''), + +(2102901, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 28, 35929, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Remove Aura \'Water Bubble\''), +(2102901, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 2, 495, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Set Faction 495'), +(2102901, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 29, 1, 120, 0, 0, 0, 0, 10, 25123, 21029, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Start Follow Closest Creature \'Captured Water Spirit\''), +(2102901, 9, 3, 0, 0, 0, 100, 0, 3600, 3600, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Set Fly Off'), +(2102901, 9, 4, 0, 0, 0, 100, 0, 800, 800, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Say Line 0'), +(2102901, 9, 5, 0, 0, 0, 100, 0, 2400, 2400, 0, 0, 0, 29, 2, 215, 0, 0, 0, 0, 10, 25120, 21029, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Start Follow Closest Creature \'Captured Water Spirit\''), + +(2102902, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 28, 35929, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Remove Aura \'Water Bubble\''), +(2102902, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 2, 495, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Set Faction 495'), +(2102902, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 29, 1, 150, 0, 0, 0, 0, 10, 25123, 21029, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Start Follow Closest Creature \'Captured Water Spirit\''), +(2102902, 9, 3, 0, 0, 0, 100, 0, 3600, 3600, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Set Fly Off'), +(2102902, 9, 4, 0, 0, 0, 100, 0, 800, 800, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Say Line 0'), +(2102902, 9, 5, 0, 0, 0, 100, 0, 2400, 2400, 0, 0, 0, 29, 2, 135, 0, 0, 0, 0, 10, 25123, 21029, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Start Follow Closest Creature \'Captured Water Spirit\''), + +(2102904, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 28, 35929, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Remove Aura \'Water Bubble\''), +(2102904, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 2, 495, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Set Faction 495'), +(2102904, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 29, 1, 90, 0, 0, 0, 0, 10, 25123, 21029, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Start Follow Closest Creature \'Captured Water Spirit\''), +(2102904, 9, 3, 0, 0, 0, 100, 0, 3600, 3600, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Set Fly Off'), +(2102904, 9, 4, 0, 0, 0, 100, 0, 800, 800, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Say Line 0'), +(2102904, 9, 5, 0, 0, 0, 100, 0, 2400, 2400, 0, 0, 0, 29, 2, 135, 0, 0, 0, 0, 10, 25122, 21029, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Start Follow Closest Creature \'Captured Water Spirit\''), + +(2102903, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 28, 35929, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Remove Aura \'Water Bubble\''), +(2102903, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 2, 495, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Set Faction 495'), +(2102903, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 0, 10, 25119, 21027, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Start Follow Closest Creature \'Earthmender Wilda\''), +(2102903, 9, 3, 0, 0, 0, 100, 0, 3600, 3600, 0, 0, 0, 60, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Set Fly Off'), +(2102903, 9, 4, 0, 0, 0, 100, 0, 800, 800, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Say Line 0'), +(2102903, 9, 5, 0, 0, 0, 100, 0, 2400, 2400, 0, 0, 0, 29, 2, 180, 0, 0, 0, 0, 10, 25119, 21027, 0, 0, 0, 0, 0, 0, 'Captured Water Spirit - Actionlist - Start Follow Closest Creature \'Earthmender Wilda\''); + +-- Fix for serverside spell +UPDATE `spell_dbc` SET `Effect_1` = 28, `EffectMiscValueB_1` = 64, `EffectBasePoints_1` = 0 WHERE `ID` = 35937; diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp index f295c6663..6e4c6354d 100644 --- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp +++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp @@ -18,7 +18,7 @@ /* ScriptData SDName: Shadowmoon_Valley SD%Complete: 100 -SDComment: Quest support: 10519, 10583, 10601, 10804, 10854, 10458, 10481, 10480, 10781, 10451. Vendor Drake Dealer Hurlunk. +SDComment: Quest support: 10519, 10583, 10601, 10804, 10854, 10458, 10481, 10480, 10781. Vendor Drake Dealer Hurlunk. SDCategory: Shadowmoon Valley EndScriptData */ @@ -29,7 +29,6 @@ npc_drake_dealer_hurlunk npcs_flanis_swiftwing_and_kagrosh npc_karynaku npc_oronok_tornheart -npc_earthmender_wilda npc_torloth_the_magnificent npc_illidari_spawn npc_lord_illidan_stormrage @@ -811,176 +810,6 @@ public: } }; -/*#### -# npc_earthmender_wilda -####*/ - -enum Earthmender -{ - SAY_WIL_START = 0, - SAY_WIL_AGGRO = 1, - SAY_WIL_PROGRESS1 = 2, - SAY_WIL_PROGRESS2 = 3, - SAY_WIL_FIND_EXIT = 4, - SAY_WIL_JUST_AHEAD = 5, - SAY_WIL_END = 6, - - SPELL_CHAIN_LIGHTNING = 16006, - SPELL_EARTHBING_TOTEM = 15786, - SPELL_FROST_SHOCK = 12548, - SPELL_HEALING_WAVE = 12491, - - QUEST_ESCAPE_COILSCAR = 10451, - NPC_COILSKAR_ASSASSIN = 21044 -}; - -class npc_earthmender_wilda : public CreatureScript -{ -public: - npc_earthmender_wilda() : CreatureScript("npc_earthmender_wilda") { } - - bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override - { - if (quest->GetQuestId() == QUEST_ESCAPE_COILSCAR) - { - creature->AI()->Talk(SAY_WIL_START, player); - creature->SetFaction(FACTION_EARTHEN_RING); //guessed - - if (npc_earthmender_wildaAI* pEscortAI = CAST_AI(npc_earthmender_wilda::npc_earthmender_wildaAI, creature->AI())) - pEscortAI->Start(false, false, player->GetGUID(), quest); - } - return true; - } - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_earthmender_wildaAI(creature); - } - - struct npc_earthmender_wildaAI : public npc_escortAI - { - npc_earthmender_wildaAI(Creature* creature) : npc_escortAI(creature) { } - - uint32 m_uiHealingTimer; - - void Reset() override - { - m_uiHealingTimer = 0; - } - - void WaypointReached(uint32 waypointId) override - { - Player* player = GetPlayerForEscort(); - if (!player) - return; - - switch (waypointId) - { - case 13: - Talk(SAY_WIL_PROGRESS1, player); - DoSpawnAssassin(); - break; - case 14: - DoSpawnAssassin(); - break; - case 15: - Talk(SAY_WIL_FIND_EXIT, player); - break; - case 19: - DoRandomSay(); - break; - case 20: - DoSpawnAssassin(); - break; - case 26: - DoRandomSay(); - break; - case 27: - DoSpawnAssassin(); - break; - case 33: - DoRandomSay(); - break; - case 34: - DoSpawnAssassin(); - break; - case 37: - DoRandomSay(); - break; - case 38: - DoSpawnAssassin(); - break; - case 39: - Talk(SAY_WIL_JUST_AHEAD, player); - break; - case 43: - DoRandomSay(); - break; - case 44: - DoSpawnAssassin(); - break; - case 50: - Talk(SAY_WIL_END, player); - player->GroupEventHappens(QUEST_ESCAPE_COILSCAR, me); - break; - } - } - - void JustSummoned(Creature* summoned) override - { - if (summoned->GetEntry() == NPC_COILSKAR_ASSASSIN) - summoned->AI()->AttackStart(me); - } - - //this is very unclear, random say without no real relevance to script/event - void DoRandomSay() - { - Talk(SAY_WIL_PROGRESS2); - } - - void DoSpawnAssassin() - { - //unknown where they actually appear - DoSummon(NPC_COILSKAR_ASSASSIN, me, 15.0f, 5000, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT); - } - - void JustEngagedWith(Unit* who) override - { - //don't always use - if (rand() % 5) - return; - - //only aggro text if not player - if (who->GetTypeId() != TYPEID_PLAYER) - { - //appears to be random - if (urand(0, 1)) - Talk(SAY_WIL_AGGRO); - } - } - - void UpdateAI(uint32 uiDiff) override - { - npc_escortAI::UpdateAI(uiDiff); - - if (!UpdateVictim()) - return; - - /// @todo add more abilities - if (!HealthAbovePct(30)) - { - if (m_uiHealingTimer <= uiDiff) - { - DoCast(me, SPELL_HEALING_WAVE); - m_uiHealingTimer = 15000; - } - else - m_uiHealingTimer -= uiDiff; - } - } - }; -}; - /*##### # Quest: Battle of the crimson watch #####*/ @@ -1821,7 +1650,6 @@ void AddSC_shadowmoon_valley() new npc_drake_dealer_hurlunk(); new npcs_flanis_swiftwing_and_kagrosh(); new npc_karynaku(); - new npc_earthmender_wilda(); new npc_lord_illidan_stormrage(); new go_crystal_prison(); new npc_illidari_spawn(); From 0135207765fe6ab3f8879f23b9dbb38974bb6627 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Mon, 27 Feb 2023 16:08:05 +0000 Subject: [PATCH 68/72] chore(DB): import pending files Referenced commit(s): 185892f153b0dec825138e799850ec5daf496736 --- .../rev_1676784619979772300.sql => db_world/2023_02_27_07.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1676784619979772300.sql => db_world/2023_02_27_07.sql} (99%) diff --git a/data/sql/updates/pending_db_world/rev_1676784619979772300.sql b/data/sql/updates/db_world/2023_02_27_07.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1676784619979772300.sql rename to data/sql/updates/db_world/2023_02_27_07.sql index fbdf6348a..f27e983b0 100644 --- a/data/sql/updates/pending_db_world/rev_1676784619979772300.sql +++ b/data/sql/updates/db_world/2023_02_27_07.sql @@ -1,3 +1,4 @@ +-- DB update 2023_02_27_06 -> 2023_02_27_07 -- UPDATE `creature_template` SET `unit_flags`=`unit_flags`|32768, `AIName` = 'SmartAI', `ScriptName` = '' WHERE (`entry` = 21027); From 725aa27d7e3c3f82ea9efdb26fe970bc86f3c021 Mon Sep 17 00:00:00 2001 From: "Julio A. Leyva Osorio" Date: Mon, 27 Feb 2023 11:13:19 -0500 Subject: [PATCH 69/72] fix(Core/Quests): Fix exploit in icc reputation rings (#15092) --- src/server/game/Entities/Player/PlayerQuest.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/server/game/Entities/Player/PlayerQuest.cpp b/src/server/game/Entities/Player/PlayerQuest.cpp index d4453d2ab..83adc2eeb 100644 --- a/src/server/game/Entities/Player/PlayerQuest.cpp +++ b/src/server/game/Entities/Player/PlayerQuest.cpp @@ -664,16 +664,22 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver, for (uint8 i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i) { - if (sObjectMgr->GetItemTemplate(quest->RequiredItemId[i])) + if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(quest->RequiredItemId[i])) { - DestroyItemCount(quest->RequiredItemId[i], quest->RequiredItemCount[i], true, true); + if (quest->RequiredItemCount[i] > 0 && itemTemplate->Bonding == BIND_QUEST_ITEM && !quest->IsRepeatable() && !HasQuestForItem(quest->RequiredItemId[i], quest_id, true)) + DestroyItemCount(quest->RequiredItemId[i], 9999, true); + else + DestroyItemCount(quest->RequiredItemId[i], quest->RequiredItemCount[i], true); } } for (uint8 i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i) { - if (sObjectMgr->GetItemTemplate(quest->ItemDrop[i])) + if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(quest->ItemDrop[i])) { - DestroyItemCount(quest->ItemDrop[i], quest->ItemDropQuantity[i], true, true); + if (quest->ItemDropQuantity[i] > 0 && itemTemplate->Bonding == BIND_QUEST_ITEM && !quest->IsRepeatable() && !HasQuestForItem(quest->ItemDrop[i], quest_id)) + DestroyItemCount(quest->ItemDrop[i], 9999, true); + else + DestroyItemCount(quest->ItemDrop[i], quest->ItemDropQuantity[i], true); } } From 17b23a41c66997e62c025d871a31c0d69acbcef2 Mon Sep 17 00:00:00 2001 From: Christopher Galbraith <39371221+ChrisCGalbraith@users.noreply.github.com> Date: Tue, 28 Feb 2023 04:25:41 +0000 Subject: [PATCH 70/72] fix(DB/Creature): Give Enraged Soul triggers the trigger flag (#15223) --- data/sql/updates/pending_db_world/fix-enraged-soul-triggers.sql | 1 + 1 file changed, 1 insertion(+) create mode 100644 data/sql/updates/pending_db_world/fix-enraged-soul-triggers.sql diff --git a/data/sql/updates/pending_db_world/fix-enraged-soul-triggers.sql b/data/sql/updates/pending_db_world/fix-enraged-soul-triggers.sql new file mode 100644 index 000000000..c2cbbe9d2 --- /dev/null +++ b/data/sql/updates/pending_db_world/fix-enraged-soul-triggers.sql @@ -0,0 +1 @@ +UPDATE `creature_template` SET `flags_extra` = `flags_extra`|128 WHERE `entry` IN (21073, 21097, 21116); From 8635ab01706a76f2476d7c918b6165b98ca960bf Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Tue, 28 Feb 2023 04:28:25 +0000 Subject: [PATCH 71/72] chore(DB): import pending files Referenced commit(s): 17b23a41c66997e62c025d871a31c0d69acbcef2 --- .../fix-enraged-soul-triggers.sql => db_world/2023_02_28_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/fix-enraged-soul-triggers.sql => db_world/2023_02_28_00.sql} (70%) diff --git a/data/sql/updates/pending_db_world/fix-enraged-soul-triggers.sql b/data/sql/updates/db_world/2023_02_28_00.sql similarity index 70% rename from data/sql/updates/pending_db_world/fix-enraged-soul-triggers.sql rename to data/sql/updates/db_world/2023_02_28_00.sql index c2cbbe9d2..8c936bf28 100644 --- a/data/sql/updates/pending_db_world/fix-enraged-soul-triggers.sql +++ b/data/sql/updates/db_world/2023_02_28_00.sql @@ -1 +1,2 @@ +-- DB update 2023_02_27_07 -> 2023_02_28_00 UPDATE `creature_template` SET `flags_extra` = `flags_extra`|128 WHERE `entry` IN (21073, 21097, 21116); From c8d039d2eca3a54ca951b8a3a8985e6abc507f72 Mon Sep 17 00:00:00 2001 From: Axel Cocat Date: Tue, 28 Feb 2023 23:40:45 +0100 Subject: [PATCH 72/72] feat(Core/Channel): add GetChannelDBId() (#15232) --- src/server/game/Chat/Channels/Channel.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/game/Chat/Channels/Channel.h b/src/server/game/Chat/Channels/Channel.h index 83344b39e..5ec955bc7 100644 --- a/src/server/game/Chat/Channels/Channel.h +++ b/src/server/game/Chat/Channels/Channel.h @@ -182,6 +182,7 @@ public: Channel(std::string const& name, uint32 channel_id, uint32 channelDBId, TeamId teamId = TEAM_NEUTRAL, bool announce = true, bool ownership = true); [[nodiscard]] std::string const& GetName() const { return _name; } [[nodiscard]] uint32 GetChannelId() const { return _channelId; } + [[nodiscard]] uint32 GetChannelDBId() const { return _channelDBId; } [[nodiscard]] bool IsConstant() const { return _channelId != 0; } [[nodiscard]] bool IsAnnounce() const { return _announce; } [[nodiscard]] bool IsLFG() const { return GetFlags() & CHANNEL_FLAG_LFG; }