diff --git a/data/sql/updates/db_world/2024_07_25_00.sql b/data/sql/updates/db_world/2024_07_25_00.sql new file mode 100644 index 000000000..fe5894b76 --- /dev/null +++ b/data/sql/updates/db_world/2024_07_25_00.sql @@ -0,0 +1,680 @@ +-- DB update 2024_07_23_02 -> 2024_07_25_00 +-- Delete all pools +DELETE FROM `pool_template` WHERE `entry` IN (8085, 8086, 8087) AND `description` LIKE 'Zangarmarsh%'; +DELETE FROM `pool_gameobject` WHERE `guid` IN (21,1801,2730,16819,16820,16824,16825,16828,16829,16831,16836,16837,16839,16840,16841,16843,16847,16848,16850,16851,17172,17177,17178,17185,17665,17779,17844,20364,20944,21553,21554,22442,23956,23957,23959,23961,23962,23963,23964,23965,23968,23969,28313,28316,30408,30417,30544,32744,32824,33835,40534,40535,40536,40537,40538,40539,40578,40583,40584,40586,40587,40588,40590,40592,40593,40594,40596,40597,40598,40599,40600,40601,40602,40603,40604,40605,40607,40608,42178,42215,42217,42218,42226,42227,42236,42237,42240,42242,42245,42246,42247,42296,42346,42430,61290,61291,61304,61305,61312,61313,61315,61316,64802,64804,64805,64806,64807,64808,64810,64846,64847,64848,64849,64850,64851,64852,85916,85917,85918,85919,85920,87045,87125,87126,87127,87128,87398,87399,100198,101758,101759) AND `pool_entry` IN (8085, 8086, 8087) AND `description` LIKE '%Zangarmarsh%'; + +-- Turn all into Ragveil +UPDATE `gameobject` SET `id` = 183043 WHERE `guid` IN (21,1801,2730,16819,16820,16824,16825,16828,16829,16831,16836,16837,16839,16840,16841,16843,16847,16848,16850,16851,17172,17177,17178,17185,17665,17779,17844,20364,20944,21553,21554,23956,23957,23959,23961,23962,23963,23964,23965,23968,23969,28313,28316,30408,30417,30544,32744,32824,33835,40534,40535,40536,40537,40538,40539,40578,40583,40584,40586,40587,40588,40590,40592,40593,40594,40596,40597,40598,40599,40600,40601,40602,40603,40604,40605,40607,40608,42178,42215,42217,42218,42226,42227,42236,42237,42240,42242,42245,42246,42247,42296,42346,42430,61290,61291,61304,61305,61312,61313,61315,61316,64802,64804,64805,64806,64807,64808,64810,64846,64847,64848,64849,64850,64851,64852,85916,85917,85918,85919,85920,87045,87125,87126,87127,87128,87398,87399,100198,101758,101759) AND `id` = 181276 AND `map` = 530 AND `zoneId` = 3521; + +SET @OGUID := 2893; +DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID AND @OGUID+129 AND `id` = 181276 AND `map` = 530 AND `zoneId` = 3521; +INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `state`) VALUES +(@OGUID+0 , 181276, 530, 3521, -107.806, 7915.09, 21.2482, 2.79253, 0, 0, 0.984808, 0.173648, 900, 1), +(@OGUID+1 , 181276, 530, 3521, 426.372, 7143.61, 23.2572, -0.663223, 0, 0, 0, 1, 900, 1), +(@OGUID+2 , 181276, 530, 3521, 907.398, 5773.45, 10.7675, -1.58825, 0, 0, 0.71325, -0.700909, 900, 1), +(@OGUID+3 , 181276, 530, 3521, 366.143, 8161.63, 23.1978, -0.628317, 0, 0, 0, 1, 900, 1), +(@OGUID+4 , 181276, 530, 3521, -593.064, 5314.64, 22.9118, -0.575957, 0, 0, 0, 1, 900, 1), +(@OGUID+5 , 181276, 530, 3521, -448.393, 5388.17, 22.3863, 0.837757, 0, 0, 0, 1, 900, 1), +(@OGUID+6 , 181276, 530, 3521, 58.6755, 5531.17, 23.8776, -1.37881, 0, 0, 0, 1, 900, 1), +(@OGUID+7 , 181276, 530, 3521, 698.649, 7816.91, 22.2145, -2.56563, 0, 0, 0, 1, 900, 1), +(@OGUID+8 , 181276, 530, 3521, 919.076, 7500.88, 22.2466, 1.74533, 0, 0, 0, 1, 900, 1), +(@OGUID+9 , 181276, 530, 3521, 154.377, 8310.03, 23.5881, -0.366518, 0, 0, 0, 1, 900, 1), +(@OGUID+10 , 181276, 530, 3521, 402.496, 8050.45, 24.0536, -1.46608, 0, 0, 0, 1, 900, 1), +(@OGUID+11 , 181276, 530, 3521, -228.201, 5812.67, 23.5458, -1.69297, 0, 0, 0, 1, 900, 1), +(@OGUID+12 , 181276, 530, 3521, 248.869, 5376.13, 22.2604, -0.855211, 0, 0, 0, 1, 900, 1), +(@OGUID+13 , 181276, 530, 3521, 705.322, 5845.69, 27.0197, -0.104719, 0, 0, 0, 1, 900, 1), +(@OGUID+14 , 181276, 530, 3521, 611.324, 5518.14, -1.16461, -1.79769, 0, 0, 0, 1, 900, 1), +(@OGUID+15 , 181276, 530, 3521, 458.682, 5300.45, -1.45927, -1.5708, 0, 0, 0, 1, 900, 1), +(@OGUID+16 , 181276, 530, 3521, -211.253, 6958.59, 20.9092, -1.43117, 0, 0, 0, 1, 900, 1), +(@OGUID+17 , 181276, 530, 3521, -193.153, 7896.41, 20.4815, 2.19912, 0, 0, 0, 1, 900, 1), +(@OGUID+18 , 181276, 530, 3521, -1027.54, 5276.3, 22.8396, 1.76278, 0, 0, 0, 1, 900, 1), +(@OGUID+19 , 181276, 530, 3521, 42.8332, 7622.71, 23.872, 0, 0, 0, 0, 1, 900, 1), +(@OGUID+20 , 181276, 530, 3521, 235.551, 5897.5, 22.0829, 1.78023, 0, 0, 0, 1, 900, 1), +(@OGUID+21 , 181276, 530, 3521, 204.353, 8169.52, 23.3274, 0.401425, 0, 0, 0, 1, 900, 1), +(@OGUID+22 , 181276, 530, 3521, 541.682, 5959.59, 22.2652, 2.1293, 0, 0, 0, 1, 900, 1), +(@OGUID+23 , 181276, 530, 3521, 568.935, 7617.03, 21.8145, 2.30383, 0, 0, 0, 1, 900, 1), +(@OGUID+24 , 181276, 530, 3521, -83.7279, 8736.5, 20.927, -1.79769, 0, 0, 0, 1, 900, 1), +(@OGUID+25 , 181276, 530, 3521, 1000.79, 8098.37, 22.8685, -2.47837, 0, 0, 0, 1, 900, 1), +(@OGUID+26 , 181276, 530, 3521, -87.9494, 8452.43, 22.1782, 0.191985, 0, 0, 0, 1, 900, 1), +(@OGUID+27 , 181276, 530, 3521, -894.192, 5466.5, 22.4142, -1.90241, 0, 0, 0.814116, -0.580703, 900, 1), +(@OGUID+28 , 181276, 530, 3521, -784.561, 5929.42, 23.2148, -3.00197, 0, 0, 0.997564, -0.069756, 900, 1), +(@OGUID+29 , 181276, 530, 3521, 863.5, 7637.16, 22.8081, -2.02458, 0, 0, 0.848048, -0.529919, 900, 1), +(@OGUID+30 , 181276, 530, 3521, 6.31912, 8596.54, 22.0617, -2.87979, 0, 0, 0.991445, -0.130526, 900, 1), +(@OGUID+31 , 181276, 530, 3521, 657.941, 6443.58, 21.3223, 2.33874, 0, 0, 0.920505, 0.390731, 900, 1), +(@OGUID+32 , 181276, 530, 3521, 785.26, 6723.05, 20.0622, 1.79769, 0, 0, 0.782608, 0.622515, 900, 1), +(@OGUID+33 , 181276, 530, 3521, 755.452, 7906.58, 23.3914, 0, 0, 0, 0, 1, 900, 1), +(@OGUID+34 , 181276, 530, 3521, 978.896, 8378.65, 23.2019, -0.733038, 0, 0, 0.358368, -0.93358, 900, 1), +(@OGUID+35 , 181276, 530, 3521, 558.517, 8079.06, 23.1242, -1.72788, 0, 0, 0.760406, -0.649448, 900, 1), +(@OGUID+36 , 181276, 530, 3521, 1029.5, 8594.19, 23.766, -2.67035, 0, 0, 0.97237, -0.233445, 900, 1), +(@OGUID+37 , 181276, 530, 3521, 916.977, 8606.69, 22.5519, -2.04204, 0, 0, 0.85264, -0.522498, 900, 1), +(@OGUID+38 , 181276, 530, 3521, 742.956, 8687.42, 15.1519, -2.61799, 0, 0, 0.965926, -0.258819, 900, 1), +(@OGUID+39 , 181276, 530, 3521, -131.107, 8814.37, 24.3029, -2.1293, 0, 0, 0.87462, -0.48481, 900, 1), +(@OGUID+40 , 181276, 530, 3521, 522.205, 6323.62, 22.5429, -3.10669, 0, 0, 0.999848, -0.017452, 900, 1), +(@OGUID+41 , 181276, 530, 3521, -292.536, 5995.26, 24.0665, -1.62316, 0, 0, 0.725374, -0.688354, 900, 1), +(@OGUID+42 , 181276, 530, 3521, -492.669, 5920.06, 24.1321, -1.88496, 0, 0, 0.809017, -0.587785, 900, 1), +(@OGUID+43 , 181276, 530, 3521, -147.499, 5645.65, 22.4478, -0.506145, 0, 0, 0.25038, -0.968148, 900, 1), +(@OGUID+44 , 181276, 530, 3521, -608.048, 5877.87, 22.5833, -1.51844, 0, 0, 0.688354, -0.725374, 900, 1), +(@OGUID+45 , 181276, 530, 3521, 610.609, 6015.39, 23.009, 2.82743, 0, 0, 0.987688, 0.156434, 900, 1), +(@OGUID+46 , 181276, 530, 3521, 845.668, 8114.97, 22.6411, 2.54818, 0, 0, 0.956305, 0.292372, 900, 1), +(@OGUID+47 , 181276, 530, 3521, 1358.66, 8558.92, 21.8467, 2.04204, 0, 0, 0.85264, 0.522499, 900, 1), +(@OGUID+48 , 181276, 530, 3521, 220.082, 7667.34, 23.1641, -1.15192, 0, 0, 0.544639, -0.838671, 900, 1), +(@OGUID+49 , 181276, 530, 3521, -202.466, 7536.72, 22.0793, -1.46608, 0, 0, 0, 1, 900, 1), +(@OGUID+50 , 181276, 530, 3521, 695.266, 5437.31, -24.5709, 0, 0, 0, 0, 0, 900, 1), +(@OGUID+51 , 181276, 530, 3521, 904.501, 5418.78, 10.0337, 0, 0, 0, 0, 0, 900, 1), +(@OGUID+52 , 181276, 530, 3521, 536.714, 5436.1, -3.00072, 0, 0, 0, 0, 0, 900, 1), +(@OGUID+53 , 181276, 530, 3521, 565.942, 7985.94, 21.6704, -0.680679, 0, 0, 0, 1, 900, 1), +(@OGUID+54 , 181276, 530, 3521, 325.04, 5720.3, 22.4669, 0, 0, 0, 0, 0, 900, 1), +(@OGUID+55 , 181276, 530, 3521, 1030.67, 8727.31, 5.33556, 0, 0, 0, 0, 0, 900, 1), +(@OGUID+56 , 181276, 530, 3521, 309.43, 5341.78, 22.8067, 0, 0, 0, 0, 0, 900, 1), +(@OGUID+57 , 181276, 530, 3521, 541.504, 5192.18, 3.11218, 0, 0, 0, 0, 0, 900, 1), +(@OGUID+58 , 181276, 530, 3521, 725.806, 5508.13, -1.81071, 0, 0, 0, 0, 0, 900, 1), +(@OGUID+59 , 181276, 530, 3521, 824.051, 5370.86, -0.944571, 0, 0, 0, 0, 0, 900, 1), +(@OGUID+60 , 181276, 530, 3521, 561.567, 5624.54, 18.8166, 0, 0, 0, 0, 0, 900, 1), +(@OGUID+61 , 181276, 530, 3521, 538.579, 5322.72, -24.1594, 0, 0, 0, 0, 0, 900, 1), +(@OGUID+62 , 181276, 530, 3521, 475.503, 5950.67, 22.8493, 0.628317, 0, 0, 0, 1, 900, 1), +(@OGUID+63 , 181276, 530, 3521, 695.183, 5439.76, -23.4568, 0, 0, 0, 0, 0, 900, 1), +(@OGUID+64 , 181276, 530, 3521, 314.989, 7734.13, 23.2506, 0, 0, 0, 0, 0, 900, 1), +(@OGUID+65 , 181276, 530, 3521, 114.665, 8606.88, 22.2169, 0, 0, 0, 0, 0, 900, 1), +(@OGUID+66 , 181276, 530, 3521, -139.498, 8998.17, 22.8894, 0, 0, 0, 0, 0, 900, 1), +(@OGUID+67 , 181276, 530, 3521, 325.983, 5721.31, 22.6486, 0, 0, 0, 0, 0, 900, 1), +(@OGUID+68 , 181276, 530, 3521, 758.05, 5651.15, 23.09, -0.855211, 0, 0, 0, 1, 900, 1), +(@OGUID+69 , 181276, 530, 3521, 836.484, 5675.57, 24.7045, -3.05433, 0, 0, 0, 1, 900, 1), +(@OGUID+70 , 181276, 530, 3521, 888.652, 5313.54, 19.8773, 0, 0, 0, 0, 0, 900, 1), +(@OGUID+71 , 181276, 530, 3521, 709.53, 5259.44, -0.880973, 0, 0, 0, 0, 0, 900, 1), +(@OGUID+72 , 181276, 530, 3521, 818.973, 5240.57, 22.035, 0, 0, 0, 0, 0, 900, 1), +(@OGUID+73 , 181276, 530, 3521, 607.469, 5870.84, 22.6128, 0, 0, 0, 0, 0, 900, 1), +(@OGUID+74 , 181276, 530, 3521, -392.144, 6500.78, 21.553, 2.54818, 0, 0, 0, 1, 900, 1), +(@OGUID+75 , 181276, 530, 3521, -178.382, 6021.08, 22.5117, -1.93732, 0, 0, 0, 1, 900, 1), +(@OGUID+76 , 181276, 530, 3521, 907, 5103.25, 4.49501, 0, 0, 0, 0, 0, 900, 1), +(@OGUID+77 , 181276, 530, 3521, 1188.05, 8168.69, 18.8799, -1.8326, 0, 0, 0.793353, -0.608761, 900, 1), +(@OGUID+78 , 181276, 530, 3521, -605.749, 5951.51, 23.5616, 1.37881, 0, 0, 0.636078, 0.771625, 900, 1), +(@OGUID+79 , 181276, 530, 3521, 284.933, 5611.94, 22.0877, -0.139626, 0, 0, 0.069756, -0.997564, 900, 1), +(@OGUID+80 , 181276, 530, 3521, -951.221, 5807.52, 23.667, -2.60054, 0, 0, 0.96363, -0.267238, 900, 1), +(@OGUID+81 , 181276, 530, 3521, -199.007, 8808.49, 18.9701, -0.174533, 0, 0, 0.087156, -0.996195, 900, 1), +(@OGUID+82 , 181276, 530, 3521, -105.131, 6214.17, 23.1972, -1.6057, 0, 0, 0.71934, -0.694658, 900, 1), +(@OGUID+83 , 181276, 530, 3521, 461.855, 8882.34, 24.9468, -2.47837, 0, 0, 0.945519, -0.325568, 900, 1), +(@OGUID+84 , 181276, 530, 3521, 877.305, 8450.06, 22.5711, 2.67035, 0, 0, 0.97237, 0.233445, 900, 1), +(@OGUID+85 , 181276, 530, 3521, 649.884, 6260.28, 22.6139, 2.19912, 0, 0, 0.891007, 0.453991, 900, 1), +(@OGUID+86 , 181276, 530, 3521, 46.313, 8195.37, 21.7059, 3.01942, 0, 0, 0.998135, 0.061049, 900, 1), +(@OGUID+87 , 181276, 530, 3521, -82.9322, 6096.68, 22.4811, -2.44346, 0, 0, 0.939693, -0.34202, 900, 1), +(@OGUID+88 , 181276, 530, 3521, 794.91, 5743.58, 25.9671, 1.41372, 0, 0, 0.649448, 0.760406, 900, 1), +(@OGUID+89 , 181276, 530, 3521, 285.785, 8202.79, 22.0712, 0.122173, 0, 0, 0.061049, 0.998135, 900, 1), +(@OGUID+90 , 181276, 530, 3521, -429.242, 5742.36, 22.3847, -0.139626, 0, 0, 0.069756, -0.997564, 900, 1), +(@OGUID+91 , 181276, 530, 3521, -421.48, 5542.46, 21.4294, -2.82743, 0, 0, 0.987688, -0.156434, 900, 1), +(@OGUID+92 , 181276, 530, 3521, 382.046, 5566.41, 23.3098, -1.29154, 0, 0, 0.601815, -0.798635, 900, 1), +(@OGUID+93 , 181276, 530, 3521, 52.3694, 5605.33, 22.2926, -2.60053, 0, 0, 0, 1, 900, 1), +(@OGUID+94 , 181276, 530, 3521, -892.03, 5322.57, 18.6208, -1.74533, 0, 0, 0, 1, 900, 1), +(@OGUID+95 , 181276, 530, 3521, 117.451, 7830.41, 21.6144, -1.93731, 0, 0, 0, 1, 900, 1), +(@OGUID+96 , 181276, 530, 3521, -666.829, 5724.52, 20.9599, -2.28638, 0, 0, 0, 1, 900, 1), +(@OGUID+97 , 181276, 530, 3521, 761.521, 7509.73, 22.9588, 2.44346, 0, 0, 0, 1, 900, 1), +(@OGUID+98 , 181276, 530, 3521, -91.9377, 7280.53, 22.9762, 1.79769, 0, 0, 0, 1, 900, 1), +(@OGUID+99 , 181276, 530, 3521, 986.909, 7558.14, 23.5988, -2.32129, 0, 0, 0, 1, 900, 1), +(@OGUID+100, 181276, 530, 3521, -252.617, 6198.28, 23.9543, -2.28638, 0, 0, 0, 1, 900, 1), +(@OGUID+101, 181276, 530, 3521, 243.617, 7459.68, 23.4179, -2.35619, 0, 0, 0, 1, 900, 1), +(@OGUID+102, 181276, 530, 3521, 536.559, 5434.35, -3.38172, 1.71042, 0, 0, 0, 1, 900, 1), +(@OGUID+103, 181276, 530, 3521, 1003.67, 7841.74, 23.5655, 2.40855, 0, 0, 0, 1, 900, 1), +(@OGUID+104, 181276, 530, 3521, -328.464, 6013.14, 22.2611, 1.69297, 0, 0, 0, 1, 900, 1), +(@OGUID+105, 181276, 530, 3521, -718.884, 5976.53, 24.4484, 2.75761, 0, 0, 0, 1, 900, 1), +(@OGUID+106, 181276, 530, 3521, -147.011, 7711.9, 23.4578, -0.052359, 0, 0, 0, 1, 900, 1), +(@OGUID+107, 181276, 530, 3521, 62.2853, 8524.45, 21.7028, 1.0821, 0, 0, 0, 1, 900, 1), +(@OGUID+108, 181276, 530, 3521, 1232.02, 8670.86, 19.2138, 0.261798, 0, 0, 0, 1, 900, 1), +(@OGUID+109, 181276, 530, 3521, -519.313, 6152.96, 22.3494, 1.76278, 0, 0, 0, 1, 900, 1), +(@OGUID+110, 181276, 530, 3521, 502.554, 7910.94, 22.9019, 1.8675, 0, 0, 0, 1, 900, 1), +(@OGUID+111, 181276, 530, 3521, -375.677, 6728.37, 22.3378, 2.28638, 0, 0, 0, 1, 900, 1), +(@OGUID+112, 181276, 530, 3521, 512.408, 5850.85, 23.8378, -1.32645, 0, 0, 0, 1, 900, 1), +(@OGUID+113, 181276, 530, 3521, 393.008, 5888.21, 22.3804, 2.47837, 0, 0, 0, 1, 900, 1), +(@OGUID+114, 181276, 530, 3521, -91.6731, 5906.3, 22.4416, -2.91469, 0, 0, 0, 1, 900, 1), +(@OGUID+115, 181276, 530, 3521, 565.138, 7758.17, 23.9002, 1.5708, 0, 0, 0, 1, 900, 1), +(@OGUID+116, 181276, 530, 3521, -815.432, 5197.01, 19.116, -1.44862, 0, 0, 0, 1, 900, 1), +(@OGUID+117, 181276, 530, 3521, -516.086, 5520.76, 23.8181, -0.523598, 0, 0, 0, 1, 900, 1), +(@OGUID+118, 181276, 530, 3521, -201.136, 8703.23, 20.4438, -0.506145, 0, 0, 0, 1, 900, 1), +(@OGUID+119, 181276, 530, 3521, -753.006, 5149.84, 21.7425, 2.23402, 0, 0, 0, 1, 900, 1), +(@OGUID+120, 181276, 530, 3521, 185.444, 5653.2, 23.4787, 0.418879, 0, 0, 0, 1, 900, 1), +(@OGUID+121, 181276, 530, 3521, 693.756, 8193.58, 23.2953, 1.32645, 0, 0, 0, 1, 900, 1), +(@OGUID+122, 181276, 530, 3521, -316.197, 8583.64, 20.1746, 1.36136, 0, 0, 0, 1, 900, 1), +(@OGUID+123, 181276, 530, 3521, -274.252, 7682.1, 21.2547, -0.837757, 0, 0, 0, 1, 900, 1), +(@OGUID+124, 181276, 530, 3521, 1140.83, 8699.95, 18.7153, -2.49582, 0, 0, 0, 1, 900, 1), +(@OGUID+125, 181276, 530, 3521, -987.62, 5225.53, 22.5514, 0.226892, 0, 0, 0, 1, 900, 1), +(@OGUID+126, 181276, 530, 3521, -942.452, 5153.56, 23.3949, -0.314158, 0, 0, 0, 1, 900, 1), +(@OGUID+127, 181276, 530, 3521, 627.611, 5326.46, -25.0848, 2.21657, 0, 0, 0, 0, 900, 1), +(@OGUID+128, 181276, 530, 3521, 781.369, 6494.62, 20.8706, -1.18682, 0, 0, 0, 0, 900, 1), +(@OGUID+129, 181276, 530, 3521, 349.258, 7530.48, 22.6831, 1.79769, 0, 0, 0.782608, 0.622515, 900, 1); + +SET @POOL_ENTRY := 16202; +DELETE FROM `pool_gameobject` WHERE `pool_entry` BETWEEN @POOL_ENTRY AND @POOL_ENTRY+129 AND `guid` IN (21,1801,2730,16819,16820,16824,16825,16828,16829,16831,16836,16837,16839,16840,16841,16843,16847,16848,16850,16851,17172,17177,17178,17185,17665,17779,17844,20364,20944,21553,21554,22442,23956,23957,23959,23961,23962,23963,23964,23965,23968,23969,28313,28316,30408,30417,30544,32744,32824,33835,40534,40535,40536,40537,40538,40539,40578,40583,40584,40586,40587,40588,40590,40592,40593,40594,40596,40597,40598,40599,40600,40601,40602,40603,40604,40605,40607,40608,42178,42215,42217,42218,42226,42227,42236,42237,42240,42242,42245,42246,42247,42296,42346,42430,61290,61291,61304,61305,61312,61313,61315,61316,64802,64804,64805,64806,64807,64808,64810,64846,64847,64848,64849,64850,64851,64852,85916,85917,85918,85919,85920,87045,87125,87126,87127,87128,87398,87399,100198,101758,101759); +DELETE FROM `pool_gameobject` WHERE `pool_entry` BETWEEN @POOL_ENTRY AND @POOL_ENTRY+129 AND `guid` BETWEEN @OGUID AND @OGUID+129; +INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES +(21 , @POOL_ENTRY+0 , 0, 'Zangarmarsh - Ragveil'), +(1801 , @POOL_ENTRY+1 , 0, 'Zangarmarsh - Ragveil'), +(2730 , @POOL_ENTRY+2 , 0, 'Zangarmarsh - Ragveil'), +(16819 , @POOL_ENTRY+3 , 0, 'Zangarmarsh - Ragveil'), +(16820 , @POOL_ENTRY+4 , 0, 'Zangarmarsh - Ragveil'), +(16824 , @POOL_ENTRY+5 , 0, 'Zangarmarsh - Ragveil'), +(16825 , @POOL_ENTRY+6 , 0, 'Zangarmarsh - Ragveil'), +(16828 , @POOL_ENTRY+7 , 0, 'Zangarmarsh - Ragveil'), +(16829 , @POOL_ENTRY+8 , 0, 'Zangarmarsh - Ragveil'), +(16831 , @POOL_ENTRY+9 , 0, 'Zangarmarsh - Ragveil'), +(16836 , @POOL_ENTRY+10 , 0, 'Zangarmarsh - Ragveil'), +(16837 , @POOL_ENTRY+11 , 0, 'Zangarmarsh - Ragveil'), +(16839 , @POOL_ENTRY+12 , 0, 'Zangarmarsh - Ragveil'), +(16840 , @POOL_ENTRY+13 , 0, 'Zangarmarsh - Ragveil'), +(16841 , @POOL_ENTRY+14 , 0, 'Zangarmarsh - Ragveil'), +(16843 , @POOL_ENTRY+15 , 0, 'Zangarmarsh - Ragveil'), +(16847 , @POOL_ENTRY+16 , 0, 'Zangarmarsh - Ragveil'), +(16848 , @POOL_ENTRY+17 , 0, 'Zangarmarsh - Ragveil'), +(16850 , @POOL_ENTRY+18 , 0, 'Zangarmarsh - Ragveil'), +(16851 , @POOL_ENTRY+19 , 0, 'Zangarmarsh - Ragveil'), +(17172 , @POOL_ENTRY+20 , 0, 'Zangarmarsh - Ragveil'), +(17177 , @POOL_ENTRY+21 , 0, 'Zangarmarsh - Ragveil'), +(17178 , @POOL_ENTRY+22 , 0, 'Zangarmarsh - Ragveil'), +(17185 , @POOL_ENTRY+23 , 0, 'Zangarmarsh - Ragveil'), +(17665 , @POOL_ENTRY+24 , 0, 'Zangarmarsh - Ragveil'), +(17779 , @POOL_ENTRY+25 , 0, 'Zangarmarsh - Ragveil'), +(17844 , @POOL_ENTRY+26 , 0, 'Zangarmarsh - Ragveil'), +(20364 , @POOL_ENTRY+27 , 0, 'Zangarmarsh - Ragveil'), +(20944 , @POOL_ENTRY+28 , 0, 'Zangarmarsh - Ragveil'), +(21553 , @POOL_ENTRY+29 , 0, 'Zangarmarsh - Ragveil'), +(21554 , @POOL_ENTRY+30 , 0, 'Zangarmarsh - Ragveil'), +(23956 , @POOL_ENTRY+31 , 0, 'Zangarmarsh - Ragveil'), +(23957 , @POOL_ENTRY+32 , 0, 'Zangarmarsh - Ragveil'), +(23959 , @POOL_ENTRY+33 , 0, 'Zangarmarsh - Ragveil'), +(23961 , @POOL_ENTRY+34 , 0, 'Zangarmarsh - Ragveil'), +(23962 , @POOL_ENTRY+35 , 0, 'Zangarmarsh - Ragveil'), +(23963 , @POOL_ENTRY+36 , 0, 'Zangarmarsh - Ragveil'), +(23964 , @POOL_ENTRY+37 , 0, 'Zangarmarsh - Ragveil'), +(23965 , @POOL_ENTRY+38 , 0, 'Zangarmarsh - Ragveil'), +(23968 , @POOL_ENTRY+39 , 0, 'Zangarmarsh - Ragveil'), +(23969 , @POOL_ENTRY+40 , 0, 'Zangarmarsh - Ragveil'), +(28313 , @POOL_ENTRY+41 , 0, 'Zangarmarsh - Ragveil'), +(28316 , @POOL_ENTRY+42 , 0, 'Zangarmarsh - Ragveil'), +(30408 , @POOL_ENTRY+43 , 0, 'Zangarmarsh - Ragveil'), +(30417 , @POOL_ENTRY+44 , 0, 'Zangarmarsh - Ragveil'), +(30544 , @POOL_ENTRY+45 , 0, 'Zangarmarsh - Ragveil'), +(32744 , @POOL_ENTRY+46 , 0, 'Zangarmarsh - Ragveil'), +(32824 , @POOL_ENTRY+47 , 0, 'Zangarmarsh - Ragveil'), +(33835 , @POOL_ENTRY+48 , 0, 'Zangarmarsh - Ragveil'), +(40534 , @POOL_ENTRY+49 , 0, 'Zangarmarsh - Ragveil'), +(40535 , @POOL_ENTRY+50 , 0, 'Zangarmarsh - Ragveil'), +(40536 , @POOL_ENTRY+51 , 0, 'Zangarmarsh - Ragveil'), +(40537 , @POOL_ENTRY+52 , 0, 'Zangarmarsh - Ragveil'), +(40538 , @POOL_ENTRY+53 , 0, 'Zangarmarsh - Ragveil'), +(40539 , @POOL_ENTRY+54 , 0, 'Zangarmarsh - Ragveil'), +(40578 , @POOL_ENTRY+55 , 0, 'Zangarmarsh - Ragveil'), +(40583 , @POOL_ENTRY+56 , 0, 'Zangarmarsh - Ragveil'), +(40584 , @POOL_ENTRY+57 , 0, 'Zangarmarsh - Ragveil'), +(40586 , @POOL_ENTRY+58 , 0, 'Zangarmarsh - Ragveil'), +(40587 , @POOL_ENTRY+59 , 0, 'Zangarmarsh - Ragveil'), +(40588 , @POOL_ENTRY+60 , 0, 'Zangarmarsh - Ragveil'), +(40590 , @POOL_ENTRY+61 , 0, 'Zangarmarsh - Ragveil'), +(40592 , @POOL_ENTRY+62 , 0, 'Zangarmarsh - Ragveil'), +(40593 , @POOL_ENTRY+63 , 0, 'Zangarmarsh - Ragveil'), +(40594 , @POOL_ENTRY+64 , 0, 'Zangarmarsh - Ragveil'), +(40596 , @POOL_ENTRY+65 , 0, 'Zangarmarsh - Ragveil'), +(40597 , @POOL_ENTRY+66 , 0, 'Zangarmarsh - Ragveil'), +(40598 , @POOL_ENTRY+67 , 0, 'Zangarmarsh - Ragveil'), +(40599 , @POOL_ENTRY+68 , 0, 'Zangarmarsh - Ragveil'), +(40600 , @POOL_ENTRY+69 , 0, 'Zangarmarsh - Ragveil'), +(40601 , @POOL_ENTRY+70 , 0, 'Zangarmarsh - Ragveil'), +(40602 , @POOL_ENTRY+71 , 0, 'Zangarmarsh - Ragveil'), +(40603 , @POOL_ENTRY+72 , 0, 'Zangarmarsh - Ragveil'), +(40604 , @POOL_ENTRY+73 , 0, 'Zangarmarsh - Ragveil'), +(40605 , @POOL_ENTRY+74 , 0, 'Zangarmarsh - Ragveil'), +(40607 , @POOL_ENTRY+75 , 0, 'Zangarmarsh - Ragveil'), +(40608 , @POOL_ENTRY+76 , 0, 'Zangarmarsh - Ragveil'), +(42178 , @POOL_ENTRY+77 , 0, 'Zangarmarsh - Ragveil'), +(42215 , @POOL_ENTRY+78 , 0, 'Zangarmarsh - Ragveil'), +(42217 , @POOL_ENTRY+79 , 0, 'Zangarmarsh - Ragveil'), +(42218 , @POOL_ENTRY+80 , 0, 'Zangarmarsh - Ragveil'), +(42226 , @POOL_ENTRY+81 , 0, 'Zangarmarsh - Ragveil'), +(42227 , @POOL_ENTRY+82 , 0, 'Zangarmarsh - Ragveil'), +(42236 , @POOL_ENTRY+83 , 0, 'Zangarmarsh - Ragveil'), +(42237 , @POOL_ENTRY+84 , 0, 'Zangarmarsh - Ragveil'), +(42240 , @POOL_ENTRY+85 , 0, 'Zangarmarsh - Ragveil'), +(42242 , @POOL_ENTRY+86 , 0, 'Zangarmarsh - Ragveil'), +(42245 , @POOL_ENTRY+87 , 0, 'Zangarmarsh - Ragveil'), +(42246 , @POOL_ENTRY+88 , 0, 'Zangarmarsh - Ragveil'), +(42247 , @POOL_ENTRY+89 , 0, 'Zangarmarsh - Ragveil'), +(42296 , @POOL_ENTRY+90 , 0, 'Zangarmarsh - Ragveil'), +(42346 , @POOL_ENTRY+91 , 0, 'Zangarmarsh - Ragveil'), +(42430 , @POOL_ENTRY+92 , 0, 'Zangarmarsh - Ragveil'), +(61290 , @POOL_ENTRY+93 , 0, 'Zangarmarsh - Ragveil'), +(61291 , @POOL_ENTRY+94 , 0, 'Zangarmarsh - Ragveil'), +(61304 , @POOL_ENTRY+95 , 0, 'Zangarmarsh - Ragveil'), +(61305 , @POOL_ENTRY+96 , 0, 'Zangarmarsh - Ragveil'), +(61312 , @POOL_ENTRY+97 , 0, 'Zangarmarsh - Ragveil'), +(61313 , @POOL_ENTRY+98 , 0, 'Zangarmarsh - Ragveil'), +(61315 , @POOL_ENTRY+99 , 0, 'Zangarmarsh - Ragveil'), +(61316 , @POOL_ENTRY+100, 0, 'Zangarmarsh - Ragveil'), +(64802 , @POOL_ENTRY+101, 0, 'Zangarmarsh - Ragveil'), +(64804 , @POOL_ENTRY+102, 0, 'Zangarmarsh - Ragveil'), +(64805 , @POOL_ENTRY+103, 0, 'Zangarmarsh - Ragveil'), +(64806 , @POOL_ENTRY+104, 0, 'Zangarmarsh - Ragveil'), +(64807 , @POOL_ENTRY+105, 0, 'Zangarmarsh - Ragveil'), +(64808 , @POOL_ENTRY+106, 0, 'Zangarmarsh - Ragveil'), +(64810 , @POOL_ENTRY+107, 0, 'Zangarmarsh - Ragveil'), +(64846 , @POOL_ENTRY+108, 0, 'Zangarmarsh - Ragveil'), +(64847 , @POOL_ENTRY+109, 0, 'Zangarmarsh - Ragveil'), +(64848 , @POOL_ENTRY+110, 0, 'Zangarmarsh - Ragveil'), +(64849 , @POOL_ENTRY+111, 0, 'Zangarmarsh - Ragveil'), +(64850 , @POOL_ENTRY+112, 0, 'Zangarmarsh - Ragveil'), +(64851 , @POOL_ENTRY+113, 0, 'Zangarmarsh - Ragveil'), +(64852 , @POOL_ENTRY+114, 0, 'Zangarmarsh - Ragveil'), +(85916 , @POOL_ENTRY+115, 0, 'Zangarmarsh - Ragveil'), +(85917 , @POOL_ENTRY+116, 0, 'Zangarmarsh - Ragveil'), +(85918 , @POOL_ENTRY+117, 0, 'Zangarmarsh - Ragveil'), +(85919 , @POOL_ENTRY+118, 0, 'Zangarmarsh - Ragveil'), +(85920 , @POOL_ENTRY+119, 0, 'Zangarmarsh - Ragveil'), +(87045 , @POOL_ENTRY+120, 0, 'Zangarmarsh - Ragveil'), +(87125 , @POOL_ENTRY+121, 0, 'Zangarmarsh - Ragveil'), +(87126 , @POOL_ENTRY+122, 0, 'Zangarmarsh - Ragveil'), +(87127 , @POOL_ENTRY+123, 0, 'Zangarmarsh - Ragveil'), +(87128 , @POOL_ENTRY+124, 0, 'Zangarmarsh - Ragveil'), +(87398 , @POOL_ENTRY+125, 0, 'Zangarmarsh - Ragveil'), +(87399 , @POOL_ENTRY+126, 0, 'Zangarmarsh - Ragveil'), +(100198, @POOL_ENTRY+127, 0, 'Zangarmarsh - Ragveil'), +(101758, @POOL_ENTRY+128, 0, 'Zangarmarsh - Ragveil'), +(101759, @POOL_ENTRY+129, 0, 'Zangarmarsh - Ragveil'), + +(@OGUID+0 , @POOL_ENTRY+0 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+1 , @POOL_ENTRY+1 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+2 , @POOL_ENTRY+2 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+3 , @POOL_ENTRY+3 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+4 , @POOL_ENTRY+4 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+5 , @POOL_ENTRY+5 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+6 , @POOL_ENTRY+6 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+7 , @POOL_ENTRY+7 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+8 , @POOL_ENTRY+8 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+9 , @POOL_ENTRY+9 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+10 , @POOL_ENTRY+10 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+11 , @POOL_ENTRY+11 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+12 , @POOL_ENTRY+12 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+13 , @POOL_ENTRY+13 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+14 , @POOL_ENTRY+14 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+15 , @POOL_ENTRY+15 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+16 , @POOL_ENTRY+16 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+17 , @POOL_ENTRY+17 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+18 , @POOL_ENTRY+18 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+19 , @POOL_ENTRY+19 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+20 , @POOL_ENTRY+20 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+21 , @POOL_ENTRY+21 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+22 , @POOL_ENTRY+22 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+23 , @POOL_ENTRY+23 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+24 , @POOL_ENTRY+24 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+25 , @POOL_ENTRY+25 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+26 , @POOL_ENTRY+26 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+27 , @POOL_ENTRY+27 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+28 , @POOL_ENTRY+28 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+29 , @POOL_ENTRY+29 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+30 , @POOL_ENTRY+30 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+31 , @POOL_ENTRY+31 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+32 , @POOL_ENTRY+32 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+33 , @POOL_ENTRY+33 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+34 , @POOL_ENTRY+34 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+35 , @POOL_ENTRY+35 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+36 , @POOL_ENTRY+36 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+37 , @POOL_ENTRY+37 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+38 , @POOL_ENTRY+38 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+39 , @POOL_ENTRY+39 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+40 , @POOL_ENTRY+40 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+41 , @POOL_ENTRY+41 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+42 , @POOL_ENTRY+42 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+43 , @POOL_ENTRY+43 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+44 , @POOL_ENTRY+44 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+45 , @POOL_ENTRY+45 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+46 , @POOL_ENTRY+46 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+47 , @POOL_ENTRY+47 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+48 , @POOL_ENTRY+48 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+49 , @POOL_ENTRY+49 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+50 , @POOL_ENTRY+50 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+51 , @POOL_ENTRY+51 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+52 , @POOL_ENTRY+52 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+53 , @POOL_ENTRY+53 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+54 , @POOL_ENTRY+54 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+55 , @POOL_ENTRY+55 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+56 , @POOL_ENTRY+56 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+57 , @POOL_ENTRY+57 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+58 , @POOL_ENTRY+58 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+59 , @POOL_ENTRY+59 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+60 , @POOL_ENTRY+60 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+61 , @POOL_ENTRY+61 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+62 , @POOL_ENTRY+62 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+63 , @POOL_ENTRY+63 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+64 , @POOL_ENTRY+64 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+65 , @POOL_ENTRY+65 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+66 , @POOL_ENTRY+66 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+67 , @POOL_ENTRY+67 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+68 , @POOL_ENTRY+68 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+69 , @POOL_ENTRY+69 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+70 , @POOL_ENTRY+70 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+71 , @POOL_ENTRY+71 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+72 , @POOL_ENTRY+72 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+73 , @POOL_ENTRY+73 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+74 , @POOL_ENTRY+74 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+75 , @POOL_ENTRY+75 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+76 , @POOL_ENTRY+76 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+77 , @POOL_ENTRY+77 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+78 , @POOL_ENTRY+78 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+79 , @POOL_ENTRY+79 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+80 , @POOL_ENTRY+80 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+81 , @POOL_ENTRY+81 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+82 , @POOL_ENTRY+82 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+83 , @POOL_ENTRY+83 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+84 , @POOL_ENTRY+84 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+85 , @POOL_ENTRY+85 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+86 , @POOL_ENTRY+86 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+87 , @POOL_ENTRY+87 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+88 , @POOL_ENTRY+88 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+89 , @POOL_ENTRY+89 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+90 , @POOL_ENTRY+90 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+91 , @POOL_ENTRY+91 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+92 , @POOL_ENTRY+92 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+93 , @POOL_ENTRY+93 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+94 , @POOL_ENTRY+94 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+95 , @POOL_ENTRY+95 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+96 , @POOL_ENTRY+96 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+97 , @POOL_ENTRY+97 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+98 , @POOL_ENTRY+98 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+99 , @POOL_ENTRY+99 , 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+100, @POOL_ENTRY+100, 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+101, @POOL_ENTRY+101, 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+102, @POOL_ENTRY+102, 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+103, @POOL_ENTRY+103, 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+104, @POOL_ENTRY+104, 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+105, @POOL_ENTRY+105, 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+106, @POOL_ENTRY+106, 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+107, @POOL_ENTRY+107, 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+108, @POOL_ENTRY+108, 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+109, @POOL_ENTRY+109, 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+110, @POOL_ENTRY+110, 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+111, @POOL_ENTRY+111, 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+112, @POOL_ENTRY+112, 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+113, @POOL_ENTRY+113, 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+114, @POOL_ENTRY+114, 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+115, @POOL_ENTRY+115, 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+116, @POOL_ENTRY+116, 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+117, @POOL_ENTRY+117, 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+118, @POOL_ENTRY+118, 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+119, @POOL_ENTRY+119, 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+120, @POOL_ENTRY+120, 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+121, @POOL_ENTRY+121, 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+122, @POOL_ENTRY+122, 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+123, @POOL_ENTRY+123, 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+124, @POOL_ENTRY+124, 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+125, @POOL_ENTRY+125, 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+126, @POOL_ENTRY+126, 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+127, @POOL_ENTRY+127, 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+128, @POOL_ENTRY+128, 10, 'Zangarmarsh - Flame Cap'), +(@OGUID+129, @POOL_ENTRY+129, 10, 'Zangarmarsh - Flame Cap'); + +DELETE FROM `pool_template` WHERE `entry` BETWEEN @POOL_ENTRY AND @POOL_ENTRY+129 AND `description` = 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'; +INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES +(@POOL_ENTRY+0 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+1 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+2 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+3 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+4 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+5 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+6 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+7 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+8 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+9 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+10 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+11 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+12 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+13 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+14 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+15 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+16 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+17 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+18 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+19 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+20 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+21 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+22 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+23 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+24 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+25 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+26 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+27 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+28 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+29 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+30 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+31 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+32 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+33 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+34 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+35 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+36 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+37 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+38 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+39 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+40 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+41 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+42 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+43 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+44 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+45 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+46 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+47 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+48 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+49 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+50 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+51 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+52 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+53 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+54 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+55 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+56 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+57 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+58 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+59 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+60 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+61 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+62 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+63 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+64 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+65 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+66 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+67 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+68 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+69 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+70 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+71 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+72 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+73 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+74 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+75 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+76 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+77 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+78 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+79 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+80 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+81 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+82 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+83 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+84 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+85 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+86 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+87 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+88 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+89 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+90 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+91 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+92 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+93 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+94 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+95 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+96 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+97 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+98 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+99 , 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+100, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+101, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+102, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+103, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+104, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+105, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+106, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+107, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+108, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+109, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+110, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+111, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+112, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+113, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+114, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+115, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+116, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+117, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+118, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+119, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+120, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+121, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+122, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+123, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+124, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+125, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+126, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+127, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+128, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'), +(@POOL_ENTRY+129, 1, 'Zangarmarsh - Herb Pool - Ragveil / Flame Cap'); + +DELETE FROM `pool_pool` WHERE `pool_id` BETWEEN @POOL_ENTRY AND @POOL_ENTRY+129 AND `description` LIKE '%Zangarmarsh%'; +INSERT INTO `pool_pool` (`pool_id`, `mother_pool`, `chance`, `description`) VALUES +-- East +(16204, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16206, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16207, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16208, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16213, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16214, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16215, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16216, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16217, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16220, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16222, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16224, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16229, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16230, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16233, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16234, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16242, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16243, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16244, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16245, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16246, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16247, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16252, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16253, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16254, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16256, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16258, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16259, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16260, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16261, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16262, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16263, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16264, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16265, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16269, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16270, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16271, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16272, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16273, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16274, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16275, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16276, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16277, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16278, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16280, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16281, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16282, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16284, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16287, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16289, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16290, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16292, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16293, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16294, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16295, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16296, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16298, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16302, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16304, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16306, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16307, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16311, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16313, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16314, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16315, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16316, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16318, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16319, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16321, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16322, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16327, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16328, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16329, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(16330, 8085, 0, 'Zangarmarsh - Ragveil / Flame Cap - East'), +-- West +(16202, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16203, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16205, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16209, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16210, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16211, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16212, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16218, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16219, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16221, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16223, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16225, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16226, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16227, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16228, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16231, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16232, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16235, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16236, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16237, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16238, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16239, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16240, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16241, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16248, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16249, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16250, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16251, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16255, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16257, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16266, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16267, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16268, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16279, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16283, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16285, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16286, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16288, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16291, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16297, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16299, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16300, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16301, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16303, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16305, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16308, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16309, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16310, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16312, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16317, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16320, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16323, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16324, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16325, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16326, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'), +(16331, 8086, 0, 'Zangarmarsh - Ragveil / Flame Cap - West'); + +DELETE FROM `pool_template` WHERE `entry` IN (8085, 8086); +INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES +(8085, 18, 'Zangarmarsh - Ragveil / Flame Cap - East'), +(8086, 18, 'Zangarmarsh - Ragveil / Flame Cap - West'); diff --git a/data/sql/updates/db_world/2024_07_26_00.sql b/data/sql/updates/db_world/2024_07_26_00.sql new file mode 100644 index 000000000..05c5b4b1c --- /dev/null +++ b/data/sql/updates/db_world/2024_07_26_00.sql @@ -0,0 +1,10 @@ +-- DB update 2024_07_25_00 -> 2024_07_26_00 +-- +DELETE FROM `command` WHERE `name`='aura stack'; +INSERT INTO `command` VALUES ('aura stack', 2, 'Syntax: .aurastack #spellid #stacks\r\n\r\nModify #stacks of an already applied #spellid to the selected Unit.'); + +DELETE FROM `acore_string` WHERE `entry` IN (373,374,375); +INSERT INTO `acore_string` (`entry`, `content_default`) VALUES +(373, 'Target unit does not have aura {}!'), +(374, 'No stack amount specified!'), +(375, 'Spell {} cannot have stacks!'); diff --git a/data/sql/updates/db_world/2024_07_27_00.sql b/data/sql/updates/db_world/2024_07_27_00.sql new file mode 100644 index 000000000..24e1f3b68 --- /dev/null +++ b/data/sql/updates/db_world/2024_07_27_00.sql @@ -0,0 +1,10 @@ +-- DB update 2024_07_26_00 -> 2024_07_27_00 +-- +DELETE FROM `waypoints` where `entry` = 2195800; + +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 21958; + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 21958) 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 +(21958, 0, 0, 0, 75, 0, 100, 0, 0, 21212, 2, 1000, 0, 11, 38044, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Enchanted Elemental - On Distance to Vashj - Cast Spell Surge'), +(21958, 0, 1, 0, 4, 0, 100, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Enchanted Elemental - On Aggro - Set In Combat With Zone'); diff --git a/data/sql/updates/db_world/2024_07_27_01.sql b/data/sql/updates/db_world/2024_07_27_01.sql new file mode 100644 index 000000000..aa91427ae --- /dev/null +++ b/data/sql/updates/db_world/2024_07_27_01.sql @@ -0,0 +1,13 @@ +-- DB update 2024_07_27_00 -> 2024_07_27_01 +-- +DELETE FROM `creature_text` WHERE (`CreatureID` = 22898); +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(22898, 0, 0, 'Supremus acquires a new target!', 41, 0, 100, 0, 0, 0, 21959, 0, 'Supremus'), +(22898, 1, 0, 'Supremus punches the ground in anger!', 41, 0, 100, 53, 0, 0, 21019, 0, 'Supremus'), +(22898, 2, 0, 'The ground begins to crack open!', 41, 0, 100, 0, 0, 0, 21018, 0, 'Supremus'), +(22898, 3, 0, '%s goes into a berserker rage!', 16, 0, 100, 0, 0, 0, 4428, 0, 'Supremus'); + +UPDATE `creature_model_info` SET `CombatReach` = 40 WHERE `DisplayID` = 21145; + +UPDATE `creature_template` SET `AIName` = '', `ScriptName` = 'npc_supremus_punch_invisible_stalker', `speed_run` = 1.28571 WHERE (`entry` = 23095); +DELETE FROM `creature_template_addon` WHERE (`entry` = 23095); diff --git a/data/sql/updates/db_world/2024_07_27_02.sql b/data/sql/updates/db_world/2024_07_27_02.sql new file mode 100644 index 000000000..b078e017f --- /dev/null +++ b/data/sql/updates/db_world/2024_07_27_02.sql @@ -0,0 +1,684 @@ +-- DB update 2024_07_27_01 -> 2024_07_27_02 +-- +DELETE FROM `waypoints` WHERE `entry` IN (23340, 23342, 23344, 23345, 23346, 23348); +DELETE FROM `waypoint_data` WHERE `id` IN (233401, 233421, 233441, 233451, 233461, 233481); +INSERT INTO `waypoint_data` (`id`, `point`, `move_type`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(233401, 1, 0, -5100.37, 646.988, 86.7599, NULL, 0), +(233401, 2, 0, -5098.65, 661.831, 87.0884, NULL, 0), +(233401, 3, 0, -5092.22, 664.335, 87.7356, NULL, 0), +(233401, 4, 2, -5081.35, 664.37, 88.9893, NULL, 1000), +(233401, 5, 2, -5070.53, 664.555, 92.4909, NULL, 0), +(233401, 6, 2, -5058.81, 664.489, 96.6298, NULL, 0), +(233401, 7, 2, -5046.15, 664.428, 97.7964, NULL, 1), +(233401, 8, 2, -5021, 664.601, 115.265, NULL, 0), +(233401, 9, 2, -4996.03, 664.668, 115.265, NULL, 1), +(233401, 10, 2, -4957.75, 673.371, 115.265, NULL, 0), +(233401, 11, 2, -4922.07, 686.952, 115.265, NULL, 0), +(233401, 12, 2, -4892.22, 711.123, 115.265, NULL, 0), +(233401, 13, 2, -4899.89, 760.27, 115.265, NULL, 0), +(233401, 14, 2, -4938.35, 778.532, 115.265, NULL, 0), +(233401, 15, 2, -4971.55, 797.56, 115.265, NULL, 0), +(233401, 16, 2, -5006.85, 803.201, 115.265, NULL, 0), +(233401, 17, 2, -5052.23, 803.834, 115.265, NULL, 0), +(233401, 18, 2, -5084.65, 784.252, 115.265, NULL, 0), +(233401, 19, 2, -5112.79, 768.513, 115.265, NULL, 0), +(233401, 20, 2, -5131.79, 755.461, 115.265, NULL, 0), +(233401, 21, 2, -5156.1, 731.316, 115.265, NULL, 0), +(233401, 22, 2, -5151.25, 703.853, 115.265, NULL, 0), +(233401, 23, 2, -5132.96, 672.912, 115.265, NULL, 0), +(233401, 24, 2, -5098.93, 650.756, 115.265, NULL, 0), +(233401, 25, 2, -5062.08, 634.938, 135.515, NULL, 0), +(233401, 26, 2, -5027.88, 621.561, 129.182, NULL, 0), +(233401, 27, 2, -5011.85, 622.003, 127.895, NULL, 0), +(233401, 28, 2, -4977.22, 627.521, 123.895, NULL, 0), +(233401, 29, 2, -4955.77, 632.843, 106.7, NULL, 0), +(233401, 30, 2, -4959.1, 655.799, 100.423, NULL, 0), +(233401, 31, 2, -4990.86, 667.564, 100.339, NULL, 0), +(233401, 32, 2, -5016.54, 664.335, 95.7095, NULL, 0), +(233401, 33, 2, -5030.56, 664.409, 94.8762, NULL, 0), +(233401, 34, 2, -5053.87, 664.251, 91.2095, NULL, 0), +(233401, 35, 2, -5076.17, 664.152, 89.7373, NULL, 1000), +(233401, 36, 0, -5100.44, 648.419, 86.7599, NULL, 0), +(233401, 37, 0, -5088.56, 640.836, 86.5771, NULL, 0), +(233401, 38, 0, -5088.56, 640.836, 86.5771, 1.48353, 1000), +(233421, 1, 0, -5094.4, 632.768, 86.1046, NULL, 0), +(233421, 2, 0, -5099.95, 639.856, 86.3643, NULL, 0), +(233421, 3, 0, -5098.76, 659.273, 87.076, NULL, 0), +(233421, 4, 0, -5089.76, 664.925, 88.0305, NULL, 0), +(233421, 5, 2, -5077.38, 664.52, 89.2393, NULL, 1000), +(233421, 6, 2, -5070.05, 664.137, 90.7223, NULL, 0), +(233421, 7, 2, -5058.12, 664.464, 94.0557, NULL, 1), +(233421, 8, 2, -5053.48, 664.35, 98.5706, NULL, 0), +(233421, 9, 2, -5038.57, 663.922, 98.5706, NULL, 1), +(233421, 10, 2, -5019.74, 677.138, 105.154, NULL, 0), +(233421, 11, 2, -5005.49, 696.076, 105.154, NULL, 0), +(233421, 12, 2, -5003.47, 736.425, 109.74, NULL, 0), +(233421, 13, 2, -5014.97, 758.279, 138.269, NULL, 0), +(233421, 14, 2, -5049.92, 776.35, 154.991, NULL, 0), +(233421, 15, 2, -5088.13, 764.156, 147.296, NULL, 0), +(233421, 16, 2, -5109.33, 751.045, 147.296, NULL, 0), +(233421, 17, 2, -5139.67, 725.494, 147.296, NULL, 0), +(233421, 18, 2, -5155.8, 699.152, 135.435, NULL, 0), +(233421, 19, 2, -5168.65, 673.146, 135.435, NULL, 0), +(233421, 20, 2, -5170.58, 645.918, 135.435, NULL, 0), +(233421, 21, 2, -5169.89, 609.869, 135.435, NULL, 0), +(233421, 22, 2, -5166.88, 572.151, 135.435, NULL, 0), +(233421, 23, 2, -5166.38, 546.221, 135.435, NULL, 0), +(233421, 24, 2, -5149.06, 514.885, 135.435, NULL, 0), +(233421, 25, 2, -5117.41, 493.835, 135.435, NULL, 0), +(233421, 26, 2, -5071.81, 485.48, 135.435, NULL, 0), +(233421, 27, 2, -5049.22, 487.59, 135.435, NULL, 0), +(233421, 28, 2, -5016.19, 497.714, 135.435, NULL, 0), +(233421, 29, 2, -4997.89, 513.475, 135.435, NULL, 0), +(233421, 30, 2, -4969.01, 530.662, 135.435, NULL, 0), +(233421, 31, 2, -4928.23, 535.105, 135.435, NULL, 0), +(233421, 32, 2, -4888.21, 519.617, 135.435, NULL, 0), +(233421, 33, 2, -4861.23, 501.207, 135.435, NULL, 0), +(233421, 34, 2, -4851.03, 486.339, 135.435, NULL, 0), +(233421, 35, 2, -4846.36, 450.828, 133.685, NULL, 0), +(233421, 36, 2, -4859.99, 421.521, 120.241, NULL, 0), +(233421, 37, 2, -4884.15, 398.159, 119.435, NULL, 0), +(233421, 38, 2, -4918.61, 387.173, 120.047, NULL, 0), +(233421, 39, 2, -4957.88, 395.052, 120.047, NULL, 0), +(233421, 40, 2, -4977.37, 423.309, 107.408, NULL, 0), +(233421, 41, 2, -4999.41, 454.014, 107.408, NULL, 0), +(233421, 42, 2, -5015.12, 480.192, 107.408, NULL, 0), +(233421, 43, 2, -4997.81, 519.803, 107.408, NULL, 0), +(233421, 44, 2, -4969.67, 535.146, 122.963, NULL, 0), +(233421, 45, 2, -4927.67, 545.658, 122.963, NULL, 0), +(233421, 46, 2, -4910.17, 580.597, 120.519, NULL, 0), +(233421, 47, 2, -4923.05, 609.633, 116.324, NULL, 0), +(233421, 48, 2, -4939.96, 638.041, 111.491, NULL, 0), +(233421, 49, 2, -4966.52, 654.275, 107.38, NULL, 0), +(233421, 50, 2, -4993.77, 664.459, 106.213, NULL, 0), +(233421, 51, 2, -5009.62, 664.365, 100.21, NULL, 0), +(233421, 52, 2, -5070.05, 664.137, 90.7223, NULL, 0), +(233421, 53, 2, -5077.38, 664.52, 89.2393, NULL, 1000), +(233421, 54, 0, -5089.76, 664.925, 88.0305, NULL, 0), +(233421, 55, 0, -5098.76, 659.273, 87.076, NULL, 0), +(233421, 56, 0, -5100.57, 656.389, 87.0099, NULL, 0), +(233421, 57, 0, -5100.55, 640.057, 86.3792, NULL, 0), +(233421, 58, 0, -5082.93, 631.039, 86.1046, NULL, 0), +(233421, 59, 0, -5081.62, 640.932, 86.5885, NULL, 0), +(233421, 60, 0, -5081.62, 640.932, 86.5885, 1.5708, 1000), +(233441, 1, 0, -5084.94, 633.847, 86.2393, NULL, 0), +(233441, 2, 0, -5098.98, 634.78, 86.1005, NULL, 0), +(233441, 3, 0, -5101.35, 648.966, 86.7599, NULL, 0), +(233441, 4, 0, -5098.78, 663.636, 86.9992, NULL, 0), +(233441, 5, 0, -5079.28, 664.713, 89.1636, NULL, 0), +(233441, 6, 2, -5070.44, 664.366, 89.4647, NULL, 1000), +(233441, 7, 2, -5058.83, 663.925, 92.7363, NULL, 0), +(233441, 8, 2, -5037.87, 660.034, 100.014, NULL, 0), +(233441, 9, 2, -5024.24, 636.49, 112.425, NULL, 1), +(233441, 10, 2, -5005.37, 618.802, 128.807, NULL, 0), +(233441, 11, 2, -4966.56, 600.253, 129.057, NULL, 0), +(233441, 12, 2, -4965.98, 571.086, 129.057, NULL, 1), +(233441, 13, 2, -4991.4, 536.436, 129.057, NULL, 0), +(233441, 14, 2, -5020.62, 520.326, 129.057, NULL, 0), +(233441, 15, 2, -5055.5, 518.844, 129.057, NULL, 0), +(233441, 16, 2, -5102.8, 514.149, 129.057, NULL, 0), +(233441, 17, 2, -5149.53, 501.968, 124.223, NULL, 0), +(233441, 18, 2, -5181.65, 487.443, 124.223, NULL, 0), +(233441, 19, 2, -5203.6, 463.616, 124.223, NULL, 0), +(233441, 20, 2, -5222.08, 438.511, 124.223, NULL, 0), +(233441, 21, 2, -5233.96, 425.771, 124.223, NULL, 0), +(233441, 22, 2, -5246.47, 408.212, 114.39, NULL, 0), +(233441, 23, 2, -5263.94, 380.577, 82.779, NULL, 0), +(233441, 24, 2, -5281.14, 345.57, 75.1401, NULL, 0), +(233441, 25, 2, -5284.63, 312.442, 75.1401, NULL, 0), +(233441, 26, 2, -5263, 275.308, 75.1401, NULL, 0), +(233441, 27, 2, -5245.18, 265.079, 73.2512, NULL, 0), +(233441, 28, 2, -5215.76, 265.471, 73.2512, NULL, 0), +(233441, 29, 2, -5205.02, 235.15, 76.7235, NULL, 0), +(233441, 30, 2, -5209.55, 197.783, 76.7235, NULL, 0), +(233441, 31, 2, -5208.26, 150.234, 76.7235, NULL, 0), +(233441, 32, 2, -5191.55, 109.156, 93.6679, NULL, 0), +(233441, 33, 2, -5182.56, 85.7365, 107.474, NULL, 0), +(233441, 34, 2, -5168.65, 57.2013, 127.946, NULL, 0), +(233441, 35, 2, -5135.73, 46.9901, 139.529, NULL, 0), +(233441, 36, 2, -5105.78, 50.7013, 139.529, NULL, 0), +(233441, 37, 2, -5071.62, 45.8154, 139.529, NULL, 0), +(233441, 38, 2, -5034.69, 35.1466, 139.529, NULL, 0), +(233441, 39, 2, -5005.95, 1.38531, 139.529, NULL, 0), +(233441, 40, 2, -5000.31, -36.848, 139.529, NULL, 0), +(233441, 41, 2, -5008.46, -64.052, 139.529, NULL, 0), +(233441, 42, 2, -5035.05, -104.214, 139.529, NULL, 0), +(233441, 43, 2, -5072.07, -126.925, 139.529, NULL, 0), +(233441, 44, 2, -5107.34, -132.044, 139.529, NULL, 0), +(233441, 45, 2, -5147.94, -120.151, 139.529, NULL, 0), +(233441, 46, 2, -5172.3, -102.554, 139.529, NULL, 0), +(233441, 47, 2, -5189.56, -64.9996, 139.529, NULL, 0), +(233441, 48, 2, -5192.56, -46.8847, 139.529, NULL, 0), +(233441, 49, 2, -5207.22, -7.99826, 139.529, NULL, 0), +(233441, 50, 2, -5208.9, 16.188, 139.529, NULL, 0), +(233441, 51, 2, -5210, 47.6719, 139.529, NULL, 0), +(233441, 52, 2, -5229.47, 71.0223, 139.529, NULL, 0), +(233441, 53, 2, -5259.86, 84.1998, 139.529, NULL, 0), +(233441, 54, 2, -5280.49, 98.1187, 139.529, NULL, 0), +(233441, 55, 2, -5304.44, 119.29, 128.473, NULL, 0), +(233441, 56, 2, -5313.48, 160.796, 102.807, NULL, 0), +(233441, 57, 2, -5320.65, 207.804, 102.807, NULL, 0), +(233441, 58, 2, -5315.59, 246.939, 102.807, NULL, 0), +(233441, 59, 2, -5282.78, 257.402, 102.807, NULL, 0), +(233441, 60, 2, -5234.21, 264.51, 91.1957, NULL, 0), +(233441, 61, 2, -5196.72, 279.294, 75.7234, NULL, 0), +(233441, 62, 2, -5181.7, 301.347, 77.8346, NULL, 0), +(233441, 63, 2, -5179.59, 316.744, 77.8346, NULL, 0), +(233441, 64, 2, -5177.29, 343.483, 77.8346, NULL, 0), +(233441, 65, 2, -5198.28, 388.512, 82.3068, NULL, 0), +(233441, 66, 2, -5190.08, 423.921, 103.723, NULL, 0), +(233441, 67, 2, -5161.91, 456.27, 103.723, NULL, 0), +(233441, 68, 2, -5143.63, 481.956, 103.723, NULL, 0), +(233441, 69, 2, -5108.33, 497.817, 103.723, NULL, 0), +(233441, 70, 2, -5065.66, 502.812, 103.723, NULL, 0), +(233441, 71, 2, -5026.66, 514.378, 103.723, NULL, 0), +(233441, 72, 2, -4986.5, 536.506, 103.723, NULL, 0), +(233441, 73, 2, -4954.44, 567.902, 103.723, NULL, 0), +(233441, 74, 2, -4956.34, 597.605, 103.723, NULL, 0), +(233441, 75, 2, -4974.39, 635.569, 103.723, NULL, 0), +(233441, 76, 2, -4996.33, 664.304, 96.3901, NULL, 0), +(233441, 77, 2, -5021.77, 663.95, 91.9039, NULL, 0), +(233441, 78, 2, -5041.21, 664.085, 91.3206, NULL, 0), +(233441, 79, 2, -5066.21, 663.694, 89.5984, NULL, 1000), +(233441, 80, 0, -5080.02, 661.667, 89.3029, NULL, 0), +(233441, 81, 0, -5085.77, 660.917, 88.5529, NULL, 0), +(233441, 82, 0, -5090.77, 660.167, 88.0529, NULL, 0), +(233441, 83, 0, -5096.77, 659.417, 87.5529, NULL, 0), +(233441, 84, 0, -5097.77, 659.167, 87.5529, NULL, 0), +(233441, 85, 0, -5099.33, 643.641, 86.5073, NULL, 0), +(233441, 86, 0, -5092.37, 632.173, 86.0829, NULL, 0), +(233441, 87, 0, -5092.22, 632.455, 86.5775, NULL, 0), +(233441, 88, 0, -5072.73, 632.078, 86.1046, NULL, 0), +(233441, 89, 0, -5072.65, 632.353, 86.2818, NULL, 1000), +(233441, 90, 0, -5072.99, 640.034, 86.4807, NULL, 0), +(233441, 91, 0, -5072.99, 640.034, 86.4807, 1.60313, 0), +(233451, 1, 0, -5091.53, 631.927, 86.1046, NULL, 0), +(233451, 2, 0, -5099.33, 638.213, 86.3643, NULL, 0), +(233451, 3, 0, -5098.52, 660.355, 87.1143, NULL, 0), +(233451, 4, 2, -5078.78, 664.369, 89.2393, NULL, 1000), +(233451, 5, 2, -5070, 664.126, 89.4732, NULL, 0), +(233451, 6, 2, -5045.99, 664.543, 90.3484, NULL, 0), +(233451, 7, 2, -5020.85, 664.327, 91.7373, NULL, 0), +(233451, 8, 2, -4988.7, 666.305, 92.8206, NULL, 0), +(233451, 9, 2, -4951.69, 663.513, 100.967, NULL, 0), +(233451, 10, 2, -4922.13, 645.658, 103.717, NULL, 0), +(233451, 11, 2, -4914.61, 596.992, 103.717, NULL, 0), +(233451, 12, 2, -4939.85, 571.188, 103.717, NULL, 1), +(233451, 13, 2, -4969.14, 547.841, 103.717, NULL, 0), +(233451, 14, 2, -4993.97, 528.656, 103.717, NULL, 0), +(233451, 15, 2, -5002.94, 506.945, 103.717, NULL, 0), +(233451, 16, 2, -5004.99, 482.972, 103.717, NULL, 0), +(233451, 17, 2, -4994.16, 457.018, 103.717, NULL, 0), +(233451, 18, 2, -4982.75, 435.674, 103.717, NULL, 0), +(233451, 19, 2, -4968.98, 413.116, 103.717, NULL, 0), +(233451, 20, 2, -4952.02, 390.879, 103.717, NULL, 0), +(233451, 21, 2, -4918.82, 380.166, 86.273, NULL, 0), +(233451, 22, 2, -4891.81, 384.83, 103.717, NULL, 0), +(233451, 23, 2, -4870.95, 388.626, 103.717, NULL, 0), +(233451, 24, 2, -4839.09, 373.696, 103.717, NULL, 0), +(233451, 25, 2, -4835.83, 344.134, 103.717, NULL, 0), +(233451, 26, 2, -4847.14, 297.331, 103.717, NULL, 0), +(233451, 27, 2, -4873.64, 255.017, 103.717, NULL, 0), +(233451, 28, 2, -4912.1, 234.305, 85.6897, NULL, 0), +(233451, 29, 2, -4948.94, 231.966, 89.3841, NULL, 0), +(233451, 30, 2, -4985.91, 223.645, 109.245, NULL, 0), +(233451, 31, 2, -5005.91, 180.523, 103.717, NULL, 0), +(233451, 32, 2, -5002.69, 144.423, 93.2174, NULL, 0), +(233451, 33, 2, -5000.45, 107.818, 97.6619, NULL, 0), +(233451, 34, 2, -5001.4, 88.902, 97.6619, NULL, 0), +(233451, 35, 2, -4992.56, 59.601, 97.6619, NULL, 0), +(233451, 36, 2, -4973.05, 35.046, 97.6619, NULL, 0), +(233451, 37, 2, -4950.33, 16.3997, 97.6619, NULL, 0), +(233451, 38, 2, -4919.71, -7.58724, 97.6619, NULL, 0), +(233451, 39, 2, -4895.12, -24.4617, 97.6619, NULL, 0), +(233451, 40, 2, -4873.84, -56.4621, 97.6619, NULL, 0), +(233451, 41, 2, -4878.95, -78.3702, 97.6619, NULL, 0), +(233451, 42, 2, -4900.98, -96.3223, 124.551, NULL, 0), +(233451, 43, 2, -4938.92, -97.6536, 140.884, NULL, 0), +(233451, 44, 2, -4947.49, -70.9423, 139.27, NULL, 0), +(233451, 45, 2, -4962.08, -45.1169, 118.714, NULL, 0), +(233451, 46, 2, -4985.61, -3.70757, 104.436, NULL, 0), +(233451, 47, 2, -5007.2, 21.712, 104.436, NULL, 0), +(233451, 48, 2, -5035.34, 34.8622, 104.436, NULL, 0), +(233451, 49, 2, -5077.72, 45.1653, 83.8252, NULL, 0), +(233451, 50, 2, -5122.02, 50.8705, 85.7419, NULL, 0), +(233451, 51, 2, -5163.29, 41.7148, 112.992, NULL, 0), +(233451, 52, 2, -5185.47, 38.4489, 155.797, NULL, 0), +(233451, 53, 2, -5215.35, 32.1226, 192.603, NULL, 0), +(233451, 54, 2, -5251.43, 11.9092, 192.603, NULL, 0), +(233451, 55, 2, -5270.69, 35.8796, 192.603, NULL, 0), +(233451, 56, 2, -5269.64, 61.3236, 192.603, NULL, 0), +(233451, 57, 2, -5229.23, 77.3804, 192.603, NULL, 0), +(233451, 58, 2, -5199.31, 80.3291, 192.603, NULL, 0), +(233451, 59, 2, -5162.09, 96.1893, 163.047, NULL, 0), +(233451, 60, 2, -5116.33, 114.777, 156.103, NULL, 0), +(233451, 61, 2, -5104.88, 161.948, 144.02, NULL, 0), +(233451, 62, 2, -5106.1, 210.706, 141.131, NULL, 0), +(233451, 63, 2, -5100.37, 254.993, 151.63, NULL, 0), +(233451, 64, 2, -5094.82, 294.723, 165.923, NULL, 0), +(233451, 65, 2, -5072.27, 323.058, 173.471, NULL, 0), +(233451, 66, 2, -5042.43, 354.911, 179.332, NULL, 0), +(233451, 67, 2, -5031.14, 402.77, 182.737, NULL, 0), +(233451, 68, 2, -5023.53, 437.579, 182.737, NULL, 0), +(233451, 69, 2, -5021.06, 461.707, 157.542, NULL, 0), +(233451, 70, 2, -5061.28, 480.605, 134.32, NULL, 0), +(233451, 71, 2, -5101.12, 489.571, 134.32, NULL, 0), +(233451, 72, 2, -5131.54, 478.553, 134.32, NULL, 0), +(233451, 73, 2, -5154.21, 459.828, 134.32, NULL, 0), +(233451, 74, 2, -5173.37, 424.965, 134.32, NULL, 0), +(233451, 75, 2, -5176.19, 388.636, 134.32, NULL, 0), +(233451, 76, 2, -5178.22, 359.567, 134.32, NULL, 0), +(233451, 77, 2, -5177.09, 334.062, 134.32, NULL, 0), +(233451, 78, 2, -5184.36, 290.924, 134.32, NULL, 0), +(233451, 79, 2, -5200.44, 273.444, 134.32, NULL, 0), +(233451, 80, 2, -5243.27, 262.792, 134.32, NULL, 0), +(233451, 81, 2, -5263.35, 272.447, 134.32, NULL, 0), +(233451, 82, 2, -5280.75, 294.987, 134.32, NULL, 0), +(233451, 83, 2, -5285.51, 322.787, 134.32, NULL, 0), +(233451, 84, 2, -5279.47, 359.639, 134.32, NULL, 0), +(233451, 85, 2, -5272.3, 381.99, 134.32, NULL, 0), +(233451, 86, 2, -5257.37, 401.587, 134.32, NULL, 0), +(233451, 87, 2, -5234.98, 422.171, 128.931, NULL, 0), +(233451, 88, 2, -5221.28, 434.735, 124.793, NULL, 0), +(233451, 89, 2, -5204.38, 446.819, 115.237, NULL, 0), +(233451, 90, 2, -5166.36, 467.195, 115.237, NULL, 0), +(233451, 91, 2, -5123.75, 489.651, 115.237, NULL, 0), +(233451, 92, 2, -5089.29, 501.894, 115.237, NULL, 0), +(233451, 93, 2, -5050.14, 500.767, 115.237, NULL, 0), +(233451, 94, 2, -5022.08, 515.106, 115.237, NULL, 0), +(233451, 95, 2, -5004.62, 526.253, 115.237, NULL, 0), +(233451, 96, 2, -4987.25, 539.744, 115.237, NULL, 0), +(233451, 97, 2, -4967.14, 557.431, 115.237, NULL, 0), +(233451, 98, 2, -4954.63, 576.606, 115.237, NULL, 0), +(233451, 99, 2, -4941.9, 596.954, 115.237, NULL, 0), +(233451, 100, 2, -4937.9, 622.101, 115.237, NULL, 0), +(233451, 101, 2, -4942.42, 647.049, 115.237, NULL, 0), +(233451, 102, 2, -4955.86, 657.939, 105.154, NULL, 0), +(233451, 103, 2, -4987.66, 666.589, 95.0425, NULL, 0), +(233451, 104, 2, -5012.21, 663.787, 93.4317, NULL, 0), +(233451, 105, 2, -5029.56, 664.063, 92.4873, NULL, 0), +(233451, 106, 2, -5046.77, 664.192, 91.5984, NULL, 0), +(233451, 107, 2, -5065.81, 664.103, 89.5151, NULL, 1000), +(233451, 108, 0, -5097.22, 643.818, 86.6143, NULL, 0), +(233451, 109, 0, -5082.63, 631.642, 86.1046, NULL, 0), +(233451, 110, 0, -5065.9, 639.835, 86.4967, NULL, 0), +(233451, 111, 0, -5066.31, 640.214, 86.4967, NULL, 0), +(233451, 112, 0, -5066.31, 640.214, 86.4967, 1.55334, 1000), +(233461, 1, 0, -5078.13, 632.794, 86.1046, NULL, 0), +(233461, 2, 0, -5096.17, 634.173, 86.2617, NULL, 0), +(233461, 3, 0, -5099.56, 647.333, 86.7393, NULL, 0), +(233461, 4, 0, -5096.42, 663.513, 87.2312, NULL, 0), +(233461, 5, 2, -5078.93, 664.554, 89.2393, NULL, 1000), +(233461, 6, 2, -5047.58, 664.479, 90.0984, NULL, 0), +(233461, 7, 2, -5029.15, 664.606, 91.8484, NULL, 0), +(233461, 8, 2, -5001.7, 665.021, 94.5706, NULL, 0), +(233461, 9, 2, -4980.51, 664.026, 94.5706, NULL, 1), +(233461, 10, 2, -4951.83, 664.387, 93.0396, NULL, 0), +(233461, 11, 2, -4913.11, 661.812, 90.5396, NULL, 0), +(233461, 12, 2, -4887.88, 689.685, 86.7341, NULL, 1), +(233461, 13, 2, -4885.2, 719.211, 86.7341, NULL, 0), +(233461, 14, 2, -4905.21, 763.206, 86.7341, NULL, 0), +(233461, 15, 2, -4948.71, 781.429, 78.373, NULL, 0), +(233461, 16, 2, -4977.9, 809.792, 95.7341, NULL, 0), +(233461, 17, 2, -4988.85, 809.721, 89.6508, NULL, 0), +(233461, 18, 2, -5011.91, 818.067, 89.6508, NULL, 0), +(233461, 19, 2, -5051.19, 819.738, 89.6508, NULL, 0), +(233461, 20, 2, -5083.58, 797.402, 89.6508, NULL, 0), +(233461, 21, 2, -5114.21, 773.344, 72.7341, NULL, 0), +(233461, 22, 2, -5143.49, 764.99, 65.0675, NULL, 0), +(233461, 23, 2, -5185.28, 762.507, 65.0675, NULL, 0), +(233461, 24, 2, -5213.92, 765.252, 65.0675, NULL, 0), +(233461, 25, 2, -5257.46, 784.766, 65.0675, NULL, 0), +(233461, 26, 2, -5278.25, 777.822, 65.0675, NULL, 0), +(233461, 27, 2, -5294.25, 755.341, 65.0675, NULL, 0), +(233461, 28, 2, -5296.9, 729.18, 65.0675, NULL, 0), +(233461, 29, 2, -5289.13, 702.037, 65.0675, NULL, 0), +(233461, 30, 2, -5273.8, 666.173, 62.5675, NULL, 0), +(233461, 31, 2, -5267.91, 638.255, 52.5119, NULL, 0), +(233461, 32, 2, -5260.28, 622.614, 56.0675, NULL, 0), +(233461, 33, 2, -5245.02, 611.943, 66.2063, NULL, 0), +(233461, 34, 2, -5200.1, 604.664, 86.9852, NULL, 0), +(233461, 35, 2, -5181.16, 590.698, 89.2907, NULL, 0), +(233461, 36, 2, -5185.52, 548.609, 94.3185, NULL, 0), +(233461, 37, 2, -5167.71, 522.758, 94.3185, NULL, 0), +(233461, 38, 2, -5137.54, 504.232, 94.3185, NULL, 0), +(233461, 39, 2, -5102.65, 499.669, 94.3185, NULL, 0), +(233461, 40, 2, -5064.48, 492.931, 94.3185, NULL, 0), +(233461, 41, 2, -5035.06, 477.99, 104.068, NULL, 0), +(233461, 42, 2, -5001.8, 454.669, 104.068, NULL, 0), +(233461, 43, 2, -4978.69, 423.28, 104.068, NULL, 0), +(233461, 44, 2, -4968.23, 394.66, 104.068, NULL, 0), +(233461, 45, 2, -4970.74, 356.361, 97.0963, NULL, 0), +(233461, 46, 2, -4981.94, 320.598, 96.2629, NULL, 0), +(233461, 47, 2, -5000.34, 287.576, 96.2629, NULL, 0), +(233461, 48, 2, -5024.31, 263.462, 97.124, NULL, 0), +(233461, 49, 2, -5033.6, 245.432, 99.7021, NULL, 0), +(233461, 50, 2, -5043.81, 220.882, 109.368, NULL, 0), +(233461, 51, 2, -5055.69, 189.882, 121.604, NULL, 0), +(233461, 52, 2, -5065.02, 177.909, 129.701, NULL, 0), +(233461, 53, 2, -5093.46, 175.051, 135.203, NULL, 0), +(233461, 54, 2, -5104.9, 192.934, 143.814, NULL, 0), +(233461, 55, 2, -5108.27, 222.6, 143.814, NULL, 0), +(233461, 56, 2, -5096.2, 260.223, 155.97, NULL, 0), +(233461, 57, 2, -5092.7, 300.505, 168.029, NULL, 0), +(233461, 58, 2, -5064.83, 341.267, 173.623, NULL, 0), +(233461, 59, 2, -5046.67, 359.677, 175.401, NULL, 0), +(233461, 60, 2, -5017.94, 369.279, 177.651, NULL, 0), +(233461, 61, 2, -4990.09, 370.236, 177.651, NULL, 0), +(233461, 62, 2, -4946.64, 373.19, 173.29, NULL, 0), +(233461, 63, 2, -4904.02, 381.053, 154.401, NULL, 0), +(233461, 64, 2, -4873.26, 409.159, 154.401, NULL, 0), +(233461, 65, 2, -4858.19, 449.2, 154.401, NULL, 0), +(233461, 66, 2, -4860.12, 475.325, 154.401, NULL, 0), +(233461, 67, 2, -4874, 522.436, 154.401, NULL, 0), +(233461, 68, 2, -4907.66, 539.01, 154.401, NULL, 0), +(233461, 69, 2, -4937.98, 542.913, 154.401, NULL, 0), +(233461, 70, 2, -4984.79, 534.658, 154.401, NULL, 0), +(233461, 71, 2, -5016.35, 516.837, 154.401, NULL, 0), +(233461, 72, 2, -5045.82, 504.145, 154.401, NULL, 0), +(233461, 73, 2, -5067, 496.776, 154.401, NULL, 0), +(233461, 74, 2, -5092.52, 477.682, 154.401, NULL, 0), +(233461, 75, 2, -5113.31, 451.805, 150.79, NULL, 0), +(233461, 76, 2, -5145.34, 430.147, 148.262, NULL, 0), +(233461, 77, 2, -5159.41, 401.433, 136.818, NULL, 0), +(233461, 78, 2, -5177.6, 380.364, 135.095, NULL, 0), +(233461, 79, 2, -5177.56, 335.603, 122.401, NULL, 0), +(233461, 80, 2, -5183.72, 292.314, 122.401, NULL, 0), +(233461, 81, 2, -5214.58, 264.121, 122.401, NULL, 0), +(233461, 82, 2, -5238.5, 265.325, 113.095, NULL, 0), +(233461, 83, 2, -5270.4, 270.162, 113.095, NULL, 0), +(233461, 84, 2, -5295.31, 259.114, 113.095, NULL, 0), +(233461, 85, 2, -5311.03, 222.108, 113.095, NULL, 0), +(233461, 86, 2, -5342.25, 192.532, 113.095, NULL, 0), +(233461, 87, 2, -5347.23, 154.911, 113.095, NULL, 0), +(233461, 88, 2, -5320.38, 112.08, 113.095, NULL, 0), +(233461, 89, 2, -5278.58, 88.2244, 113.095, NULL, 0), +(233461, 90, 2, -5258.17, 55.2496, 113.095, NULL, 0), +(233461, 91, 2, -5251.67, 14.115, 113.095, NULL, 0), +(233461, 92, 2, -5249.78, -21.1848, 125.651, NULL, 0), +(233461, 93, 2, -5257.27, -54.0995, 129.734, NULL, 0), +(233461, 94, 2, -5277.01, -99.7471, 132.957, NULL, 0), +(233461, 95, 2, -5297.23, -105.679, 130.457, NULL, 0), +(233461, 96, 2, -5340.31, -104.858, 130.457, NULL, 0), +(233461, 97, 2, -5367.75, -96.7698, 130.457, NULL, 0), +(233461, 98, 2, -5383.33, -62.2326, 130.457, NULL, 0), +(233461, 99, 2, -5365.7, -35.2706, 130.457, NULL, 0), +(233461, 100, 2, -5340.35, -18.7096, 130.457, NULL, 0), +(233461, 101, 2, -5309.31, 9.52919, 130.457, NULL, 0), +(233461, 102, 2, -5289.22, 14.5796, 130.457, NULL, 0), +(233461, 103, 2, -5263.4, 19.9974, 130.457, NULL, 0), +(233461, 104, 2, -5232.5, 13.4538, 130.457, NULL, 0), +(233461, 105, 2, -5204.18, -19.4328, 130.457, NULL, 0), +(233461, 106, 2, -5182.8, -62.5757, 118.012, NULL, 0), +(233461, 107, 2, -5174.8, -84.4816, 118.012, NULL, 0), +(233461, 108, 2, -5162.56, -103.819, 118.012, NULL, 0), +(233461, 109, 2, -5131.97, -113.721, 118.012, NULL, 0), +(233461, 110, 2, -5096.79, -121.859, 118.012, NULL, 0), +(233461, 111, 2, -5065.52, -109.858, 118.012, NULL, 0), +(233461, 112, 2, -5042.26, -85.5908, 118.012, NULL, 0), +(233461, 113, 2, -5019.14, -62.0904, 98.8177, NULL, 0), +(233461, 114, 2, -4997.55, -36.6445, 92.6232, NULL, 0), +(233461, 115, 2, -4968.95, -1.82498, 85.901, NULL, 0), +(233461, 116, 2, -4934.68, 27.9422, 70.401, NULL, 0), +(233461, 117, 2, -4902.9, 45.4913, 59.9566, NULL, 0), +(233461, 118, 2, -4884.46, 46.5106, 45.4566, NULL, 0), +(233461, 119, 2, -4867.73, 45.3931, -0.654566, NULL, 0), +(233461, 120, 2, -4854.79, 31.7114, -4.71012, NULL, 0), +(233461, 121, 2, -4852.75, -1.65929, 1.81766, NULL, 0), +(233461, 122, 2, -4861.77, -29.4093, 36.5562, NULL, 0), +(233461, 123, 2, -4882.45, -29.9407, 74.6349, NULL, 0), +(233461, 124, 2, -4910.11, -50.9237, 104.127, NULL, 0), +(233461, 125, 2, -4922.27, -66.6852, 140.715, NULL, 0), +(233461, 126, 2, -4949.06, -51.4962, 135.409, NULL, 0), +(233461, 127, 2, -4952.38, -44.9067, 116.631, NULL, 0), +(233461, 128, 2, -4964.53, -33.2068, 108.076, NULL, 0), +(233461, 129, 2, -4983.42, 4.73774, 108.076, NULL, 0), +(233461, 130, 2, -4966.23, 46.293, 108.076, NULL, 0), +(233461, 131, 2, -4946.93, 79.2772, 108.076, NULL, 0), +(233461, 132, 2, -4927.34, 105.78, 108.076, NULL, 0), +(233461, 133, 2, -4903.62, 139.424, 108.076, NULL, 0), +(233461, 134, 2, -4908.83, 173.529, 108.076, NULL, 0), +(233461, 135, 2, -4899.3, 207.258, 108.076, NULL, 0), +(233461, 136, 2, -4894.79, 241.964, 100.548, NULL, 0), +(233461, 137, 2, -4876.02, 262.596, 100.548, NULL, 0), +(233461, 138, 2, -4851.94, 285.569, 100.548, NULL, 0), +(233461, 139, 2, -4845.69, 327.728, 100.548, NULL, 0), +(233461, 140, 2, -4845.24, 359.997, 95.8813, NULL, 0), +(233461, 141, 2, -4847.69, 391.29, 95.8813, NULL, 0), +(233461, 142, 2, -4859.13, 419.06, 95.8813, NULL, 0), +(233461, 143, 2, -4856.9, 465.859, 95.8813, NULL, 0), +(233461, 144, 2, -4876.19, 509.121, 95.8813, NULL, 0), +(233461, 145, 2, -4916.56, 535.192, 95.8813, NULL, 0), +(233461, 146, 2, -4941.46, 566.507, 95.8813, NULL, 0), +(233461, 147, 2, -4956.07, 605.605, 95.8813, NULL, 0), +(233461, 148, 2, -4967.99, 629.467, 95.8813, NULL, 0), +(233461, 149, 2, -4992.87, 657.32, 95.8813, NULL, 0), +(233461, 150, 2, -5019.96, 663.826, 95.8813, NULL, 0), +(233461, 151, 2, -5049.4, 663.944, 98.9369, NULL, 0), +(233461, 152, 2, -5085.37, 666.438, 105.104, NULL, 0), +(233461, 153, 2, -5114.09, 670.052, 107.326, NULL, 0), +(233461, 154, 2, -5129.29, 676.247, 107.326, NULL, 0), +(233461, 155, 2, -5134.55, 693.208, 107.326, NULL, 0), +(233461, 156, 2, -5124.75, 712.939, 107.326, NULL, 0), +(233461, 157, 2, -5091.65, 711.245, 104.52, NULL, 0), +(233461, 158, 2, -5069.82, 674.891, 104.52, NULL, 0), +(233461, 159, 2, -5061.35, 667.04, 104.52, NULL, 0), +(233461, 160, 2, -5019.67, 666.805, 104.52, NULL, 0), +(233461, 161, 2, -5000.67, 667.434, 104.52, NULL, 0), +(233461, 162, 2, -4993.28, 669.959, 104.52, NULL, 0), +(233461, 163, 2, -5002.19, 664.52, 97.9317, NULL, 0), +(233461, 164, 2, -5017.09, 664.354, 96.1539, NULL, 0), +(233461, 165, 2, -5040.19, 664.205, 90.4039, NULL, 0), +(233461, 166, 2, -5090.22, 663.832, 87.9751, NULL, 1000), +(233461, 167, 0, -5101.21, 660.542, 87.0099, NULL, 0), +(233461, 168, 0, -5102.08, 639.858, 86.3849, NULL, 0), +(233461, 169, 0, -5091.96, 630.356, 86.1317, NULL, 0), +(233461, 170, 0, -5078.23, 633.279, 86.1046, NULL, 0), +(233461, 171, 0, -5062.34, 632.852, 86.1767, NULL, 0), +(233461, 172, 0, -5060.47, 640.301, 86.6452, NULL, 0), +(233461, 173, 0, -5060.47, 640.301, 86.6452, 1.50098, 1000), +(233481, 1, 0, -5097.34, 638.205, 86.3706, NULL, 0), +(233481, 2, 0, -5099.04, 662.449, 87.0423, NULL, 0), +(233481, 3, 2, -5079.38, 664.281, 89.1507, NULL, 1000), +(233481, 4, 2, -5059.08, 664.368, 90.9583, NULL, 0), +(233481, 5, 2, -5034.28, 664.231, 90.9583, NULL, 0), +(233481, 6, 2, -5008.98, 664.152, 90.9583, NULL, 0), +(233481, 7, 2, -4987.99, 664.833, 93.1249, NULL, 4000), +(233481, 8, 2, -4957.93, 667.114, 89.677, NULL, 0), +(233481, 9, 2, -4923.51, 679.043, 89.677, NULL, 0), +(233481, 10, 2, -4907.64, 683.5, 89.677, NULL, 1), +(233481, 11, 2, -4883.63, 694.949, 89.677, NULL, 0), +(233481, 12, 2, -4850.15, 676.802, 89.677, NULL, 0), +(233481, 13, 2, -4864.9, 632.557, 89.677, NULL, 0), +(233481, 14, 2, -4910.24, 633.471, 89.677, NULL, 0), +(233481, 15, 2, -4946.94, 659.101, 89.677, NULL, 0), +(233481, 16, 2, -4995.13, 667.061, 94.927, NULL, 0), +(233481, 17, 2, -5029.88, 666.031, 94.927, NULL, 0), +(233481, 18, 2, -5065.31, 666.973, 103.621, NULL, 0), +(233481, 19, 2, -5091.27, 666.216, 117.482, NULL, 0), +(233481, 20, 2, -5132.5, 678.947, 117.482, NULL, 0), +(233481, 21, 2, -5160.83, 695.71, 117.482, NULL, 0), +(233481, 22, 2, -5189.03, 715.383, 117.482, NULL, 0), +(233481, 23, 2, -5218.2, 743.721, 117.482, NULL, 0), +(233481, 24, 2, -5246.88, 753.911, 117.482, NULL, 0), +(233481, 25, 2, -5291.25, 736.572, 117.482, NULL, 0), +(233481, 26, 2, -5297.69, 704.018, 117.482, NULL, 0), +(233481, 27, 2, -5294.14, 669.929, 117.482, NULL, 0), +(233481, 28, 2, -5283.43, 645.69, 117.482, NULL, 0), +(233481, 29, 2, -5274.71, 617.43, 117.482, NULL, 0), +(233481, 30, 2, -5275.44, 576.711, 117.482, NULL, 0), +(233481, 31, 2, -5275.69, 532.828, 94.3714, NULL, 0), +(233481, 32, 2, -5270.5, 488.192, 78.177, NULL, 0), +(233481, 33, 2, -5275.35, 443.787, 67.0103, NULL, 0), +(233481, 34, 2, -5282.69, 395.932, 67.0103, NULL, 0), +(233481, 35, 2, -5284.52, 357.451, 67.0103, NULL, 0), +(233481, 36, 2, -5297.13, 321.834, 75.3158, NULL, 0), +(233481, 37, 2, -5305.33, 287.949, 67.0103, NULL, 0), +(233481, 38, 2, -5324.95, 244.868, 67.0103, NULL, 0), +(233481, 39, 2, -5356.36, 222.88, 74.177, NULL, 0), +(233481, 40, 2, -5372.03, 179.211, 74.177, NULL, 0), +(233481, 41, 2, -5334.38, 148.986, 74.177, NULL, 0), +(233481, 42, 2, -5315.29, 119.5, 74.177, NULL, 0), +(233481, 43, 2, -5293.33, 83.5764, 74.177, NULL, 0), +(233481, 44, 2, -5277.18, 50.7105, 74.177, NULL, 0), +(233481, 45, 2, -5255.61, 8.40484, 74.177, NULL, 0), +(233481, 46, 2, -5224.43, -18.2412, 101.344, NULL, 0), +(233481, 47, 2, -5203.02, -50.2617, 113.121, NULL, 0), +(233481, 48, 2, -5177.76, -81.7928, 113.121, NULL, 0), +(233481, 49, 2, -5153.06, -109.168, 113.121, NULL, 0), +(233481, 50, 2, -5112.36, -123.955, 113.121, NULL, 0), +(233481, 51, 2, -5075.53, -120.103, 113.121, NULL, 0), +(233481, 52, 2, -5034.09, -103.74, 113.121, NULL, 0), +(233481, 53, 2, -4989.26, -83.9691, 113.121, NULL, 0), +(233481, 54, 2, -4952.2, -82.1155, 113.121, NULL, 0), +(233481, 55, 2, -4930.28, -71.9154, 134.939, NULL, 0), +(233481, 56, 2, -4903.26, -46.9919, 119.55, NULL, 0), +(233481, 57, 2, -4892.43, -14.3984, 119.55, NULL, 0), +(233481, 58, 2, -4901.1, 29.4554, 119.55, NULL, 0), +(233481, 59, 2, -4921.16, 50.8561, 119.55, NULL, 0), +(233481, 60, 2, -4960.64, 51.1532, 119.55, NULL, 0), +(233481, 61, 2, -5007.94, 44.2818, 113.967, NULL, 0), +(233481, 62, 2, -5049.16, 46.3472, 113.967, NULL, 0), +(233481, 63, 2, -5081.97, 51.2345, 113.967, NULL, 0), +(233481, 64, 2, -5109.11, 52.6926, 113.967, NULL, 0), +(233481, 65, 2, -5153.79, 53.4137, 113.967, NULL, 0), +(233481, 66, 2, -5194.33, 78.2347, 113.967, NULL, 0), +(233481, 67, 2, -5200.14, 112.977, 113.967, NULL, 0), +(233481, 68, 2, -5210.66, 155.044, 113.967, NULL, 0), +(233481, 69, 2, -5209.59, 202.733, 113.967, NULL, 0), +(233481, 70, 2, -5206.82, 249.795, 113.967, NULL, 0), +(233481, 71, 2, -5195.31, 281.593, 113.967, NULL, 0), +(233481, 72, 2, -5175.32, 312.856, 113.967, NULL, 0), +(233481, 73, 2, -5176.31, 350.463, 113.967, NULL, 0), +(233481, 74, 2, -5197.36, 384.485, 113.967, NULL, 0), +(233481, 75, 2, -5206.27, 401.401, 113.967, NULL, 0), +(233481, 76, 2, -5210.94, 427.598, 113.967, NULL, 0), +(233481, 77, 2, -5204.98, 464.869, 113.967, NULL, 0), +(233481, 78, 2, -5193.15, 501.41, 113.967, NULL, 0), +(233481, 79, 2, -5180.75, 540.264, 113.967, NULL, 0), +(233481, 80, 2, -5174.9, 567.82, 113.967, NULL, 0), +(233481, 81, 2, -5159.24, 594.904, 113.967, NULL, 0), +(233481, 82, 2, -5132.96, 612.103, 113.967, NULL, 0), +(233481, 83, 2, -5111.18, 618.453, 115.633, NULL, 0), +(233481, 84, 2, -5082.1, 643.451, 127.189, NULL, 0), +(233481, 85, 2, -5051.16, 666.218, 134.578, NULL, 0), +(233481, 86, 2, -5023.22, 672.118, 134.578, NULL, 0), +(233481, 87, 2, -4998.41, 675.911, 134.578, NULL, 0), +(233481, 88, 2, -4964.07, 667.405, 134.578, NULL, 0), +(233481, 89, 2, -4945.45, 649.256, 134.578, NULL, 0), +(233481, 90, 2, -4929.72, 618.043, 134.578, NULL, 0), +(233481, 91, 2, -4933.03, 597.607, 134.578, NULL, 0), +(233481, 92, 2, -4950.77, 560.419, 134.578, NULL, 0), +(233481, 93, 2, -4986.16, 534.748, 134.578, NULL, 0), +(233481, 94, 2, -5027.69, 507.007, 140.522, NULL, 0), +(233481, 95, 2, -5063.99, 482.611, 161.022, NULL, 0), +(233481, 96, 2, -5079.09, 444.718, 188.578, NULL, 0), +(233481, 97, 2, -5081.96, 401.005, 210.887, NULL, 0), +(233481, 98, 2, -5080.92, 379.728, 222.748, NULL, 0), +(233481, 99, 2, -5088.47, 350.896, 222.748, NULL, 0), +(233481, 100, 2, -5101.87, 322.287, 222.748, NULL, 0), +(233481, 101, 2, -5108.48, 280.242, 222.748, NULL, 0), +(233481, 102, 2, -5108.4, 250.032, 222.748, NULL, 0), +(233481, 103, 2, -5116.87, 216.985, 222.748, NULL, 0), +(233481, 104, 2, -5109.27, 175.025, 222.748, NULL, 0), +(233481, 105, 2, -5088.9, 150.668, 222.748, NULL, 0), +(233481, 106, 2, -5060.4, 142.947, 222.748, NULL, 0), +(233481, 107, 2, -5048.86, 136.867, 222.748, NULL, 0), +(233481, 108, 2, -5028.83, 136.097, 222.748, NULL, 0), +(233481, 109, 2, -5014.03, 134.363, 222.748, NULL, 0), +(233481, 110, 2, -4976.75, 133.063, 190.471, NULL, 0), +(233481, 111, 2, -4939.16, 144.454, 190.471, NULL, 0), +(233481, 112, 2, -4909.59, 167.547, 190.471, NULL, 0), +(233481, 113, 2, -4901.98, 203.9, 160.637, NULL, 0), +(233481, 114, 2, -4923.4, 237.469, 163.832, NULL, 0), +(233481, 115, 2, -4957.85, 242.402, 167.137, NULL, 0), +(233481, 116, 2, -4979.88, 241.209, 167.137, NULL, 0), +(233481, 117, 2, -5010.28, 221.407, 167.137, NULL, 0), +(233481, 118, 2, -5046.93, 191.875, 167.137, NULL, 0), +(233481, 119, 2, -5085.21, 182.271, 167.137, NULL, 0), +(233481, 120, 2, -5091.65, 219.236, 167.137, NULL, 0), +(233481, 121, 2, -5091.76, 256.497, 198.359, NULL, 0), +(233481, 122, 2, -5073.09, 284.982, 198.359, NULL, 0), +(233481, 123, 2, -5056.15, 305.894, 198.359, NULL, 0), +(233481, 124, 2, -5033.99, 340.742, 198.359, NULL, 0), +(233481, 125, 2, -5013.55, 366.655, 198.359, NULL, 0), +(233481, 126, 2, -4985.13, 398.56, 198.359, NULL, 0), +(233481, 127, 2, -4951.7, 419.768, 198.359, NULL, 0), +(233481, 128, 2, -4927.77, 437.405, 174.859, NULL, 0), +(233481, 129, 2, -4905.9, 452.86, 174.859, NULL, 0), +(233481, 130, 2, -4904.51, 474.815, 174.859, NULL, 0), +(233481, 131, 2, -4909.35, 491.21, 174.859, NULL, 0), +(233481, 132, 2, -4906.71, 508.801, 174.859, NULL, 0), +(233481, 133, 2, -4904.04, 524.842, 174.859, NULL, 0), +(233481, 134, 2, -4903.66, 545.825, 174.859, NULL, 0), +(233481, 135, 2, -4910.83, 565.414, 174.859, NULL, 0), +(233481, 136, 2, -4923.35, 594.048, 147.248, NULL, 0), +(233481, 137, 2, -4936.45, 624.762, 130.304, NULL, 0), +(233481, 138, 2, -4970.29, 650.181, 106.609, NULL, 0), +(233481, 139, 2, -4991.41, 664.588, 103.276, NULL, 0), +(233481, 140, 2, -5100.78, 656.943, 87.0099, NULL, 1000), +(233481, 141, 0, -5099.94, 642.533, 86.4336, NULL, 0), +(233481, 142, 0, -5095.81, 633.678, 86.2393, NULL, 0), +(233481, 143, 0, -5084.07, 627.694, 85.9796, NULL, 0), +(233481, 144, 0, -5074.52, 625.243, 85.7579, NULL, 0), +(233481, 145, 0, -5074.88, 625.448, 85.721, NULL, 0), +(233481, 146, 0, -5074.88, 625.448, 85.721, 1.5708, 1000); + +DELETE FROM `creature_text` WHERE (`CreatureID` = 23348); +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(23348, 0, 0, 'Prepare a funeral pyre! $N has challenged Skyshatter!', 14, 0, 100, 0, 0, 0, 21430, 0, 'Captain Skyshatter'), +(23348, 1, 0, 'I... I am undone... The new top orc is $N!', 14, 0, 100, 0, 0, 0, 21431, 0, 'Captain Skyshatter'), +(23348, 2, 0, 'I weep for you, $N. You really have no idea what you\'ve gotten yourself into...', 12, 0, 100, 0, 0, 0, 21432, 0, 'Captain Skyshatter'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` IN (23340, 23342, 23344, 23345, 23346, 23348)); +UPDATE `creature_template` SET `AIName` = '', `ScriptName` = 'dragonmaw_race_npc' WHERE (`entry` IN (23340, 23342, 23344, 23345, 23346, 23348)); + +DELETE FROM `creature_template_movement` WHERE (`CreatureId` IN (23356, 23357, 23358, 23359, 23360, 23361)); +INSERT INTO `creature_template_movement` (`CreatureId`, `Ground`, `Swim`, `Flight`, `Rooted`, `Chase`, `Random`, `InteractionPauseTimer`) VALUES +(23356, 0, 0, 1, 1, 0, 0, 0), +(23357, 0, 0, 1, 1, 0, 0, 0), +(23358, 0, 0, 1, 1, 0, 0, 0), +(23359, 0, 0, 1, 1, 0, 0, 0), +(23360, 0, 0, 1, 1, 0, 0, 0), +(23361, 0, 0, 1, 1, 0, 0, 0); + +DELETE FROM `creature_template_movement` WHERE (`CreatureId` IN (23340, 23342, 23344, 23345, 23346, 23348)); +INSERT INTO `creature_template_movement` (`CreatureId`, `Ground`, `Swim`, `Flight`, `Rooted`, `Chase`, `Random`, `InteractionPauseTimer`) VALUES +(23340, 1, 0, 2, 0, 0, 0, 0), +(23342, 1, 0, 2, 0, 0, 0, 0), +(23344, 1, 0, 2, 0, 0, 0, 0), +(23345, 1, 0, 2, 0, 0, 0, 0), +(23346, 1, 0, 2, 0, 0, 0, 0), +(23348, 1, 0, 2, 0, 0, 0, 0); + +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` IN (23356, 23357, 23358, 23359, 23360, 23361); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` IN (23356, 23357, 23358, 23359, 23360, 23361)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(23356, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 0, 86, 40890, 2, 7, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dragonmaw Race: Oldie\'s Target - On Just Summoned - Cross Cast \'Oldie\'s Rotten Pumpkin\''), +(23356, 0, 1, 0, 8, 0, 100, 0, 40890, 0, 0, 0, 0, 0, 11, 40905, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dragonmaw Race: Oldie\'s Target - On Spellhit \'Oldie\'s Rotten Pumpkin\' - Cast \'Oldie\'s Rotten Pumpkin Knockdown\''), + +(23357, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 0, 86, 40909, 2, 7, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dragonmaw Race: Trope\'s Target - On Just Summoned - Cross Cast \'Trope\'s Slime Cannon\''), +(23357, 0, 1, 0, 8, 0, 100, 0, 40909, 0, 0, 0, 0, 0, 11, 40905, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dragonmaw Race: Trope\'s Target - On Spellhit \'Trope\'s Slime Cannon\' - Cast \'Oldie\'s Rotten Pumpkin Knockdown\''), + +(23358, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 0, 86, 40894, 2, 7, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dragonmaw Race: Corlok\'s Target - On Just Summoned - Cross Cast \'Corlok\'s Skull Barrage\''), +(23358, 0, 1, 0, 8, 0, 100, 0, 40894, 0, 0, 0, 0, 0, 11, 40900, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dragonmaw Race: Corlok\'s Target - On Spellhit \'Corlok\'s Skull Barrage\' - Cast \'Corlok\'s Skull Barrage Knockdown\''), + +(23359, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 0, 86, 40928, 2, 7, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dragonmaw Race: Ichman\'s Target - On Just Summoned - Cross Cast \'Ichman\'s Blazing Fireball\''), +(23359, 0, 1, 0, 8, 0, 100, 0, 40928, 0, 0, 0, 0, 0, 11, 40929, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dragonmaw Race: Ichman\'s Target - On Spellhit \'Ichman\'s Blazing Fireball\' - Cast \'Ichman\'s Blazing Fireball Knockdown\''), + +(23360, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 0, 86, 40931, 2, 7, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dragonmaw Race: Mulverick\'s Target - On Just Summoned - Cross Cast \'Mulverick\'s Great Balls of Lightning\''), + +(23361, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 0, 86, 40945, 2, 7, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dragonmaw Race: Oldie\'s Target - On Just Summoned - Cross Cast \'Sky Shatter\''), +(23361, 0, 1, 0, 8, 0, 100, 0, 40945, 0, 0, 0, 0, 0, 11, 41064, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dragonmaw Race: Oldie\'s Target - On Spellhit \'Sky Shatter\' - Cast \'Sky Shatter\''); + +DELETE FROM `smart_scripts` WHERE (`entryorguid` IN (23356, 23357, 23358, 23359, 23360, 23361)) AND (`source_type` = 0) 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`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(23356, 0, 2, 0, 37, 0, 100, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dragonmaw Race: Target - On Initialize - Set Reactstate Passive'), +(23357, 0, 2, 0, 37, 0, 100, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dragonmaw Race: Target - On Initialize - Set Reactstate Passive'), +(23358, 0, 2, 0, 37, 0, 100, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dragonmaw Race: Target - On Initialize - Set Reactstate Passive'), +(23359, 0, 2, 0, 37, 0, 100, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dragonmaw Race: Target - On Initialize - Set Reactstate Passive'), +(23360, 0, 2, 0, 37, 0, 100, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dragonmaw Race: Target - On Initialize - Set Reactstate Passive'), +(23361, 0, 2, 0, 37, 0, 100, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dragonmaw Race: Target - On Initialize - Set Reactstate Passive'); + +DELETE FROM `spell_script_names` WHERE `spell_id` IN (40890, 40894, 40909, 40928, 40930, 40945) AND `ScriptName`='spell_quest_dragonmaw_race_generic'; diff --git a/data/sql/updates/db_world/2024_07_27_03.sql b/data/sql/updates/db_world/2024_07_27_03.sql new file mode 100644 index 000000000..bca30f8ff --- /dev/null +++ b/data/sql/updates/db_world/2024_07_27_03.sql @@ -0,0 +1,13 @@ +-- DB update 2024_07_27_02 -> 2024_07_27_03 +-- +UPDATE `spell_script_names` SET `ScriptName`='spell_halion_meteor_strike_marker_aura' WHERE `spell_id`=74641 AND `ScriptName`='spell_halion_meteor_strike_marker'; +UPDATE `spell_script_names` SET `ScriptName`='spell_halion_meteor_strike_spread_aura' WHERE `spell_id`=74696 AND `ScriptName`='spell_halion_meteor_strike_spread'; +UPDATE `spell_script_names` SET `ScriptName`='spell_halion_soul_consumption_aura' WHERE `spell_id`=74792 AND `ScriptName`='spell_halion_soul_consumption'; +UPDATE `spell_script_names` SET `ScriptName`='spell_halion_fiery_combustion_aura' WHERE `spell_id`=74562 AND `ScriptName`='spell_halion_fiery_combustion'; +UPDATE `spell_script_names` SET `ScriptName`='spell_halion_soul_consumption_aura' WHERE `spell_id`=74792 AND `ScriptName`='spell_halion_soul_consumption'; +UPDATE `spell_script_names` SET `ScriptName`='spell_halion_fiery_combustion_aura' WHERE `spell_id`=74562 AND `ScriptName`='spell_halion_fiery_combustion'; +UPDATE `spell_script_names` SET `ScriptName`='spell_halion_mark_of_combustion_aura' WHERE `spell_id`=74567 AND `ScriptName`='spell_halion_mark_of_combustion'; +UPDATE `spell_script_names` SET `ScriptName`='spell_halion_mark_of_consumption_aura' WHERE `spell_id`=74795 AND `ScriptName`='spell_halion_mark_of_consumption'; +UPDATE `spell_script_names` SET `ScriptName`='spell_halion_twilight_realm_aura' WHERE `spell_id`=74807 AND `ScriptName`='spell_halion_twilight_realm'; +UPDATE `spell_script_names` SET `ScriptName`='spell_halion_leave_twilight_realm_aura' WHERE `spell_id`=74812 AND `ScriptName`='spell_halion_leave_twilight_realm'; +UPDATE `spell_script_names` SET `ScriptName`='spell_halion_twilight_cutter_periodic_aura' WHERE `spell_id`=74768 AND `ScriptName`='spell_halion_twilight_cutter_periodic'; diff --git a/data/sql/updates/db_world/2024_07_27_04.sql b/data/sql/updates/db_world/2024_07_27_04.sql new file mode 100644 index 000000000..c9b016db0 --- /dev/null +++ b/data/sql/updates/db_world/2024_07_27_04.sql @@ -0,0 +1,23 @@ +-- DB update 2024_07_27_03 -> 2024_07_27_04 +-- Disgusting Oozeling +DELETE FROM `creature_text` WHERE (`CreatureID` = 15429); +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(15429, 0, 0, '%s guzzles down the ale!', 16, 0, 100, 0, 0, 0, 10167, 0, 'Disgusting Oozeling - Dark Iron Ale'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 1 AND `entryorguid` = 165578 AND `id` = 4); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(165578, 1, 4, 0, 63, 0, 100, 0, 0, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 15429, 20, 0, 0, 0, 0, 0, 0, 'Dark Iron Ale Mug - On Just Created - Set Data to Disgusting Oozeling'); + +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 15429; +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 15429); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(15429, 0, 0, 0, 38, 0, 100, 0, 1, 1, 5000, 5000, 0, 0, 80, 1542900, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Disgusting Oozeling - On Data Set 1 1 - Run Script'), +(15429, 0, 1, 0, 34, 0, 100, 0, 8, 1, 0, 0, 0, 0, 80, 1542901, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Disgusting Oozeling - On Reached Point 1 - Run Script'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` IN (1542900,1542901)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(1542900, 9, 0, 0, 0, 0, 100, 0, 500, 500, 0, 0, 0, 0, 69, 1, 0, 0, 1, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Disgusting Oozeling - Actionlist - Move To Invoker \'Dark Iron Ale\''), +(1542901, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 5, 33, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Disgusting Oozeling - Actionlist - Play Emote 33'), +(1542901, 9, 1, 0, 0, 0, 100, 0, 200, 200, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Disgusting Oozeling - Actionlist - Say Line 0'), +(1542901, 9, 2, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Disgusting Oozeling - Actionlist - Despawn Invoker In 1000 ms'), +(1542901, 9, 3, 0, 0, 0, 100, 0, 2500, 2500, 0, 0, 0, 0, 29, 1, 90, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 'Disgusting Oozeling - Actionlist - Start Follow Owner Or Summoner'); diff --git a/data/sql/updates/db_world/2024_07_27_05.sql b/data/sql/updates/db_world/2024_07_27_05.sql new file mode 100644 index 000000000..a17eb30d5 --- /dev/null +++ b/data/sql/updates/db_world/2024_07_27_05.sql @@ -0,0 +1,3 @@ +-- DB update 2024_07_27_04 -> 2024_07_27_05 +-- +DELETE FROM `acore_string` WHERE `entry` IN (1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325); diff --git a/data/sql/updates/db_world/2024_07_28_00.sql b/data/sql/updates/db_world/2024_07_28_00.sql new file mode 100644 index 000000000..ce905b1aa --- /dev/null +++ b/data/sql/updates/db_world/2024_07_28_00.sql @@ -0,0 +1,62 @@ +-- DB update 2024_07_27_05 -> 2024_07_28_00 +UPDATE `creature_template` SET `speed_walk` = 1, `speed_run` = 2.14285714286 WHERE `entry` = 18805; +UPDATE `creature_template` SET `speed_walk` = 1, `speed_run` = 2.14285714286 WHERE `entry` = 19514; +UPDATE `creature_template` SET `speed_run` = 1.42857142857 WHERE `entry` = 19622; +UPDATE `creature_template` SET `speed_walk` = 1.6, `speed_run` = 1.42857142857, `BaseAttackTime` = 1600, `RangeAttackTime` = 1600 WHERE `entry` = 20031; +UPDATE `creature_template` SET `speed_run` = 1.42857142857, `BaseAttackTime` = 2000 WHERE `entry` = 20033; +UPDATE `creature_template` SET `speed_run` = 1.42857142857 WHERE `entry` = 20032; +UPDATE `creature_template` SET `speed_run` = 1.42857142857 WHERE `entry` = 20034; +UPDATE `creature_template` SET `speed_walk` = 1.6, `speed_run` = 1.42857142857, `BaseAttackTime` = 1600, `RangeAttackTime` = 1600 WHERE `entry` = 20035; +UPDATE `creature_template` SET `speed_walk` = 1.6, `speed_run` = 1.42857142857, `BaseAttackTime` = 2000 WHERE `entry` = 20036; +UPDATE `creature_template` SET `speed_walk` = 1.6, `speed_run` = 1.42857142857 WHERE `entry` = 20037; +UPDATE `creature_template` SET `speed_walk` = 1.6, `speed_run` = 1.71428571429 WHERE `entry` = 20038; +UPDATE `creature_template` SET `speed_walk` = 1, `speed_run` = 1.71428571429, `BaseAttackTime` = 2000 WHERE `entry` = 20039; +UPDATE `creature_template` SET `speed_walk` = 1.6, `speed_run` = 1.71428571429 WHERE `entry` = 20040; +UPDATE `creature_template` SET `speed_run` = 1.71428571429 WHERE `entry` = 20041; +UPDATE `creature_template` SET `speed_walk` = 1.6, `speed_run` = 1.42857142857 WHERE `entry` = 20042; +UPDATE `creature_template` SET `speed_walk` = 1.6, `speed_run` = 1.42857142857, `BaseAttackTime` = 2000 WHERE `entry` = 20043; +UPDATE `creature_template` SET `speed_run` = 1.42857142857, `BaseAttackTime` = 2000 WHERE `entry` = 20044; +UPDATE `creature_template` SET `speed_walk` = 1.6, `speed_run` = 1.42857142857 WHERE `entry` = 20045; +UPDATE `creature_template` SET `speed_walk` = 1.6, `speed_run` = 1.42857142857 WHERE `entry` = 20046; +UPDATE `creature_template` SET `speed_walk` = 1.6, `speed_run` = 1.71428571429 WHERE `entry` = 20047; +UPDATE `creature_template` SET `speed_walk` = 1.6, `speed_run` = 1.71428571429 WHERE `entry` = 20048; +UPDATE `creature_template` SET `speed_walk` = 1.6, `speed_run` = 1.71428571429 WHERE `entry` = 20049; +UPDATE `creature_template` SET `speed_walk` = 1.6, `speed_run` = 1.71428571429 WHERE `entry` = 20050; +UPDATE `creature_template` SET `speed_walk` = 0.9444439888, `speed_run` = 1.42857142857 WHERE `entry` = 20052; +UPDATE `creature_template` SET `speed_run` = 1.71428571429, `BaseAttackTime` = 2000 WHERE `entry` = 20060; +UPDATE `creature_template` SET `speed_run` = 1.71428571429, `BaseAttackTime` = 2000 WHERE `entry` = 20062; +UPDATE `creature_template` SET `speed_run` = 1.71428571429, `BaseAttackTime` = 2000 WHERE `entry` = 20063; +UPDATE `creature_template` SET `speed_walk` = 1.2, `speed_run` = 0.78571428571, `BaseAttackTime` = 2000 WHERE `entry` = 20064; + +UPDATE `creature_model_info` SET `BoundingRadius` = 1.531999945640563964, `CombatReach` = 6 WHERE `DisplayID` = 18239; +UPDATE `creature_model_info` SET `BoundingRadius` = 1.75, `CombatReach` = 15 WHERE `DisplayID` = 18945; +UPDATE `creature_model_info` SET `BoundingRadius` = 1.5, `CombatReach` = 15 WHERE `DisplayID` = 18951; +UPDATE `creature_model_info` SET `BoundingRadius` = 0.900000035762786865, `CombatReach` = 9 WHERE `DisplayID` = 20023; +UPDATE `creature_model_info` SET `BoundingRadius` = 0.612800002098083496, `CombatReach` = 2.40000009536743164 WHERE `DisplayID` = 19387; +UPDATE `creature_model_info` SET `BoundingRadius` = 0.689399957656860351, `CombatReach` = 2.699999809265136718 WHERE `DisplayID` = 19388; +UPDATE `creature_model_info` SET `BoundingRadius` = 0.612800002098083496, `CombatReach` = 2.40000009536743164 WHERE `DisplayID` = 19390; +UPDATE `creature_model_info` SET `BoundingRadius` = 0.689399957656860351, `CombatReach` = 2.699999809265136718 WHERE `DisplayID` = 19393; +UPDATE `creature_model_info` SET `BoundingRadius` = 0.765999972820281982, `CombatReach` = 3 WHERE `DisplayID` = 19397; +UPDATE `creature_model_info` SET `BoundingRadius` = 0.574499964714050292, `CombatReach` = 2.25 WHERE `DisplayID` = 21001; +UPDATE `creature_model_info` SET `BoundingRadius` = 0.765999972820281982, `CombatReach` = 3 WHERE `DisplayID` = 19398; +UPDATE `creature_model_info` SET `BoundingRadius` = 0.300000011920928955, `CombatReach` = 1.5 WHERE `DisplayID` = 19298; +UPDATE `creature_model_info` SET `BoundingRadius` = 0.75, `CombatReach` = 3.75 WHERE `DisplayID` = 19299; +UPDATE `creature_model_info` SET `BoundingRadius` = 1.5, `CombatReach` = 3 WHERE `DisplayID` = 19410; +UPDATE `creature_model_info` SET `BoundingRadius` = 1.25, `CombatReach` = 2.5 WHERE `DisplayID` = 19300; +UPDATE `creature_model_info` SET `BoundingRadius` = 0.574499964714050292, `CombatReach` = 2.25 WHERE `DisplayID` = 19412; +UPDATE `creature_model_info` SET `BoundingRadius` = 0.574499964714050292, `CombatReach` = 2.25 WHERE `DisplayID` = 19471; +UPDATE `creature_model_info` SET `BoundingRadius` = 0.574499964714050292, `CombatReach` = 2.25 WHERE `DisplayID` = 19473; +UPDATE `creature_model_info` SET `BoundingRadius` = 0.765999972820281982, `CombatReach` = 3 WHERE `DisplayID` = 19475; +UPDATE `creature_model_info` SET `BoundingRadius` = 0.765999972820281982, `CombatReach` = 3 WHERE `DisplayID` = 19423; +UPDATE `creature_model_info` SET `BoundingRadius` = 0.574499964714050292, `CombatReach` = 2.25 WHERE `DisplayID` = 19500; +UPDATE `creature_model_info` SET `BoundingRadius` = 0.689399957656860351, `CombatReach` = 2.699999809265136718 WHERE `DisplayID` = 19505; +UPDATE `creature_model_info` SET `BoundingRadius` = 0.689399957656860351, `CombatReach` = 2.699999809265136718 WHERE `DisplayID` = 19504; +UPDATE `creature_model_info` SET `BoundingRadius` = 0.765999972820281982, `CombatReach` = 3 WHERE `DisplayID` = 19507; +UPDATE `creature_model_info` SET `BoundingRadius` = 0.75, `CombatReach` = 1.5 WHERE `DisplayID` = 19254; +UPDATE `creature_model_info` SET `BoundingRadius` = 1.148999929428100585, `CombatReach` = 4.5 WHERE `DisplayID` = 20178; +UPDATE `creature_model_info` SET `BoundingRadius` = 1.148999929428100585, `CombatReach` = 4.5 WHERE `DisplayID` = 20237; +UPDATE `creature_model_info` SET `BoundingRadius` = 1.148999929428100585, `CombatReach` = 4.5 WHERE `DisplayID` = 20177; +UPDATE `creature_model_info` SET `BoundingRadius` = 1.148999929428100585, `CombatReach` = 4.5 WHERE `DisplayID` = 20236; + +-- Thaladred needs correcting. +UPDATE `creature_template_movement` SET `Chase` = 0 WHERE `CreatureId` = 20064; diff --git a/deps/boost/CMakeLists.txt b/deps/boost/CMakeLists.txt index 11e4b0bac..1899fdf6d 100644 --- a/deps/boost/CMakeLists.txt +++ b/deps/boost/CMakeLists.txt @@ -11,11 +11,8 @@ # if(WIN32) - set(BOOST_DEBUG ON) if(DEFINED ENV{Boost_ROOT}) set(Boost_ROOT $ENV{Boost_ROOT}) - list(APPEND BOOST_LIBRARYDIR - ${Boost_ROOT}/lib${PLATFORM}-msvc-14.2) endif() set(Boost_USE_STATIC_LIBS ON) @@ -23,6 +20,8 @@ if(WIN32) set(Boost_USE_STATIC_RUNTIME OFF) endif() +set(Boost_NO_WARN_NEW_VERSIONS ON) + include (CheckCXXSourceCompiles) if (WIN32) @@ -40,20 +39,6 @@ if(NOT Boost_FOUND) endif() endif() -# Find if Boost was compiled in C++03 mode because it requires -DBOOST_NO_CXX11_SCOPED_ENUMS - -set(CMAKE_REQUIRED_INCLUDES ${Boost_INCLUDE_DIR}) -set(CMAKE_REQUIRED_LIBRARIES ${Boost_SYSTEM_LIBRARY} ${Boost_FILESYSTEM_LIBRARY} ${Boost_IOSTREAMS_LIBRARY}) -set(CMAKE_REQUIRED_FLAGS "-std=c++11") -check_cxx_source_compiles(" - #include - #include - int main() { boost::filesystem::copy_file(boost::filesystem::path(), boost::filesystem::path()); }" -boost_filesystem_copy_links_without_NO_SCOPED_ENUM) -unset(CMAKE_REQUIRED_INCLUDES) -unset(CMAKE_REQUIRED_LIBRARIES) -unset(CMAKE_REQUIRED_FLAGS) - add_library(boost INTERFACE) target_link_libraries(boost @@ -74,13 +59,3 @@ target_compile_definitions(boost -DBOOST_ASIO_NO_DEPRECATED -DBOOST_SYSTEM_USE_UTF8 -DBOOST_BIND_NO_PLACEHOLDERS) - -if (NOT boost_filesystem_copy_links_without_NO_SCOPED_ENUM) - target_compile_definitions(boost - INTERFACE - -DBOOST_NO_CXX11_SCOPED_ENUMS) -endif() - -target_compile_definitions(boost - INTERFACE - -DAC_HAS_BROKEN_WSTRING_REGEX) diff --git a/src/server/apps/authserver/Server/AuthSession.cpp b/src/server/apps/authserver/Server/AuthSession.cpp index 648939cb1..741e4724e 100644 --- a/src/server/apps/authserver/Server/AuthSession.cpp +++ b/src/server/apps/authserver/Server/AuthSession.cpp @@ -689,12 +689,9 @@ bool AuthSession::HandleReconnectProof() if (_accountInfo.Login.empty()) return false; - BigNumber t1; - t1.SetBinary(reconnectProof->R1, 16); - Acore::Crypto::SHA1 sha; sha.UpdateData(_accountInfo.Login); - sha.UpdateData(t1.ToByteArray<16>()); + sha.UpdateData(reconnectProof->R1, 16); sha.UpdateData(_reconnectProof); sha.UpdateData(_sessionKey); sha.Finalize(); diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index d3ec5eb51..b38464bc0 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -962,9 +962,19 @@ uint32 SmartAI::GetData(uint32 /*id*/) const return 0; } -void SmartAI::SetData(uint32 id, uint32 value, Unit* invoker) +void SmartAI::SetData(uint32 id, uint32 value, WorldObject* invoker) { - GetScript()->ProcessEventsFor(SMART_EVENT_DATA_SET, invoker, id, value); + Unit* unit = nullptr; + GameObject* gob = nullptr; + + if (invoker) + { + unit = invoker->ToUnit(); + if (!unit) + gob = invoker->ToGameObject(); + } + + GetScript()->ProcessEventsFor(SMART_EVENT_DATA_SET, unit, id, value, false, nullptr, gob); } void SmartAI::SetGUID(ObjectGuid /*guid*/, int32 /*id*/) @@ -1132,7 +1142,7 @@ void SmartAI::MoveAway(float distance) } } -void SmartAI::SetScript9(SmartScriptHolder& e, uint32 entry, Unit* invoker) +void SmartAI::SetScript9(SmartScriptHolder& e, uint32 entry, WorldObject* invoker) { if (invoker) GetScript()->mLastInvoker = invoker->GetGUID(); @@ -1232,12 +1242,22 @@ void SmartGameObjectAI::Destroyed(Player* player, uint32 eventId) GetScript()->ProcessEventsFor(SMART_EVENT_DEATH, player, eventId, 0, false, nullptr, me); } -void SmartGameObjectAI::SetData(uint32 id, uint32 value, Unit* invoker) +void SmartGameObjectAI::SetData(uint32 id, uint32 value, WorldObject* invoker) { - GetScript()->ProcessEventsFor(SMART_EVENT_DATA_SET, invoker, id, value); + Unit* unit = nullptr; + GameObject* gob = nullptr; + + if (invoker) + { + unit = invoker->ToUnit(); + if (!unit) + gob = invoker->ToGameObject(); + } + + GetScript()->ProcessEventsFor(SMART_EVENT_DATA_SET, unit, id, value, false, nullptr, gob); } -void SmartGameObjectAI::SetScript9(SmartScriptHolder& e, uint32 entry, Unit* invoker) +void SmartGameObjectAI::SetScript9(SmartScriptHolder& e, uint32 entry, WorldObject* invoker) { if (invoker) GetScript()->mLastInvoker = invoker->GetGUID(); diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h index 0311590fe..e5a62a859 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.h +++ b/src/server/game/AI/SmartScripts/SmartAI.h @@ -70,7 +70,7 @@ public: void StopFollow(bool complete); void MoveAway(float distance); - void SetScript9(SmartScriptHolder& e, uint32 entry, Unit* invoker); + void SetScript9(SmartScriptHolder& e, uint32 entry, WorldObject* invoker); SmartScript* GetScript() { return &mScript; } bool IsEscortInvokerInRange(); @@ -160,7 +160,7 @@ public: // Used in scripts to share variables void SetData(uint32 id, uint32 value) override { SetData(id, value, nullptr); } - void SetData(uint32 id, uint32 value, Unit* invoker); + void SetData(uint32 id, uint32 value, WorldObject* invoker); // Used in scripts to share variables void SetGUID(ObjectGuid guid, int32 id = 0) override; @@ -274,8 +274,8 @@ public: bool QuestReward(Player* player, Quest const* quest, uint32 opt) override; void Destroyed(Player* player, uint32 eventId) override; void SetData(uint32 id, uint32 value) override { SetData(id, value, nullptr); } - void SetData(uint32 id, uint32 value, Unit* invoker); - void SetScript9(SmartScriptHolder& e, uint32 entry, Unit* invoker); + void SetData(uint32 id, uint32 value, WorldObject* invoker); + void SetScript9(SmartScriptHolder& e, uint32 entry, WorldObject* invoker); void OnGameEvent(bool start, uint16 eventId) override; void OnStateChanged(uint32 state, Unit* unit) override; void EventInform(uint32 eventId) override; diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 37ac2ff76..efac02f80 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -167,21 +167,29 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u if (unit) mLastInvoker = unit->GetGUID(); + else if (gob) + mLastInvoker = gob->GetGUID(); - if (Unit* tempInvoker = GetLastInvoker()) + if (WorldObject* tempInvoker = GetLastInvoker()) LOG_DEBUG("sql.sql", "SmartScript::ProcessAction: Invoker: {} ({})", tempInvoker->GetName(), tempInvoker->GetGUID().ToString()); bool isControlled = e.action.moveToPos.controlled > 0; ObjectVector targets; - GetTargets(targets, e, unit); + WorldObject* invoker = nullptr; + if (unit) + invoker = unit; + else if (gob) + invoker = gob; + + GetTargets(targets, e, invoker); switch (e.GetActionType()) { case SMART_ACTION_TALK: { Creature* talker = e.target.type == 0 ? me : nullptr; - Unit* talkTarget = nullptr; + WorldObject* talkTarget = nullptr; for (WorldObject* target : targets) { @@ -232,7 +240,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u sCreatureTextMgr->SendChat(target->ToCreature(), uint8(e.action.simpleTalk.textGroupID), IsPlayer(GetLastInvoker()) ? GetLastInvoker() : 0); else if (IsPlayer(target) && me) { - Unit* templastInvoker = GetLastInvoker(); + WorldObject* templastInvoker = GetLastInvoker(); sCreatureTextMgr->SendChat(me, uint8(e.action.simpleTalk.textGroupID), IsPlayer(templastInvoker) ? templastInvoker : 0, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_NEUTRAL, false, target->ToPlayer()); } @@ -783,7 +791,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u case SMART_ACTION_INVOKER_CAST: { // Can be used for area trigger cast - Unit* tempLastInvoker = GetLastInvoker(unit); + WorldObject* tempLastInvoker = GetLastInvoker(unit); if (!tempLastInvoker) break; @@ -798,11 +806,14 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u if (!IsUnit(target)) continue; + if (!IsUnit(tempLastInvoker)) + continue; + if (!(e.action.cast.castFlags & SMARTCAST_AURA_NOT_PRESENT) || !target->ToUnit()->HasAura(e.action.cast.spell)) { if (e.action.cast.castFlags & SMARTCAST_INTERRUPT_PREVIOUS) { - tempLastInvoker->InterruptNonMeleeSpells(false); + tempLastInvoker->ToUnit()->InterruptNonMeleeSpells(false); } TriggerCastFlags triggerFlags = TRIGGERED_NONE; @@ -818,7 +829,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u } } - tempLastInvoker->CastSpell(target->ToUnit(), e.action.cast.spell, triggerFlags); + tempLastInvoker->ToUnit()->CastSpell(target->ToUnit(), e.action.cast.spell, triggerFlags); LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_INVOKER_CAST: Invoker {} casts spell {} on target {} with castflags {}", tempLastInvoker->GetGUID().ToString(), e.action.cast.spell, target->GetGUID().ToString(), e.action.cast.castFlags); } @@ -1397,16 +1408,28 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u if (Creature* cTarget = target->ToCreature()) { CreatureAI* ai = cTarget->AI(); - if (IsSmart(cTarget)) - ENSURE_AI(SmartAI, ai)->SetData(e.action.setData.field, e.action.setData.data, me); + // Make sure we check that the sender is either a creature or gameobject + if (IsSmart(cTarget, true) && (me || go)) + { + if (me) + ENSURE_AI(SmartAI, ai)->SetData(e.action.setData.field, e.action.setData.data, me); + else + ENSURE_AI(SmartAI, ai)->SetData(e.action.setData.field, e.action.setData.data, go); + } else ai->SetData(e.action.setData.field, e.action.setData.data); } else if (GameObject* oTarget = target->ToGameObject()) { GameObjectAI* ai = oTarget->AI(); - if (IsSmart(oTarget)) - ENSURE_AI(SmartGameObjectAI, ai)->SetData(e.action.setData.field, e.action.setData.data, me); + // Make sure we check that the sender is either a creature or gameobject + if (IsSmart(oTarget, true) && (me || go)) + { + if (me) + ENSURE_AI(SmartGameObjectAI, ai)->SetData(e.action.setData.field, e.action.setData.data, me); + else + ENSURE_AI(SmartGameObjectAI, ai)->SetData(e.action.setData.field, e.action.setData.data, go); + } else ai->SetData(e.action.setData.field, e.action.setData.data); } @@ -2900,7 +2923,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u if (e.action.setGuid.invokerGUID) { - if (Unit* invoker = GetLastInvoker()) + if (WorldObject* invoker = GetLastInvoker()) { guidToSend = invoker->GetGUID(); } @@ -3318,12 +3341,12 @@ SmartScriptHolder SmartScript::CreateSmartEvent(SMART_EVENT e, uint32 event_flag return script; } -void SmartScript::GetTargets(ObjectVector& targets, SmartScriptHolder const& e, Unit* invoker /*= nullptr*/) const +void SmartScript::GetTargets(ObjectVector& targets, SmartScriptHolder const& e, WorldObject* invoker /*= nullptr*/) const { - Unit* scriptTrigger = nullptr; + WorldObject* scriptTrigger = nullptr; if (invoker) scriptTrigger = invoker; - else if (Unit* tempLastInvoker = GetLastInvoker()) + else if (WorldObject* tempLastInvoker = GetLastInvoker()) scriptTrigger = tempLastInvoker; WorldObject* baseObject = GetBaseObject(); @@ -3399,8 +3422,9 @@ void SmartScript::GetTargets(ObjectVector& targets, SmartScriptHolder const& e, targets.push_back(scriptTrigger); break; case SMART_TARGET_ACTION_INVOKER_VEHICLE: - if (scriptTrigger && scriptTrigger->GetVehicle() && scriptTrigger->GetVehicle()->GetBase()) - targets.push_back(scriptTrigger->GetVehicle()->GetBase()); + if (scriptTrigger && IsUnit(scriptTrigger)) + if (scriptTrigger->ToUnit()->GetVehicle() && scriptTrigger->ToUnit()->GetVehicle()->GetBase()) + targets.push_back(scriptTrigger->ToUnit()->GetVehicle()->GetBase()); break; case SMART_TARGET_INVOKER_PARTY: if (scriptTrigger) @@ -4323,7 +4347,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui if (e.event.dataSet.id != var0 || e.event.dataSet.value != var1) return; RecalcTimer(e, e.event.dataSet.cooldownMin, e.event.dataSet.cooldownMax); - ProcessAction(e, unit, var0, var1); + ProcessAction(e, unit, var0, var1, false, nullptr, gob); break; } case SMART_EVENT_PASSENGER_REMOVED: @@ -4352,11 +4376,16 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui case SMART_EVENT_EVENT_PHASE_CHANGE: { if (!IsInPhase(e.event.eventPhaseChange.phasemask)) - { return; - } - ProcessAction(e, GetLastInvoker()); + WorldObject* templastInvoker = GetLastInvoker(); + if (!templastInvoker) + return; + + if (!IsUnit(templastInvoker)) + return; + + ProcessAction(e, templastInvoker->ToUnit()); break; } case SMART_EVENT_GAME_EVENT_START: @@ -5178,14 +5207,14 @@ void SmartScript::SetScript9(SmartScriptHolder& e, uint32 entry) } } -Unit* SmartScript::GetLastInvoker(Unit* invoker) const +WorldObject* SmartScript::GetLastInvoker(WorldObject* invoker) const { // Xinef: Look for invoker only on map of base object... Prevents multithreaded crashes if (GetBaseObject()) - return ObjectAccessor::GetUnit(*GetBaseObject(), mLastInvoker); + return ObjectAccessor::GetWorldObject(*GetBaseObject(), mLastInvoker); // xinef: used for area triggers invoker cast else if (invoker) - return ObjectAccessor::GetUnit(*invoker, mLastInvoker); + return ObjectAccessor::GetWorldObject(*invoker, mLastInvoker); return nullptr; } diff --git a/src/server/game/AI/SmartScripts/SmartScript.h b/src/server/game/AI/SmartScripts/SmartScript.h index 82ac3700d..0f84cc2fd 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.h +++ b/src/server/game/AI/SmartScripts/SmartScript.h @@ -44,7 +44,7 @@ public: static void InitTimer(SmartScriptHolder& e); void ProcessAction(SmartScriptHolder& e, Unit* unit = nullptr, uint32 var0 = 0, uint32 var1 = 0, bool bvar = false, SpellInfo const* spell = nullptr, GameObject* gob = nullptr); void ProcessTimedAction(SmartScriptHolder& e, uint32 const& min, uint32 const& max, Unit* unit = nullptr, uint32 var0 = 0, uint32 var1 = 0, bool bvar = false, SpellInfo const* spell = nullptr, GameObject* gob = nullptr); - void GetTargets(ObjectVector& targets, SmartScriptHolder const& e, Unit* invoker = nullptr) const; + void GetTargets(ObjectVector& targets, SmartScriptHolder const& e, WorldObject* invoker = nullptr) const; void GetWorldObjectsInDist(ObjectVector& objects, float dist) const; void InstallTemplate(SmartScriptHolder const& e); static SmartScriptHolder CreateSmartEvent(SMART_EVENT e, uint32 event_flags, uint32 event_param1, uint32 event_param2, uint32 event_param3, uint32 event_param4, uint32 event_param5, uint32 event_param6, SMART_ACTION action, uint32 action_param1, uint32 action_param2, uint32 action_param3, uint32 action_param4, uint32 action_param5, uint32 action_param6, SMARTAI_TARGETS t, uint32 target_param1, uint32 target_param2, uint32 target_param3, uint32 target_param4, uint32 phaseMask); @@ -186,7 +186,7 @@ public: //TIMED_ACTIONLIST (script type 9 aka script9) void SetScript9(SmartScriptHolder& e, uint32 entry); - Unit* GetLastInvoker(Unit* invoker = nullptr) const; + WorldObject* GetLastInvoker(WorldObject* invoker = nullptr) const; ObjectGuid mLastInvoker; typedef std::unordered_map CounterMap; CounterMap mCounterList; diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index 13072d3c2..37ed221ee 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -2473,10 +2473,15 @@ bool AchievementGlobalMgr::IsStatisticAchievement(AchievementEntry const* achiev bool AchievementGlobalMgr::IsAverageCriteria(AchievementCriteriaEntry const* criteria) const { - if ((sAchievementStore.LookupEntry(criteria->referredAchievement))->flags & ACHIEVEMENT_FLAG_AVERAGE) + auto referencedAchievement = sAchievementStore.LookupEntry(criteria->referredAchievement); + + if (!referencedAchievement) + return false; + + if (referencedAchievement->flags & ACHIEVEMENT_FLAG_AVERAGE) return true; - if (AchievementEntryList const* achRefList = GetAchievementByReferencedId(criteria->referredAchievement)) + if (AchievementEntryList const* achRefList = GetAchievementByReferencedId(referencedAchievement->ID)) for (AchievementEntryList::const_iterator itr = achRefList->begin(); itr != achRefList->end(); ++itr) if ((*itr)->flags & ACHIEVEMENT_FLAG_AVERAGE) return true; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp index 7f2c7cb3e..dce3357b5 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp @@ -120,9 +120,8 @@ void BattlegroundAV::HandleKillUnit(Creature* unit, Player* killer) //spawn destroyed aura for (uint8 i = 0; i <= 9; i++) SpawnBGObject(BG_AV_OBJECT_BURN_BUILDING_ALLIANCE + i, RESPAWN_IMMEDIATELY); - Creature* creature = GetBGCreature(AV_CPLACE_HERALD); - if (creature) - YellToAll(creature, GetAcoreString(LANG_BG_AV_A_CAPTAIN_DEAD), LANG_UNIVERSAL); + if (Creature* creature = GetBGCreature(AV_CPLACE_HERALD)) + creature->AI()->Talk(AV_TEXT_HERALD_STORMPIKE_GENERAL_DEAD); DelCreature(AV_CPLACE_TRIGGER16); } else if (entry == BG_AV_CreatureInfo[AV_NPC_H_CAPTAIN]) @@ -139,9 +138,8 @@ void BattlegroundAV::HandleKillUnit(Creature* unit, Player* killer) //spawn destroyed aura for (uint8 i = 0; i <= 9; i++) SpawnBGObject(BG_AV_OBJECT_BURN_BUILDING_HORDE + i, RESPAWN_IMMEDIATELY); - Creature* creature = GetBGCreature(AV_CPLACE_HERALD); - if (creature) - YellToAll(creature, GetAcoreString(LANG_BG_AV_H_CAPTAIN_DEAD), LANG_UNIVERSAL); + if (Creature* creature = GetBGCreature(AV_CPLACE_HERALD)) + creature->AI()->Talk(AV_TEXT_HERALD_FROSTWOLF_GENERAL_DEAD); DelCreature(AV_CPLACE_TRIGGER18); } else if (entry == BG_AV_CreatureInfo[AV_NPC_N_MINE_N_4] || entry == BG_AV_CreatureInfo[AV_NPC_N_MINE_A_4] || entry == BG_AV_CreatureInfo[AV_NPC_N_MINE_H_4]) @@ -646,16 +644,9 @@ void BattlegroundAV::EventPlayerDestroyedPoint(BG_AV_Nodes node) } } } - //send a nice message to all :) - char buf[256]; - if (IsTower(node)) - snprintf(buf, sizeof(buf), GetAcoreString(LANG_BG_AV_TOWER_TAKEN), GetNodeName(node), (ownerId == TEAM_ALLIANCE) ? GetAcoreString(LANG_BG_AV_ALLY) : GetAcoreString(LANG_BG_AV_HORDE)); - else - snprintf(buf, sizeof(buf), GetAcoreString(LANG_BG_AV_GRAVE_TAKEN), GetNodeName(node), (ownerId == TEAM_ALLIANCE) ? GetAcoreString(LANG_BG_AV_ALLY) : GetAcoreString(LANG_BG_AV_HORDE)); - Creature* creature = GetBGCreature(AV_CPLACE_HERALD); - if (creature) - YellToAll(creature, buf, LANG_UNIVERSAL); + if (Creature* creature = GetBGCreature(AV_CPLACE_HERALD)) + creature->AI()->Talk(GetDefendString(node, ownerId)); } void BattlegroundAV::ChangeMineOwner(uint8 mine, TeamId teamId, bool initial) @@ -727,12 +718,8 @@ void BattlegroundAV::ChangeMineOwner(uint8 mine, TeamId teamId, bool initial) if (teamId == TEAM_ALLIANCE || teamId == TEAM_HORDE) { m_Mine_Reclaim_Timer[mine] = AV_MINE_RECLAIM_TIMER; - char buf[256]; - snprintf(buf, sizeof(buf), GetAcoreString(LANG_BG_AV_MINE_TAKEN), (teamId == TEAM_ALLIANCE) ? GetAcoreString(LANG_BG_AV_ALLY) : GetAcoreString(LANG_BG_AV_HORDE), - GetAcoreString((mine == AV_NORTH_MINE) ? LANG_BG_AV_MINE_NORTH : LANG_BG_AV_MINE_SOUTH)); - Creature* creature = GetBGCreature(AV_CPLACE_HERALD); - if (creature) - YellToAll(creature, buf, LANG_UNIVERSAL); + if (Creature* creature = GetBGCreature(AV_CPLACE_HERALD)) + creature->AI()->Talk(GetMineString(mine, teamId)); } else { @@ -980,18 +967,12 @@ void BattlegroundAV::EventPlayerDefendsPoint(Player* player, uint32 object) SpawnBGObject(((teamId == TEAM_ALLIANCE) ? BG_AV_OBJECT_SNOW_EYECANDY_A : BG_AV_OBJECT_SNOW_EYECANDY_H) + i, RESPAWN_IMMEDIATELY); } } - //send a nice message to all :) - char buf[256]; - snprintf(buf, sizeof(buf), GetAcoreString((IsTower(node)) ? LANG_BG_AV_TOWER_DEFENDED : LANG_BG_AV_GRAVE_DEFENDED), GetNodeName(node), (teamId == TEAM_ALLIANCE) ? GetAcoreString(LANG_BG_AV_ALLY) : GetAcoreString(LANG_BG_AV_HORDE)); - Creature* creature = GetBGCreature(AV_CPLACE_HERALD); - if (creature) - YellToAll(creature, buf, LANG_UNIVERSAL); + + if (Creature* creature = GetBGCreature(AV_CPLACE_HERALD)) + creature->AI()->Talk(GetDefendString(node, teamId)); + //update the statistic for the defending player UpdatePlayerScore(player, (IsTower(node)) ? SCORE_TOWERS_DEFENDED : SCORE_GRAVEYARDS_DEFENDED, 1); - if (IsTower(node)) - PlaySoundToAll(AV_SOUND_BOTH_TOWER_DEFEND); - else - PlaySoundToAll((teamId == TEAM_ALLIANCE) ? AV_SOUND_ALLIANCE_GOOD : AV_SOUND_HORDE_GOOD); } void BattlegroundAV::EventPlayerAssaultsPoint(Player* player, uint32 object) @@ -1092,15 +1073,11 @@ void BattlegroundAV::EventPlayerAssaultsPoint(Player* player, uint32 object) // xinef: change here is too late, AssaultNode(node, team); UpdateNodeWorldState(node); - //send a nice message to all :) - char buf[256]; - snprintf(buf, sizeof(buf), (IsTower(node)) ? GetAcoreString(LANG_BG_AV_TOWER_ASSAULTED) : GetAcoreString(LANG_BG_AV_GRAVE_ASSAULTED), GetNodeName(node), (teamId == TEAM_ALLIANCE) ? GetAcoreString(LANG_BG_AV_ALLY) : GetAcoreString(LANG_BG_AV_HORDE)); - Creature* creature = GetBGCreature(AV_CPLACE_HERALD); - if (creature) - YellToAll(creature, buf, LANG_UNIVERSAL); + if (Creature* creature = GetBGCreature(AV_CPLACE_HERALD)) + creature->AI()->Talk(GetAttackString(node, teamId)); + //update the statistic for the assaulting player UpdatePlayerScore(player, (IsTower(node)) ? SCORE_TOWERS_ASSAULTED : SCORE_GRAVEYARDS_ASSAULTED, 1); - PlaySoundToAll((teamId == TEAM_ALLIANCE) ? AV_SOUND_ALLIANCE_ASSAULTS : AV_SOUND_HORDE_ASSAULTS); player->KilledMonsterCredit((IsTower(node)) ? BG_AV_QUEST_CREDIT_TOWER : BG_AV_QUEST_CREDIT_GRAVEYARD); } @@ -1466,46 +1443,226 @@ bool BattlegroundAV::SetupBattleground() return true; } -char const* BattlegroundAV::GetNodeName(BG_AV_Nodes node) +uint8 BattlegroundAV::GetAttackString(BG_AV_Nodes node, TeamId teamId) { + uint8 strId = 0; switch (node) { - case BG_AV_NODES_FIRSTAID_STATION: - return GetAcoreString(LANG_BG_AV_NODE_GRAVE_STORM_AID); - case BG_AV_NODES_DUNBALDAR_SOUTH: - return GetAcoreString(LANG_BG_AV_NODE_TOWER_DUN_S); - case BG_AV_NODES_DUNBALDAR_NORTH: - return GetAcoreString(LANG_BG_AV_NODE_TOWER_DUN_N); - case BG_AV_NODES_STORMPIKE_GRAVE: - return GetAcoreString(LANG_BG_AV_NODE_GRAVE_STORMPIKE); - case BG_AV_NODES_ICEWING_BUNKER: - return GetAcoreString(LANG_BG_AV_NODE_TOWER_ICEWING); - case BG_AV_NODES_STONEHEART_GRAVE: - return GetAcoreString(LANG_BG_AV_NODE_GRAVE_STONE); - case BG_AV_NODES_STONEHEART_BUNKER: - return GetAcoreString(LANG_BG_AV_NODE_TOWER_STONE); - case BG_AV_NODES_SNOWFALL_GRAVE: - return GetAcoreString(LANG_BG_AV_NODE_GRAVE_SNOW); - case BG_AV_NODES_ICEBLOOD_TOWER: - return GetAcoreString(LANG_BG_AV_NODE_TOWER_ICE); - case BG_AV_NODES_ICEBLOOD_GRAVE: - return GetAcoreString(LANG_BG_AV_NODE_GRAVE_ICE); - case BG_AV_NODES_TOWER_POINT: - return GetAcoreString(LANG_BG_AV_NODE_TOWER_POINT); - case BG_AV_NODES_FROSTWOLF_GRAVE: - return GetAcoreString(LANG_BG_AV_NODE_GRAVE_FROST); - case BG_AV_NODES_FROSTWOLF_ETOWER: - return GetAcoreString(LANG_BG_AV_NODE_TOWER_FROST_E); - case BG_AV_NODES_FROSTWOLF_WTOWER: - return GetAcoreString(LANG_BG_AV_NODE_TOWER_FROST_W); - case BG_AV_NODES_FROSTWOLF_HUT: - return GetAcoreString(LANG_BG_AV_NODE_GRAVE_FROST_HUT); - default: - LOG_ERROR("bg.battleground", "tried to get name for node {}", node); - break; + case BG_AV_NODES_FIRSTAID_STATION: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_STORMPIKE_AID_STATION_ATTACK; + else + strId = AV_TEXT_H_HERALD_STORMPIKE_AID_STATION_ATTACK; + break; + case BG_AV_NODES_DUNBALDAR_SOUTH: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_DUN_BALDAR_SOUTH_ATTACK; + else + strId = AV_TEXT_H_HERALD_DUN_BALDAR_SOUTH_ATTACK; + break; + case BG_AV_NODES_DUNBALDAR_NORTH: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_DUN_BALDAR_NORTH_ATTACK; + else + strId = AV_TEXT_H_HERALD_DUN_BALDAR_NORTH_ATTACK; + break; + case BG_AV_NODES_STORMPIKE_GRAVE: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_STORMPIKE_GRAVEYARD_ATTACK; + else + strId = AV_TEXT_H_HERALD_STORMPIKE_GRAVEYARD_ATTACK; + break; + case BG_AV_NODES_ICEWING_BUNKER: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_ICEWING_BUNKER_ATTACK; + else + strId = AV_TEXT_H_HERALD_ICEWING_BUNKER_ATTACK; + break; + case BG_AV_NODES_STONEHEART_GRAVE: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_STONEHEARTH_GRAVEYARD_ATTACK; + else + strId = AV_TEXT_H_HERALD_STONEHEARTH_GRAVEYARD_ATTACK; + break; + case BG_AV_NODES_STONEHEART_BUNKER: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_STONEHEARTH_BUNKER_ATTACK; + else + strId = AV_TEXT_H_HERALD_STONEHEARTH_BUNKER_ATTACK; + break; + case BG_AV_NODES_SNOWFALL_GRAVE: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_SNOWFALL_GRAVEYARD_ATTACK; + else + strId = AV_TEXT_H_HERALD_SNOWFALL_GRAVEYARD_ATTACK; + break; + case BG_AV_NODES_ICEBLOOD_TOWER: + strId = AV_TEXT_A_HERALD_ICEBLOOD_TOWER_ATTACK; + break; + case BG_AV_NODES_ICEBLOOD_GRAVE: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_ICEBLOOD_GRAVEYARD_ATTACK; + else + strId = AV_TEXT_H_HERALD_ICEBLOOD_GRAVEYARD_ATTACK; + break; + case BG_AV_NODES_TOWER_POINT: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_TOWER_POINT_ATTACK; + else + strId = AV_TEXT_H_HERALD_TOWER_POINT_ATTACK; + break; + case BG_AV_NODES_FROSTWOLF_GRAVE: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_FROSTWOLF_GRAVEYARD_ATTACK; + else + strId = AV_TEXT_H_HERALD_FROSTWOLF_GRAVEYARD_ATTACK; + break; + case BG_AV_NODES_FROSTWOLF_ETOWER: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_EAST_FROSTWOLF_TOWER_ATTACK; + else + strId = AV_TEXT_H_HERALD_EAST_FROSTWOLF_TOWER_ATTACK; + break; + case BG_AV_NODES_FROSTWOLF_WTOWER: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_WEST_FROSTWOLF_TOWER_ATTACK; + else + strId = AV_TEXT_H_HERALD_WEST_FROSTWOLF_TOWER_ATTACK; + break; + case BG_AV_NODES_FROSTWOLF_HUT: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_FROSTWOLF_RELIEF_HUT_ATTACK; + else + strId = AV_TEXT_H_HERALD_FROSTWOLF_RELIEF_HUT_ATTACK; + break; + default: + break; } - return "Unknown"; + return strId; +} + +uint8 BattlegroundAV::GetDefendString(BG_AV_Nodes node, TeamId teamId) +{ + uint8 strId = 0; + switch (node) + { + case BG_AV_NODES_FIRSTAID_STATION: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_STORMPIKE_AID_STATION_TAKEN; + else + strId = AV_TEXT_H_HERALD_STORMPIKE_AID_STATION_TAKEN; + break; + case BG_AV_NODES_DUNBALDAR_SOUTH: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_DUN_BALDAR_SOUTH_TAKEN; + else + strId = AV_TEXT_H_HERALD_DUN_BALDAR_SOUTH_TAKEN; + break; + case BG_AV_NODES_DUNBALDAR_NORTH: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_DUN_BALDAR_NORTH_TAKEN; + else + strId = AV_TEXT_H_HERALD_DUN_BALDAR_NORTH_TAKEN; + break; + case BG_AV_NODES_STORMPIKE_GRAVE: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_STORMPIKE_GRAVEYARD_TAKEN; + else + strId = AV_TEXT_H_HERALD_STORMPIKE_GRAVEYARD_TAKEN; + break; + case BG_AV_NODES_ICEWING_BUNKER: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_ICEWING_BUNKER_TAKEN; + else + strId = AV_TEXT_H_HERALD_ICEWING_BUNKER_TAKEN; + break; + case BG_AV_NODES_STONEHEART_GRAVE: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_STONEHEARTH_GRAVEYARD_TAKEN; + else + strId = AV_TEXT_H_HERALD_STONEHEARTH_GRAVEYARD_TAKEN; + break; + case BG_AV_NODES_STONEHEART_BUNKER: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_STONEHEARTH_BUNKER_TAKEN; + else + strId = AV_TEXT_H_HERALD_STONEHEARTH_BUNKER_TAKEN; + break; + case BG_AV_NODES_SNOWFALL_GRAVE: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_SNOWFALL_GRAVEYARD_TAKEN; + else + strId = AV_TEXT_H_HERALD_SNOWFALL_GRAVEYARD_TAKEN; + break; + case BG_AV_NODES_ICEBLOOD_TOWER: + strId = AV_TEXT_A_HERALD_ICEBLOOD_TOWER_TAKEN; + break; + case BG_AV_NODES_ICEBLOOD_GRAVE: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_ICEBLOOD_GRAVEYARD_TAKEN; + else + strId = AV_TEXT_H_HERALD_ICEBLOOD_GRAVEYARD_TAKEN; + break; + case BG_AV_NODES_TOWER_POINT: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_TOWER_POINT_TAKEN; + else + strId = AV_TEXT_H_HERALD_TOWER_POINT_TAKEN; + break; + case BG_AV_NODES_FROSTWOLF_GRAVE: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_FROSTWOLF_GRAVEYARD_TAKEN; + else + strId = AV_TEXT_H_HERALD_FROSTWOLF_GRAVEYARD_TAKEN; + break; + case BG_AV_NODES_FROSTWOLF_ETOWER: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_EAST_FROSTWOLF_TOWER_TAKEN; + else + strId = AV_TEXT_H_HERALD_EAST_FROSTWOLF_TOWER_TAKEN; + break; + case BG_AV_NODES_FROSTWOLF_WTOWER: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_WEST_FROSTWOLF_TOWER_TAKEN; + else + strId = AV_TEXT_H_HERALD_WEST_FROSTWOLF_TOWER_TAKEN; + break; + case BG_AV_NODES_FROSTWOLF_HUT: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_FROSTWOLF_RELIEF_HUT_TAKEN; + else + strId = AV_TEXT_H_HERALD_FROSTWOLF_RELIEF_HUT_TAKEN; + break; + default: + break; + } + + return strId; +} + +uint8 BattlegroundAV::GetMineString(uint8 mineId, TeamId teamId) +{ + uint8 strId = 0; + switch (mineId) + { + case AV_NORTH_MINE: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_IRONDEEP_MINE_TAKEN; + else + strId = AV_TEXT_H_HERALD_IRONDEEP_MINE_TAKEN; + break; + case AV_SOUTH_MINE: + if (teamId == TEAM_ALLIANCE) + strId = AV_TEXT_A_HERALD_COLDTOOTH_MINE_TAKEN; + else + strId = AV_TEXT_H_HERALD_COLDTOOTH_MINE_TAKEN; + break; + default: + break; + } + + return strId; } void BattlegroundAV::AssaultNode(BG_AV_Nodes node, TeamId teamId) diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.h b/src/server/game/Battlegrounds/Zones/BattlegroundAV.h index 2206525f3..c6eaf9171 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.h @@ -1645,6 +1645,78 @@ enum BG_AV_Objectives AV_OBJECTIVE_DEFEND_GRAVEYARD = 65 }; +enum BG_AV_HERALD +{ + AV_TEXT_A_HERALD_STORMPIKE_GRAVEYARD_TAKEN = 1, + AV_TEXT_A_HERALD_STORMPIKE_GRAVEYARD_ATTACK = 2, + AV_TEXT_H_HERALD_STORMPIKE_GRAVEYARD_TAKEN = 3, + AV_TEXT_H_HERALD_STORMPIKE_GRAVEYARD_ATTACK = 4, + AV_TEXT_A_HERALD_SNOWFALL_GRAVEYARD_TAKEN = 5, + AV_TEXT_A_HERALD_SNOWFALL_GRAVEYARD_ATTACK = 6, + AV_TEXT_H_HERALD_SNOWFALL_GRAVEYARD_TAKEN = 7, + AV_TEXT_H_HERALD_SNOWFALL_GRAVEYARD_ATTACK = 8, + AV_TEXT_A_HERALD_FROSTWOLF_GRAVEYARD_TAKEN = 9, + AV_TEXT_A_HERALD_FROSTWOLF_GRAVEYARD_ATTACK = 10, + AV_TEXT_H_HERALD_FROSTWOLF_GRAVEYARD_TAKEN = 11, + AV_TEXT_H_HERALD_FROSTWOLF_GRAVEYARD_ATTACK = 12, + AV_TEXT_H_HERALD_DUN_BALDAR_SOUTH_ATTACK = 13, + AV_TEXT_H_HERALD_DUN_BALDAR_SOUTH_TAKEN = 14, + AV_TEXT_A_HERALD_DUN_BALDAR_SOUTH_ATTACK = 15, + AV_TEXT_A_HERALD_DUN_BALDAR_SOUTH_TAKEN = 16, + AV_TEXT_H_HERALD_DUN_BALDAR_NORTH_ATTACK = 17, + AV_TEXT_H_HERALD_DUN_BALDAR_NORTH_TAKEN = 18, + AV_TEXT_A_HERALD_DUN_BALDAR_NORTH_ATTACK = 19, + AV_TEXT_A_HERALD_DUN_BALDAR_NORTH_TAKEN = 20, + AV_TEXT_H_HERALD_ICEWING_BUNKER_ATTACK = 21, + AV_TEXT_H_HERALD_ICEWING_BUNKER_TAKEN = 22, + AV_TEXT_A_HERALD_ICEWING_BUNKER_ATTACK = 23, + AV_TEXT_A_HERALD_ICEWING_BUNKER_TAKEN = 24, + AV_TEXT_H_HERALD_STONEHEARTH_BUNKER_ATTACK = 25, + AV_TEXT_H_HERALD_STONEHEARTH_BUNKER_TAKEN = 26, + AV_TEXT_A_HERALD_STONEHEARTH_BUNKER_ATTACK = 27, + AV_TEXT_A_HERALD_STONEHEARTH_BUNKER_TAKEN = 28, + AV_TEXT_H_HERALD_WEST_FROSTWOLF_TOWER_ATTACK = 29, + AV_TEXT_H_HERALD_WEST_FROSTWOLF_TOWER_TAKEN = 30, + AV_TEXT_A_HERALD_WEST_FROSTWOLF_TOWER_ATTACK = 31, + AV_TEXT_A_HERALD_WEST_FROSTWOLF_TOWER_TAKEN = 32, + AV_TEXT_H_HERALD_EAST_FROSTWOLF_TOWER_ATTACK = 33, + AV_TEXT_H_HERALD_EAST_FROSTWOLF_TOWER_TAKEN = 34, + AV_TEXT_A_HERALD_EAST_FROSTWOLF_TOWER_ATTACK = 35, + AV_TEXT_A_HERALD_EAST_FROSTWOLF_TOWER_TAKEN = 36, + AV_TEXT_H_HERALD_TOWER_POINT_ATTACK = 37, + AV_TEXT_H_HERALD_TOWER_POINT_TAKEN = 38, + AV_TEXT_A_HERALD_TOWER_POINT_ATTACK = 39, + AV_TEXT_A_HERALD_TOWER_POINT_TAKEN = 40, + AV_TEXT_H_HERALD_ICEBLOOD_BUNKER_ATTACK = 41, + AV_TEXT_H_HERALD_ICEBLOOD_BUNKER_TAKEN = 42, + AV_TEXT_A_HERALD_ICEBLOOD_TOWER_ATTACK = 43, + AV_TEXT_A_HERALD_ICEBLOOD_TOWER_TAKEN = 44, + AV_TEXT_H_HERALD_STORMPIKE_AID_STATION_TAKEN = 45, + AV_TEXT_H_HERALD_STORMPIKE_AID_STATION_ATTACK = 46, + AV_TEXT_A_HERALD_STORMPIKE_AID_STATION_TAKEN = 47, + AV_TEXT_A_HERALD_STORMPIKE_AID_STATION_ATTACK = 48, + AV_TEXT_H_HERALD_FROSTWOLF_RELIEF_HUT_TAKEN = 49, + AV_TEXT_H_HERALD_FROSTWOLF_RELIEF_HUT_ATTACK = 50, + AV_TEXT_A_HERALD_FROSTWOLF_RELIEF_HUT_TAKEN = 51, + AV_TEXT_A_HERALD_FROSTWOLF_RELIEF_HUT_ATTACK = 52, + AV_TEXT_H_HERALD_STONEHEARTH_GRAVEYARD_TAKEN = 53, + AV_TEXT_H_HERALD_STONEHEARTH_GRAVEYARD_ATTACK = 54, + AV_TEXT_A_HERALD_STONEHEARTH_GRAVEYARD_TAKEN = 55, + AV_TEXT_A_HERALD_STONEHEARTH_GRAVEYARD_ATTACK = 56, + AV_TEXT_H_HERALD_ICEBLOOD_GRAVEYARD_TAKEN = 57, + AV_TEXT_H_HERALD_ICEBLOOD_GRAVEYARD_ATTACK = 58, + AV_TEXT_A_HERALD_ICEBLOOD_GRAVEYARD_TAKEN = 59, + AV_TEXT_A_HERALD_ICEBLOOD_GRAVEYARD_ATTACK = 60, + AV_TEXT_A_HERALD_COLDTOOTH_MINE_TAKEN = 61, + AV_TEXT_A_HERALD_IRONDEEP_MINE_TAKEN = 62, + AV_TEXT_H_HERALD_COLDTOOTH_MINE_TAKEN = 63, + AV_TEXT_H_HERALD_IRONDEEP_MINE_TAKEN = 64, + AV_TEXT_HERALD_FROSTWOLF_GENERAL_DEAD = 65, + AV_TEXT_HERALD_STORMPIKE_GENERAL_DEAD = 66, + AV_TEXT_A_HERALD_WIN = 67, + AV_TEXT_H_HERALD_WIN = 68 +}; + struct BG_AV_NodeInfo { BG_AV_States State; @@ -1766,9 +1838,12 @@ private: BG_AV_Nodes GetNodeThroughObject(uint32 object); uint32 GetObjectThroughNode(BG_AV_Nodes node); - char const* GetNodeName(BG_AV_Nodes node); bool IsTower(BG_AV_Nodes node) { return m_Nodes[node].Tower; } + uint8 GetAttackString(BG_AV_Nodes node, TeamId teamId); + uint8 GetDefendString(BG_AV_Nodes node, TeamId teamId); + uint8 GetMineString(uint8 mine, TeamId teamId); + /*mine*/ void ChangeMineOwner(uint8 mine, TeamId teamId, bool initial = false); diff --git a/src/server/game/Entities/Corpse/Corpse.cpp b/src/server/game/Entities/Corpse/Corpse.cpp index ab0b84dca..d4b84138a 100644 --- a/src/server/game/Entities/Corpse/Corpse.cpp +++ b/src/server/game/Entities/Corpse/Corpse.cpp @@ -22,7 +22,6 @@ #include "GameTime.h" #include "Log.h" #include "ObjectAccessor.h" -#include "Opcodes.h" #include "Player.h" #include "UpdateMask.h" #include "World.h" diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index a29ae43de..31ff02f56 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -25,7 +25,6 @@ #include "ItemTemplate.h" #include "LootMgr.h" #include "Unit.h" -#include "UpdateMask.h" #include "World.h" #include diff --git a/src/server/game/Entities/Creature/CreatureData.h b/src/server/game/Entities/Creature/CreatureData.h index 9dbe41cc3..4a19f67bc 100644 --- a/src/server/game/Entities/Creature/CreatureData.h +++ b/src/server/game/Entities/Creature/CreatureData.h @@ -18,14 +18,11 @@ #ifndef AZEROTHCORE_CREATUREDATA_H #define AZEROTHCORE_CREATUREDATA_H -#include "Cell.h" -#include "Common.h" #include "DBCEnums.h" #include "DatabaseEnv.h" #include "ItemTemplate.h" #include "LootMgr.h" #include "Unit.h" -#include "UpdateMask.h" #include "World.h" #include diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.cpp b/src/server/game/Entities/DynamicObject/DynamicObject.cpp index feb9d7cff..3a6882ddc 100644 --- a/src/server/game/Entities/DynamicObject/DynamicObject.cpp +++ b/src/server/game/Entities/DynamicObject/DynamicObject.cpp @@ -18,7 +18,6 @@ #include "GameTime.h" #include "GridNotifiers.h" #include "ObjectAccessor.h" -#include "Opcodes.h" #include "ScriptMgr.h" #include "SpellAuraEffects.h" #include "Transport.h" diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index cbba5a954..f293788b9 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -20,7 +20,6 @@ #include "CellImpl.h" #include "CreatureAISelector.h" #include "DisableMgr.h" -#include "DynamicTree.h" #include "GameObjectAI.h" #include "GameObjectModel.h" #include "GameTime.h" diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index 678052b14..d8598f5fc 100644 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -26,7 +26,6 @@ #include "Object.h" #include "SharedDefines.h" #include "Unit.h" -#include class GameObjectAI; class Transport; diff --git a/src/server/game/Entities/Item/ItemTemplate.h b/src/server/game/Entities/Item/ItemTemplate.h index 7e18ee1ef..47ec72fba 100644 --- a/src/server/game/Entities/Item/ItemTemplate.h +++ b/src/server/game/Entities/Item/ItemTemplate.h @@ -18,7 +18,6 @@ #ifndef _ITEMPROTOTYPE_H #define _ITEMPROTOTYPE_H -#include "Common.h" #include "SharedDefines.h" #include "WorldPacket.h" #include diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index 6dd7f0d7f..b419531a6 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -35,6 +35,8 @@ #include #include +#include "UpdateFields.h" + class ElunaEventProcessor; enum TempSummonType diff --git a/src/server/game/Entities/Object/ObjectGuid.h b/src/server/game/Entities/Object/ObjectGuid.h index bb8029048..94363d6f5 100644 --- a/src/server/game/Entities/Object/ObjectGuid.h +++ b/src/server/game/Entities/Object/ObjectGuid.h @@ -23,9 +23,7 @@ #include #include #include -#include #include -#include #include #include diff --git a/src/server/game/Entities/Object/Updates/UpdateMask.h b/src/server/game/Entities/Object/Updates/UpdateMask.h index 87816a734..906209c63 100644 --- a/src/server/game/Entities/Object/Updates/UpdateMask.h +++ b/src/server/game/Entities/Object/Updates/UpdateMask.h @@ -20,7 +20,6 @@ #include "ByteBuffer.h" #include "Errors.h" -#include "UpdateFields.h" class UpdateMask { diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 65edcad03..1951206da 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -42,7 +42,6 @@ #include "Formulas.h" #include "GameEventMgr.h" #include "GameGraveyard.h" -#include "GameObjectAI.h" #include "GameTime.h" #include "GossipDef.h" #include "GridNotifiers.h" @@ -63,7 +62,6 @@ #include "OutdoorPvPMgr.h" #include "Pet.h" #include "PetitionMgr.h" -#include "QueryHolder.h" #include "QuestDef.h" #include "Realm.h" #include "ReputationMgr.h" diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 0fb1336b9..288c9392e 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -28,7 +28,6 @@ #include "GroupReference.h" #include "InstanceSaveMgr.h" #include "Item.h" -#include "KillRewarder.h" #include "MapReference.h" #include "ObjectMgr.h" #include "Optional.h" @@ -38,7 +37,6 @@ #include "QuestDef.h" #include "SpellAuras.h" #include "SpellInfo.h" -#include "SpellMgr.h" #include "TradeData.h" #include "Unit.h" #include "WorldSession.h" diff --git a/src/server/game/Entities/Player/PlayerStorage.cpp b/src/server/game/Entities/Player/PlayerStorage.cpp index f350b3e9a..eec6bd9d3 100644 --- a/src/server/game/Entities/Player/PlayerStorage.cpp +++ b/src/server/game/Entities/Player/PlayerStorage.cpp @@ -20,9 +20,7 @@ #include "ArenaTeam.h" #include "ArenaTeamMgr.h" #include "Battlefield.h" -#include "BattlefieldMgr.h" #include "Battleground.h" -#include "BattlegroundAV.h" #include "BattlegroundMgr.h" #include "Channel.h" #include "CharacterDatabaseCleaner.h" @@ -69,7 +67,6 @@ #include "UpdateFieldFlags.h" #include "Util.h" #include "Vehicle.h" -#include "Weather.h" #include "World.h" #include "WorldPacket.h" diff --git a/src/server/game/Entities/Player/PlayerTaxi.h b/src/server/game/Entities/Player/PlayerTaxi.h index 3923a8c54..a200ad8f7 100644 --- a/src/server/game/Entities/Player/PlayerTaxi.h +++ b/src/server/game/Entities/Player/PlayerTaxi.h @@ -19,7 +19,6 @@ #define __PLAYER_TAXI_H__ #include "DBCStructure.h" -#include class ByteBuffer; diff --git a/src/server/game/Entities/Player/SocialMgr.h b/src/server/game/Entities/Player/SocialMgr.h index cf495705d..a35187b6f 100644 --- a/src/server/game/Entities/Player/SocialMgr.h +++ b/src/server/game/Entities/Player/SocialMgr.h @@ -18,7 +18,6 @@ #ifndef __ACORE_SOCIALMGR_H #define __ACORE_SOCIALMGR_H -#include "Common.h" #include "DatabaseEnv.h" #include "ObjectGuid.h" #include diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index 3dc023eb4..47203f94c 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -29,7 +29,6 @@ #include "ScriptMgr.h" #include "Spell.h" #include "Vehicle.h" -#include "World.h" #include "WorldModel.h" MotionTransport::MotionTransport() : Transport(), _transportInfo(nullptr), _isMoving(true), _pendingStop(false), _triggeredArrivalEvent(false), _triggeredDepartureEvent(false), _passengersLoaded(false), _delayedTeleport(false) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index a3628fdcf..a2a4425e0 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -33,12 +33,10 @@ #include "CreatureGroups.h" #include "DisableMgr.h" #include "DynamicVisibility.h" -#include "Formulas.h" #include "GameObjectAI.h" #include "GameTime.h" #include "GridNotifiersImpl.h" #include "Group.h" -#include "InstanceSaveMgr.h" #include "Log.h" #include "MapMgr.h" #include "MoveSpline.h" @@ -2343,7 +2341,7 @@ void Unit::CalcAbsorbResist(DamageInfo& dmgInfo, bool Splited) { // We're going to call functions which can modify content of the list during iteration over it's elements // Let's copy the list so we can prevent iterator invalidation - AuraEffectList vSplitDamageFlatCopy(victim->GetAuraEffectsByType(SPELL_AURA_SPLIT_DAMAGE_FLAT)); + AuraEffectList vSplitDamageFlatCopy(victim->GetAuraEffectsByType(SPELL_AURA_SPLIT_DAMAGE_FLAT)); // Not used by any spell for (AuraEffectList::iterator itr = vSplitDamageFlatCopy.begin(); (itr != vSplitDamageFlatCopy.end()) && (dmgInfo.GetDamage() > 0); ++itr) { // Check if aura was removed during iteration - we don't need to work on such auras @@ -2358,6 +2356,13 @@ void Unit::CalcAbsorbResist(DamageInfo& dmgInfo, bool Splited) if (!caster || (caster == victim) || !caster->IsInWorld() || !caster->IsAlive()) continue; + // Limit effect range to spell's cast range. (Only for single target auras, AreaAuras don't need it) + // Ignore LOS attribute is only used for the cast portion of the spell + SpellInfo const* splitSpellInfo = (*itr)->GetSpellInfo(); + if (!splitSpellInfo->Effects[(*itr)->GetEffIndex()].IsAreaAuraEffect()) + if (!caster->IsWithinDist(victim, splitSpellInfo->GetMaxRange(splitSpellInfo->IsPositive(), caster))) + continue; + int32 splitDamage = (*itr)->GetAmount(); // absorb must be smaller than the damage itself @@ -2418,10 +2423,11 @@ void Unit::CalcAbsorbResist(DamageInfo& dmgInfo, bool Splited) if (!caster || (caster == victim) || !caster->IsInWorld() || !caster->IsAlive()) continue; - // Xinef: Single Target splits require LoS + // Limit effect range to spell's cast range. (Only for single target auras, AreaAuras don't need it) + // Ignore LOS attribute is only used for the cast portion of the spell SpellInfo const* splitSpellInfo = (*itr)->GetSpellInfo(); - if (!splitSpellInfo->Effects[(*itr)->GetEffIndex()].IsAreaAuraEffect() && !splitSpellInfo->HasAttribute(SPELL_ATTR2_IGNORE_LINE_OF_SIGHT)) - if (!caster->IsWithinLOSInMap(victim) || !caster->IsWithinDist(victim, splitSpellInfo->GetMaxRange(splitSpellInfo->IsPositive(), caster))) + if (!splitSpellInfo->Effects[(*itr)->GetEffIndex()].IsAreaAuraEffect()) + if (!caster->IsWithinDist(victim, splitSpellInfo->GetMaxRange(splitSpellInfo->IsPositive(), caster))) continue; uint32 splitDamage = CalculatePct(dmgInfo.GetDamage(), (*itr)->GetAmount()); diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 0f79ee7b2..cff069123 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -26,7 +26,6 @@ #include "ItemTemplate.h" #include "MotionMaster.h" #include "Object.h" -#include "Optional.h" #include "SpellAuraDefines.h" #include "SpellDefines.h" #include "ThreatMgr.h" diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp index 1e7ecbe8b..313427813 100644 --- a/src/server/game/Entities/Vehicle/Vehicle.cpp +++ b/src/server/game/Entities/Vehicle/Vehicle.cpp @@ -22,7 +22,6 @@ #include "ObjectMgr.h" #include "Player.h" #include "ScriptMgr.h" -#include "SpellInfo.h" #include "TemporarySummon.h" #include "Unit.h" #include "Util.h" diff --git a/src/server/game/Entities/Vehicle/Vehicle.h b/src/server/game/Entities/Vehicle/Vehicle.h index 32887c6e7..694efb9fd 100644 --- a/src/server/game/Entities/Vehicle/Vehicle.h +++ b/src/server/game/Entities/Vehicle/Vehicle.h @@ -18,8 +18,6 @@ #ifndef __ACORE_VEHICLE_H #define __ACORE_VEHICLE_H -#include "EventProcessor.h" -#include "ObjectDefines.h" #include "Unit.h" #include "VehicleDefines.h" diff --git a/src/server/game/Entities/Vehicle/VehicleDefines.h b/src/server/game/Entities/Vehicle/VehicleDefines.h index 2385b5cf0..8facc8aee 100644 --- a/src/server/game/Entities/Vehicle/VehicleDefines.h +++ b/src/server/game/Entities/Vehicle/VehicleDefines.h @@ -20,7 +20,6 @@ #include "Define.h" #include "Map.h" -#include "Object.h" #include #include diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.h b/src/server/game/Grids/Notifiers/GridNotifiers.h index 97189e16c..c6ec70d1b 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiers.h +++ b/src/server/game/Grids/Notifiers/GridNotifiers.h @@ -33,6 +33,8 @@ #include "WorldSession.h" #include +#include "SpellMgr.h" + class Player; //class Map; diff --git a/src/server/game/Handlers/AuctionHouseHandler.cpp b/src/server/game/Handlers/AuctionHouseHandler.cpp index dcba85fe6..fad0182c5 100644 --- a/src/server/game/Handlers/AuctionHouseHandler.cpp +++ b/src/server/game/Handlers/AuctionHouseHandler.cpp @@ -55,7 +55,7 @@ void WorldSession::SendAuctionHello(ObjectGuid guid, Creature* unit) { if (GetPlayer()->GetLevel() < sWorld->getIntConfig(CONFIG_AUCTION_LEVEL_REQ)) { - SendNotification(GetAcoreString(LANG_AUCTION_REQ), sWorld->getIntConfig(CONFIG_AUCTION_LEVEL_REQ)); + SendNotification(LANG_AUCTION_REQ, sWorld->getIntConfig(CONFIG_AUCTION_LEVEL_REQ)); return; } diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp index cd677556e..b0c1bfd0f 100644 --- a/src/server/game/Handlers/ChatHandler.cpp +++ b/src/server/game/Handlers/ChatHandler.cpp @@ -131,7 +131,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData) break; default: { - if (sWorld->getBoolConfig(CONFIG_CHAT_MUTE_FIRST_LOGIN)) + if (sWorld->getBoolConfig(CONFIG_CHAT_MUTE_FIRST_LOGIN) && lang != LANG_ADDON) { uint32 minutes = sWorld->getIntConfig(CONFIG_CHAT_TIME_MUTE_FIRST_LOGIN); @@ -164,7 +164,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData) if (sender->HasAura(1852) && type != CHAT_MSG_WHISPER) { - SendNotification(GetAcoreString(LANG_GM_SILENCE), sender->GetName().c_str()); + SendNotification(LANG_GM_SILENCE, sender->GetName()); recvData.rfinish(); return; } @@ -296,7 +296,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData) if (!_player->CanSpeak()) { std::string timeStr = secsToTimeString(m_muteTime - GameTime::GetGameTime().count()); - SendNotification(GetAcoreString(LANG_WAIT_BEFORE_SPEAKING), timeStr.c_str()); + SendNotification(LANG_WAIT_BEFORE_SPEAKING, timeStr); return; } } @@ -361,7 +361,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData) if (sender->GetLevel() < sWorld->getIntConfig(CONFIG_CHAT_SAY_LEVEL_REQ)) { - SendNotification(GetAcoreString(LANG_SAY_REQ), sWorld->getIntConfig(CONFIG_CHAT_SAY_LEVEL_REQ)); + SendNotification(LANG_SAY_REQ, sWorld->getIntConfig(CONFIG_CHAT_SAY_LEVEL_REQ)); return; } @@ -387,7 +387,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData) if (sender->GetLevel() < sWorld->getIntConfig(CONFIG_CHAT_WHISPER_LEVEL_REQ) && receiver != sender) { - SendNotification(GetAcoreString(LANG_WHISPER_REQ), sWorld->getIntConfig(CONFIG_CHAT_WHISPER_LEVEL_REQ)); + SendNotification(LANG_WHISPER_REQ, sWorld->getIntConfig(CONFIG_CHAT_WHISPER_LEVEL_REQ)); return; } @@ -407,7 +407,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData) // pussywizard: optimization if (GetPlayer()->HasAura(1852) && !receiver->IsGameMaster()) { - SendNotification(GetAcoreString(LANG_GM_SILENCE), GetPlayer()->GetName().c_str()); + SendNotification(LANG_GM_SILENCE, GetPlayer()->GetName()); return; } @@ -601,7 +601,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData) { if (sender->GetLevel() < sWorld->getIntConfig(CONFIG_CHAT_CHANNEL_LEVEL_REQ)) { - SendNotification(GetAcoreString(LANG_CHANNEL_REQ), sWorld->getIntConfig(CONFIG_CHAT_CHANNEL_LEVEL_REQ)); + SendNotification(LANG_CHANNEL_REQ, sWorld->getIntConfig(CONFIG_CHAT_CHANNEL_LEVEL_REQ)); return; } } @@ -746,7 +746,7 @@ void WorldSession::HandleTextEmoteOpcode(WorldPacket& recvData) if (!GetPlayer()->CanSpeak()) { std::string timeStr = secsToTimeString(m_muteTime - GameTime::GetGameTime().count()); - SendNotification(GetAcoreString(LANG_WAIT_BEFORE_SPEAKING), timeStr.c_str()); + SendNotification(LANG_WAIT_BEFORE_SPEAKING, timeStr); return; } diff --git a/src/server/game/Handlers/MailHandler.cpp b/src/server/game/Handlers/MailHandler.cpp index 626991967..9c71d98bc 100644 --- a/src/server/game/Handlers/MailHandler.cpp +++ b/src/server/game/Handlers/MailHandler.cpp @@ -117,7 +117,7 @@ void WorldSession::HandleSendMail(WorldPacket& recvData) if (player->GetLevel() < sWorld->getIntConfig(CONFIG_MAIL_LEVEL_REQ)) { - SendNotification(GetAcoreString(LANG_MAIL_SENDER_REQ), sWorld->getIntConfig(CONFIG_MAIL_LEVEL_REQ)); + SendNotification(LANG_MAIL_SENDER_REQ, sWorld->getIntConfig(CONFIG_MAIL_LEVEL_REQ)); return; } diff --git a/src/server/game/Handlers/TicketHandler.cpp b/src/server/game/Handlers/TicketHandler.cpp index 9a445efe4..ff9fe4e3a 100644 --- a/src/server/game/Handlers/TicketHandler.cpp +++ b/src/server/game/Handlers/TicketHandler.cpp @@ -35,7 +35,7 @@ void WorldSession::HandleGMTicketCreateOpcode(WorldPacket& recvData) if (GetPlayer()->GetLevel() < sWorld->getIntConfig(CONFIG_TICKET_LEVEL_REQ)) { - SendNotification(GetAcoreString(LANG_TICKET_REQ), sWorld->getIntConfig(CONFIG_TICKET_LEVEL_REQ)); + SendNotification(LANG_TICKET_REQ, sWorld->getIntConfig(CONFIG_TICKET_LEVEL_REQ)); return; } diff --git a/src/server/game/Handlers/TradeHandler.cpp b/src/server/game/Handlers/TradeHandler.cpp index 28ad91fdd..55c8079ef 100644 --- a/src/server/game/Handlers/TradeHandler.cpp +++ b/src/server/game/Handlers/TradeHandler.cpp @@ -574,7 +574,7 @@ void WorldSession::HandleInitiateTradeOpcode(WorldPacket& recvPacket) if (GetPlayer()->GetLevel() < sWorld->getIntConfig(CONFIG_TRADE_LEVEL_REQ)) { - SendNotification(GetAcoreString(LANG_TRADE_REQ), sWorld->getIntConfig(CONFIG_TRADE_LEVEL_REQ)); + SendNotification(LANG_TRADE_REQ, sWorld->getIntConfig(CONFIG_TRADE_LEVEL_REQ)); return; } @@ -639,7 +639,7 @@ void WorldSession::HandleInitiateTradeOpcode(WorldPacket& recvPacket) if (pOther->GetLevel() < sWorld->getIntConfig(CONFIG_TRADE_LEVEL_REQ)) { - SendNotification(GetAcoreString(LANG_TRADE_OTHER_REQ), sWorld->getIntConfig(CONFIG_TRADE_LEVEL_REQ)); + SendNotification(LANG_TRADE_OTHER_REQ, sWorld->getIntConfig(CONFIG_TRADE_LEVEL_REQ)); return; } diff --git a/src/server/game/Loot/LootMgr.cpp b/src/server/game/Loot/LootMgr.cpp index 182a0f416..5284e5554 100644 --- a/src/server/game/Loot/LootMgr.cpp +++ b/src/server/game/Loot/LootMgr.cpp @@ -468,9 +468,20 @@ bool LootItem::AllowedForPlayer(Player const* player, ObjectGuid source) const } // check quest requirements - if (!(pProto->FlagsCu & ITEM_FLAGS_CU_IGNORE_QUEST_STATUS) && ((needs_quest || (pProto->StartQuest && player->GetQuestStatus(pProto->StartQuest) != QUEST_STATUS_NONE)) && !player->HasQuestForItem(itemid))) + if (!(pProto->FlagsCu & ITEM_FLAGS_CU_IGNORE_QUEST_STATUS)) { - return false; + // Don't drop quest items if the player is missing the relevant quest + if (needs_quest && !player->HasQuestForItem(itemid)) + return false; + + // for items that start quests + if (pProto->StartQuest) + { + // Don't drop the item if the player has already finished the quest OR player already has the item in their inventory, and that item is unique OR the player has not finished a prerequisite quest + uint32 prevQuestId = sObjectMgr->GetQuestTemplate(pProto->StartQuest) ? sObjectMgr->GetQuestTemplate(pProto->StartQuest)->GetPrevQuestId() : 0; + if (player->GetQuestStatus(pProto->StartQuest) != QUEST_STATUS_NONE || (player->HasItemCount(itemid, pProto->MaxCount) && pProto->MaxCount) || (prevQuestId && !player->GetQuestRewardStatus(prevQuestId))) + return false; + } } if (!sScriptMgr->OnAllowedForPlayerLootCheck(player, source)) diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index d47db9bb6..d0219e83b 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -415,7 +415,12 @@ enum AcoreStrings LANG_COMMAND_RESET_ITEMS_ALL_BAGS = 372, // [END] reset items command strings - // Room for more level 2 373-399 not used + // .aura stack + LANG_COMMAND_AURASTACK_NO_AURA = 373, + LANG_COMMAND_AURASTACK_NO_STACK = 374, + LANG_COMMAND_AURASTACK_CANT_STACK = 375, + + // Room for more level 2 376-399 not used // level 3 chat LANG_SCRIPTS_RELOADED = 400, @@ -975,43 +980,7 @@ enum AcoreStrings LANG_DEBUG_AREATRIGGER_OFF = 1203, LANG_DEBUG_AREATRIGGER_REACHED = 1204, - // 1205-1299 - free - - // 1300-1333 - // AV - LANG_BG_AV_ALLY = 1300, - LANG_BG_AV_HORDE = 1301, - LANG_BG_AV_TOWER_TAKEN = 1302, - LANG_BG_AV_TOWER_ASSAULTED = 1303, - LANG_BG_AV_TOWER_DEFENDED = 1304, - LANG_BG_AV_GRAVE_TAKEN = 1305, - LANG_BG_AV_GRAVE_DEFENDED = 1306, - LANG_BG_AV_GRAVE_ASSAULTED = 1307, - - LANG_BG_AV_MINE_TAKEN = 1308, - LANG_BG_AV_MINE_NORTH = 1309, - LANG_BG_AV_MINE_SOUTH = 1310, - - LANG_BG_AV_NODE_GRAVE_STORM_AID = 1311, - LANG_BG_AV_NODE_TOWER_DUN_S = 1312, - LANG_BG_AV_NODE_TOWER_DUN_N = 1313, - LANG_BG_AV_NODE_GRAVE_STORMPIKE = 1314, - LANG_BG_AV_NODE_TOWER_ICEWING = 1315, - LANG_BG_AV_NODE_GRAVE_STONE = 1316, - LANG_BG_AV_NODE_TOWER_STONE = 1317, - LANG_BG_AV_NODE_GRAVE_SNOW = 1318, - LANG_BG_AV_NODE_TOWER_ICE = 1319, - LANG_BG_AV_NODE_GRAVE_ICE = 1320, - LANG_BG_AV_NODE_TOWER_POINT = 1321, - LANG_BG_AV_NODE_GRAVE_FROST = 1322, - LANG_BG_AV_NODE_TOWER_FROST_E = 1323, - LANG_BG_AV_NODE_TOWER_FROST_W = 1324, - LANG_BG_AV_NODE_GRAVE_FROST_HUT = 1325, - - // 1326-1330 - free - - LANG_BG_AV_H_CAPTAIN_DEAD = 1331, - LANG_BG_AV_A_CAPTAIN_DEAD = 1332, + // 1205-1333 - free //Player Ticket Strings LANG_TICKET_CLOSED = 1334, diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index 033cc6b85..e5aad746f 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -43,6 +43,7 @@ #include "QueryHolder.h" #include "ScriptMgr.h" #include "SocialMgr.h" +#include "Tokenize.h" #include "Transport.h" #include "Vehicle.h" #include "WardenMac.h" @@ -813,37 +814,12 @@ bool WorldSession::DisallowHyperlinksAndMaybeKick(std::string_view str) return false; } -void WorldSession::SendNotification(const char* format, ...) +void WorldSession::SendNotification(std::string_view str) { - if (format) + WorldPacket data(SMSG_NOTIFICATION, str.size() + 1); + for (std::string_view line : Acore::Tokenize(str, '\n', true)) { - va_list ap; - char szStr[1024]; - szStr[0] = '\0'; - va_start(ap, format); - vsnprintf(szStr, 1024, format, ap); - va_end(ap); - - WorldPacket data(SMSG_NOTIFICATION, (strlen(szStr) + 1)); - data << szStr; - SendPacket(&data); - } -} - -void WorldSession::SendNotification(uint32 string_id, ...) -{ - char const* format = GetAcoreString(string_id); - if (format) - { - va_list ap; - char szStr[1024]; - szStr[0] = '\0'; - va_start(ap, string_id); - vsnprintf(szStr, 1024, format, ap); - va_end(ap); - - WorldPacket data(SMSG_NOTIFICATION, (strlen(szStr) + 1)); - data << szStr; + data << line.data(); SendPacket(&data); } } diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 2a99cf92f..3ba4c9aad 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -365,9 +365,19 @@ public: void ReadMovementInfo(WorldPacket& data, MovementInfo* mi); void WriteMovementInfo(WorldPacket* data, MovementInfo* mi); + void SendNotification(std::string_view str); + template + void SendNotification(uint32 strId, Args&&... args) + { + SendNotification(Acore::StringFormatFmt(GetAcoreString(strId), std::forward(args)...)); + } + template + void SendNotification(char const* fmt, Args&&... args) + { + SendNotification(Acore::StringFormatFmt(fmt, std::forward(args)...)); + } + void SendPacket(WorldPacket const* packet); - void SendNotification(const char* format, ...) ATTR_PRINTF(2, 3); - void SendNotification(uint32 string_id, ...); void SendPetNameInvalid(uint32 error, std::string const& name, DeclinedName* declinedName); void SendPartyResult(PartyOperation operation, std::string const& member, PartyResult res, uint32 val = 0); void SendAreaTriggerMessage(const char* Text, ...) ATTR_PRINTF(2, 3); diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 63af8f62b..2bc4495ba 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -290,7 +290,7 @@ pAuraEffectHandler AuraEffectHandler[TOTAL_AURAS] = &AuraEffect::HandleNoImmediateEffect, //227 SPELL_AURA_PERIODIC_TRIGGER_SPELL_WITH_VALUE implemented in AuraEffect::PeriodicTick &AuraEffect::HandleNoImmediateEffect, //228 SPELL_AURA_DETECT_STEALTH stealth detection &AuraEffect::HandleNoImmediateEffect, //229 SPELL_AURA_MOD_AOE_DAMAGE_AVOIDANCE - &AuraEffect::HandleAuraModIncreaseHealth, //230 SPELL_AURA_MOD_INCREASE_HEALTH_2 + &AuraEffect::HandleAuraModIncreaseMaxHealth, //230 SPELL_AURA_MOD_INCREASE_HEALTH_2 only Blood Pact and Commanding Shout &AuraEffect::HandleNoImmediateEffect, //231 SPELL_AURA_PROC_TRIGGER_SPELL_WITH_VALUE &AuraEffect::HandleNoImmediateEffect, //232 SPELL_AURA_MECHANIC_DURATION_MOD implement in Unit::CalculateSpellDuration &AuraEffect::HandleUnused, //233 set model id to the one of the creature with id GetMiscValue() - clientside diff --git a/src/server/game/Spells/SpellInfoCorrections.cpp b/src/server/game/Spells/SpellInfoCorrections.cpp index e89a66b49..df0f6d901 100644 --- a/src/server/game/Spells/SpellInfoCorrections.cpp +++ b/src/server/game/Spells/SpellInfoCorrections.cpp @@ -3607,62 +3607,6 @@ void SpellMgr::LoadSpellInfoCorrections() spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_10_YARDS); // 10yd }); - // Dragonmaw Race: All parts - ApplySpellFix({ - 40890 // Oldie's Rotten Pumpkin - }, [](SpellInfo* spellInfo) - { - spellInfo->Targets |= TARGET_FLAG_DEST_LOCATION; - spellInfo->Effects[EFFECT_0].TriggerSpell = 40905; - spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_TRIGGER_MISSILE; - spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST); - }); - - // Trope's Slime Cannon - ApplySpellFix({ 40909 }, [](SpellInfo* spellInfo) - { - spellInfo->Targets |= TARGET_FLAG_DEST_LOCATION; - spellInfo->Effects[EFFECT_0].TriggerSpell = 40905; - spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_TRIGGER_MISSILE; - spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST); - }); - - // Corlok's Skull Barrage - ApplySpellFix({ 40894 }, [](SpellInfo* spellInfo) - { - spellInfo->Targets |= TARGET_FLAG_DEST_LOCATION; - spellInfo->Effects[EFFECT_0].TriggerSpell = 40900; - spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_TRIGGER_MISSILE; - spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST); - }); - - // Ichman's Blazing Fireball - ApplySpellFix({ 40928 }, [](SpellInfo* spellInfo) - { - spellInfo->Targets |= TARGET_FLAG_DEST_LOCATION; - spellInfo->Effects[EFFECT_0].TriggerSpell = 40929; - spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_TRIGGER_MISSILE; - spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST); - }); - - // Mulverick's Great Balls of Lightning - ApplySpellFix({ 40930 }, [](SpellInfo* spellInfo) - { - spellInfo->Targets |= TARGET_FLAG_DEST_LOCATION; - spellInfo->Effects[EFFECT_0].TriggerSpell = 40931; - spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_TRIGGER_MISSILE; - spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST); - }); - - // Sky Shatter - ApplySpellFix({ 40945 }, [](SpellInfo* spellInfo) - { - spellInfo->Targets |= TARGET_FLAG_DEST_LOCATION; - spellInfo->Effects[EFFECT_0].TriggerSpell = 41064; - spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_TRIGGER_MISSILE; - spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST); - }); - // Gauging the Resonant Frequency (10594) ApplySpellFix({ 37390 }, [](SpellInfo* spellInfo) { @@ -4834,6 +4778,12 @@ void SpellMgr::LoadSpellInfoCorrections() spellInfo->AuraInterruptFlags &= ~AURA_INTERRUPT_FLAG_NOT_ABOVEWATER; }); + // Molten Punch + ApplySpellFix({ 40126 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_DEST_CASTER); + }); + for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i) { SpellInfo* spellInfo = mSpellInfoMap[i]; diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 8fbc4d045..5deba7bf3 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -87,12 +87,18 @@ public: ChatCommandTable GetCommands() const override { + static ChatCommandTable auraCommandTable = + { + { "stack", HandleAuraStacksCommand, SEC_GAMEMASTER, Console::No }, + { "", HandleAuraCommand, SEC_GAMEMASTER, Console::No } + }; + static ChatCommandTable commandTable = { { "commentator", HandleCommentatorCommand, SEC_MODERATOR, Console::No }, { "dev", HandleDevCommand, SEC_ADMINISTRATOR, Console::No }, { "gps", HandleGPSCommand, SEC_MODERATOR, Console::No }, - { "aura", HandleAuraCommand, SEC_GAMEMASTER, Console::No }, + { "aura", auraCommandTable }, { "unaura", HandleUnAuraCommand, SEC_GAMEMASTER, Console::No }, { "appear", HandleAppearCommand, SEC_MODERATOR, Console::No }, { "summon", HandleSummonCommand, SEC_GAMEMASTER, Console::No }, @@ -129,7 +135,7 @@ public: { "cometome", HandleComeToMeCommand, SEC_ADMINISTRATOR, Console::No }, { "damage", HandleDamageCommand, SEC_GAMEMASTER, Console::No }, { "combatstop", HandleCombatStopCommand, SEC_GAMEMASTER, Console::Yes }, - { "flusharenapoints", HandleFlushArenaPointsCommand, SEC_ADMINISTRATOR, Console::Yes }, + { "flusharenapoints", HandleFlushArenaPointsCommand, SEC_ADMINISTRATOR, Console::Yes }, { "freeze", HandleFreezeCommand, SEC_GAMEMASTER, Console::No }, { "unfreeze", HandleUnFreezeCommand, SEC_GAMEMASTER, Console::No }, { "possess", HandlePossessCommand, SEC_GAMEMASTER, Console::No }, @@ -653,6 +659,51 @@ public: return true; } + static bool HandleAuraStacksCommand(ChatHandler* handler, SpellInfo const* spell, int16 stacks) + { + if (!spell) + { + handler->SendErrorMessage(LANG_COMMAND_NOSPELLFOUND); + return false; + } + + if (!SpellMgr::IsSpellValid(spell)) + { + handler->SendErrorMessage(LANG_COMMAND_SPELL_BROKEN, spell->Id); + return false; + } + + if (!stacks) + { + handler->SendErrorMessage(LANG_COMMAND_AURASTACK_NO_STACK); + return false; + } + + Unit* target = handler->getSelectedUnit(); + if (!target) + { + handler->SendErrorMessage(LANG_SELECT_CHAR_OR_CREATURE); + return false; + } + + Aura* aur = target->GetAura(spell->Id); + if (!aur) + { + handler->SendErrorMessage(LANG_COMMAND_AURASTACK_NO_AURA, spell->Id); + return false; + } + + if (!spell->StackAmount) + { + handler->SendErrorMessage(LANG_COMMAND_AURASTACK_CANT_STACK, spell->Id); + return false; + } + + aur->ModStackAmount(stacks); + + return true; + } + static bool HandleUnAuraCommand(ChatHandler* handler, Variant spells) { Unit* target = handler->getSelectedUnit(); diff --git a/src/server/scripts/Commands/cs_server.cpp b/src/server/scripts/Commands/cs_server.cpp index 50b115e41..511867c96 100644 --- a/src/server/scripts/Commands/cs_server.cpp +++ b/src/server/scripts/Commands/cs_server.cpp @@ -279,7 +279,7 @@ public: handler->PSendSysMessage("Connection peak: {}.", connPeak); handler->PSendSysMessage(LANG_UPTIME, secsToTimeString(GameTime::GetUptime().count())); - handler->PSendSysMessage("Update time diff: {}ms. Last %d diffs summary:", sWorldUpdateTime.GetLastUpdateTime(), sWorldUpdateTime.GetDatasetSize()); + handler->PSendSysMessage("Update time diff: {}ms. Last {} diffs summary:", sWorldUpdateTime.GetLastUpdateTime(), sWorldUpdateTime.GetDatasetSize()); handler->PSendSysMessage("|- Mean: {}ms", sWorldUpdateTime.GetAverageUpdateTime()); handler->PSendSysMessage("|- Median: {}ms", sWorldUpdateTime.GetPercentile(50)); handler->PSendSysMessage("|- Percentiles (95, 99, max): {}ms, {}ms, {}ms", diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp index 280e5b05b..3a3d7d6ff 100644 --- a/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp +++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp @@ -15,7 +15,6 @@ * with this program. If not, see . */ -#include "CreatureScript.h" #include "InstanceMapScript.h" #include "InstanceScript.h" #include "blackfathom_deeps.h" diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp index c24a63ec1..cab91dd88 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp @@ -16,10 +16,10 @@ */ #include "CreatureScript.h" +#include "GridNotifiers.h" #include "Player.h" #include "ScriptedCreature.h" #include "SpellAuraEffects.h" -#include "SpellAuras.h" #include "SpellScript.h" #include "SpellScriptLoader.h" #include "hyjal.h" @@ -145,32 +145,35 @@ struct npc_doomfire_spirit : public ScriptedAI { npc_doomfire_spirit(Creature* creature) : ScriptedAI(creature){ } - float const turnConstant = 0.785402f; - float fAngle = urand(0, M_PI * 2); + float const turnConstant = 0.785402f; // 45 degree turns, verified with sniffs void Reset() override { - scheduler.CancelAll(); - ScheduleTimedEvent(0s, [&] { - float nextOrientation = Position::NormalizeOrientation(me->GetOrientation() + irand(-1, 1) * turnConstant); - Position pos = GetFirstRandomAngleCollisionPosition(8.f, nextOrientation); // both orientation and distance verified with sniffs - me->NearTeleportTo(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), nextOrientation); - }, 1600ms); + ScheduleUniqueTimedEvent(10ms, [&] { + TryTeleportInDirection(1.f, M_PI, 1.f, true); //turns around and teleports 1 unit on spawn, assuming same logic as later teleports applies - fAngle = urand(0, M_PI * 2); + ScheduleTimedEvent(10ms, [&] { + float angle = irand(-1, 1) * turnConstant; + TryTeleportInDirection(8.f, angle, 2.f, false); + }, 1600ms); + },1); } - Position GetFirstRandomAngleCollisionPosition(float dist, float angle) + void TryTeleportInDirection(float dist, float angle, float step, bool alwaysturn) { Position pos; - for (uint32 i = 0; i < 10; ++i) + while (dist >= 0) { pos = me->WorldObject::GetFirstCollisionPosition(dist, angle); - if (me->GetDistance(pos) > dist * 0.8f) // if at least 80% distance, good enough + if (fabsf(dist - me->GetExactDist2d(pos)) < 0.001) // Account for small deviation break; - angle += (M_PI / 5); // else try slightly different angle + dist -= step; // Distance drops with each unsuccessful attempt } - return pos; + + if (dist || alwaysturn) + me->NearTeleportTo(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), Position::NormalizeOrientation(me->GetOrientation() + angle)); + else // Orientation does not change if not moving, verified with sniffs + me->NearTeleportTo(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), me->GetOrientation()); } void UpdateAI(uint32 diff) override @@ -268,10 +271,10 @@ struct boss_archimonde : public BossAI Talk(SAY_AIR_BURST); DoCastRandomTarget(SPELL_AIR_BURST); }, 25s, 40s); - ScheduleTimedEvent(25s, 35s, [&] + ScheduleTimedEvent(8s, [&] { DoCastDoomFire(); - }, 20s); + }, 8s); ScheduleTimedEvent(25s, 35s, [&] { DoCastRandomTarget(SPELL_GRIP_OF_THE_LEGION); @@ -400,7 +403,7 @@ struct boss_archimonde : public BossAI float angle = 2 * M_PI * rand() / RAND_MAX; float x = me->GetPositionX() + DOOMFIRE_OFFSET * cos(angle); float y = me->GetPositionY() + DOOMFIRE_OFFSET * sin(angle); - Position spiritPosition = Position(x, y, me->GetPositionZ()); + Position spiritPosition = Position(x, y, me->GetPositionZ(), Position::NormalizeOrientation(angle + M_PI)); //spirit faces archimonde on spawn Position doomfirePosition = Position(x, y, me->GetPositionZ()); if (Creature* doomfireSpirit = me->SummonCreature(CREATURE_DOOMFIRE_SPIRIT, spiritPosition, TEMPSUMMON_TIMED_DESPAWN, 27000)) { diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp index 72ac29996..82f86f1b5 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp @@ -16,6 +16,7 @@ */ #include "CreatureScript.h" +#include "GridNotifiers.h" #include "ScriptedCreature.h" #include "SpellScript.h" #include "SpellScriptLoader.h" diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp index 37fc84809..09003b022 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp @@ -16,6 +16,7 @@ */ #include "CreatureScript.h" +#include "GridNotifiers.h" #include "ScriptedCreature.h" #include "SpellAuraEffects.h" #include "SpellScript.h" diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.h b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.h index f29a56eb2..54ba1eab3 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.h +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.h @@ -19,7 +19,6 @@ #define DEF_HYJAL_H #include "CreatureAIImpl.h" -#include "GridNotifiers.h" #define DataHeader "HY" diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp index 1228665c7..431892aad 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp @@ -18,7 +18,6 @@ #include "Chat.h" #include "InstanceMapScript.h" #include "InstanceScript.h" -#include "Opcodes.h" #include "Player.h" #include "WorldPacket.h" #include "hyjal.h" 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 34d43737f..1955c3b5d 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp @@ -18,8 +18,10 @@ #include "the_black_morass.h" #include "CreatureScript.h" #include "MoveSplineInit.h" +#include "PassiveAI.h" #include "ScriptedCreature.h" #include "SmartAI.h" +#include "SpellScript.h" #include "SpellScriptLoader.h" enum medivhMisc 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 3a8715a34..0eac0cb3f 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h @@ -19,8 +19,6 @@ #define DEF_THEBLACKMORASS_H #include "CreatureAIImpl.h" -#include "PassiveAI.h" -#include "SpellScript.h" #define DataHeader "TBM" diff --git a/src/server/scripts/Kalimdor/Maraudon/instance_maraudon.cpp b/src/server/scripts/Kalimdor/Maraudon/instance_maraudon.cpp index 02f1b708b..9e4f79b38 100644 --- a/src/server/scripts/Kalimdor/Maraudon/instance_maraudon.cpp +++ b/src/server/scripts/Kalimdor/Maraudon/instance_maraudon.cpp @@ -15,7 +15,6 @@ * with this program. If not, see . */ -#include "CreatureScript.h" #include "InstanceMapScript.h" #include "InstanceScript.h" #include "maraudon.h" diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp index f9b5d9377..3504b6cdb 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp @@ -20,10 +20,16 @@ #include "CellImpl.h" #include "CreatureScript.h" #include "GridNotifiers.h" -#include "GridNotifiersImpl.h" +#include "PassiveAI.h" #include "Player.h" #include "ScriptedCreature.h" +/// @todo: this import is not necessary for compilation and marked as unused by the IDE +// however, for some reasons removing it would cause a damn linking issue +// there is probably some underlying problem with imports which should properly addressed +// see: https://github.com/azerothcore/azerothcore-wotlk/issues/9766 +#include "GridNotifiersImpl.h" + /*###### ## npc_belnistrasz for Quest 3525 "Extinguishing the Idol" ######*/ diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.h b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.h index 259c26d43..77c963a5b 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.h +++ b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.h @@ -19,7 +19,6 @@ #define DEF_RAZORFEN_DOWNS_H #include "CreatureAIImpl.h" -#include "PassiveAI.h" #define DataHeader "RFD" diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp index b43894d2d..7b56c464d 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp @@ -19,7 +19,6 @@ #include "GameObjectAI.h" #include "GameObjectScript.h" #include "MiscPackets.h" -#include "Opcodes.h" #include "Player.h" #include "ScriptedCreature.h" #include "SpellInfo.h" diff --git a/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp b/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp index fe9ea41b4..b8097f4c1 100644 --- a/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp +++ b/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp @@ -15,7 +15,6 @@ * with this program. If not, see . */ -#include "CreatureScript.h" #include "InstanceMapScript.h" #include "InstanceScript.h" #include "wailing_caverns.h" diff --git a/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.h b/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.h index 239e1eea7..e8887df72 100644 --- a/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.h +++ b/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.h @@ -20,8 +20,6 @@ #define DataHeader "WC" -#include "CreatureAI.h" - enum DataTypes { TYPE_LORD_COBRAHN = 0, diff --git a/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp b/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp index c15a77ba2..f8c76779b 100644 --- a/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp +++ b/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp @@ -16,10 +16,12 @@ */ #include "CreatureScript.h" +#include "CellImpl.h" #include "GridNotifiers.h" #include "GridNotifiersImpl.h" #include "InstanceMapScript.h" #include "InstanceScript.h" +#include "SpellScript.h" #include "SpellScriptLoader.h" #include "TemporarySummon.h" #include "zulfarrak.h" diff --git a/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp b/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp index 9506c4794..4762a72b6 100644 --- a/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp +++ b/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp @@ -17,6 +17,7 @@ #include "zulfarrak.h" #include "Cell.h" +#include "CellImpl.h" #include "CreatureScript.h" #include "GameObject.h" #include "GameObjectAI.h" @@ -28,6 +29,13 @@ #include "ScriptSystem.h" #include "ScriptedCreature.h" #include "ScriptedGossip.h" + +/// @todo: this import is not necessary for compilation and marked as unused by the IDE +// however, for some reasons removing it would cause a damn linking issue +// there is probably some underlying problem with imports which should properly addressed +// see: https://github.com/azerothcore/azerothcore-wotlk/issues/9766 +#include "GridNotifiersImpl.h" + /* ScriptData SDName: Zulfarrak SD%Complete: 50 @@ -40,8 +48,6 @@ npc_sergeant_bly npc_weegli_blastfuse EndContentData */ -#include "GridNotifiersImpl.h" - /*###### ## npc_sergeant_bly ######*/ diff --git a/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.h b/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.h index 3202de53e..ad2965baa 100644 --- a/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.h +++ b/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.h @@ -18,9 +18,7 @@ #ifndef DEF_ZULFARRACK_H #define DEF_ZULFARRACK_H -#include "CellImpl.h" #include "CreatureAIImpl.h" -#include "SpellScript.h" #define DataHeader "ZF" diff --git a/src/server/scripts/Kalimdor/zone_azshara.cpp b/src/server/scripts/Kalimdor/zone_azshara.cpp index 8fbb8f62a..c8fb68c0a 100644 --- a/src/server/scripts/Kalimdor/zone_azshara.cpp +++ b/src/server/scripts/Kalimdor/zone_azshara.cpp @@ -31,7 +31,6 @@ EndContentData */ #include "Player.h" #include "ScriptedCreature.h" #include "ScriptedGossip.h" -#include "SpellInfo.h" /*#### # npc_rizzle_sprysprocket diff --git a/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp b/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp index 5439edc99..4d391d8b1 100644 --- a/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp +++ b/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp @@ -18,7 +18,6 @@ #include "CreatureScript.h" #include "Player.h" #include "ScriptedCreature.h" -#include "ScriptedGossip.h" #include "SpellScript.h" #include "SpellScriptLoader.h" diff --git a/src/server/scripts/Kalimdor/zone_feralas.cpp b/src/server/scripts/Kalimdor/zone_feralas.cpp index 7352427a5..1b70c5485 100644 --- a/src/server/scripts/Kalimdor/zone_feralas.cpp +++ b/src/server/scripts/Kalimdor/zone_feralas.cpp @@ -18,7 +18,6 @@ #include "Group.h" #include "Player.h" #include "ScriptedCreature.h" -#include "ScriptedGossip.h" #include "SpellScript.h" #include "SpellScriptLoader.h" /* ScriptData diff --git a/src/server/scripts/Kalimdor/zone_moonglade.cpp b/src/server/scripts/Kalimdor/zone_moonglade.cpp index df9757da8..a5bfb69b0 100644 --- a/src/server/scripts/Kalimdor/zone_moonglade.cpp +++ b/src/server/scripts/Kalimdor/zone_moonglade.cpp @@ -31,7 +31,6 @@ npc_clintar_dreamwalker EndContentData */ #include "Cell.h" -#include "CellImpl.h" #include "CreatureScript.h" #include "GridNotifiers.h" #include "GridNotifiersImpl.h" diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h index 2f6c474a3..c124b4457 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h @@ -19,9 +19,6 @@ #define DEF_AZJOL_NERUB_H #include "CreatureAIImpl.h" -#include "SpellAuraEffects.h" -#include "SpellAuras.h" -#include "SpellScript.h" #define DataHeader "AN" diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp index 1e69836ac..2032efe5d 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp @@ -19,6 +19,8 @@ #include "ScriptedCreature.h" #include "SpellScriptLoader.h" #include "azjol_nerub.h" +#include "SpellInfo.h" +#include "SpellScript.h" enum Spells { diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp index 41f15d89a..df442a5ed 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp @@ -21,6 +21,8 @@ #include "ScriptedCreature.h" #include "SpellScriptLoader.h" #include "azjol_nerub.h" +#include "SpellAuraEffects.h" +#include "SpellScript.h" enum Spells { diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp index d4c9b8a33..0fdcc10c9 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp @@ -21,6 +21,7 @@ #include "ScriptedCreature.h" #include "SpellScriptLoader.h" #include "azjol_nerub.h" +#include "SpellScript.h" DoorData const doorData[] = { diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp index 5f939219c..1e693b33a 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp @@ -18,10 +18,12 @@ #include "AreaTriggerScript.h" #include "CreatureScript.h" #include "ObjectMgr.h" +#include "Player.h" #include "ScriptedCreature.h" #include "SpellAuraEffects.h" #include "SpellScriptLoader.h" #include "ruby_sanctum.h" +#include "SpellScript.h" enum Texts { @@ -332,34 +334,28 @@ public: } }; -class spell_baltharus_enervating_brand_trigger : public SpellScriptLoader +class spell_baltharus_enervating_brand_trigger : public SpellScript { -public: - spell_baltharus_enervating_brand_trigger() : SpellScriptLoader("spell_baltharus_enervating_brand_trigger") { } + PrepareSpellScript(spell_baltharus_enervating_brand_trigger); - class spell_baltharus_enervating_brand_trigger_SpellScript : public SpellScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareSpellScript(spell_baltharus_enervating_brand_trigger_SpellScript); + return ValidateSpellInfo({ SPELL_SIPHONED_MIGHT }); + } - void CheckDistance() - { - if (Unit* caster = GetOriginalCaster()) - if (Unit* target = GetHitUnit()) - if (target == GetCaster() - // the spell has an unlimited range, so we need this check - && target->GetDistance2d(caster) <= 12.0f) - target->CastSpell(caster, SPELL_SIPHONED_MIGHT, true); - } - - void Register() override - { - OnHit += SpellHitFn(spell_baltharus_enervating_brand_trigger_SpellScript::CheckDistance); - } - }; - - SpellScript* GetSpellScript() const override + void CheckDistance() { - return new spell_baltharus_enervating_brand_trigger_SpellScript(); + if (Unit* caster = GetOriginalCaster()) + if (Unit* target = GetHitUnit()) + if (target == GetCaster() + // the spell has an unlimited range, so we need this check + && target->GetDistance2d(caster) <= 12.0f) + target->CastSpell(caster, SPELL_SIPHONED_MIGHT, true); + } + + void Register() override + { + OnHit += SpellHitFn(spell_baltharus_enervating_brand_trigger::CheckDistance); } }; @@ -484,7 +480,7 @@ void AddSC_boss_baltharus_the_warborn() { new boss_baltharus_the_warborn(); new npc_baltharus_the_warborn_clone(); - new spell_baltharus_enervating_brand_trigger(); + RegisterSpellScript(spell_baltharus_enervating_brand_trigger); new npc_xerestrasza(); new at_baltharus_plateau(); } diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp index 3a5cdd6cf..b240f4484 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp @@ -18,6 +18,7 @@ #include "CreatureScript.h" #include "GameObjectAI.h" #include "MapMgr.h" +#include "PassiveAI.h" #include "Player.h" #include "ScriptedCreature.h" #include "Spell.h" @@ -797,283 +798,218 @@ public: } }; -class spell_halion_meteor_strike_targeting : public SpellScriptLoader +class spell_halion_meteor_strike_targeting : public SpellScript { -public: - spell_halion_meteor_strike_targeting() : SpellScriptLoader("spell_halion_meteor_strike_targeting") { } + PrepareSpellScript(spell_halion_meteor_strike_targeting); - class spell_halion_meteor_strike_targeting_SpellScript : public SpellScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareSpellScript(spell_halion_meteor_strike_targeting_SpellScript); + return ValidateSpellInfo({ SPELL_METEOR_STRIKE }); + } - void HandleDummy(SpellEffIndex /*effIndex*/) - { - if (Unit* target = GetHitUnit()) - GetCaster()->CastSpell(target, SPELL_METEOR_STRIKE, true); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_halion_meteor_strike_targeting_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } - }; - - SpellScript* GetSpellScript() const override + void HandleDummy(SpellEffIndex /*effIndex*/) { - return new spell_halion_meteor_strike_targeting_SpellScript(); + if (Unit* target = GetHitUnit()) + GetCaster()->CastSpell(target, SPELL_METEOR_STRIKE, true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_halion_meteor_strike_targeting::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; -class spell_halion_meteor_strike_marker : public SpellScriptLoader +class spell_halion_meteor_strike_marker_aura : public AuraScript { -public: - spell_halion_meteor_strike_marker() : SpellScriptLoader("spell_halion_meteor_strike_marker") { } + PrepareAuraScript(spell_halion_meteor_strike_marker_aura); - class spell_halion_meteor_strike_marker_AuraScript : public AuraScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareAuraScript(spell_halion_meteor_strike_marker_AuraScript); - - void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - SetDuration(6500); - } - - void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - if (Unit* caster = GetCaster()) - { - if (!caster->GetInstanceScript() || !caster->GetInstanceScript()->IsEncounterInProgress()) - return; - - caster->CastSpell(caster, SPELL_METEOR_STRIKE_AOE_DAMAGE, true); - caster->CastSpell(caster, SPELL_METEOR_STRIKE_FIRE_AURA_1, true); - for (uint32 spellId = SPELL_SUMMON_METEOR_STRIKE1; spellId <= SPELL_SUMMON_METEOR_STRIKE4; ++spellId) - caster->CastSpell(caster, spellId, true); - } - } - - void Register() override - { - OnEffectApply += AuraEffectApplyFn(spell_halion_meteor_strike_marker_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); - AfterEffectRemove += AuraEffectRemoveFn(spell_halion_meteor_strike_marker_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); - } - }; - - AuraScript* GetAuraScript() const override - { - return new spell_halion_meteor_strike_marker_AuraScript(); + return ValidateSpellInfo({ SPELL_METEOR_STRIKE_AOE_DAMAGE, SPELL_METEOR_STRIKE_FIRE_AURA_1 }); } -}; -class spell_halion_meteor_strike_spread : public SpellScriptLoader -{ -public: - spell_halion_meteor_strike_spread() : SpellScriptLoader("spell_halion_meteor_strike_spread") { } - - class spell_halion_meteor_strike_spread_AuraScript : public AuraScript + void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { - PrepareAuraScript(spell_halion_meteor_strike_spread_AuraScript); + SetDuration(6500); + } - void HandlePeriodic(AuraEffect const* /*aurEff*/) + void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (Unit* caster = GetCaster()) { - PreventDefaultAction(); // xinef: 3/5 straight, 2/5 turn - if (!GetUnitOwner()->GetInstanceScript() || !GetUnitOwner()->GetInstanceScript()->IsEncounterInProgress()) + if (!caster->GetInstanceScript() || !caster->GetInstanceScript()->IsEncounterInProgress()) return; - GetUnitOwner()->CastSpell(GetUnitOwner(), RAND(SPELL_SUMMON_METEOR_FLAME1, SPELL_SUMMON_METEOR_FLAME2, SPELL_SUMMON_METEOR_FLAME2, SPELL_SUMMON_METEOR_FLAME2, SPELL_SUMMON_METEOR_FLAME3), true); + caster->CastSpell(caster, SPELL_METEOR_STRIKE_AOE_DAMAGE, true); + caster->CastSpell(caster, SPELL_METEOR_STRIKE_FIRE_AURA_1, true); + for (uint32 spellId = SPELL_SUMMON_METEOR_STRIKE1; spellId <= SPELL_SUMMON_METEOR_STRIKE4; ++spellId) + caster->CastSpell(caster, spellId, true); } + } - void Register() override - { - OnEffectPeriodic += AuraEffectPeriodicFn(spell_halion_meteor_strike_spread_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); - } - }; - - AuraScript* GetAuraScript() const override + void Register() override { - return new spell_halion_meteor_strike_spread_AuraScript(); + OnEffectApply += AuraEffectApplyFn(spell_halion_meteor_strike_marker_aura::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + AfterEffectRemove += AuraEffectRemoveFn(spell_halion_meteor_strike_marker_aura::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; -class spell_halion_blazing_aura : public SpellScriptLoader +class spell_halion_meteor_strike_spread_aura : public AuraScript { -public: - spell_halion_blazing_aura() : SpellScriptLoader("spell_halion_blazing_aura") { } + PrepareAuraScript(spell_halion_meteor_strike_spread_aura); - class spell_halion_blazing_aura_SpellScript : public SpellScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareSpellScript(spell_halion_blazing_aura_SpellScript); + return ValidateSpellInfo({ SPELL_SUMMON_METEOR_FLAME1, SPELL_SUMMON_METEOR_FLAME2, SPELL_SUMMON_METEOR_FLAME3 }); + } - void HandleForceCast(SpellEffIndex effIndex) - { - PreventHitDefaultEffect(effIndex); - if (Unit* target = GetHitUnit()) - target->CastSpell(target, GetSpellInfo()->Effects[effIndex].TriggerSpell, true); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_halion_blazing_aura_SpellScript::HandleForceCast, EFFECT_1, SPELL_EFFECT_FORCE_CAST); - } - }; - - SpellScript* GetSpellScript() const override + void HandlePeriodic(AuraEffect const* /*aurEff*/) { - return new spell_halion_blazing_aura_SpellScript(); + PreventDefaultAction(); // xinef: 3/5 straight, 2/5 turn + if (!GetUnitOwner()->GetInstanceScript() || !GetUnitOwner()->GetInstanceScript()->IsEncounterInProgress()) + return; + + GetUnitOwner()->CastSpell(GetUnitOwner(), RAND(SPELL_SUMMON_METEOR_FLAME1, SPELL_SUMMON_METEOR_FLAME2, SPELL_SUMMON_METEOR_FLAME2, SPELL_SUMMON_METEOR_FLAME2, SPELL_SUMMON_METEOR_FLAME3), true); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_halion_meteor_strike_spread_aura::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } }; -class spell_halion_combustion_consumption : public SpellScriptLoader +class spell_halion_blazing_aura : public SpellScript { + PrepareSpellScript(spell_halion_blazing_aura); + + void HandleForceCast(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + if (Unit* target = GetHitUnit()) + target->CastSpell(target, GetSpellInfo()->Effects[effIndex].TriggerSpell, true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_halion_blazing_aura::HandleForceCast, EFFECT_1, SPELL_EFFECT_FORCE_CAST); + } +}; + +class spell_halion_combustion_consumption_aura : public AuraScript +{ + PrepareAuraScript(spell_halion_combustion_consumption_aura); + public: - spell_halion_combustion_consumption(char const* scriptName, uint32 spell) : SpellScriptLoader(scriptName), _spellID(spell) { } + spell_halion_combustion_consumption_aura(uint32 spellID) : AuraScript(), _markSpell(spellID) { } - class spell_halion_combustion_consumption_AuraScript : public AuraScript + void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { - PrepareAuraScript(spell_halion_combustion_consumption_AuraScript); + GetTarget()->RemoveAurasDueToSpell(_markSpell, ObjectGuid::Empty, 0, AURA_REMOVE_BY_EXPIRE); + } - public: - spell_halion_combustion_consumption_AuraScript(uint32 spellID) : AuraScript(), _markSpell(spellID) { } - - void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - GetTarget()->RemoveAurasDueToSpell(_markSpell, ObjectGuid::Empty, 0, AURA_REMOVE_BY_EXPIRE); - } - - void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - GetTarget()->CastSpell(GetTarget(), _markSpell, true); - } - - void AddMarkStack(AuraEffect const* /*aurEff*/) - { - GetTarget()->CastSpell(GetTarget(), _markSpell, true); - } - - void Register() override - { - OnEffectPeriodic += AuraEffectPeriodicFn(spell_halion_combustion_consumption_AuraScript::AddMarkStack, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); - AfterEffectApply += AuraEffectApplyFn(spell_halion_combustion_consumption_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL); - AfterEffectRemove += AuraEffectRemoveFn(spell_halion_combustion_consumption_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL); - } - - uint32 _markSpell; - }; - - AuraScript* GetAuraScript() const override + void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { - return new spell_halion_combustion_consumption_AuraScript(_spellID); + GetTarget()->CastSpell(GetTarget(), _markSpell, true); + } + + void AddMarkStack(AuraEffect const* /*aurEff*/) + { + GetTarget()->CastSpell(GetTarget(), _markSpell, true); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_halion_combustion_consumption_aura::AddMarkStack, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); + AfterEffectApply += AuraEffectApplyFn(spell_halion_combustion_consumption_aura::OnApply, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL); + AfterEffectRemove += AuraEffectRemoveFn(spell_halion_combustion_consumption_aura::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL); } private: - uint32 _spellID; + uint32 _markSpell; }; -class spell_halion_marks : public SpellScriptLoader +class spell_halion_marks_aura : public AuraScript { + PrepareAuraScript(spell_halion_marks_aura); + public: - spell_halion_marks(char const* scriptName, uint32 summonSpell, uint32 removeSpell) : SpellScriptLoader(scriptName), _summonSpell(summonSpell), _removeSpell(removeSpell) { } + spell_halion_marks_aura(uint32 summonSpell, uint32 removeSpell) : AuraScript(), _summonSpellId(summonSpell), _removeSpellId(removeSpell) { } - class spell_halion_marks_AuraScript : public AuraScript + void BeforeDispel(DispelInfo* dispelData) { - PrepareAuraScript(spell_halion_marks_AuraScript); + dispelData->SetRemovedCharges(0); - public: - spell_halion_marks_AuraScript(uint32 summonSpell, uint32 removeSpell) : AuraScript(), _summonSpellId(summonSpell), _removeSpellId(removeSpell) { } + if (Unit* dispelledUnit = GetUnitOwner()) + if (dispelledUnit->HasAura(_removeSpellId)) + dispelledUnit->RemoveAurasDueToSpell(_removeSpellId, ObjectGuid::Empty, 0, AURA_REMOVE_BY_EXPIRE); + } - void BeforeDispel(DispelInfo* dispelData) - { - dispelData->SetRemovedCharges(0); - - if (Unit* dispelledUnit = GetUnitOwner()) - if (dispelledUnit->HasAura(_removeSpellId)) - dispelledUnit->RemoveAurasDueToSpell(_removeSpellId, ObjectGuid::Empty, 0, AURA_REMOVE_BY_EXPIRE); - } - - void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE) - return; - - if (!GetTarget()->GetInstanceScript() || !GetTarget()->GetInstanceScript()->IsEncounterInProgress() || GetTarget()->GetMapId() != 724) - return; - - GetTarget()->CastCustomSpell(_summonSpellId, SPELLVALUE_BASE_POINT1, GetAura()->GetStackAmount(), GetTarget(), TRIGGERED_FULL_MASK, nullptr, nullptr, GetCasterGUID()); - } - - void Register() override - { - OnDispel += AuraDispelFn(spell_halion_marks_AuraScript::BeforeDispel); - AfterEffectRemove += AuraEffectRemoveFn(spell_halion_marks_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); - } - - uint32 _summonSpellId; - uint32 _removeSpellId; - }; - - AuraScript* GetAuraScript() const override + void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { - return new spell_halion_marks_AuraScript(_summonSpell, _removeSpell); + if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE) + return; + + if (!GetTarget()->GetInstanceScript() || !GetTarget()->GetInstanceScript()->IsEncounterInProgress() || GetTarget()->GetMapId() != 724) + return; + + GetTarget()->CastCustomSpell(_summonSpellId, SPELLVALUE_BASE_POINT1, GetAura()->GetStackAmount(), GetTarget(), TRIGGERED_FULL_MASK, nullptr, nullptr, GetCasterGUID()); + } + + void Register() override + { + OnDispel += AuraDispelFn(spell_halion_marks_aura::BeforeDispel); + AfterEffectRemove += AuraEffectRemoveFn(spell_halion_marks_aura::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } private: - uint32 _summonSpell; - uint32 _removeSpell; + uint32 _summonSpellId; + uint32 _removeSpellId; }; -class spell_halion_damage_aoe_summon : public SpellScriptLoader +class spell_halion_damage_aoe_summon : public SpellScript { + PrepareSpellScript(spell_halion_damage_aoe_summon); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_SCALE_AURA }); + } + public: - spell_halion_damage_aoe_summon(char const* scriptName, uint32 explosionSpell, uint32 auraSpell) : SpellScriptLoader(scriptName), _explosionSpell(explosionSpell), _auraSpell(auraSpell) { } + spell_halion_damage_aoe_summon(uint32 explosionSpell, uint32 auraSpell) : SpellScript(), _explosionSpell(explosionSpell), _auraSpell(auraSpell) { } - class spell_halion_damage_aoe_summon_SpellScript : public SpellScript + void HandleSummon(SpellEffIndex effIndex) { - PrepareSpellScript(spell_halion_damage_aoe_summon_SpellScript); + PreventHitDefaultEffect(effIndex); + Unit* caster = GetCaster(); + uint32 entry = uint32(GetSpellInfo()->Effects[effIndex].MiscValue); + SummonPropertiesEntry const* properties = sSummonPropertiesStore.LookupEntry(uint32(GetSpellInfo()->Effects[effIndex].MiscValueB)); + uint32 duration = uint32(GetSpellInfo()->GetDuration()); - public: - spell_halion_damage_aoe_summon_SpellScript(uint32 explosionSpell, uint32 auraSpell) : SpellScript(), _explosionSpell(explosionSpell), _auraSpell(auraSpell) { } - - void HandleSummon(SpellEffIndex effIndex) + Position pos = caster->GetPosition(); + if (Creature* summon = caster->GetMap()->SummonCreature(entry, pos, properties, duration, caster, GetSpellInfo()->Id)) { - PreventHitDefaultEffect(effIndex); - Unit* caster = GetCaster(); - uint32 entry = uint32(GetSpellInfo()->Effects[effIndex].MiscValue); - SummonPropertiesEntry const* properties = sSummonPropertiesStore.LookupEntry(uint32(GetSpellInfo()->Effects[effIndex].MiscValueB)); - uint32 duration = uint32(GetSpellInfo()->GetDuration()); + bool heroic = summon->GetMap()->IsHeroic(); + bool raid = summon->GetMap()->Is25ManRaid(); - Position pos = caster->GetPosition(); - if (Creature* summon = caster->GetMap()->SummonCreature(entry, pos, properties, duration, caster, GetSpellInfo()->Id)) - { - bool heroic = summon->GetMap()->IsHeroic(); - bool raid = summon->GetMap()->Is25ManRaid(); + if (heroic) + summon->SetPhaseMask(0x01 | 0x20, true); + else if (summon->GetEntry() == NPC_COMBUSTION) + summon->SetPhaseMask(0x01, true); + else + summon->SetPhaseMask(0x20, true); - if (heroic) - summon->SetPhaseMask(0x01 | 0x20, true); - else if (summon->GetEntry() == NPC_COMBUSTION) - summon->SetPhaseMask(0x01, true); - else - summon->SetPhaseMask(0x20, true); + summon->CastCustomSpell(SPELL_SCALE_AURA, SPELLVALUE_AURA_STACK, GetSpellValue()->EffectBasePoints[EFFECT_1], summon); + summon->CastSpell(summon, _auraSpell, true); - summon->CastCustomSpell(SPELL_SCALE_AURA, SPELLVALUE_AURA_STACK, GetSpellValue()->EffectBasePoints[EFFECT_1], summon); - summon->CastSpell(summon, _auraSpell, true); - - int32 damage = int32((1500 + (GetSpellValue()->EffectBasePoints[EFFECT_1] * 1250)) * (heroic ? 1.25f : 1.0f) * (raid ? 1.5f : 1.0f)); - caster->CastCustomSpell(_explosionSpell, SPELLVALUE_BASE_POINT0, damage, caster); - } + int32 damage = int32((1500 + (GetSpellValue()->EffectBasePoints[EFFECT_1] * 1250)) * (heroic ? 1.25f : 1.0f) * (raid ? 1.5f : 1.0f)); + caster->CastCustomSpell(_explosionSpell, SPELLVALUE_BASE_POINT0, damage, caster); } + } - void Register() override - { - OnEffectHit += SpellEffectFn(spell_halion_damage_aoe_summon_SpellScript::HandleSummon, EFFECT_0, SPELL_EFFECT_SUMMON); - } - - uint32 _explosionSpell; - uint32 _auraSpell; - }; - - SpellScript* GetSpellScript() const override + void Register() override { - return new spell_halion_damage_aoe_summon_SpellScript(_explosionSpell, _auraSpell); + OnEffectHit += SpellEffectFn(spell_halion_damage_aoe_summon::HandleSummon, EFFECT_0, SPELL_EFFECT_SUMMON); } private: @@ -1081,203 +1017,163 @@ private: uint32 _auraSpell; }; -class spell_halion_clear_debuffs : public SpellScriptLoader +class spell_halion_clear_debuffs : public SpellScript { -public: - spell_halion_clear_debuffs() : SpellScriptLoader("spell_halion_clear_debuffs") { } + PrepareSpellScript(spell_halion_clear_debuffs); - class spell_halion_clear_debuffs_SpellScript : public SpellScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareSpellScript(spell_halion_clear_debuffs_SpellScript); + return ValidateSpellInfo({ SPELL_FIERY_COMBUSTION }); + } - void HandleScriptEffect(SpellEffIndex /*effIndex*/) - { - if (GetHitUnit()) - { - GetHitUnit()->RemoveAurasDueToSpell(GetSpellInfo()->Effects[EFFECT_0].CalcValue()); - GetHitUnit()->RemoveAurasDueToSpell(GetSpellInfo()->Effects[EFFECT_1].CalcValue()); - GetHitUnit()->RemoveAurasDueToSpell(SPELL_FIERY_COMBUSTION); - } - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_halion_clear_debuffs_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } - }; - - SpellScript* GetSpellScript() const override + void HandleScriptEffect(SpellEffIndex /*effIndex*/) { - return new spell_halion_clear_debuffs_SpellScript(); + if (GetHitUnit()) + { + GetHitUnit()->RemoveAurasDueToSpell(GetSpellInfo()->Effects[EFFECT_0].CalcValue()); + GetHitUnit()->RemoveAurasDueToSpell(GetSpellInfo()->Effects[EFFECT_1].CalcValue()); + GetHitUnit()->RemoveAurasDueToSpell(SPELL_FIERY_COMBUSTION); + } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_halion_clear_debuffs::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; -class spell_halion_twilight_phasing : public SpellScriptLoader +class spell_halion_twilight_phasing : public SpellScript { -public: - spell_halion_twilight_phasing() : SpellScriptLoader("spell_halion_twilight_phasing") { } + PrepareSpellScript(spell_halion_twilight_phasing); - class spell_halion_twilight_phasing_SpellScript : public SpellScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareSpellScript(spell_halion_twilight_phasing_SpellScript); - - bool Load() override - { - return GetCaster()->GetTypeId() == TYPEID_UNIT; - } - - void Phase() - { - Unit* caster = GetCaster(); - caster->CastSpell(caster->GetPositionX(), caster->GetPositionY(), caster->GetPositionZ(), SPELL_SUMMON_TWILIGHT_PORTAL, true); - caster->GetMap()->SummonCreature(NPC_TWILIGHT_HALION, caster->ToCreature()->GetHomePosition(), nullptr, 0, caster); - } - - void Register() override - { - OnHit += SpellHitFn(spell_halion_twilight_phasing_SpellScript::Phase); - } - }; - - SpellScript* GetSpellScript() const override - { - return new spell_halion_twilight_phasing_SpellScript(); + return ValidateSpellInfo({ SPELL_SUMMON_TWILIGHT_PORTAL }); } - class spell_halion_twilight_phasing_AuraScript : public AuraScript + bool Load() override { - PrepareAuraScript(spell_halion_twilight_phasing_AuraScript); + return GetCaster()->GetTypeId() == TYPEID_UNIT; + } - void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*handle*/) - { - GetTarget()->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - GetTarget()->ToCreature()->SetReactState(REACT_DEFENSIVE); - GetTarget()->GetMotionMaster()->Clear(); - GetTarget()->GetThreatMgr().clearReferences(); - GetTarget()->RemoveAllAttackers(); - GetTarget()->AttackStop(); - } - - void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*handle*/) - { - GetTarget()->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - GetTarget()->ToCreature()->SetReactState(REACT_DEFENSIVE); - GetTarget()->GetMotionMaster()->Clear(); - GetTarget()->GetThreatMgr().clearReferences(); - GetTarget()->RemoveAllAttackers(); - GetTarget()->AttackStop(); - } - - void Register() override - { - OnEffectApply += AuraEffectApplyFn(spell_halion_twilight_phasing_AuraScript::OnApply, EFFECT_0, SPELL_AURA_TRANSFORM, AURA_EFFECT_HANDLE_REAL); - OnEffectRemove += AuraEffectRemoveFn(spell_halion_twilight_phasing_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_TRANSFORM, AURA_EFFECT_HANDLE_REAL); - } - }; - - AuraScript* GetAuraScript() const override + void Phase() { - return new spell_halion_twilight_phasing_AuraScript(); + Unit* caster = GetCaster(); + caster->CastSpell(caster->GetPositionX(), caster->GetPositionY(), caster->GetPositionZ(), SPELL_SUMMON_TWILIGHT_PORTAL, true); + caster->GetMap()->SummonCreature(NPC_TWILIGHT_HALION, caster->ToCreature()->GetHomePosition(), nullptr, 0, caster); + } + + void Register() override + { + OnHit += SpellHitFn(spell_halion_twilight_phasing::Phase); } }; -class spell_halion_twilight_realm : public SpellScriptLoader +class spell_halion_twilight_phasing_aura : public AuraScript { -public: - spell_halion_twilight_realm() : SpellScriptLoader("spell_halion_twilight_realm") { } + PrepareAuraScript(spell_halion_twilight_phasing_aura); - class spell_halion_twilight_realm_AuraScript : public AuraScript + void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*handle*/) { - PrepareAuraScript(spell_halion_twilight_realm_AuraScript); + GetTarget()->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + GetTarget()->ToCreature()->SetReactState(REACT_DEFENSIVE); + GetTarget()->GetMotionMaster()->Clear(); + GetTarget()->GetThreatMgr().clearReferences(); + GetTarget()->RemoveAllAttackers(); + GetTarget()->AttackStop(); + } - void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*handle*/) - { - Unit* target = GetTarget(); - if (!target) - return; - - target->RemoveAurasDueToSpell(SPELL_FIERY_COMBUSTION, ObjectGuid::Empty, 0, AURA_REMOVE_BY_ENEMY_SPELL); - if (GetTarget()->GetTypeId() != TYPEID_PLAYER) - return; - GetTarget()->m_Events.AddEvent(new SendEncounterUnit(GetTarget()->ToPlayer()), GetTarget()->m_Events.CalculateTime(500)); - } - - void Register() override - { - AfterEffectApply += AuraEffectApplyFn(spell_halion_twilight_realm_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PHASE, AURA_EFFECT_HANDLE_REAL); - } - }; - - AuraScript* GetAuraScript() const override + void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*handle*/) { - return new spell_halion_twilight_realm_AuraScript(); + GetTarget()->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + GetTarget()->ToCreature()->SetReactState(REACT_DEFENSIVE); + GetTarget()->GetMotionMaster()->Clear(); + GetTarget()->GetThreatMgr().clearReferences(); + GetTarget()->RemoveAllAttackers(); + GetTarget()->AttackStop(); + } + + void Register() override + { + OnEffectApply += AuraEffectApplyFn(spell_halion_twilight_phasing_aura::OnApply, EFFECT_0, SPELL_AURA_TRANSFORM, AURA_EFFECT_HANDLE_REAL); + OnEffectRemove += AuraEffectRemoveFn(spell_halion_twilight_phasing_aura::OnRemove, EFFECT_0, SPELL_AURA_TRANSFORM, AURA_EFFECT_HANDLE_REAL); } }; -class spell_halion_leave_twilight_realm : public SpellScriptLoader +class spell_halion_twilight_realm_aura : public AuraScript { -public: - spell_halion_leave_twilight_realm() : SpellScriptLoader("spell_halion_leave_twilight_realm") { } + PrepareAuraScript(spell_halion_twilight_realm_aura); - class spell_halion_leave_twilight_realm_AuraScript : public AuraScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareAuraScript(spell_halion_leave_twilight_realm_AuraScript); + return ValidateSpellInfo({ SPELL_FIERY_COMBUSTION }); + } - void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*handle*/) - { - Unit* target = GetTarget(); - if (!target) - return; - - target->RemoveAurasDueToSpell(SPELL_SOUL_CONSUMPTION, ObjectGuid::Empty, 0, AURA_REMOVE_BY_ENEMY_SPELL); - } - - void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*handle*/) - { - GetTarget()->RemoveAurasDueToSpell(SPELL_TWILIGHT_REALM); - - if (GetTarget()->GetTypeId() != TYPEID_PLAYER) - return; - GetTarget()->m_Events.AddEvent(new SendEncounterUnit(GetTarget()->ToPlayer()), GetTarget()->m_Events.CalculateTime(500)); - } - - void Register() override - { - AfterEffectApply += AuraEffectApplyFn(spell_halion_leave_twilight_realm_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); - AfterEffectRemove += AuraEffectRemoveFn(spell_halion_leave_twilight_realm_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); - } - }; - - AuraScript* GetAuraScript() const override + void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*handle*/) { - return new spell_halion_leave_twilight_realm_AuraScript(); + Unit* target = GetTarget(); + if (!target) + return; + + target->RemoveAurasDueToSpell(SPELL_FIERY_COMBUSTION, ObjectGuid::Empty, 0, AURA_REMOVE_BY_ENEMY_SPELL); + if (GetTarget()->GetTypeId() != TYPEID_PLAYER) + return; + GetTarget()->m_Events.AddEvent(new SendEncounterUnit(GetTarget()->ToPlayer()), GetTarget()->m_Events.CalculateTime(500)); + } + + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_halion_twilight_realm_aura::OnApply, EFFECT_0, SPELL_AURA_PHASE, AURA_EFFECT_HANDLE_REAL); } }; -class spell_halion_twilight_cutter_periodic : public SpellScriptLoader +class spell_halion_leave_twilight_realm_aura : public AuraScript { -public: - spell_halion_twilight_cutter_periodic() : SpellScriptLoader("spell_halion_twilight_cutter_periodic") { } + PrepareAuraScript(spell_halion_leave_twilight_realm_aura); - class spell_halion_twilight_cutter_periodic_AuraScript : public AuraScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareAuraScript(spell_halion_twilight_cutter_periodic_AuraScript); + return ValidateSpellInfo({ SPELL_SOUL_CONSUMPTION, SPELL_TWILIGHT_REALM }); + } - void HandlePeriodic(AuraEffect const* aurEff) - { - PreventDefaultAction(); - GetUnitOwner()->CastSpell((Unit*)nullptr, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, true); - } - - void Register() override - { - OnEffectPeriodic += AuraEffectPeriodicFn(spell_halion_twilight_cutter_periodic_AuraScript::HandlePeriodic, EFFECT_1, SPELL_AURA_PERIODIC_TRIGGER_SPELL); - } - }; - - AuraScript* GetAuraScript() const override + void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*handle*/) { - return new spell_halion_twilight_cutter_periodic_AuraScript(); + Unit* target = GetTarget(); + if (!target) + return; + + target->RemoveAurasDueToSpell(SPELL_SOUL_CONSUMPTION, ObjectGuid::Empty, 0, AURA_REMOVE_BY_ENEMY_SPELL); + } + + void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*handle*/) + { + GetTarget()->RemoveAurasDueToSpell(SPELL_TWILIGHT_REALM); + + if (GetTarget()->GetTypeId() != TYPEID_PLAYER) + return; + GetTarget()->m_Events.AddEvent(new SendEncounterUnit(GetTarget()->ToPlayer()), GetTarget()->m_Events.CalculateTime(500)); + } + + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_halion_leave_twilight_realm_aura::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + AfterEffectRemove += AuraEffectRemoveFn(spell_halion_leave_twilight_realm_aura::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + +class spell_halion_twilight_cutter_periodic_aura : public AuraScript +{ + PrepareAuraScript(spell_halion_twilight_cutter_periodic_aura); + + void HandlePeriodic(AuraEffect const* aurEff) + { + PreventDefaultAction(); + GetUnitOwner()->CastSpell((Unit*)nullptr, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, true); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_halion_twilight_cutter_periodic_aura::HandlePeriodic, EFFECT_1, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } }; @@ -1296,149 +1192,110 @@ private: WorldObject* _cutterCaster; }; -class spell_halion_twilight_cutter : public SpellScriptLoader +class spell_halion_twilight_cutter : public SpellScript { -public: - spell_halion_twilight_cutter() : SpellScriptLoader("spell_halion_twilight_cutter") { } + PrepareSpellScript(spell_halion_twilight_cutter); - class spell_halion_twilight_cutter_SpellScript : public SpellScript + void RemoveNotBetween(std::list& unitList) { - PrepareSpellScript(spell_halion_twilight_cutter_SpellScript); + if (unitList.empty()) + return; - void RemoveNotBetween(std::list& unitList) - { - if (unitList.empty()) + if (Aura* cutter = GetCaster()->GetAura(SPELL_TWILIGHT_CUTTER)) + if (Unit* cutterCaster = cutter->GetCaster()) + { + unitList.remove_if(TwilightCutterSelector(GetCaster(), cutterCaster)); return; + } - if (Aura* cutter = GetCaster()->GetAura(SPELL_TWILIGHT_CUTTER)) - if (Unit* cutterCaster = cutter->GetCaster()) - { - unitList.remove_if(TwilightCutterSelector(GetCaster(), cutterCaster)); - return; - } + unitList.clear(); + } - unitList.clear(); - } - - void Register() override - { - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_halion_twilight_cutter_SpellScript::RemoveNotBetween, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); - } - }; - - SpellScript* GetSpellScript() const override + void Register() override { - return new spell_halion_twilight_cutter_SpellScript(); + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_halion_twilight_cutter::RemoveNotBetween, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); } }; -class spell_halion_summon_exit_portals : public SpellScriptLoader +class spell_halion_summon_exit_portals : public SpellScript { -public: - spell_halion_summon_exit_portals() : SpellScriptLoader("spell_halion_summon_exit_portals") { } + PrepareSpellScript(spell_halion_summon_exit_portals); - class spell_halion_summon_exit_portals_SpellScript : public SpellScript + void OnSummon(SpellEffIndex effIndex) { - PrepareSpellScript(spell_halion_summon_exit_portals_SpellScript); + WorldLocation summonPos = *GetExplTargetDest(); + Position offset = {0.0f, 0.0f, 0.0f, 0.0f}; + if (GetSpellInfo()->Id == SPELL_SUMMON_EXIT_PORTALS) + offset.m_positionY = effIndex == EFFECT_1 ? -35.0f : 35.0f; + else + offset.m_positionX = effIndex == EFFECT_1 ? -35.0f : 35.0f; - void OnSummon(SpellEffIndex effIndex) - { - WorldLocation summonPos = *GetExplTargetDest(); - Position offset = {0.0f, 0.0f, 0.0f, 0.0f}; - if (GetSpellInfo()->Id == SPELL_SUMMON_EXIT_PORTALS) - offset.m_positionY = effIndex == EFFECT_1 ? -35.0f : 35.0f; - else - offset.m_positionX = effIndex == EFFECT_1 ? -35.0f : 35.0f; + summonPos.RelocateOffset(offset); - summonPos.RelocateOffset(offset); + SetExplTargetDest(summonPos); + GetHitDest()->RelocateOffset(offset); + } - SetExplTargetDest(summonPos); - GetHitDest()->RelocateOffset(offset); - } - - void Register() override - { - OnEffectLaunch += SpellEffectFn(spell_halion_summon_exit_portals_SpellScript::OnSummon, EFFECT_0, SPELL_EFFECT_SUMMON_OBJECT_WILD); - OnEffectLaunch += SpellEffectFn(spell_halion_summon_exit_portals_SpellScript::OnSummon, EFFECT_1, SPELL_EFFECT_SUMMON_OBJECT_WILD); - } - }; - - SpellScript* GetSpellScript() const override + void Register() override { - return new spell_halion_summon_exit_portals_SpellScript(); + OnEffectLaunch += SpellEffectFn(spell_halion_summon_exit_portals::OnSummon, EFFECT_0, SPELL_EFFECT_SUMMON_OBJECT_WILD); + OnEffectLaunch += SpellEffectFn(spell_halion_summon_exit_portals::OnSummon, EFFECT_1, SPELL_EFFECT_SUMMON_OBJECT_WILD); } }; -class spell_halion_twilight_division : public SpellScriptLoader +class spell_halion_twilight_division : public SpellScript { -public: - spell_halion_twilight_division() : SpellScriptLoader("spell_halion_twilight_division") { } + PrepareSpellScript(spell_halion_twilight_division); - class spell_halion_twilight_division_SpellScript : public SpellScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareSpellScript(spell_halion_twilight_division_SpellScript); + return ValidateSpellInfo({ SPELL_SUMMON_EXIT_PORTALS_NORMAL, SPELL_SUMMON_EXIT_PORTALS, SPELL_TWILIGHT_PHASING }); + } - void HandleDummy(SpellEffIndex /*effIndex*/) - { - InstanceScript* instance = GetCaster()->GetInstanceScript(); - Creature* controller = ObjectAccessor::GetCreature(*GetCaster(), instance->GetGuidData(NPC_HALION_CONTROLLER)); - Creature* halion = ObjectAccessor::GetCreature(*GetCaster(), instance->GetGuidData(NPC_HALION)); - - if (!controller || !halion) - return; - - GetCaster()->CastSpell(GetCaster(), _corporealityReference[5], true); - halion->CastSpell(halion, _corporealityReference[5], true); - - controller->CastSpell(controller, SPELL_SUMMON_EXIT_PORTALS_NORMAL, true); - controller->CastSpell(controller, SPELL_SUMMON_EXIT_PORTALS, true); - controller->AI()->DoAction(ACTION_CHECK_CORPOREALITY); - - halion->RemoveAurasDueToSpell(SPELL_TWILIGHT_PHASING); - if (GameObject* gobject = halion->FindNearestGameObject(GO_HALION_PORTAL_1, 100.0f)) - gobject->Delete(); - - instance->DoUpdateWorldState(WORLDSTATE_CORPOREALITY_TOGGLE, 1); - instance->DoUpdateWorldState(WORLDSTATE_CORPOREALITY_MATERIAL, 50); - instance->DoUpdateWorldState(WORLDSTATE_CORPOREALITY_TWILIGHT, 50); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_halion_twilight_division_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } - }; - - SpellScript* GetSpellScript() const override + void HandleDummy(SpellEffIndex /*effIndex*/) { - return new spell_halion_twilight_division_SpellScript(); + InstanceScript* instance = GetCaster()->GetInstanceScript(); + Creature* controller = ObjectAccessor::GetCreature(*GetCaster(), instance->GetGuidData(NPC_HALION_CONTROLLER)); + Creature* halion = ObjectAccessor::GetCreature(*GetCaster(), instance->GetGuidData(NPC_HALION)); + + if (!controller || !halion) + return; + + GetCaster()->CastSpell(GetCaster(), _corporealityReference[5], true); + halion->CastSpell(halion, _corporealityReference[5], true); + + controller->CastSpell(controller, SPELL_SUMMON_EXIT_PORTALS_NORMAL, true); + controller->CastSpell(controller, SPELL_SUMMON_EXIT_PORTALS, true); + controller->AI()->DoAction(ACTION_CHECK_CORPOREALITY); + + halion->RemoveAurasDueToSpell(SPELL_TWILIGHT_PHASING); + if (GameObject* gobject = halion->FindNearestGameObject(GO_HALION_PORTAL_1, 100.0f)) + gobject->Delete(); + + instance->DoUpdateWorldState(WORLDSTATE_CORPOREALITY_TOGGLE, 1); + instance->DoUpdateWorldState(WORLDSTATE_CORPOREALITY_MATERIAL, 50); + instance->DoUpdateWorldState(WORLDSTATE_CORPOREALITY_TWILIGHT, 50); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_halion_twilight_division::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; -class spell_halion_twilight_mending : public SpellScriptLoader +class spell_halion_twilight_mending : public SpellScript { -public: - spell_halion_twilight_mending() : SpellScriptLoader("spell_halion_twilight_mending") { } + PrepareSpellScript(spell_halion_twilight_mending); - class spell_halion_twilight_mending_SpellScript : public SpellScript + void HandleHealPct(SpellEffIndex /*effIndex*/) { - PrepareSpellScript(spell_halion_twilight_mending_SpellScript); + if (Creature* target = GetHitCreature()) + target->AI()->Talk(SAY_REGENERATE); + } - void HandleHealPct(SpellEffIndex /*effIndex*/) - { - if (Creature* target = GetHitCreature()) - target->AI()->Talk(SAY_REGENERATE); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_halion_twilight_mending_SpellScript::HandleHealPct, EFFECT_ALL, SPELL_EFFECT_HEAL_PCT); - } - }; - - SpellScript* GetSpellScript() const override + void Register() override { - return new spell_halion_twilight_mending_SpellScript(); + OnEffectHitTarget += SpellEffectFn(spell_halion_twilight_mending::HandleHealPct, EFFECT_ALL, SPELL_EFFECT_HEAL_PCT); } }; @@ -1481,24 +1338,24 @@ void AddSC_boss_halion() new npc_orb_carrier(); new npc_living_inferno(); - new spell_halion_meteor_strike_targeting(); - new spell_halion_meteor_strike_marker(); - new spell_halion_meteor_strike_spread(); - new spell_halion_blazing_aura(); - new spell_halion_combustion_consumption("spell_halion_soul_consumption", SPELL_MARK_OF_CONSUMPTION); - new spell_halion_combustion_consumption("spell_halion_fiery_combustion", SPELL_MARK_OF_COMBUSTION); - new spell_halion_marks("spell_halion_mark_of_combustion", SPELL_FIERY_COMBUSTION_SUMMON, SPELL_FIERY_COMBUSTION); - new spell_halion_marks("spell_halion_mark_of_consumption", SPELL_SOUL_CONSUMPTION_SUMMON, SPELL_SOUL_CONSUMPTION); - new spell_halion_damage_aoe_summon("spell_halion_combustion_summon", SPELL_FIERY_COMBUSTION_EXPLOSION, SPELL_COMBUSTION_DAMAGE_AURA); - new spell_halion_damage_aoe_summon("spell_halion_consumption_summon", SPELL_SOUL_CONSUMPTION_EXPLOSION, SPELL_CONSUMPTION_DAMAGE_AURA); - new spell_halion_clear_debuffs(); - new spell_halion_twilight_phasing(); - new spell_halion_twilight_realm(); - new spell_halion_leave_twilight_realm(); - new spell_halion_twilight_cutter_periodic(); - new spell_halion_twilight_cutter(); - new spell_halion_summon_exit_portals(); - new spell_halion_twilight_division(); - new spell_halion_twilight_mending(); + RegisterSpellScript(spell_halion_meteor_strike_targeting); + RegisterSpellScript(spell_halion_meteor_strike_marker_aura); + RegisterSpellScript(spell_halion_meteor_strike_spread_aura); + RegisterSpellScript(spell_halion_blazing_aura); + RegisterSpellScriptWithArgs(spell_halion_combustion_consumption_aura, "spell_halion_soul_consumption_aura", SPELL_MARK_OF_CONSUMPTION); + RegisterSpellScriptWithArgs(spell_halion_combustion_consumption_aura, "spell_halion_fiery_combustion_aura", SPELL_MARK_OF_COMBUSTION); + RegisterSpellScriptWithArgs(spell_halion_marks_aura, "spell_halion_mark_of_combustion_aura", SPELL_FIERY_COMBUSTION_SUMMON, SPELL_FIERY_COMBUSTION); + RegisterSpellScriptWithArgs(spell_halion_marks_aura, "spell_halion_mark_of_consumption_aura", SPELL_SOUL_CONSUMPTION_SUMMON, SPELL_SOUL_CONSUMPTION); + RegisterSpellScriptWithArgs(spell_halion_damage_aoe_summon, "spell_halion_combustion_summon", SPELL_FIERY_COMBUSTION_EXPLOSION, SPELL_COMBUSTION_DAMAGE_AURA); + RegisterSpellScriptWithArgs(spell_halion_damage_aoe_summon, "spell_halion_consumption_summon", SPELL_SOUL_CONSUMPTION_EXPLOSION, SPELL_CONSUMPTION_DAMAGE_AURA); + RegisterSpellScript(spell_halion_clear_debuffs); + RegisterSpellAndAuraScriptPair(spell_halion_twilight_phasing, spell_halion_twilight_phasing_aura); + RegisterSpellScript(spell_halion_twilight_realm_aura); + RegisterSpellScript(spell_halion_leave_twilight_realm_aura); + RegisterSpellScript(spell_halion_twilight_cutter_periodic_aura); + RegisterSpellScript(spell_halion_twilight_cutter); + RegisterSpellScript(spell_halion_summon_exit_portals); + RegisterSpellScript(spell_halion_twilight_division); + RegisterSpellScript(spell_halion_twilight_mending); } diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp index 39afa96a6..7c71bbd3d 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp @@ -19,6 +19,7 @@ #include "ScriptedCreature.h" #include "SpellScriptLoader.h" #include "ruby_sanctum.h" +#include "SpellScript.h" enum Texts { @@ -184,65 +185,48 @@ public: } }; -class spell_saviana_conflagration_init : public SpellScriptLoader +class spell_saviana_conflagration_init : public SpellScript { -public: - spell_saviana_conflagration_init() : SpellScriptLoader("spell_saviana_conflagration_init") { } + PrepareSpellScript(spell_saviana_conflagration_init); - class spell_saviana_conflagration_init_SpellScript : public SpellScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareSpellScript(spell_saviana_conflagration_init_SpellScript); + return ValidateSpellInfo({ SPELL_FLAME_BEACON, SPELL_CONFLAGRATION_MISSLE }); + } - void HandleDummy(SpellEffIndex effIndex) - { - PreventHitDefaultEffect(effIndex); - GetCaster()->CastSpell(GetHitUnit(), SPELL_FLAME_BEACON, true); - GetCaster()->CastSpell(GetHitUnit(), SPELL_CONFLAGRATION_MISSLE, true); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_saviana_conflagration_init_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } - }; - - SpellScript* GetSpellScript() const override + void HandleDummy(SpellEffIndex effIndex) { - return new spell_saviana_conflagration_init_SpellScript(); + PreventHitDefaultEffect(effIndex); + GetCaster()->CastSpell(GetHitUnit(), SPELL_FLAME_BEACON, true); + GetCaster()->CastSpell(GetHitUnit(), SPELL_CONFLAGRATION_MISSLE, true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_saviana_conflagration_init::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; -class spell_saviana_conflagration_throwback : public SpellScriptLoader +class spell_saviana_conflagration_throwback : public SpellScript { -public: - spell_saviana_conflagration_throwback() : SpellScriptLoader("spell_saviana_conflagration_throwback") { } + PrepareSpellScript(spell_saviana_conflagration_throwback); - class spell_saviana_conflagration_throwback_SpellScript : public SpellScript + void HandleScript(SpellEffIndex effIndex) { - PrepareSpellScript(spell_saviana_conflagration_throwback_SpellScript); + PreventHitDefaultEffect(effIndex); + GetHitUnit()->CastSpell(GetCaster(), uint32(GetEffectValue()), true); + } - void HandleScript(SpellEffIndex effIndex) - { - PreventHitDefaultEffect(effIndex); - GetHitUnit()->CastSpell(GetCaster(), uint32(GetEffectValue()), true); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_saviana_conflagration_throwback_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } - }; - - SpellScript* GetSpellScript() const override + void Register() override { - return new spell_saviana_conflagration_throwback_SpellScript(); + OnEffectHitTarget += SpellEffectFn(spell_saviana_conflagration_throwback::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; void AddSC_boss_saviana_ragefire() { new boss_saviana_ragefire(); - new spell_saviana_conflagration_init(); - new spell_saviana_conflagration_throwback(); + RegisterSpellScript(spell_saviana_conflagration_init); + RegisterSpellScript(spell_saviana_conflagration_throwback); } diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp index c08535c23..d2659ab54 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp @@ -23,6 +23,7 @@ #include "TemporarySummon.h" #include "WorldPacket.h" #include "ruby_sanctum.h" +#include "SpellScript.h" BossBoundaryData const boundaries = { @@ -244,41 +245,35 @@ public: } }; -class spell_ruby_sanctum_rallying_shout : public SpellScriptLoader +class spell_ruby_sanctum_rallying_shout : public SpellScript { -public: - spell_ruby_sanctum_rallying_shout() : SpellScriptLoader("spell_ruby_sanctum_rallying_shout") { } + PrepareSpellScript(spell_ruby_sanctum_rallying_shout); - class spell_ruby_sanctum_rallying_shout_SpellScript : public SpellScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareSpellScript(spell_ruby_sanctum_rallying_shout_SpellScript); + return ValidateSpellInfo({ SPELL_RALLY }); + } - void CountAllies() - { - uint32 count = GetSpell()->GetUniqueTargetInfo()->size(); - if (count == GetCaster()->GetAuraCount(SPELL_RALLY)) - return; - - GetCaster()->RemoveAurasDueToSpell(SPELL_RALLY); - if (count > 0) - GetCaster()->CastCustomSpell(SPELL_RALLY, SPELLVALUE_AURA_STACK, count, GetCaster(), true); - } - - void Register() override - { - AfterHit += SpellHitFn(spell_ruby_sanctum_rallying_shout_SpellScript::CountAllies); - } - }; - - SpellScript* GetSpellScript() const override + void CountAllies() { - return new spell_ruby_sanctum_rallying_shout_SpellScript(); + uint32 count = GetSpell()->GetUniqueTargetInfo()->size(); + if (count == GetCaster()->GetAuraCount(SPELL_RALLY)) + return; + + GetCaster()->RemoveAurasDueToSpell(SPELL_RALLY); + if (count > 0) + GetCaster()->CastCustomSpell(SPELL_RALLY, SPELLVALUE_AURA_STACK, count, GetCaster(), true); + } + + void Register() override + { + AfterHit += SpellHitFn(spell_ruby_sanctum_rallying_shout::CountAllies); } }; void AddSC_instance_ruby_sanctum() { new instance_ruby_sanctum(); - new spell_ruby_sanctum_rallying_shout(); + RegisterSpellScript(spell_ruby_sanctum_rallying_shout); } diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h index 6e6f59b76..a75092ae8 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h @@ -18,14 +18,7 @@ #ifndef RUBY_SANCTUM_H_ #define RUBY_SANCTUM_H_ -#include "Creature.h" #include "CreatureAIImpl.h" -#include "GameObjectAI.h" -#include "Map.h" -#include "Opcodes.h" -#include "PassiveAI.h" -#include "Player.h" -#include "SpellScript.h" #define DataHeader "RS" diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp index e48f714c2..cb8d3be45 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp @@ -15,6 +15,7 @@ * with this program. If not, see . */ +#include "CombatAI.h" #include "CreatureScript.h" #include "PassiveAI.h" #include "Player.h" diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h index be0dfa453..d8f71c00d 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h @@ -18,7 +18,6 @@ #ifndef DEF_TOC_H #define DEF_TOC_H -#include "CombatAI.h" #include "CreatureAIImpl.h" #define DataHeader "TC" diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp index ecb1ac0b1..185fedd97 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp @@ -19,6 +19,7 @@ #include "PassiveAI.h" #include "Player.h" #include "ScriptedCreature.h" +#include "SpellAuraEffects.h" #include "SpellScript.h" #include "SpellScriptLoader.h" #include "trial_of_the_crusader.h" diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h index cc1ac3599..6b87cb236 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h @@ -20,7 +20,6 @@ #include "CreatureAIImpl.h" #include "GridNotifiers.h" -#include "SpellAuraEffects.h" #define DataHeader "TCR" diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp index bc5f69985..b4bbcfc56 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp @@ -20,6 +20,7 @@ #include "ScriptedCreature.h" #include "SpellScriptLoader.h" #include "drak_tharon_keep.h" +#include "SpellScript.h" enum Yells { diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp index 2015c0ef3..ef883269e 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp @@ -19,6 +19,7 @@ #include "ScriptedCreature.h" #include "SpellScriptLoader.h" #include "drak_tharon_keep.h" +#include "SpellScript.h" enum Yells { diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp index bd10397c9..0ad8fb6bb 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp @@ -21,6 +21,8 @@ #include "SpellAuras.h" #include "SpellScriptLoader.h" #include "drak_tharon_keep.h" +#include "SpellAuraEffects.h" +#include "SpellScript.h" enum Yells { diff --git a/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h b/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h index 43a52b2ec..422139b32 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h +++ b/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h @@ -19,8 +19,6 @@ #define DEF_DRAK_THARON_H #include "CreatureAIImpl.h" -#include "SpellAuraEffects.h" -#include "SpellScript.h" #define DataHeader "DTK" diff --git a/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp b/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp index 477f2c3fb..2710c6063 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp @@ -20,6 +20,7 @@ #include "ScriptedCreature.h" #include "SpellScriptLoader.h" #include "drak_tharon_keep.h" +#include "SpellScript.h" DoorData const doorData[] = { diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp index 5d999d927..14330239f 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp @@ -17,6 +17,7 @@ #include "CreatureScript.h" #include "halls_of_reflection.h" +#include "ScriptedCreature.h" enum Yells { diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp index c8366d0b9..75d715112 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp @@ -18,6 +18,9 @@ #include "CreatureScript.h" #include "SpellScriptLoader.h" #include "halls_of_reflection.h" +#include "ScriptedCreature.h" +#include "SpellAuraEffects.h" +#include "SpellScript.h" enum Yells { diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp index f68f9fe1c..2c5d00e36 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp @@ -18,7 +18,12 @@ #include "halls_of_reflection.h" #include "AreaTriggerScript.h" #include "CreatureScript.h" +#include "InstanceScript.h" #include "MotionMaster.h" +#include "PassiveAI.h" +#include "ScriptedCreature.h" +#include "ScriptedGossip.h" +#include "SpellScript.h" #include "SpellScriptLoader.h" enum Events diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h index 0f78df2c1..204ce5ad3 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h @@ -19,14 +19,7 @@ #define DEF_HALLS_OF_REFLECTION_H #include "CreatureAIImpl.h" -#include "CreatureScript.h" -#include "PassiveAI.h" #include "Player.h" -#include "ScriptedCreature.h" -#include "ScriptedGossip.h" -#include "SpellAuraEffects.h" -#include "SpellAuras.h" -#include "SpellScript.h" #define DataHeader "HOR" diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp index f37361ebb..9724ad8d1 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp @@ -19,6 +19,7 @@ #include "MapMgr.h" #include "Transport.h" #include "halls_of_reflection.h" +#include "InstanceScript.h" class UtherBatteredHiltEvent : public BasicEvent { diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp index f4c3920c5..a522b7610 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp @@ -17,7 +17,6 @@ #include "CreatureGroups.h" #include "CreatureScript.h" -#include "Opcodes.h" #include "Player.h" #include "ScriptedCreature.h" #include "SpellAuras.h" diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp index 14f4332e9..0f46e27e5 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp @@ -16,7 +16,6 @@ */ #include "CreatureScript.h" -#include "Opcodes.h" #include "PassiveAI.h" #include "Player.h" #include "ScriptedCreature.h" diff --git a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp index 3dab952e3..17f81c164 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp @@ -19,6 +19,7 @@ #include "ScriptedCreature.h" #include "SpellScriptLoader.h" #include "gundrak.h" +#include "SpellScript.h" enum Spells { diff --git a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp index e22c3bce2..4d202f7b5 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp @@ -20,6 +20,7 @@ #include "ScriptedCreature.h" #include "SpellScriptLoader.h" #include "gundrak.h" +#include "SpellScript.h" enum Spells { diff --git a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp index 9e1aac8e0..a85172a2d 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp @@ -20,6 +20,8 @@ #include "ScriptedCreature.h" #include "SpellScriptLoader.h" #include "gundrak.h" +#include "SpellInfo.h" +#include "SpellScript.h" enum eSpells { diff --git a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp index 0ed90bd39..d9e57fab1 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp @@ -20,6 +20,7 @@ #include "ScriptedCreature.h" #include "SpellScriptLoader.h" #include "gundrak.h" +#include "SpellScript.h" enum Spells { diff --git a/src/server/scripts/Northrend/Gundrak/gundrak.h b/src/server/scripts/Northrend/Gundrak/gundrak.h index ec6da02e0..8d38819ea 100644 --- a/src/server/scripts/Northrend/Gundrak/gundrak.h +++ b/src/server/scripts/Northrend/Gundrak/gundrak.h @@ -19,7 +19,6 @@ #define DEF_GUNDRAK_H #include "CreatureAIImpl.h" -#include "SpellScript.h" #define DataHeader "GD" diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index 08d1b77de..b6be91e6a 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -16,7 +16,6 @@ */ #include "icecrown_citadel.h" -#include "AccountMgr.h" #include "AreaTriggerScript.h" #include "Cell.h" #include "CellImpl.h" diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h index 6fc6e5d46..fa4516546 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h @@ -28,8 +28,6 @@ #include "ScriptedCreature.h" #include "ScriptedGossip.h" #include "SpellAuraEffects.h" -#include "SpellAuras.h" -#include "SpellMgr.h" #include "SpellScript.h" #include "SpellScriptLoader.h" diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index ec7a438fd..dc701b9c0 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -19,6 +19,7 @@ #include "CreatureScript.h" #include "ScriptedCreature.h" #include "naxxramas.h" +#include "SpellInfo.h" using namespace Razuvious; diff --git a/src/server/scripts/Northrend/Naxxramas/naxxramas.h b/src/server/scripts/Northrend/Naxxramas/naxxramas.h index 5c237d784..8485d7e40 100644 --- a/src/server/scripts/Northrend/Naxxramas/naxxramas.h +++ b/src/server/scripts/Northrend/Naxxramas/naxxramas.h @@ -19,7 +19,6 @@ #define DEF_NAXXRAMAS_H #include "CreatureAIImpl.h" -#include "SpellScript.h" #define DataHeader "NAX" diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp index 8b3d6813c..8c6be93be 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp @@ -15,7 +15,6 @@ * with this program. If not, see . */ -#include "CreatureScript.h" #include "InstanceMapScript.h" #include "Player.h" #include "ScriptedCreature.h" diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp index 50a559761..34a69d479 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp @@ -18,8 +18,10 @@ #include "AchievementCriteriaScript.h" #include "CreatureScript.h" +#include "MapReference.h" #include "ScriptedCreature.h" #include "nexus.h" +#include "Player.h" enum eEnums { diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp index 630460093..c3efec7bf 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp @@ -17,9 +17,13 @@ #include "AchievementCriteriaScript.h" #include "CreatureScript.h" +#include "GameEventMgr.h" +#include "GridNotifiers.h" #include "ScriptedCreature.h" #include "SpellScriptLoader.h" #include "nexus.h" +#include "SpellInfo.h" +#include "SpellScript.h" enum Spells { diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp index f0d5212ee..66dd21655 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp @@ -18,6 +18,7 @@ #include "CreatureScript.h" #include "ScriptedCreature.h" #include "nexus.h" +#include "PassiveAI.h" enum eEnums { diff --git a/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp b/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp index 14e3acddb..eb3ac50bb 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp @@ -19,6 +19,7 @@ #include "InstanceMapScript.h" #include "ScriptedCreature.h" #include "nexus.h" +#include "Player.h" DoorData const doorData[] = { diff --git a/src/server/scripts/Northrend/Nexus/Nexus/nexus.h b/src/server/scripts/Northrend/Nexus/Nexus/nexus.h index 6186b7a71..dbc87982a 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/nexus.h +++ b/src/server/scripts/Northrend/Nexus/Nexus/nexus.h @@ -19,12 +19,6 @@ #define DEF_NEXUS_H #include "CreatureAIImpl.h" -#include "GameEventMgr.h" -#include "GridNotifiers.h" -#include "PassiveAI.h" -#include "Player.h" -#include "SpellAuras.h" -#include "SpellScript.h" #define DataHeader "NEX" diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp index 308349b7e..00d634860 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp @@ -18,6 +18,7 @@ #include "CreatureScript.h" #include "ScriptedCreature.h" #include "oculus.h" +#include "SpellAuras.h" enum Spells { diff --git a/src/server/scripts/Northrend/Nexus/Oculus/oculus.h b/src/server/scripts/Northrend/Nexus/Oculus/oculus.h index 69e5fd5c3..9140cd7be 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/oculus.h +++ b/src/server/scripts/Northrend/Nexus/Oculus/oculus.h @@ -19,8 +19,6 @@ #define DEF_OCULUS_H #include "CreatureAIImpl.h" -#include "SpellAuraEffects.h" -#include "SpellAuras.h" #include "SpellScript.h" #define DataHeader "OC" diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp index 786ae2c21..46a9dc8c3 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp @@ -16,11 +16,11 @@ */ #include "AchievementCriteriaScript.h" +#include "CellImpl.h" #include "CombatAI.h" #include "CreatureScript.h" #include "GameObjectScript.h" #include "GridNotifiers.h" -#include "Opcodes.h" #include "PassiveAI.h" #include "Player.h" #include "ScriptedCreature.h" @@ -33,6 +33,12 @@ #include "Vehicle.h" #include "ulduar.h" +/// @todo: this import is not necessary for compilation and marked as unused by the IDE +// however, for some reasons removing it would cause a damn linking issue +// there is probably some underlying problem with imports which should properly addressed +// see: https://github.com/azerothcore/azerothcore-wotlk/issues/9766 +#include "GridNotifiersImpl.h" + enum LeviathanSpells { // Leviathan basic diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp index 9fc2ba88a..b9f4f71f3 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp @@ -19,7 +19,6 @@ #include "CreatureAI.h" #include "CreatureScript.h" #include "Object.h" -#include "Opcodes.h" #include "PassiveAI.h" #include "Player.h" #include "ScriptedCreature.h" diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp index b6ce8bbe3..b43119631 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp @@ -19,7 +19,6 @@ #include "AreaTriggerScript.h" #include "CombatAI.h" #include "CreatureScript.h" -#include "GameObjectScript.h" #include "PassiveAI.h" #include "Player.h" #include "ScriptedCreature.h" diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h index 1735aeb39..4093dd891 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h @@ -18,11 +18,8 @@ #ifndef DEF_ULDUAR_H #define DEF_ULDUAR_H -#include "CellImpl.h" -#include "Chat.h" #include "CreatureAIImpl.h" #include "GridNotifiers.h" -#include "GridNotifiersImpl.h" #define DataHeader "UU" diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp index e0afdd435..6523b9dad 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp @@ -15,7 +15,6 @@ * with this program. If not, see . */ -#include "CreatureScript.h" #include "InstanceMapScript.h" #include "Player.h" #include "ScriptedCreature.h" diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp index 2b1ca9868..745909342 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp @@ -19,6 +19,7 @@ #include "CreatureScript.h" #include "GameObjectAI.h" #include "ScriptedCreature.h" +#include "SpellScript.h" #include "SpellScriptLoader.h" #include "Vehicle.h" diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.h b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.h index 0437252cd..23f3bddb1 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.h +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.h @@ -19,7 +19,6 @@ #define DEF_UTGARDE_KEEP_H #include "CreatureAIImpl.h" -#include "SpellScript.h" #define UtgardeKeepScriptName "instance_utgarde_keep" diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h index ce37fa561..21f5eadd5 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h @@ -19,7 +19,6 @@ #define DEF_PINNACLE_H #include "CreatureAIImpl.h" -#include "Opcodes.h" #define DataHeader "UP" diff --git a/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp index 25bb5ba51..8cdb21947 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp +++ b/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp @@ -17,7 +17,6 @@ #include "Battlefield.h" #include "BattlefieldMgr.h" -#include "CreatureScript.h" #include "GameTime.h" #include "InstanceMapScript.h" #include "Player.h" diff --git a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp index d5259faec..7ccd7986e 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp @@ -24,76 +24,139 @@ enum Supremus EMOTE_NEW_TARGET = 0, EMOTE_PUNCH_GROUND = 1, EMOTE_GROUND_CRACK = 2, + EMOTE_BERSERK = 3, SPELL_SNARE_SELF = 41922, SPELL_MOLTEN_PUNCH = 40126, + SPELL_MOLTEN_FLAME = 40980, SPELL_HATEFUL_STRIKE = 41926, SPELL_VOLCANIC_ERUPTION = 40276, SPELL_VOLCANIC_ERUPTION_TRIGGER = 40117, - SPELL_BERSERK = 45078, + SPELL_VOLCANIC_GEYSER = 42055, + SPELL_BERSERK = 26662, SPELL_CHARGE = 41581, - NPC_SUPREMUS_PUNCH_STALKER = 23095, + SPELL_SERVERSIDE_RANDOM_TARGET = 41951, // Found in 55261. Used for Fixate target - EVENT_SPELL_BERSERK = 1, - EVENT_SPELL_HATEFUL_STRIKE = 2, - EVENT_SPELL_MOLTEN_FLAMES = 3, - EVENT_SWITCH_PHASE = 4, - EVENT_SPELL_VOLCANIC_ERUPTION = 5, - EVENT_SWITCH_TARGET = 6, - EVENT_CHECK_DIST = 7, + NPC_SUPREMUS_VOLCANO = 23085, - EVENT_GROUP_ABILITIES = 1 + GROUP_ABILITIES = 1, + GROUP_MOLTEN_PUNCH = 2, + GROUP_PHASE_CHANGE = 3 }; struct boss_supremus : public BossAI { - boss_supremus(Creature* creature) : BossAI(creature, DATA_SUPREMUS) { } + boss_supremus(Creature* creature) : BossAI(creature, DATA_SUPREMUS) + { + scheduler.SetValidator([this] + { + return !me->HasUnitState(UNIT_STATE_CASTING); + }); + } + + void Reset() override + { + BossAI::Reset(); + me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, false); + me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, false); + } void JustEngagedWith(Unit* who) override { BossAI::JustEngagedWith(who); - SchedulePhase(false); - events.ScheduleEvent(EVENT_SPELL_BERSERK, 900000); - events.ScheduleEvent(EVENT_SPELL_MOLTEN_FLAMES, 4000); + SchedulePhase(true); + + ScheduleTimedEvent(15min, [&] + { + DoCastSelf(SPELL_BERSERK, true); + Talk(EMOTE_BERSERK); + scheduler.CancelGroup(GROUP_ABILITIES); // Supremus stops all other abilities after berserking + scheduler.CancelGroup(GROUP_MOLTEN_PUNCH); + scheduler.CancelGroup(GROUP_PHASE_CHANGE); + }, 5min); + + scheduler.Schedule(20s, [this](TaskContext context) + { + context.SetGroup(GROUP_MOLTEN_PUNCH); + DoCastSelf(SPELL_MOLTEN_PUNCH); + context.Repeat(15s, 20s); + }); } - void SchedulePhase(bool run) + void SchedulePhase(bool isSnared) { - events.CancelEventGroup(EVENT_GROUP_ABILITIES); - events.ScheduleEvent(EVENT_SWITCH_PHASE, 60000); + scheduler.CancelGroup(GROUP_ABILITIES); + + scheduler.Schedule(1min, [this](TaskContext context) + { + context.SetGroup(GROUP_PHASE_CHANGE); + SchedulePhase(me->HasAura(SPELL_SNARE_SELF)); + }); + DoResetThreatList(); - if (!run) + // Hateful Strike Phase + if (isSnared) { - events.ScheduleEvent(EVENT_SPELL_HATEFUL_STRIKE, 5000, EVENT_GROUP_ABILITIES); + scheduler.Schedule(8s, 15s, [this](TaskContext context) + { + context.SetGroup(GROUP_ABILITIES); + + if (Unit* target = FindHatefulStrikeTarget()) + DoCast(target, SPELL_HATEFUL_STRIKE); + + context.Repeat(1500ms, 15s); + }); + + if (me->HasAura(SPELL_SNARE_SELF)) + Talk(EMOTE_PUNCH_GROUND); + me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, false); me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, false); me->RemoveAurasDueToSpell(SPELL_SNARE_SELF); } + // Gaze Phase else { - events.ScheduleEvent(EVENT_SPELL_VOLCANIC_ERUPTION, 5000, EVENT_GROUP_ABILITIES); - events.ScheduleEvent(EVENT_SWITCH_TARGET, 0, EVENT_GROUP_ABILITIES); - events.ScheduleEvent(EVENT_CHECK_DIST, 0, EVENT_GROUP_ABILITIES); + DoCastSelf(SPELL_SNARE_SELF, true); + + scheduler.Schedule(5s, [this](TaskContext context) + { + context.SetGroup(GROUP_ABILITIES); + + if (DoCastRandomTarget(SPELL_VOLCANIC_ERUPTION, 0, 100.f, true) == SPELL_CAST_OK) + Talk(EMOTE_GROUND_CRACK); + + context.Repeat(10s, 18s); + }).Schedule(0s, [this](TaskContext context) + { + context.SetGroup(GROUP_ABILITIES); + + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100, true)) + { + DoResetThreatList(); + me->AddThreat(target, 5000000.0f); + Talk(EMOTE_NEW_TARGET); + DoCastVictim(SPELL_CHARGE); + } + + context.Repeat(10s); + }); + me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, true); me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, true); - me->CastSpell(me, SPELL_SNARE_SELF, true); } } void JustSummoned(Creature* summon) override { summons.Summon(summon); - if (summon->GetEntry() == NPC_SUPREMUS_PUNCH_STALKER) - { - summon->ToTempSummon()->InitStats(20000); - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true)) - summon->GetMotionMaster()->MoveFollow(target, 0.0f, 0.0f, MOTION_SLOT_CONTROLLED); - } - else + if (summon->GetEntry() == NPC_SUPREMUS_VOLCANO) summon->CastSpell(summon, SPELL_VOLCANIC_ERUPTION_TRIGGER, true); + else + summon->ToTempSummon()->InitStats(30000); } void SummonedCreatureDespawn(Creature* summon) override @@ -116,71 +179,42 @@ struct boss_supremus : public BossAI return target; } - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (events.ExecuteEvent()) - { - case EVENT_SPELL_BERSERK: - me->CastSpell(me, SPELL_BERSERK, true); - break; - case EVENT_SPELL_HATEFUL_STRIKE: - if (Unit* target = FindHatefulStrikeTarget()) - me->CastSpell(target, SPELL_HATEFUL_STRIKE, false); - events.ScheduleEvent(EVENT_SPELL_HATEFUL_STRIKE, urand(1500, 3000), EVENT_GROUP_ABILITIES); - break; - case EVENT_SPELL_MOLTEN_FLAMES: - me->CastSpell(me, SPELL_MOLTEN_PUNCH, false); - events.ScheduleEvent(EVENT_SPELL_MOLTEN_FLAMES, 20000, EVENT_GROUP_ABILITIES); - break; - case EVENT_SWITCH_PHASE: - SchedulePhase(!me->HasAura(SPELL_SNARE_SELF)); - break; - case EVENT_SWITCH_TARGET: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100, true)) - { - DoResetThreatList(); - me->AddThreat(target, 5000000.0f); - Talk(EMOTE_NEW_TARGET); - } - events.ScheduleEvent(EVENT_SWITCH_TARGET, 10000, EVENT_GROUP_ABILITIES); - break; - case EVENT_CHECK_DIST: - if (me->GetDistance(me->GetVictim()) > 40.0f) - { - Talk(EMOTE_PUNCH_GROUND); - me->CastSpell(me->GetVictim(), SPELL_CHARGE, true); - events.ScheduleEvent(EVENT_CHECK_DIST, 5000, EVENT_GROUP_ABILITIES); - break; - } - events.ScheduleEvent(EVENT_CHECK_DIST, 1, EVENT_GROUP_ABILITIES); - break; - case EVENT_SPELL_VOLCANIC_ERUPTION: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100, true)) - { - me->CastSpell(target, SPELL_VOLCANIC_ERUPTION, true); - Talk(EMOTE_GROUND_CRACK); - } - events.ScheduleEvent(EVENT_SPELL_VOLCANIC_ERUPTION, urand(10000, 18000), EVENT_GROUP_ABILITIES); - break; - } - - DoMeleeAttackIfReady(); - } - bool CheckEvadeIfOutOfCombatArea() const override { return me->GetPositionX() < 565 || me->GetPositionX() > 865 || me->GetPositionY() < 545 || me->GetPositionY() > 1000; } }; +struct npc_supremus_punch_invisible_stalker : public ScriptedAI +{ + npc_supremus_punch_invisible_stalker(Creature* creature) : ScriptedAI(creature) { } + + void IsSummonedBy(WorldObject* /*summoner*/) override + { + me->SetInCombatWithZone(); + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true)) + me->AddThreat(target, 10000.f); + + DoCastSelf(SPELL_MOLTEN_FLAME, true); + + scheduler.Schedule(6s, 10s, [this](TaskContext /*context*/) + { + me->CombatStop(); + me->SetReactState(REACT_PASSIVE); + }); + } + + void UpdateAI(uint32 diff) override + { + scheduler.Update(diff); + + if (!UpdateVictim()) + return; + } +}; + void AddSC_boss_supremus() { + RegisterBlackTempleCreatureAI(npc_supremus_punch_invisible_stalker); RegisterBlackTempleCreatureAI(boss_supremus); } diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp index 9cc9fadaf..7ecc204b5 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp @@ -140,7 +140,11 @@ struct boss_lady_vashj : public BossAI { summon->GetMotionMaster()->MoveRandom(30.0f); } - else if (summon->GetEntry() != NPC_TAINTED_ELEMENTAL && summon->GetEntry() != NPC_ENCHANTED_ELEMENTAL) + else if (summon->GetEntry() == NPC_ENCHANTED_ELEMENTAL) + { + summon->GetMotionMaster()->MoveFollow(me, 0.0f, 0.0f); + } + else if (summon->GetEntry() != NPC_TAINTED_ELEMENTAL) { summon->GetMotionMaster()->MovePoint(POINT_HOME, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), true, true); } diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp index 0243fbf51..760c2faec 100644 --- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp +++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp @@ -1818,6 +1818,418 @@ public: } }; +/* +###### +# Dragonmaw Races +###### +*/ + +enum DragonmawRaces +{ + QUEST_MUCKJAW = 11064, + QUEST_TROPE = 11067, + QUEST_CORLOK = 11068, + QUEST_ICHMAN = 11069, + QUEST_MULVERICK = 11070, + QUEST_SKYSHATTER = 11071, + + NPC_MUCKJAW = 23340, + NPC_TROPE = 23342, + NPC_CORLOK = 23344, + NPC_ICHMAN = 23345, + NPC_MULVERICK = 23346, + NPC_SKYSHATTER = 23348, + + PATH_MUCKJAW = 233401, + PATH_TROPE = 233421, + PATH_CORLOK = 233441, + PATH_ICHMAN = 233451, + PATH_MULVERICK = 233461, + PATH_SKYSHATTER = 233481, + + NPC_TARGET_MUCKJAW = 23356, + NPC_TARGET_TROPE = 23357, + NPC_TARGET_CORLOK = 23358, + NPC_TARGET_ICHMAN = 23359, + NPC_TARGET_MULVERICK = 23360, + NPC_TARGET_SKYSHATTER = 23361, + + SAY_START = 0, + SAY_COMPLETE = 1, + SAY_SKYSHATTER_SPECIAL = 2, +}; + +struct dragonmaw_race_npc : public ScriptedAI +{ + dragonmaw_race_npc(Creature* creature) : ScriptedAI(creature) + { + _player = nullptr; + } + + void Reset() override + { + scheduler.CancelAll(); + me->SetNpcFlag(UNIT_NPC_FLAG_QUESTGIVER); + me->SetWalk(true); + me->SetDisableGravity(false); + me->GetMotionMaster()->MoveIdle(); + } + + void sQuestAccept(Player* player, Quest const* /*quest*/) override + { + _player = player; + me->RemoveNpcFlag(UNIT_NPC_FLAG_QUESTGIVER); + if (_player) + Talk(SAY_START, _player); + + switch (me->GetEntry()) + { + case NPC_MUCKJAW: + me->GetMotionMaster()->MovePath(PATH_MUCKJAW, false); + break; + case NPC_TROPE: + me->GetMotionMaster()->MovePath(PATH_TROPE, false); + break; + case NPC_CORLOK: + me->GetMotionMaster()->MovePath(PATH_CORLOK, false); + break; + case NPC_ICHMAN: + me->GetMotionMaster()->MovePath(PATH_ICHMAN, false); + break; + case NPC_MULVERICK: + me->GetMotionMaster()->MovePath(PATH_MULVERICK, false); + break; + case NPC_SKYSHATTER: + me->GetMotionMaster()->MovePath(PATH_SKYSHATTER, false); + break; + default: + break; + } + } + + void TakeOff() + { + me->SetDisableGravity(true); + } + + void StartRace() + { + me->SetWalk(false); + ScheduleTimedEvent(5s, [&] + { + if (!_player) + FailQuest(); + else if (!me->IsWithinDist(_player, 100.f)) + FailQuest(); + }, 5s); + } + + void FailQuest() + { + if (_player) + { + switch (me->GetEntry()) + { + case NPC_MUCKJAW: + _player->FailQuest(QUEST_MUCKJAW); + break; + case NPC_TROPE: + _player->FailQuest(QUEST_TROPE); + break; + case NPC_CORLOK: + _player->FailQuest(QUEST_CORLOK); + break; + case NPC_ICHMAN: + _player->FailQuest(QUEST_ICHMAN); + break; + case NPC_MULVERICK: + _player->FailQuest(QUEST_MULVERICK); + break; + case NPC_SKYSHATTER: + _player->FailQuest(QUEST_SKYSHATTER); + break; + default: + break; + } + } + scheduler.CancelAll(); + me->DespawnOnEvade(); + } + + void StartRaceAttacks() + { + /* + * Timers are placeholders + * After spawned, the rest is done via SmartAI + */ + if (!_player) + return; + + switch (me->GetEntry()) + { + case NPC_MUCKJAW: + ScheduleTimedEvent(4s, [&] + { + if (_player) + { + Position summonPos; + summonPos = me->GetRandomPoint(_player->GetPosition(), 15.f); + summonPos.m_positionZ = _player->GetPositionZ(); // So they don't spawn at ground height + me->SummonCreature(NPC_TARGET_MUCKJAW, summonPos, TEMPSUMMON_TIMED_DESPAWN, 10000); + } + else + return; + }, 4s, 8s); + break; + case NPC_TROPE: + ScheduleTimedEvent(4s, [&] + { + if (_player) + { + Position summonPos; + summonPos = me->GetRandomPoint(_player->GetPosition(), 10.f); + summonPos.m_positionZ = _player->GetPositionZ(); + me->SummonCreature(NPC_TARGET_TROPE, summonPos, TEMPSUMMON_TIMED_DESPAWN, 10000); + } + else + return; + }, 1s, 3s); + break; + case NPC_CORLOK: + ScheduleTimedEvent(4s, [&] + { + if (_player) + { + Position summonPos; + summonPos = me->GetRandomPoint(_player->GetPosition(), 10.f); + summonPos.m_positionZ = _player->GetPositionZ(); + me->SummonCreature(NPC_TARGET_CORLOK, summonPos, TEMPSUMMON_TIMED_DESPAWN, 10000); + } + else + return; + }, 1s, 3s); + break; + case NPC_ICHMAN: + ScheduleTimedEvent(4s, [&] + { + if (_player) + { + Position summonPos; + summonPos = me->GetRandomPoint(_player->GetPosition(), 10.f); + summonPos.m_positionZ = _player->GetPositionZ(); + me->SummonCreature(NPC_TARGET_ICHMAN, summonPos, TEMPSUMMON_TIMED_DESPAWN, 10000); + } + else + return; + }, 1s, 3s); + break; + case NPC_MULVERICK: + ScheduleTimedEvent(4s, [&] + { + if (_player) + { + Position summonPos; + summonPos = me->GetRandomPoint(_player->GetPosition(), 10.f); + summonPos.m_positionZ = _player->GetPositionZ(); + me->SummonCreature(NPC_TARGET_MULVERICK, summonPos, TEMPSUMMON_TIMED_DESPAWN, 10000); + } + else + return; + }, 1s, 3s); + break; + case NPC_SKYSHATTER: + ScheduleTimedEvent(4s, [&] + { + if (_player) + { + Position summonPos; + summonPos = me->GetRandomPoint(_player->GetPosition(), 7.f); + summonPos.m_positionZ = _player->GetPositionZ(); // So they don't spawn at ground height + me->SummonCreature(NPC_TARGET_SKYSHATTER, summonPos, TEMPSUMMON_TIMED_DESPAWN, 10000); + } + else + return; + }, 1s, 3s); + break; + default: + break; + } + } + + void FinishRace() + { + scheduler.CancelAll(); + me->SetHover(false); + me->SetDisableGravity(false); + me->SetWalk(true); + + if (_player) + { + Talk(SAY_COMPLETE, _player); + switch (me->GetEntry()) + { + case NPC_MUCKJAW: + _player->AreaExploredOrEventHappens(QUEST_MUCKJAW); + break; + case NPC_TROPE: + _player->AreaExploredOrEventHappens(QUEST_TROPE); + break; + case NPC_CORLOK: + _player->AreaExploredOrEventHappens(QUEST_CORLOK); + break; + case NPC_ICHMAN: + _player->AreaExploredOrEventHappens(QUEST_ICHMAN); + break; + case NPC_MULVERICK: + _player->AreaExploredOrEventHappens(QUEST_MULVERICK); + break; + case NPC_SKYSHATTER: + _player->AreaExploredOrEventHappens(QUEST_SKYSHATTER); + break; + default: + break; + } + } + } + + void MovementInform(uint32 /*type*/, uint32 id) override + { + switch (me->GetEntry()) + { + case NPC_MUCKJAW: + switch (id) + { + case 4: + TakeOff(); + break; + case 7: + StartRace(); + break; + case 9: + StartRaceAttacks(); + break; + case 35: + FinishRace(); + break; + case 37: + Reset(); + break; + } + break; + case NPC_TROPE: + switch (id) + { + case 5: + TakeOff(); + break; + case 7: + StartRace(); + break; + case 10: + StartRaceAttacks(); + break; + case 53: + FinishRace(); + break; + case 60: + Reset(); + break; + } + break; + case NPC_CORLOK: + switch (id) + { + case 6: + TakeOff(); + break; + case 9: + StartRace(); + break; + case 12: + StartRaceAttacks(); + break; + case 79: + FinishRace(); + break; + case 89: + Reset(); + break; + } + break; + case NPC_ICHMAN: + switch (id) + { + case 4: + TakeOff(); + StartRace(); + break; + case 12: + StartRaceAttacks(); + break; + case 107: + FinishRace(); + break; + case 111: + Reset(); + break; + } + break; + case NPC_MULVERICK: + switch (id) + { + case 5: + TakeOff(); + break; + case 9: + StartRace(); + break; + case 12: + StartRaceAttacks(); + break; + case 166: + FinishRace(); + break; + case 172: + Reset(); + break; + } + break; + case NPC_SKYSHATTER: + switch (id) + { + case 3: + TakeOff(); + break; + case 7: + StartRace(); + if (_player) + Talk(SAY_SKYSHATTER_SPECIAL, _player); + break; + case 10: + StartRaceAttacks(); + break; + case 140: + FinishRace(); + break; + case 145: + Reset(); + break; + } + break; + default: + break; + } + } + + void UpdateAI(uint32 diff) override + { + scheduler.Update(diff); + } + + private: + Player* _player; +}; + void AddSC_shadowmoon_valley() { // Ours @@ -1825,6 +2237,7 @@ void AddSC_shadowmoon_valley() RegisterSpellScript(spell_q10563_q10596_to_legion_hold_aura); // Theirs + RegisterCreatureAI(dragonmaw_race_npc); new npc_invis_infernal_caster(); new npc_infernal_attacker(); new npc_mature_netherwing_drake(); diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp index 7519981de..d1f88f153 100644 --- a/src/server/scripts/Spells/spell_quest.cpp +++ b/src/server/scripts/Spells/spell_quest.cpp @@ -436,68 +436,24 @@ enum q11520Roots SPELL_SUMMON_RAZORTHORN_ROOT = 44941, }; - class spell_q11520_discovering_your_roots : public SpellScript - { - PrepareSpellScript(spell_q11520_discovering_your_roots); - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - if (GameObject* go = GetCaster()->FindNearestGameObject(GO_RAZORTHORN_DIRT_MOUNT, 20.0f)) - { - GetCaster()->GetMotionMaster()->MovePoint(0, *go); - go->SetLootState(GO_JUST_DEACTIVATED); - GetCaster()->CastSpell(GetCaster(), SPELL_SUMMON_RAZORTHORN_ROOT, true); - } - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_q11520_discovering_your_roots::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } - }; - -class spell_quest_dragonmaw_race_generic : public SpellScript +class spell_q11520_discovering_your_roots : public SpellScript { - PrepareSpellScript(spell_quest_dragonmaw_race_generic); + PrepareSpellScript(spell_q11520_discovering_your_roots); - bool Load() override + void HandleDummy(SpellEffIndex /*effIndex*/) { - _x = _y = _z = 0.0f; - return true; - } - - SpellCastResult RelocateDest() - { - Unit* caster = GetCaster(); - float o = Position::NormalizeOrientation(caster->GetOrientation() + frand(0.0f, 2 * M_PI)); - float dist = frand(5.0f, 30.0f); - _x = caster->GetPositionX() + dist * cos(o); - _y = caster->GetPositionY() + dist * std::sin(o); - _z = caster->GetPositionZ() + frand(-10.0f, 15.0f); - GetSpell()->m_targets.SetDst(_x, _y, _z, 0.0f, caster->GetMapId()); - return SPELL_CAST_OK; - } - - void ChangeDest(SpellEffIndex effIndex) - { - PreventHitDefaultEffect(effIndex); - Unit* caster = GetCaster(); - if (Creature* trigger = caster->SummonCreature(23356, _x, _y, _z, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 1500)) + if (GameObject* go = GetCaster()->FindNearestGameObject(GO_RAZORTHORN_DIRT_MOUNT, 20.0f)) { - trigger->CastSpell(trigger, GetSpellInfo()->Effects[effIndex].TriggerSpell, true); - if (GetSpellInfo()->Effects[effIndex].TriggerSpell == 41064) - trigger->CastSpell(trigger, 41284, true); + GetCaster()->GetMotionMaster()->MovePoint(0, *go); + go->SetLootState(GO_JUST_DEACTIVATED); + GetCaster()->CastSpell(GetCaster(), SPELL_SUMMON_RAZORTHORN_ROOT, true); } } void Register() override { - OnCheckCast += SpellCheckCastFn(spell_quest_dragonmaw_race_generic::RelocateDest); - OnEffectHit += SpellEffectFn(spell_quest_dragonmaw_race_generic::ChangeDest, EFFECT_0, SPELL_EFFECT_TRIGGER_MISSILE); + OnEffectHitTarget += SpellEffectFn(spell_q11520_discovering_your_roots::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } - -private: - float _x, _y, _z; }; class spell_q11670_it_was_the_orcs_honest : public SpellScript @@ -2508,7 +2464,6 @@ void AddSC_quest_spell_scripts() RegisterSpellScript(spell_q12943_shadow_vault_decree); RegisterSpellAndAuraScriptPair(spell_q10769_dissension_amongst_the_ranks, spell_q10769_dissension_amongst_the_ranks_aura); RegisterSpellScript(spell_q11520_discovering_your_roots); - RegisterSpellScript(spell_quest_dragonmaw_race_generic); RegisterSpellScript(spell_q11670_it_was_the_orcs_honest); RegisterSpellScript(spell_quest_test_flight_charging); RegisterSpellScript(spell_q12274_a_fall_from_grace_costume);