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/db_auth/2023_02_20_00.sql b/data/sql/updates/db_auth/2023_02_20_00.sql new file mode 100644 index 000000000..5df0d6814 --- /dev/null +++ b/data/sql/updates/db_auth/2023_02_20_00.sql @@ -0,0 +1,12 @@ +-- DB update 2023_01_31_00 -> 2023_02_20_00 +-- +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/db_world/2023_02_17_12.sql b/data/sql/updates/db_world/2023_02_17_12.sql new file mode 100644 index 000000000..a1e6309e7 --- /dev/null +++ b/data/sql/updates/db_world/2023_02_17_12.sql @@ -0,0 +1,184 @@ +-- 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 +(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); diff --git a/data/sql/updates/db_world/2023_02_18_00.sql b/data/sql/updates/db_world/2023_02_18_00.sql new file mode 100644 index 000000000..26df1a48a --- /dev/null +++ b/data/sql/updates/db_world/2023_02_18_00.sql @@ -0,0 +1,50 @@ +-- 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 +(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); diff --git a/data/sql/updates/db_world/2023_02_18_01.sql b/data/sql/updates/db_world/2023_02_18_01.sql new file mode 100644 index 000000000..92fbadca4 --- /dev/null +++ b/data/sql/updates/db_world/2023_02_18_01.sql @@ -0,0 +1,118 @@ +-- 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 +(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); diff --git a/data/sql/updates/db_world/2023_02_18_02.sql b/data/sql/updates/db_world/2023_02_18_02.sql new file mode 100644 index 000000000..9eb1196ae --- /dev/null +++ b/data/sql/updates/db_world/2023_02_18_02.sql @@ -0,0 +1,329 @@ +-- 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 +(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); diff --git a/data/sql/updates/db_world/2023_02_18_03.sql b/data/sql/updates/db_world/2023_02_18_03.sql new file mode 100644 index 000000000..c81cf1759 --- /dev/null +++ b/data/sql/updates/db_world/2023_02_18_03.sql @@ -0,0 +1,298 @@ +-- 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 +(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)'); diff --git a/data/sql/updates/db_world/2023_02_18_04.sql b/data/sql/updates/db_world/2023_02_18_04.sql new file mode 100644 index 000000000..586cc6568 --- /dev/null +++ b/data/sql/updates/db_world/2023_02_18_04.sql @@ -0,0 +1,17 @@ +-- 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; + +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)'); diff --git a/data/sql/updates/db_world/2023_02_18_05.sql b/data/sql/updates/db_world/2023_02_18_05.sql new file mode 100644 index 000000000..ffaf0d393 --- /dev/null +++ b/data/sql/updates/db_world/2023_02_18_05.sql @@ -0,0 +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) diff --git a/data/sql/updates/db_world/2023_02_18_06.sql b/data/sql/updates/db_world/2023_02_18_06.sql new file mode 100644 index 000000000..f92dcb232 --- /dev/null +++ b/data/sql/updates/db_world/2023_02_18_06.sql @@ -0,0 +1,135 @@ +-- 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 +(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); diff --git a/data/sql/updates/db_world/2023_02_18_07.sql b/data/sql/updates/db_world/2023_02_18_07.sql new file mode 100644 index 000000000..18bd5d2f9 --- /dev/null +++ b/data/sql/updates/db_world/2023_02_18_07.sql @@ -0,0 +1,140 @@ +-- 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 +(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); diff --git a/data/sql/updates/db_world/2023_02_18_08.sql b/data/sql/updates/db_world/2023_02_18_08.sql new file mode 100644 index 000000000..962161611 --- /dev/null +++ b/data/sql/updates/db_world/2023_02_18_08.sql @@ -0,0 +1,5 @@ +-- 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 +(38194, 'spell_talon_king_ikiss_blink'); diff --git a/data/sql/updates/db_world/2023_02_19_00.sql b/data/sql/updates/db_world/2023_02_19_00.sql new file mode 100644 index 000000000..e1241d2ce --- /dev/null +++ b/data/sql/updates/db_world/2023_02_19_00.sql @@ -0,0 +1,3 @@ +-- DB update 2023_02_18_08 -> 2023_02_19_00 +-- +DELETE FROM `creature` WHERE `id1`=22102 AND `guid` IN (86101, 86102); diff --git a/data/sql/updates/db_world/2023_02_19_01.sql b/data/sql/updates/db_world/2023_02_19_01.sql new file mode 100644 index 000000000..2b8e8928c --- /dev/null +++ b/data/sql/updates/db_world/2023_02_19_01.sql @@ -0,0 +1,377 @@ +-- 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); + +-- 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, ''); diff --git a/data/sql/updates/db_world/2023_02_19_02.sql b/data/sql/updates/db_world/2023_02_19_02.sql new file mode 100644 index 000000000..f6653fb98 --- /dev/null +++ b/data/sql/updates/db_world/2023_02_19_02.sql @@ -0,0 +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/db_world/2023_02_19_03.sql b/data/sql/updates/db_world/2023_02_19_03.sql new file mode 100644 index 000000000..afa19d40a --- /dev/null +++ b/data/sql/updates/db_world/2023_02_19_03.sql @@ -0,0 +1,44 @@ +-- DB update 2023_02_19_02 -> 2023_02_19_03 +-- +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/data/sql/updates/db_world/2023_02_19_04.sql b/data/sql/updates/db_world/2023_02_19_04.sql new file mode 100644 index 000000000..fec6b2a57 --- /dev/null +++ b/data/sql/updates/db_world/2023_02_19_04.sql @@ -0,0 +1,7 @@ +-- 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); +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); diff --git a/data/sql/updates/db_world/2023_02_19_05.sql b/data/sql/updates/db_world/2023_02_19_05.sql new file mode 100644 index 000000000..c4f57c7fa --- /dev/null +++ b/data/sql/updates/db_world/2023_02_19_05.sql @@ -0,0 +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/db_world/2023_02_19_06.sql b/data/sql/updates/db_world/2023_02_19_06.sql new file mode 100644 index 000000000..aecbaca83 --- /dev/null +++ b/data/sql/updates/db_world/2023_02_19_06.sql @@ -0,0 +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; diff --git a/data/sql/updates/db_world/2023_02_19_07.sql b/data/sql/updates/db_world/2023_02_19_07.sql new file mode 100644 index 000000000..d3c656248 --- /dev/null +++ b/data/sql/updates/db_world/2023_02_19_07.sql @@ -0,0 +1,247 @@ +-- 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 +(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)'); diff --git a/data/sql/updates/db_world/2023_02_19_08.sql b/data/sql/updates/db_world/2023_02_19_08.sql new file mode 100644 index 000000000..39ffed3b9 --- /dev/null +++ b/data/sql/updates/db_world/2023_02_19_08.sql @@ -0,0 +1,17 @@ +-- 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 +(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'); diff --git a/data/sql/updates/db_world/2023_02_19_09.sql b/data/sql/updates/db_world/2023_02_19_09.sql new file mode 100644 index 000000000..ca7893a33 --- /dev/null +++ b/data/sql/updates/db_world/2023_02_19_09.sql @@ -0,0 +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); diff --git a/data/sql/updates/db_world/2023_02_19_10.sql b/data/sql/updates/db_world/2023_02_19_10.sql new file mode 100644 index 000000000..fc336d4cf --- /dev/null +++ b/data/sql/updates/db_world/2023_02_19_10.sql @@ -0,0 +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); diff --git a/data/sql/updates/db_world/2023_02_19_11.sql b/data/sql/updates/db_world/2023_02_19_11.sql new file mode 100644 index 000000000..2458b7255 --- /dev/null +++ b/data/sql/updates/db_world/2023_02_19_11.sql @@ -0,0 +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); diff --git a/data/sql/updates/db_world/2023_02_20_00.sql b/data/sql/updates/db_world/2023_02_20_00.sql new file mode 100644 index 000000000..2ffd4daf8 --- /dev/null +++ b/data/sql/updates/db_world/2023_02_20_00.sql @@ -0,0 +1,10 @@ +-- DB update 2023_02_19_11 -> 2023_02_20_00 +-- +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/data/sql/updates/db_world/2023_02_23_00.sql b/data/sql/updates/db_world/2023_02_23_00.sql new file mode 100644 index 000000000..ab1413a1c --- /dev/null +++ b/data/sql/updates/db_world/2023_02_23_00.sql @@ -0,0 +1,17 @@ +-- 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 +(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'); diff --git a/data/sql/updates/db_world/2023_02_23_01.sql b/data/sql/updates/db_world/2023_02_23_01.sql new file mode 100644 index 000000000..c8b7633b8 --- /dev/null +++ b/data/sql/updates/db_world/2023_02_23_01.sql @@ -0,0 +1,11 @@ +-- DB update 2023_02_23_00 -> 2023_02_23_01 +-- +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/data/sql/updates/db_world/2023_02_25_00.sql b/data/sql/updates/db_world/2023_02_25_00.sql new file mode 100644 index 000000000..f9511cae4 --- /dev/null +++ b/data/sql/updates/db_world/2023_02_25_00.sql @@ -0,0 +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); diff --git a/data/sql/updates/db_world/2023_02_25_01.sql b/data/sql/updates/db_world/2023_02_25_01.sql new file mode 100644 index 000000000..a185c2fa3 --- /dev/null +++ b/data/sql/updates/db_world/2023_02_25_01.sql @@ -0,0 +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; diff --git a/data/sql/updates/db_world/2023_02_27_00.sql b/data/sql/updates/db_world/2023_02_27_00.sql new file mode 100644 index 000000000..eec5262d3 --- /dev/null +++ b/data/sql/updates/db_world/2023_02_27_00.sql @@ -0,0 +1,5 @@ +-- 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 +(15, 7435, 0, 0, 0, 5, 0, 967, 224, 0, 0, 0, 0, '', 'Koren - Show vendor option only if atleast Honored with Violet Eye'); diff --git a/data/sql/updates/db_world/2023_02_27_01.sql b/data/sql/updates/db_world/2023_02_27_01.sql new file mode 100644 index 000000000..35c0f0098 --- /dev/null +++ b/data/sql/updates/db_world/2023_02_27_01.sql @@ -0,0 +1,5 @@ +-- 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 +(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\''); diff --git a/data/sql/updates/db_world/2023_02_27_02.sql b/data/sql/updates/db_world/2023_02_27_02.sql new file mode 100644 index 000000000..3999292b0 --- /dev/null +++ b/data/sql/updates/db_world/2023_02_27_02.sql @@ -0,0 +1,8 @@ +-- DB update 2023_02_27_01 -> 2023_02_27_02 +-- + +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; diff --git a/data/sql/updates/db_world/2023_02_27_03.sql b/data/sql/updates/db_world/2023_02_27_03.sql new file mode 100644 index 000000000..c61876566 --- /dev/null +++ b/data/sql/updates/db_world/2023_02_27_03.sql @@ -0,0 +1,6 @@ +-- 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; + +UPDATE `creature_template_addon` SET `bytes1` = 0, `bytes2` = 0, `auras` = '29266' WHERE `Entry` = 18035; diff --git a/data/sql/updates/db_world/2023_02_27_04.sql b/data/sql/updates/db_world/2023_02_27_04.sql new file mode 100644 index 000000000..e9bf2521b --- /dev/null +++ b/data/sql/updates/db_world/2023_02_27_04.sql @@ -0,0 +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/db_world/2023_02_27_05.sql b/data/sql/updates/db_world/2023_02_27_05.sql new file mode 100644 index 000000000..f4f14fbcb --- /dev/null +++ b/data/sql/updates/db_world/2023_02_27_05.sql @@ -0,0 +1,5 @@ +-- 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 +(14, 6685, 13062, 0, 0, 12, 0, 50, 0, 0, 0, 0, 0, '', 'Baron Revilgaz - On Pirates\' Day event - Show appropriate gossip'); diff --git a/data/sql/updates/db_world/2023_02_27_06.sql b/data/sql/updates/db_world/2023_02_27_06.sql new file mode 100644 index 000000000..a4aafae0f --- /dev/null +++ b/data/sql/updates/db_world/2023_02_27_06.sql @@ -0,0 +1,5 @@ +-- 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; +UPDATE `creature_template` SET `flags_extra` = `flags_extra` |2147483648 WHERE `entry` = 15690; diff --git a/data/sql/updates/db_world/2023_02_27_07.sql b/data/sql/updates/db_world/2023_02_27_07.sql new file mode 100644 index 000000000..f27e983b0 --- /dev/null +++ b/data/sql/updates/db_world/2023_02_27_07.sql @@ -0,0 +1,215 @@ +-- 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); + +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/data/sql/updates/db_world/2023_02_28_00.sql b/data/sql/updates/db_world/2023_02_28_00.sql new file mode 100644 index 000000000..8c936bf28 --- /dev/null +++ b/data/sql/updates/db_world/2023_02_28_00.sql @@ -0,0 +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); 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/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 diff --git a/src/server/apps/worldserver/worldserver.conf.dist b/src/server/apps/worldserver/worldserver.conf.dist index 4ef0b35d3..d18bea3ad 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. @@ -3955,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/database/Database/Implementation/LoginDatabase.cpp b/src/server/database/Database/Implementation/LoginDatabase.cpp index ddf59dad2..093890096 100644 --- a/src/server/database/Database/Implementation/LoginDatabase.cpp +++ b/src/server/database/Database/Implementation/LoginDatabase.cpp @@ -115,6 +115,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 5872eddca..a3a2cc702 100644 --- a/src/server/database/Database/Implementation/LoginDatabase.h +++ b/src/server/database/Database/Implementation/LoginDatabase.h @@ -97,6 +97,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/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/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/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; } 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/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 0956a6dd9..523805eca 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -2805,6 +2805,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/Player/PlayerQuest.cpp b/src/server/game/Entities/Player/PlayerQuest.cpp index a4b5861c8..eecd1ef10 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); } } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 047fe937a..c43c46c0f 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -15893,6 +15893,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; } } @@ -18095,7 +18113,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()) @@ -18179,6 +18196,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*/) 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/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); 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/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index ae6ef16da..9ea6e3dd2 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -141,7 +141,6 @@ WorldSession::WorldSession(uint32 id, std::string&& name, std::shared_ptr(packet->GetOpcode())), GetPlayerInfo()); } } @@ -533,7 +530,7 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater) if (!m_Socket) { - return false; + return false; //Will remove this session from the world session map } } diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index daa179a37..feccb23a7 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -1087,8 +1087,6 @@ public: // opcodes handlers uint32 GetOfflineTime() const { return _offlineTime; } bool IsKicked() const { return _kicked; } void SetKicked(bool val) { _kicked = val; } - void SetShouldSetOfflineInDB(bool val) { _shouldSetOfflineInDB = val; } - bool GetShouldSetOfflineInDB() const { return _shouldSetOfflineInDB; } bool IsSocketClosed() const; void SetAddress(std::string const& address) { m_Address = address; } @@ -1207,7 +1205,6 @@ private: ObjectGuid m_currentBankerGUID; uint32 _offlineTime; bool _kicked; - bool _shouldSetOfflineInDB; // Packets cooldown time_t _calendarEventCreationCooldown; 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/IWorld.h b/src/server/game/World/IWorld.h index 3644902cc..237b23704 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; @@ -599,7 +598,7 @@ public: #ifdef MOD_PLAYERBOTS [[nodiscard]] virtual char const* GetPlayerbotsDBRevision() const = 0; #endif - 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 a97e10ffb..548c07b35 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" @@ -291,7 +292,6 @@ void World::AddSession_(WorldSession* s) { WorldSession* tmp = iter->second; _offlineSessions.erase(iter); - tmp->SetShouldSetOfflineInDB(false); delete tmp; } oldSession->SetOfflineTime(GameTime::GetGameTime().count()); @@ -299,7 +299,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; } } @@ -443,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); @@ -1586,6 +1583,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(); @@ -1992,7 +1992,11 @@ void World::SetInitialWorldSettings() ///- Load AutoBroadCast LOG_INFO("server.loading", "Loading Autobroadcasts..."); - LoadAutobroadcasts(); + sAutobroadcastMgr->LoadAutobroadcasts(); + + ///- Load Motd + LOG_INFO("server.loading", "Loading MotD..."); + LoadMotd(); ///- Load and initialize scripts sObjectMgr->LoadSpellScripts(); // must be after load Creature/Gameobject(Template/Data) @@ -2222,39 +2226,36 @@ void World::DetectDBCLang() LOG_INFO("server.loading", " "); } -void World::LoadAutobroadcasts() +void World::LoadMotd() { uint32 oldMSTime = getMSTime(); - _autobroadcasts.clear(); - _autobroadcastsWeights.clear(); - uint32 realmId = sConfigMgr->GetOption("RealmID", 0); - LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_AUTOBROADCAST); + LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_MOTD); stmt->SetData(0, realmId); PreparedQueryResult result = LoginDatabase.Query(stmt); + std::string motd; - 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 + if (result) { Field* fields = result->Fetch(); - uint8 id = fields[0].Get(); + 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", " "); + } - _autobroadcasts[id] = fields[2].Get(); - _autobroadcastsWeights[id] = fields[1].Get(); + 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); - ++count; - } while (result->NextRow()); - - LOG_INFO("server.loading", ">> Loaded {} Autobroadcast Definitions in {} ms", count, GetMSTimeDiffToNow(oldMSTime)); + LOG_INFO("server.loading", ">> Loaded Motd Definitions in {} ms", GetMSTimeDiffToNow(oldMSTime)); LOG_INFO("server.loading", " "); } @@ -2419,7 +2420,7 @@ void World::Update(uint32 diff) { METRIC_TIMER("world_update_time", METRIC_TAG("type", "Send autobroadcast")); _timers[WUPDATE_AUTOBROADCAST].Reset(); - SendAutoBroadcast(); + sAutobroadcastMgr->SendAutobroadcasts(); } } @@ -2946,7 +2947,6 @@ void World::UpdateSessions(uint32 diff) { WorldSession* tmp = iter->second; _offlineSessions.erase(iter); - tmp->SetShouldSetOfflineInDB(false); delete tmp; } pSession->SetOfflineTime(GameTime::GetGameTime().count()); @@ -2962,8 +2962,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; } } @@ -2980,8 +2978,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; } } @@ -3006,68 +3002,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 c1ce57cb5..532d0d087 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; @@ -343,7 +342,7 @@ public: #ifdef MOD_PLAYERBOTS [[nodiscard]] char const* GetPlayerbotsDBRevision() const override { return m_PlayerbotsDBRevision.c_str(); } #endif - void LoadAutobroadcasts() override; + void LoadMotd() override; void UpdateAreaDependentAuras() override; @@ -445,12 +444,6 @@ private: std::string m_PlayerbotsDBRevision; #endif - typedef std::map AutobroadcastsMap; - AutobroadcastsMap _autobroadcasts; - - typedef std::map AutobroadcastsWeightMap; - AutobroadcastsWeightMap _autobroadcastsWeights; - void ProcessQueryCallbacks(); QueryCallbackProcessor _queryProcessor; AsyncCallbackProcessor _queryHolderProcessor; diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp index 2fee7b3b6..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" @@ -32,6 +33,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 +82,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 +212,7 @@ public: HandleReloadVehicleTemplateAccessoryCommand(handler); HandleReloadAutobroadcastCommand(handler); + HandleReloadMotdCommand(handler); HandleReloadBroadcastTextCommand(handler); HandleReloadBattlegroundTemplate(handler); return true; @@ -398,11 +402,20 @@ 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; } + 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 69536e1a7..2aa03c875 100644 --- a/src/server/scripts/Commands/cs_server.cpp +++ b/src/server/scripts/Commands/cs_server.cpp @@ -509,10 +509,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/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); } 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); 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: { 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..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)) { @@ -116,6 +120,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,45 +155,105 @@ 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: + { + 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) + { + 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 +268,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 +289,8 @@ public: } break; } + default: + break; } } @@ -244,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 @@ -254,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; @@ -307,23 +401,120 @@ 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)) + { + 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; } } @@ -344,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 b3a27299b..873411b44 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; } @@ -350,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 eb6aabd17..6d895c210 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,53 @@ 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_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 }; +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) { 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]; 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 c8e350ae9..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 @@ -17,6 +17,7 @@ #include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "SpellScript.h" #include "sethekk_halls.h" enum TailonkingIkiss @@ -26,308 +27,150 @@ 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; - - void Reset() override - { - _spoken = false; - } - - void MoveInLineOfSight(Unit* who) override - { - if (!_spoken && who->GetTypeId() == TYPEID_PLAYER) - { - Talk(SAY_INTRO); - _spoken = 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(); - } - }; + bool _manaShield; }; -enum Anzu +// 38194 - Blink +class spell_talon_king_ikiss_blink : public SpellScript { - SAY_ANZU_INTRO1 = 0, - SAY_ANZU_INTRO2 = 1, - SAY_SUMMON = 2, + PrepareSpellScript(spell_talon_king_ikiss_blink); - 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 -}; - -class boss_anzu : public CreatureScript -{ -public: - boss_anzu() : CreatureScript("boss_anzu") { } - - CreatureAI* GetAI(Creature* creature) const override + bool Validate(SpellInfo const* /*spellInfo*/) override { - return GetSethekkHallsAI(creature); + return sSpellMgr->GetSpellInfo(SPELL_BLINK); } - struct boss_anzuAI : public ScriptedAI + void FilterTargets(std::list& targets) { - boss_anzuAI(Creature* creature) : ScriptedAI(creature), summons(me) + uint8 maxSize = 1; + if (targets.size() > maxSize) { - talkTimer = 1; - me->ReplaceAllUnitFlags(UNIT_FLAG_NON_ATTACKABLE); - me->AddAura(SPELL_SHADOWFORM, me); + Acore::Containers::RandomResize(targets, maxSize); } + } - EventMap events; - SummonList summons; - uint32 talkTimer; + void HandleDummyHitTarget(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + GetHitUnit()->CastSpell(GetCaster(), SPELL_BLINK_TELEPORT, true); + } - 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) - { - 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 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); + } }; 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); } 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 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) { 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(); 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(); diff --git a/src/test/mocks/WorldMock.h b/src/test/mocks/WorldMock.h index 73742627a..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,7 @@ 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)); MOCK_METHOD(void, SetCleaningFlags, (uint32 flags), ());