Merge branch 'master' into Playerbot
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
-- DB update 2023_12_28_00 -> 2023_12_30_00
|
||||
-- Rotting Touch
|
||||
DELETE FROM `spell_custom_attr` WHERE `spell_id`=50196;
|
||||
INSERT INTO `spell_custom_attr` (`spell_id`, `attributes`) VALUES (50196, 4194304);
|
||||
@@ -0,0 +1,217 @@
|
||||
-- DB update 2023_12_30_00 -> 2024_01_01_00
|
||||
-- Update all 'Mailbox' gameobjects with sniffed values
|
||||
-- updated spawns
|
||||
DELETE FROM `gameobject`
|
||||
WHERE (`id` IN (142075, 142089, 142093, 142094, 142095, 142102, 142103, 142109, 142110, 142111, 142117, 142119, 143981, 143982, 143983, 143984, 143985, 143986, 143987, 143988, 143989, 143990, 144011, 144112, 144125, 144126, 144127, 144128, 144129, 144130, 144131, 144179, 153578, 153716, 157637, 163313, 163645, 164618, 164840, 171556, 171699, 171752, 173047, 173221, 176319, 176324, 176404, 177044, 178864, 179895, 179896, 180451, 181236, 181380, 181381, 181639, 181883, 181980, 182356, 182357, 182359, 182360, 182361, 182362, 182363, 182364, 182365, 182391, 182567, 182939, 182946, 182948, 182949, 182950, 182955, 183037, 183038, 183039, 183040, 183042, 183047, 183167, 183856, 183857, 183858, 184085, 184133, 184134, 184135, 184136, 184137, 184138, 184139, 184140, 184147, 184148, 184490, 184652, 184944, 185102, 185472, 185473, 185477, 186230, 186435, 186506, 186629, 186687, 187113, 187260, 187268, 187316, 187322, 188123, 188241, 188256, 188355, 188486, 188531, 188534, 188541, 188604, 188618, 188682, 188710, 189328, 189329, 189969, 190914, 190915, 191228, 191521, 191832, 191946, 191947, 191948, 191949, 191950, 191951, 191952, 191953, 191954, 191955, 191956, 191957, 192952, 193030, 193043, 193044, 193045, 193071, 193791, 193972, 194016, 194027, 194147, 194492, 194788, 195218, 195467, 195468, 195528, 195529, 195530, 195554, 195555, 195556, 195557, 195558, 195559, 195560, 195561, 195562, 195603, 195604, 195606, 195607, 195608, 195609, 195610, 195611, 195612, 195613, 195614, 195615, 195616, 195617, 195618, 195619, 195624, 195625, 195626, 195627, 195628, 195629, 32349))
|
||||
AND (`guid` IN (10011, 100156, 100157, 100158, 100159, 100499, 100500, 100501, 100502, 100503, 100505, 100506, 10107, 1074, 10764, 10807, 10880, 10968, 11824, 121573, 121574, 121575, 12634, 13449, 13770, 14131, 150145, 150736, 150737, 150738, 150739, 150740, 150741, 150742, 150743, 150744, 150745, 150746, 150747, 150748, 150749, 150750, 150751, 150752, 150753, 150754, 150755, 151207, 151239, 1564, 15724, 15753, 15760, 1620, 16565, 17022, 17101, 17424, 17473, 20420, 20426, 20492, 20534, 21722, 21723, 22398, 22851, 22852, 22853, 22854, 22855, 22856, 22857, 22858, 22859, 22871, 23173, 23802, 23859, 23861, 23862, 23900, 23953, 23954, 23955, 23990, 24053, 24717, 24718, 24719, 25004, 25034, 25035, 25036, 25037, 25038, 25039, 25040, 25041, 25046, 25047, 25341, 25454, 25833, 25969, 26175, 26176, 26387, 26463, 26784, 268682, 268683, 27147, 27845, 29365, 30400, 30852, 32101, 32537, 32540, 33370, 42497, 42900, 42913, 44775, 45603, 46048, 46054, 47458, 47593, 47829, 48037, 48629, 48827, 48996, 49429, 49531, 49532, 49832, 49947, 50044, 516, 52, 55701, 55927, 55966, 55975, 56563, 56726, 56975, 57535, 57604, 57696, 58222, 59045, 59093, 59214, 59314, 59451, 59543, 59565, 59746, 60040, 60041, 60074, 60111, 60214, 60310, 60320, 60433, 60436, 60445, 60454, 60469, 60479, 60509, 60519, 60545, 60554, 60563, 60576, 60591, 60953, 61662, 61819, 62014, 62980, 63134, 66065, 66357, 66633, 7555, 7574, 7597, 866, 92053));
|
||||
INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `VerifiedBuild`, `Comment`) VALUES
|
||||
(10011, 163645, 0, 0, 0, 1, 1, -12387.638671875, 145.8055572509765625, 2.519112110137939453, 4.677483558654785156, 0, 0, -0.71933937072753906, 0.694658815860748291, 120, 255, 1, "", 50172, NULL),
|
||||
(100156, 195603, 0, 0, 0, 1, 1, -8815.1689453125, 652.92669677734375, 94.89659881591796875, 4.878195762634277343, 0, 0, -0.64612388610839843, 0.763232588768005371, 120, 255, 1, "", 48632, NULL),
|
||||
(100157, 195604, 0, 0, 0, 1, 1, -8861.4970703125, 636.744384765625, 96.17852783203125, 1.911133170127868652, 0, 0, 0.816640853881835937, 0.577146172523498535, 120, 255, 1, "", 48632, NULL),
|
||||
(100158, 195614, 0, 0, 0, 1, 1, -8811.2802734375, 838.16448974609375, 99.0288238525390625, 6.161012649536132812, 0, 0, -0.06104850769042968, 0.998134791851043701, 120, 255, 1, "", 49345, NULL),
|
||||
(100159, 195615, 0, 0, 0, 1, 1, -8826.5341796875, 725.575927734375, 98.67694091796875, 5.131268978118896484, 0, 0, -0.54463863372802734, 0.838670849800109863, 120, 255, 1, "", 49345, NULL),
|
||||
(100499, 195624, 0, 0, 0, 1, 1, 1483.6412353515625, 187.9666748046875, -62.2915382385253906, 5.10445404052734375, 0, 0, -0.55583381652832031, 0.831293404102325439, 120, 255, 1, "", 50063, NULL),
|
||||
(100500, 195626, 0, 0, 0, 1, 1, 1547.329833984375, 276.82818603515625, -62.2802848815917968, 4.656640529632568359, 0, 0, -0.72653961181640625, 0.687124609947204589, 120, 255, 1, "", 49345, NULL),
|
||||
(100501, 195628, 0, 0, 0, 1, 1, 1644.317626953125, 204.032501220703125, -62.2799644470214843, 6.13532114028930664, 0, 0, -0.07386493682861328, 0.997268259525299072, 120, 255, 1, "", 49345, NULL),
|
||||
(100502, 195627, 0, 0, 0, 1, 1, 1644.8427734375, 276.180145263671875, -62.2799034118652343, 0.828394830226898193, 0, 0, 0.402455329895019531, 0.9154396653175354, 120, 255, 1, "", 49345, NULL),
|
||||
(100503, 195625, 0, 0, 0, 1, 1, 1547.062255859375, 204.549346923828125, -62.2807502746582031, 0.776035070419311523, 0, 0, 0.378354072570800781, 0.925660967826843261, 120, 255, 1, "", 49345, NULL),
|
||||
(100505, 195618, 0, 0, 0, 1, 1, -8572.3623046875, 552.68365478515625, 102.003875732421875, 3.665196180343627929, 0, 0, -0.96592521667480468, 0.258821308612823486, 120, 255, 1, "", 48632, NULL),
|
||||
(100506, 195610, 0, 0, 0, 1, 1, -9003.4990234375, 860.5499267578125, 105.8765716552734375, 5.07018136978149414, 0, 0, -0.56999683380126953, 0.821646869182586669, 120, 255, 1, "", 49345, NULL),
|
||||
(10107, 173221, 1, 0, 0, 1, 1, 1615.583740234375, -4391.6015625, 10.33495712280273437, 3.94444584846496582, 0, 0, -0.92050457000732421, 0.3907318115234375, 120, 255, 1, "", 47720, NULL),
|
||||
(1074, 142102, 0, 0, 0, 1, 1, -5603.5869140625, -513.78125, 401.569244384765625, 3.141592741012573242, 0, 0, -1, 0, 120, 255, 1, "", 48632, NULL),
|
||||
(10764, 144126, 0, 0, 0, 1, 1, -14417.3662109375, 517.03448486328125, 5.013153076171875, 2.504543066024780273, 0, 0, 0.949698448181152343, 0.313165903091430664, 120, 255, 1, "", 50063, NULL),
|
||||
(10807, 144127, 0, 0, 0, 1, 1, -14461.9619140625, 480.032073974609375, 26.86115264892578125, 2.408554315567016601, 0, 0, 0.933580398559570312, 0.358368009328842163, 120, 255, 1, "", 50063, NULL),
|
||||
(10880, 163313, 0, 0, 0, 1, 1, -6673.94775390625, -2174.3525390625, 244.159881591796875, 2.539447784423828125, 0, 0, 0.955018997192382812, 0.296544641256332397, 120, 255, 1, "", 48632, NULL),
|
||||
(10968, 173047, 1, 0, 0, 1, 1, 1894.966064453125, -4553.87548828125, 29.38039779663085937, 2.155482053756713867, 0, 0, 0.880890846252441406, 0.473319470882415771, 120, 255, 1, "", 47720, NULL),
|
||||
(11824, 142103, 0, 0, 0, 1, 1, -5365.62255859375, -2954.108154296875, 323.754547119140625, 3.420850038528442382, 0, 0, -0.99026775360107421, 0.139175355434417724, 120, 255, 1, "", 48632, NULL),
|
||||
(121573, 195528, 1, 0, 0, 1, 1, 9734.6376953125, 2253.09033203125, 1327.3465576171875, 3.804818391799926757, 0, 0, -0.94551849365234375, 0.325568377971649169, 120, 255, 1, "", 50172, NULL),
|
||||
(121574, 195529, 1, 0, 0, 1, 1, 9850.2236328125, 2307.10595703125, 1318.53759765625, 1.553341388702392578, 0, 0, 0.700908660888671875, 0.713251054286956787, 120, 255, 1, "", 48632, NULL),
|
||||
(121575, 195530, 1, 0, 0, 1, 1, 9916.2939453125, 2348.201416015625, 1330.6988525390625, 3.185266733169555664, 0, 0, -0.99976158142089843, 0.021835235878825187, 120, 255, 1, "", 48632, NULL),
|
||||
(12634, 164618, 0, 0, 0, 1, 1, -10995.859375, -3387.513916015625, 62.11632156372070312, 3.010695457458496093, 0, 0, 0.997859001159667968, 0.065401896834373474, 120, 255, 1, "", 50063, NULL),
|
||||
(13449, 143982, 1, 0, 0, 1, 1, -443.692169189453125, -2649.07861328125, 95.77381134033203125, 0.226890549063682556, 0, 0, 0.113202095031738281, 0.993571996688842773, 120, 255, 1, "", 49345, NULL),
|
||||
(13770, 142094, 0, 0, 0, 1, 1, -3793.975830078125, -838.58160400390625, 9.54323577880859375, 3.141592741012573242, 0, 0, -1, 0, 120, 255, 1, "", 50063, NULL),
|
||||
(14131, 142089, 0, 0, 0, 1, 1, -10546.4755859375, -1157.3211669921875, 27.78338050842285156, 3.23760390281677246, 0, 0, -0.99884796142578125, 0.047987140715122222, 120, 255, 1, "", 50063, NULL),
|
||||
(150145, 188241, 571, 0, 0, 1, 1, 4600.57470703125, -4235.314453125, 178.6544036865234375, 2.024578809738159179, 0, 0, 0.848047256469726562, 0.529920578002929687, 120, 255, 1, "", 50664, NULL),
|
||||
(150736, 195467, 0, 0, 0, 1, 1, -8291.4892578125, 1196.079833984375, 5.59665679931640625, 1.605701684951782226, 0, 0, 0.719339370727539062, 0.694658815860748291, 120, 255, 1, "", 50664, NULL),
|
||||
(150737, 195606, 0, 0, 0, 1, 1, -8744.5751953125, 407.27215576171875, 98.20717620849609375, 3.412121534347534179, 0, 0, -0.99086570739746093, 0.134852290153503417, 120, 255, 1, "", 50063, NULL),
|
||||
(150738, 195607, 0, 0, 0, 1, 1, -8424.0458984375, 599.5169677734375, 94.69469451904296875, 3.141592741012573242, 0, 0, -1, 0, 120, 255, 1, "", 48632, NULL),
|
||||
(150739, 195608, 0, 0, 0, 1, 1, -8797.541015625, 463.5186767578125, 95.81647491455078125, 4.319690704345703125, 0, 0, -0.83146953582763671, 0.555570363998413085, 120, 255, 1, "", 48632, NULL),
|
||||
(150740, 195609, 0, 0, 0, 1, 1, -8662.744140625, 774.28955078125, 97.01007080078125, 2.251473426818847656, 0, 0, 0.902585029602050781, 0.430511653423309326, 120, 255, 1, "", 49345, NULL),
|
||||
(150741, 195611, 0, 0, 0, 1, 1, -8712.9296875, 1013.33984375, 96.36161041259765625, 3.874636650085449218, 0, 0, -0.9335794448852539, 0.358370482921600341, 120, 255, 1, "", 50664, NULL),
|
||||
(150742, 195612, 0, 0, 0, 1, 1, -8620.947265625, 929.647216796875, 99.51955413818359375, 3.865906238555908203, 0, 0, -0.9351348876953125, 0.354291886091232299, 120, 255, 1, "", 50250, NULL),
|
||||
(150743, 195613, 0, 0, 0, 1, 1, -8393.654296875, 1064.357177734375, 31.63024139404296875, 3.089183330535888671, 0, 0, 0.99965667724609375, 0.026201646775007247, 120, 255, 1, "", 50664, NULL),
|
||||
(150744, 195616, 0, 0, 0, 1, 1, -8724.318359375, 773.5013427734375, 98.50853729248046875, 2.556905269622802734, 0, 0, 0.957571029663085937, 0.288197338581085205, 120, 255, 1, "", 49345, NULL),
|
||||
(150745, 195617, 0, 0, 0, 1, 1, -8581.619140625, 669.0135498046875, 97.92009735107421875, 1.256635904312133789, 0, 0, 0.587784767150878906, 0.809017360210418701, 120, 255, 1, "", 49345, NULL),
|
||||
(150746, 195619, 0, 0, 0, 1, 1, -8498.1767578125, 654.275634765625, 100.52685546875, 2.72271275520324707, 0, 0, 0.978147506713867187, 0.207912087440490722, 120, 255, 1, "", 48632, NULL),
|
||||
(150747, 195554, 1, 0, 0, 1, 1, 1657.8717041015625, -4433.03076171875, 17.48180389404296875, 5.585053920745849609, 0, 0, -0.34202003479003906, 0.939692676067352294, 120, 255, 1, "", 47720, NULL),
|
||||
(150748, 195555, 1, 0, 0, 1, 1, 1574.0245361328125, -4215.53369140625, 45.16959762573242187, 4.049163341522216796, 0, 0, -0.89879417419433593, 0.438370853662490844, 120, 255, 1, "", 49345, NULL),
|
||||
(150749, 195556, 1, 0, 0, 1, 1, 2076.423828125, -4824.20556640625, 23.66915321350097656, 4.956734657287597656, 0, 0, -0.61566162109375, 0.788010656833648681, 120, 255, 1, "", 50063, NULL),
|
||||
(150750, 195557, 1, 0, 0, 1, 1, 1919.0592041015625, -4359.271484375, 20.73931694030761718, 3.848456144332885742, 0, 0, -0.93819046020507812, 0.346119433641433715, 120, 255, 1, "", 47720, NULL),
|
||||
(150751, 195558, 1, 0, 0, 1, 1, 1720.126953125, -4406.9765625, 35.84055709838867187, 1.256635904312133789, 0, 0, 0.587784767150878906, 0.809017360210418701, 120, 255, 1, "", 47720, NULL),
|
||||
(150752, 195559, 1, 0, 0, 1, 1, 1754.653076171875, -4534.02685546875, 29.03590202331542968, 4.817109584808349609, 0, 0, -0.66913032531738281, 0.74314504861831665, 120, 255, 1, "", 47720, NULL),
|
||||
(150753, 195560, 1, 0, 0, 1, 1, 1768.001953125, -4320.849609375, 6.551733016967773437, 4.40695810317993164, 0, 0, -0.80644416809082031, 0.59131026268005371, 120, 255, 1, "", 47720, NULL),
|
||||
(150754, 195561, 1, 0, 0, 1, 1, 1834.3509521484375, -4407.33740234375, 5.340616226196289062, 3.141592741012573242, 0, 0, -1, 0, 120, 255, 1, "", 47720, NULL),
|
||||
(150755, 195562, 1, 0, 0, 1, 1, 1607.486328125, -4374.2578125, 9.76903533935546875, 3.28996133804321289, 0, 0, -0.99724960327148437, 0.074116282165050506, 120, 255, 1, "", 47720, NULL),
|
||||
(151207, 186506, 571, 0, 0, 1, 1, 2476.552001953125, -5075.70654296875, 282.771820068359375, 2.993224143981933593, 0, 0, 0.997249603271484375, 0.074116282165050506, 120, 255, 1, "", 51739, NULL),
|
||||
(151239, 195468, 0, 0, 0, 1, 1, -8565.5244140625, 1195.4947509765625, 5.44072580337524414, 1.527163028717041015, 0, 0, 0.6915130615234375, 0.722363948822021484, 120, 255, 1, "", 50250, NULL),
|
||||
(1564, 32349, 0, 0, 0, 1, 1, -4845.779296875, -879.300537109375, 501.614166259765625, 1.649333357810974121, 0, 0, 0.73432159423828125, 0.678801715373992919, 120, 255, 1, "", 48632, NULL),
|
||||
(15724, 153578, 1, 0, 0, 1, 1, -2351.58251953125, -1944.7510986328125, 95.791107177734375, 0.427604883909225463, 0, 0, 0.212177276611328125, 0.977231204509735107, 120, 255, 1, "", 50172, NULL),
|
||||
(15753, 144125, 1, 0, 0, 1, 1, -1035.10791015625, -3676.033447265625, 23.06699752807617187, 2.871063947677612304, 0, 0, 0.990865707397460937, 0.134852290153503417, 120, 255, 1, "", 49345, NULL),
|
||||
(15760, 164840, 0, 0, 0, 1, 1, -927.87872314453125, -3525.539306640625, 70.87708282470703125, 1.553341388702392578, 0, 0, 0.700908660888671875, 0.713251054286956787, 120, 255, 1, "", 48632, NULL),
|
||||
(1620, 143981, 1, 0, 0, 1, 1, 322.408050537109375, -4706.90087890625, 14.68337535858154296, 1.038469314575195312, 0, 0, 0.4962158203125, 0.86819922924041748, 120, 255, 1, "", 48632, NULL),
|
||||
(16565, 144179, 90, 0, 0, 1, 1, -547.90301513671875, 167.2587890625, -193.804351806640625, 4.729844093322753906, 0, 0, -0.70090866088867187, 0.713251054286956787, 7200, 255, 1, "", 52237, NULL),
|
||||
(17022, 143988, 0, 0, 0, 1, 1, -20.3935012817382812, -929.42156982421875, 55.46469497680664062, 2.644171714782714843, 0, 0, 0.96923065185546875, 0.246154293417930603, 120, 255, 1, "", 50063, NULL),
|
||||
(17101, 176324, 1, 0, 0, 1, 1, -5464.3681640625, -2450.802001953125, 89.24736785888671875, 3.516837835311889648, 0, 0, -0.98245048522949218, 0.186523601412773132, 120, 255, 1, "", 49345, NULL),
|
||||
(17424, 143987, 0, 0, 0, 1, 1, -852.20269775390625, -546.710205078125, 10.93239021301269531, 4.738570213317871093, 0, 0, -0.69779014587402343, 0.716302275657653808, 120, 255, 1, "", 50063, NULL),
|
||||
(17473, 144112, 1, 0, 0, 1, 1, -7154.40087890625, -3829.517822265625, 8.750293731689453125, 4.223697185516357421, 0, 0, -0.85716724395751953, 0.515038192272186279, 120, 255, 1, "", 49345, NULL),
|
||||
(20420, 143984, 1, 0, 0, 1, 1, -2338.213623046875, -367.14251708984375, -8.52861213684082031, 2.67034769058227539, 0, 0, 0.972369194030761718, 0.233448356389999389, 120, 255, 1, "", 48632, NULL),
|
||||
(20426, 143985, 1, 0, 0, 1, 1, -1263.310791015625, 44.54513931274414062, 127.5445709228515625, 4.729844093322753906, 0, 0, -0.70090866088867187, 0.713251054286956787, 120, 255, 1, "", 48632, NULL),
|
||||
(20492, 182950, 530, 0, 0, 1, 1, -2046.0069580078125, -11876.2236328125, 46.57349014282226562, 2.818698406219482421, 0, 0, 0.986995697021484375, 0.160746723413467407, 120, 255, 1, "", 50063, NULL),
|
||||
(20534, 183042, 530, 0, 0, 1, 1, 288.03472900390625, 6082.4990234375, 131.550689697265625, 2.923415660858154296, 0, 0, 0.994055747985839843, 0.108872212469577789, 120, 255, 1, "", 49345, NULL),
|
||||
(21722, 181380, 530, 0, 0, 1, 1, -706.5538330078125, 2700.935791015625, 94.53797149658203125, 1.494295954704284667, 0, 0, 0.679549217224121093, 0.733629941940307617, 120, 255, 1, "", 49345, NULL),
|
||||
(21723, 181381, 530, 0, 0, 1, 1, 172.7256927490234375, 2623.0556640625, 86.83609771728515625, 3.569828033447265625, 0, 0, -0.97716426849365234, 0.212485253810882568, 120, 255, 1, "", 50063, NULL),
|
||||
(22398, 181980, 530, 0, 0, 1, 1, 8719.9267578125, -6665.38916015625, 70.2157440185546875, 2.757623195648193359, 0, 0, 0.981627464294433593, 0.190807580947875976, 120, 255, 1, "", 50664, NULL),
|
||||
(22851, 182356, 530, 0, 0, 1, 1, 9548.134765625, -7263.0068359375, 14.11757087707519531, 4.694939613342285156, 0, 0, -0.71324920654296875, 0.700910508632659912, 120, 255, 1, "", 48632, NULL),
|
||||
(22852, 182357, 530, 0, 0, 1, 1, 9515.6630859375, -7262.47216796875, 14.19133853912353515, 4.729841232299804687, 0, 0, -0.70090961456298828, 0.71325010061264038, 120, 255, 1, "", 48632, NULL),
|
||||
(22853, 182359, 530, 0, 0, 1, 1, 9500.134765625, -6842.25, 16.40702056884765625, 1.754055619239807128, 0, 0, 0.768841743469238281, 0.639439105987548828, 120, 255, 1, "", 48632, NULL),
|
||||
(22854, 182360, 530, 0, 0, 1, 1, 9624.4814453125, -7404.205078125, 13.62501907348632812, 4.712389945983886718, 0, 0, -0.70710659027099609, 0.707106947898864746, 120, 255, 1, "", 49345, NULL),
|
||||
(22855, 182361, 530, 0, 0, 1, 1, 9743.9580078125, -7466.10400390625, 13.5187997817993164, 3.865906238555908203, 0, 0, -0.9351348876953125, 0.354291886091232299, 120, 255, 1, "", 49345, NULL),
|
||||
(22856, 182362, 530, 0, 0, 1, 1, 9651.7392578125, -7403.69091796875, 13.62811183929443359, 4.694933891296386718, 0, 0, -0.71325111389160156, 0.700908601284027099, 120, 255, 1, "", 48632, NULL),
|
||||
(22857, 182363, 530, 0, 0, 1, 1, 9918.849609375, -7226.41162109375, 30.73390007019042968, 1.867502212524414062, 0, 0, 0.803856849670410156, 0.594822824001312255, 120, 255, 1, "", 48632, NULL),
|
||||
(22858, 182364, 530, 0, 0, 1, 1, 9709.3564453125, -7308.94091796875, 24.71313285827636718, 2.556905269622802734, 0, 0, 0.957571029663085937, 0.288197338581085205, 120, 255, 1, "", 48632, NULL),
|
||||
(22859, 182365, 530, 0, 0, 1, 1, 9804.517578125, -7400.15283203125, 13.62031078338623046, 0.008724239654839038, 0, 0, 0.004362106323242187, 0.999990463256835937, 120, 255, 1, "", 49345, NULL),
|
||||
(22871, 182391, 530, 0, 0, 1, 1, -1267.7100830078125, 7175.015625, 57.30986785888671875, 0.89884275197982788, 0, 0, 0.434444427490234375, 0.900698602199554443, 120, 255, 1, "", 50063, NULL),
|
||||
(23173, 182567, 530, 0, 0, 1, 1, 258.90972900390625, 7870.71728515625, 23.01399421691894531, 5.034697532653808593, 0, 0, -0.58448410034179687, 0.811405181884765625, 120, 255, 1, "", 49345, NULL),
|
||||
(23802, 182939, 530, 0, 0, 1, 1, -2929.392333984375, 4008.915771484375, -1.38916504383087158, 3.673924207687377929, 0, 0, -0.96478652954101562, 0.263034075498580932, 120, 255, 1, "", 49345, NULL),
|
||||
(23859, 182946, 530, 0, 0, 1, 1, -2985.4775390625, 2567.935791015625, 76.5433502197265625, 4.267611980438232421, 0, 0, -0.84565258026123046, 0.533733725547790527, 120, 255, 1, "", 50063, NULL),
|
||||
(23861, 182948, 530, 0, 0, 1, 1, -4147.99462890625, -12490.40625, 44.31752777099609375, 3.682650327682495117, 0, 0, -0.96362972259521484, 0.26724100112915039, 120, 255, 1, "", 48632, NULL),
|
||||
(23862, 182949, 530, 0, 0, 1, 1, -4055.44091796875, -11904.59765625, -1.986083984375, 3.159062385559082031, 0, 0, -0.99996185302734375, 0.008734640665352344, 120, 255, 1, "", 48632, NULL),
|
||||
(23900, 182955, 530, 0, 0, 1, 1, -2673.138916015625, 7288.91845703125, 36.85296630859375, 4.310963630676269531, -0.05280876159667968, 0.111169815063476562, -0.8263702392578125, 0.549513161182403564, 120, 255, 1, "", 50063, NULL),
|
||||
(23953, 183037, 530, 0, 0, 1, 1, -596.53125, 4151.74853515625, 65.4322357177734375, 4.956737518310546875, 0.000751972198486328, -0.00612449645996093, -0.61563396453857421, 0.788008093833923339, 120, 255, 1, "", 50664, NULL),
|
||||
(23954, 183038, 530, 0, 0, 1, 1, 195.2725677490234375, 4326.39404296875, 116.8954010009765625, 3.141592741012573242, 0, 0, -1, 0, 120, 255, 1, "", 49345, NULL),
|
||||
(23955, 183040, 530, 0, 0, 1, 1, 1029.8680419921875, 7362.12939453125, 36.40353775024414062, 2.015855789184570312, 0, 0, 0.845727920532226562, 0.533614337444305419, 120, 255, 1, "", 50664, NULL),
|
||||
(23990, 183047, 530, 0, 0, 1, 1, 4122.46875, 3057.693603515625, 339.356781005859375, 1.946041464805603027, 0, 0, 0.826589584350585937, 0.56280517578125, 120, 255, 1, "", 50664, NULL),
|
||||
(24053, 183167, 530, 0, 0, 1, 1, -2615.288330078125, 4417.97119140625, 35.98839187622070312, 1.370081901550292968, 0, 0, 0.632704734802246093, 0.774393141269683837, 120, 255, 1, "", 50063, NULL),
|
||||
(24717, 183856, 530, 0, 0, 1, 1, -3975.03759765625, -11700.0205078125, -139.257614135742187, 3.141570329666137695, -0.00587272644042968, -0.0018930435180664, 0.999980926513671875, 0, 120, 255, 1, "", 48632, NULL),
|
||||
(24718, 183857, 530, 0, 0, 1, 1, -3913.078369140625, -11605.9912109375, -138.353134155273437, 4.473990917205810546, 0.005786895751953125, -0.00214099884033203, -0.78617191314697265, 0.617977082729339599, 120, 255, 1, "", 48632, NULL),
|
||||
(24719, 183858, 530, 0, 0, 1, 1, -3803.274169921875, -11688.873046875, -105.384963989257812, 2.956346750259399414, -0.00567293167114257, -0.0024271011352539, 0.995696067810058593, 0.092472918331623077, 120, 255, 1, "", 48632, NULL),
|
||||
(25004, 184085, 530, 0, 0, 1, 1, 3056.501708984375, 3687.03466796875, 142.7493133544921875, 3.735011100769042968, -0.00874757766723632, -0.07558345794677734, -0.95290660858154296, 0.293563634157180786, 120, 255, 1, "", 50063, NULL),
|
||||
(25034, 184133, 530, 0, 0, 1, 1, -2175.96533203125, 5411.55126953125, 50.22069168090820312, 3.586656570434570312, 0, 0, -0.975341796875, 0.220699742436408996, 120, 255, 1, "", 49345, NULL),
|
||||
(25035, 184134, 530, 0, 0, 1, 1, -1887.6666259765625, 5769.12060546875, 129.5399017333984375, 2.757613182067871093, 0, 0, 0.981626510620117187, 0.190812408924102783, 120, 255, 1, "", 50063, NULL),
|
||||
(25036, 184135, 530, 0, 0, 1, 1, -2034.0867919921875, 5336.11279296875, -9.37981128692626953, 3.70009779930114746, 0, 0, -0.96126174926757812, 0.275637149810791015, 120, 255, 1, "", 49345, NULL),
|
||||
(25037, 184136, 530, 0, 0, 1, 1, -2041.19970703125, 5350.26123046875, -9.38034439086914062, 3.490667104721069335, 0, 0, -0.98480701446533203, 0.173652306199073791, 120, 255, 1, "", 49345, NULL),
|
||||
(25038, 184137, 530, 0, 0, 1, 1, -1694.7603759765625, 5522.42529296875, -9.81281185150146484, 3.752462387084960937, 0, 0, -0.95371627807617187, 0.300707906484603881, 120, 255, 1, "", 49345, NULL),
|
||||
(25039, 184138, 530, 0, 0, 1, 1, -1687.7864990234375, 5508.5224609375, -9.80751228332519531, 3.447027206420898437, 0, 0, -0.98836135864257812, 0.152124300599098205, 120, 255, 1, "", 49345, NULL),
|
||||
(25040, 184139, 530, 0, 0, 1, 1, -1897.9478759765625, 5158.58056640625, -40.2316780090332031, 3.874636650085449218, 0, 0, -0.9335794448852539, 0.358370482921600341, 120, 255, 1, "", 49345, NULL),
|
||||
(25041, 184140, 530, 0, 0, 1, 1, -1773.6771240234375, 5171.82470703125, -40.2134323120117187, 2.242745637893676757, 0, 0, 0.900697708129882812, 0.434446364641189575, 120, 255, 1, "", 49345, NULL),
|
||||
(25046, 184147, 530, 0, 0, 1, 1, 2083.6494140625, 6879.58154296875, 180.3868408203125, 3.926990509033203125, 0, 0, -0.92387962341308593, 0.382683247327804565, 120, 255, 1, "", 50063, NULL),
|
||||
(25047, 184148, 530, 0, 0, 1, 1, 2392.8525390625, 5987.0625, 151.738525390625, 3.141592741012573242, 0, 0, -1, 0, 120, 255, 1, "", 50063, NULL),
|
||||
(25341, 184490, 530, 0, 0, 1, 1, -3009.2431640625, 850.86981201171875, -10.5309038162231445, 3.656470775604248046, -0.01951789855957031, -0.04571723937988281, -0.96554374694824218, 0.255449146032333374, 120, 255, 1, "", 50664, NULL),
|
||||
(25454, 184652, 530, 0, 0, 1, 1, -4055.28125, 2177.048583984375, 110.3008880615234375, 4.703663349151611328, 0, 0, -0.71018505096435546, 0.704015016555786132, 120, 255, 1, "", 50063, NULL),
|
||||
(25833, 184944, 530, 0, 0, 1, 1, 1935.921875, 5544.75146484375, 266.741851806640625, 5.201082706451416015, 0, 0, -0.51503753662109375, 0.857167601585388183, 120, 255, 1, "", 50664, NULL),
|
||||
(25969, 185102, 530, 0, 0, 1, 1, -4081.75341796875, 1132.140625, 43.03768539428710937, 1.413715124130249023, 0, 0, 0.649447441101074218, 0.760406434535980224, 120, 255, 1, "", 50664, NULL),
|
||||
(26175, 185472, 530, 0, 0, 1, 1, 9720.4638671875, -7199.421875, 14.22868156433105468, 5.113816738128662109, 0, 0, -0.55193614959716796, 0.833886384963989257, 120, 255, 1, "", 48632, NULL),
|
||||
(26176, 185473, 530, 0, 0, 1, 1, 9657.6630859375, -7116.189453125, 14.28754901885986328, 4.27606058120727539, 0, 0, -0.84339046478271484, 0.537301182746887207, 120, 255, 1, "", 51943, NULL),
|
||||
(26387, 144131, 0, 0, 0, 1, 1, -8876.982421875, 652.0072021484375, 95.9927215576171875, 5.07018136978149414, 0, 0, -0.56999683380126953, 0.821646869182586669, 120, 255, 1, "", 48632, NULL),
|
||||
(26463, 144128, 0, 0, 0, 1, 1, -8637.4794921875, 427.74847412109375, 102.0831451416015625, 2.251473426818847656, 0, 0, 0.902585029602050781, 0.430511653423309326, 120, 255, 1, "", 50063, NULL),
|
||||
(26784, 142075, 0, 0, 0, 1, 1, -9455.9892578125, 45.82291793823242187, 56.43953323364257812, 1.404989838600158691, 0, 0, 0.646123886108398437, 0.763232588768005371, 120, 255, 1, "", 48632, NULL),
|
||||
(268682, 177044, 0, 0, 0, 1, 1, 1633.0244140625, 219.280609130859375, -43.1118049621582031, 1.082102894783020019, 0, 0, 0.51503753662109375, 0.857167601585388183, 120, 255, 1, "", 49345, NULL),
|
||||
(268683, 195629, 0, 0, 0, 1, 1, 1554.9732666015625, 235.1077728271484375, -43.2009544372558593, 0.252435922622680664, 0, 0, 0.125883102416992187, 0.992045104503631591, 120, 255, 1, "", 49345, NULL),
|
||||
(27147, 181883, 530, 0, 0, 1, 1, 7579.02001953125, -6860.11962890625, 93.34931182861328125, 4.328416347503662109, 0, 0, -0.82903766632080078, 0.559192776679992675, 120, 255, 1, "", 48632, NULL),
|
||||
(27845, 187113, 530, 0, 0, 1, 1, 12792.7744140625, -6965.97802734375, 15.40067386627197265, 2.251473426818847656, 0, 0, 0.902585029602050781, 0.430511653423309326, 120, 255, 1, "", 50063, NULL),
|
||||
(29365, 157637, 0, 0, 0, 1, 1, -10464.0439453125, -3265.2587890625, 20.17782783508300781, 1.396264195442199707, 0, 0, 0.642787933349609375, 0.766044199466705322, 120, 255, 1, "", 50063, NULL),
|
||||
(30400, 183039, 530, 0, 0, 1, 1, -198.708328247070312, 5507.98681640625, 22.26667213439941406, 3.43830275535583496, 0, 0, -0.98901557922363281, 0.147811368107795715, 120, 255, 1, "", 51943, NULL),
|
||||
(30852, 185477, 530, 0, 0, 1, 1, 3019.47314453125, 5450.02099609375, 146.65374755859375, 3.307402372360229492, 0.033659934997558593, -0.03657913208007812, -0.99543190002441406, 0.081512629985809326, 120, 255, 1, "", 50664, NULL),
|
||||
(32101, 153716, 0, 0, 0, 1, 1, -10644.5146484375, 1158.03759765625, 33.13823318481445312, 2.556905269622802734, 0, 0, 0.957571029663085937, 0.288197338581085205, 120, 255, 1, "", 49345, NULL),
|
||||
(32537, 179896, 1, 0, 0, 1, 1, -1609.19970703125, 3118.862060546875, 44.829315185546875, 3.892086982727050781, 0, 0, -0.93041706085205078, 0.366502493619918823, 120, 255, 1, "", 50063, NULL),
|
||||
(32540, 176319, 1, 0, 0, 1, 1, 248.11822509765625, 1291.649658203125, 190.39178466796875, 3.420850038528442382, 0, 0, -0.99026775360107421, 0.139175355434417724, 120, 255, 1, "", 50063, NULL),
|
||||
(33370, 143989, 0, 0, 0, 1, 1, 503.972320556640625, 1626.9268798828125, 125.6075973510742187, 4.703663349151611328, 0, 0, -0.71018505096435546, 0.704015016555786132, 120, 255, 1, "", 50063, NULL),
|
||||
(42497, 142093, 0, 0, 0, 1, 1, -9248.4130859375, -2144.225830078125, 63.9334259033203125, 3.141592741012573242, 0, 0, -1, 0, 120, 255, 1, "", 50063, NULL),
|
||||
(42900, 144130, 0, 0, 0, 1, 1, -8797.42578125, 1083.4786376953125, 90.20792388916015625, 5.436702728271484375, 0, 0, -0.41071796417236328, 0.911762416362762451, 120, 255, 1, "", 50664, NULL),
|
||||
(42913, 144129, 0, 0, 0, 1, 1, -9035.40625, 844.06689453125, 106.9599990844726562, 0.436331570148468017, 0, 0, 0.216439247131347656, 0.976296067237854003, 120, 255, 1, "", 49345, NULL),
|
||||
(44775, 143990, 0, 0, 0, 1, 1, 2238.5625, 254.50347900390625, 34.00535964965820312, 2.967041015625, 0, 0, 0.996193885803222656, 0.087165042757987976, 120, 255, 1, "", 47720, NULL),
|
||||
(45603, 181236, 0, 0, 0, 1, 1, 2289.5556640625, -5318.34716796875, 88.64002227783203125, 2.357861518859863281, 0, 0, 0.924198150634765625, 0.381913274526596069, 120, 255, 1, "", 48632, NULL),
|
||||
(46048, 144011, 0, 0, 0, 1, 1, 293.6279296875, -2115.567626953125, 121.7698822021484375, 3.316144466400146484, 0, 0, -0.99619388580322265, 0.087165042757987976, 120, 255, 1, "", 50063, NULL),
|
||||
(46054, 179895, 0, 0, 0, 1, 1, -599.54339599609375, -4610.392578125, 9.731907844543457031, 5.834193229675292968, 0, 0, -0.22261524200439453, 0.974906384944915771, 120, 255, 1, "", 48632, NULL),
|
||||
(47458, 143983, 1, 0, 0, 1, 1, 925.94085693359375, 901.49163818359375, 104.9693069458007812, 1.256635904312133789, 0, 0, 0.587784767150878906, 0.809017360210418701, 120, 255, 1, "", 50063, NULL),
|
||||
(47593, 181639, 1, 0, 0, 1, 1, 2681.9345703125, 1487.064697265625, 233.9166412353515625, 4.803250312805175781, 0, 0, -0.67426395416259765, 0.738490462303161621, 120, 255, 1, "", 50664, NULL),
|
||||
(47829, 142117, 1, 0, 0, 1, 1, 2742.4716796875, -395.14398193359375, 108.8573837280273437, 2.775068521499633789, 0, 0, 0.983254432678222656, 0.182238012552261352, 120, 255, 1, "", 50063, NULL),
|
||||
(48037, 178864, 1, 0, 0, 1, 1, 2332.56298828125, -2545.971923828125, 101.6266632080078125, 3.935721635818481445, 0, 0, -0.92220020294189453, 0.386712819337844848, 120, 255, 1, "", 49345, NULL),
|
||||
(48629, 142111, 1, 0, 0, 1, 1, 6423.6181640625, 497.105377197265625, 7.670820236206054687, 2.801248550415039062, 0, 0, 0.985555648803710937, 0.169351965188980102, 120, 255, 1, "", 48632, NULL),
|
||||
(48827, 187260, 1, 0, 0, 1, 1, 5103.54150390625, -360.51910400390625, 357.0400390625, 3.490667104721069335, 0, 0, -0.98480701446533203, 0.173652306199073791, 120, 255, 1, "", 51943, NULL),
|
||||
(48996, 176404, 1, 0, 0, 1, 1, 6705.10498046875, -4667.3505859375, 721.59991455078125, 3.141592741012573242, 0, 0, -1, 0, 120, 255, 1, "", 49345, NULL),
|
||||
(49429, 180451, 1, 0, 0, 1, 1, -6840.3046875, 734.941650390625, 42.1886749267578125, 1.27409064769744873, 0, 0, 0.594822883605957031, 0.80385679006576538, 120, 255, 1, "", 50063, NULL),
|
||||
(49531, 142109, 1, 0, 0, 1, 1, 9848.27734375, 957.2960205078125, 1306.790283203125, 3.481936931610107421, 0, 0, -0.98555564880371093, 0.169351965188980102, 120, 255, 1, "", 48632, NULL),
|
||||
(49532, 142110, 1, 0, 0, 1, 1, 9942.998046875, 2497.741455078125, 1317.6929931640625, 3.630291461944580078, 0, 0, -0.97029495239257812, 0.241925001144409179, 120, 255, 1, "", 48632, NULL),
|
||||
(49832, 188123, 1, 0, 0, 1, 1, 10122.1181640625, 2227.40283203125, 1328.18701171875, 3.78736734390258789, 0, 0, -0.94832324981689453, 0.317305892705917358, 120, 255, 1, "", 50172, NULL),
|
||||
(49947, 142119, 1, 0, 0, 1, 1, -4396.26513671875, 3269.04736328125, 11.92736625671386718, 3.141592741012573242, 0, 0, -1, 0, 120, 255, 1, "", 50063, NULL),
|
||||
(50044, 143986, 1, 0, 0, 1, 1, -4405.3681640625, 237.6770782470703125, 26.76781082153320312, 2.286378860473632812, 0, 0, 0.909960746765136718, 0.414694398641586303, 120, 255, 1, "", 50063, NULL),
|
||||
(516, 171556, 0, 0, 0, 1, 1, -4949.82275390625, -1277.37158203125, 501.583404541015625, 2.530723094940185546, 0, 0, 0.953716278076171875, 0.300707906484603881, 120, 255, 1, "", 48632, NULL),
|
||||
(52, 171752, 0, 0, 0, 1, 1, -4828.27783203125, -1285.0472412109375, 501.80706787109375, 2.260197162628173828, 0, 0, 0.904454231262207031, 0.426570683717727661, 120, 255, 1, "", 50063, NULL),
|
||||
(55701, 189969, 571, 0, 0, 1, 1, 2676.614501953125, -4381.533203125, 283.96075439453125, 2.713986396789550781, 0, 0, 0.977231025695800781, 0.212178006768226623, 120, 255, 1, "", 50664, NULL),
|
||||
(55927, 193043, 571, 0, 0, 1, 1, 5462.18310546875, -2599.90966796875, 306.817169189453125, 1.48352813720703125, 0, 0, 0.675589561462402343, 0.737277925014495849, 120, 255, 1, "", 50172, NULL),
|
||||
(55966, 193044, 571, 0, 0, 1, 1, 5417.15478515625, -2620.260498046875, 307.008758544921875, 6.19592142105102539, 0, 0, -0.04361820220947265, 0.999048292636871337, 120, 255, 1, "", 50172, NULL),
|
||||
(55975, 193045, 571, 0, 0, 1, 1, 5483.01416015625, -2644.76220703125, 307.0357666015625, 6.265731334686279296, 0, 0, -0.00872707366943359, 0.999961912631988525, 120, 255, 1, "", 50172, NULL),
|
||||
(56563, 191521, 571, 0, 0, 1, 1, 6126.4755859375, -1070.9478759765625, 403.10333251953125, 4.502951622009277343, 0, 0, -0.7771453857421875, 0.629321098327636718, 120, 255, 1, "", 50172, NULL),
|
||||
(56726, 188710, 571, 0, 0, 1, 1, 442.130218505859375, -4555.77587890625, 245.471466064453125, 3.342307567596435546, 0, 0, -0.99496841430664062, 0.100189015269279479, 120, 255, 1, "", 47720, NULL),
|
||||
(56975, 193071, 571, 0, 0, 1, 1, 5812.95556640625, 508.35467529296875, 657.38323974609375, 4.677483558654785156, 0, 0, -0.71933937072753906, 0.694658815860748291, 120, 255, 1, "", 48632, NULL),
|
||||
(57535, 186687, 571, 0, 0, 1, 1, 1887.1007080078125, -6172.91650390625, 23.70248794555664062, 1.073378324508666992, 0, 0, 0.511293411254882812, 0.859406232833862304, 120, 255, 1, "", 50664, NULL),
|
||||
(57604, 186435, 571, 0, 0, 1, 1, 1419.09033203125, -3265.8125, 165.23553466796875, 2.548179388046264648, 0, 0, 0.956304550170898437, 0.292372345924377441, 120, 255, 1, "", 50664, NULL),
|
||||
(57696, 188486, 571, 0, 0, 1, 1, 570.65802001953125, -4935.9462890625, 18.43669700622558593, 5.497788906097412109, 0, 0, -0.38268280029296875, 0.923879802227020263, 120, 255, 1, "", 50664, NULL),
|
||||
(58222, 188256, 571, 0, 0, 1, 1, 3862.33154296875, -4548.84033203125, 209.4533233642578125, 2.888511419296264648, 0, 0, 0.99200439453125, 0.126203224062919616, 120, 255, 1, "", 50664, NULL),
|
||||
(59045, 188531, 571, 0, 0, 1, 1, 3225.0634765625, -690.50518798828125, 167.1182403564453125, 0.069813184440135955, 0.004359722137451171, -0.00019073486328125, 0.034900665283203125, 0.999381244182586669, 120, 255, 1, "", 50664, NULL),
|
||||
(59093, 188534, 571, 0, 0, 1, 1, 3474.537353515625, 2005.07470703125, 64.8327178955078125, 2.391098499298095703, 0, 0, 0.930417060852050781, 0.366502493619918823, 120, 255, 1, "", 49345, NULL),
|
||||
(59214, 188541, 571, 0, 0, 1, 1, 3400.859130859375, -2811.433349609375, 200.4548797607421875, 4.424411773681640625, 0, 0, -0.80125331878662109, 0.598325252532958984, 120, 255, 1, "", 50172, NULL),
|
||||
(59314, 187268, 571, 0, 0, 1, 1, 4166.265625, 5286.08349609375, 26.35922050476074218, 0.305430829524993896, 0, 0, 0.15212249755859375, 0.988361656665802001, 120, 255, 1, "", 50664, NULL),
|
||||
(59451, 194492, 571, 0, 0, 1, 1, 8592.5283203125, 693.717041015625, 547.2921142578125, 2.382372379302978515, 0, 0, 0.928809165954589843, 0.370558410882949829, 120, 255, 1, "", 50172, NULL),
|
||||
(59543, 189328, 571, 0, 0, 1, 1, 737.453125, -2920.482666015625, 7.280445098876953125, 5.6897735595703125, 0, 0, -0.29237174987792968, 0.956304728984832763, 120, 255, 1, "", 47720, NULL),
|
||||
(59565, 189329, 571, 0, 0, 1, 1, 4502.22314453125, 5716.38037109375, 81.48361968994140625, 3.307414531707763671, 0, 0, -0.99656486511230468, 0.082815870642662048, 120, 255, 1, "", 47720, NULL),
|
||||
(59746, 194788, 571, 0, 0, 1, 1, 8452.8173828125, 683.8055419921875, 547.28314208984375, 3.804818391799926757, 0, 0, -0.94551849365234375, 0.325568377971649169, 120, 255, 1, "", 50172, NULL),
|
||||
(60040, 187316, 571, 0, 0, 1, 1, 2262.991455078125, 5196.11572265625, 12.07118797302246093, 1.213003993034362792, 0, 0, 0.569996833801269531, 0.821646869182586669, 120, 255, 1, "", 50664, NULL),
|
||||
(60041, 193972, 571, 0, 0, 1, 1, 8440.736328125, -329.427093505859375, 906.50616455078125, 0.715582847595214843, 0, 0, 0.350206375122070312, 0.936672568321228027, 120, 255, 1, "", 50664, NULL),
|
||||
(60074, 192952, 571, 0, 0, 1, 1, 5563.18603515625, 5759.63134765625, -75.2276840209960937, 4.712389945983886718, 0, 0, -0.70710659027099609, 0.707106947898864746, 120, 255, 1, "", 49345, NULL),
|
||||
(60111, 187322, 571, 0, 0, 1, 1, 3458.64404296875, 4132.48876953125, 15.04328441619873046, 1.562069892883300781, 0, 0, 0.704014778137207031, 0.71018528938293457, 120, 255, 1, "", 47720, NULL),
|
||||
(60214, 188604, 571, 0, 0, 1, 1, 2790.482666015625, 917.82464599609375, 22.41530799865722656, 5.12254190444946289, 0, 0, -0.54829311370849609, 0.83628624677658081, 120, 255, 1, "", 51739, NULL),
|
||||
(60310, 188355, 571, 0, 0, 1, 1, 3827.8056640625, 1533.657958984375, 89.6991729736328125, 1.640609622001647949, 0, 0, 0.731353759765625, 0.681998312473297119, 120, 255, 1, "", 50172, NULL),
|
||||
(60320, 194147, 571, 0, 0, 1, 1, 5763.82275390625, 726.92926025390625, 618.58465576171875, 0.087265998125076293, 0, 0, 0.043619155883789062, 0.999048233032226562, 120, 255, 1, "", 48632, NULL),
|
||||
(60433, 188618, 571, 0, 0, 1, 1, 3240.612060546875, -2236.583251953125, 115.105987548828125, 3.159062385559082031, 0, 0, -0.99996185302734375, 0.008734640665352344, 120, 255, 1, "", 50172, NULL),
|
||||
(60436, 191946, 571, 0, 0, 1, 1, 5853.01953125, 669.45123291015625, 644.25738525390625, 4.398232460021972656, 0, 0, -0.80901622772216796, 0.587786316871643066, 120, 255, 1, "", 48632, NULL),
|
||||
(60445, 191947, 571, 0, 0, 1, 1, 5862.66650390625, 638.68426513671875, 647.15972900390625, 5.916666030883789062, 0, 0, -0.1822357177734375, 0.983254849910736083, 120, 255, 1, "", 48632, NULL),
|
||||
(60454, 191948, 571, 0, 0, 1, 1, 5917.0400390625, 616.7635498046875, 646.29388427734375, 5.820673465728759765, 0, 0, -0.22920036315917968, 0.973379254341125488, 120, 255, 1, "", 48632, NULL),
|
||||
(60469, 191949, 571, 0, 0, 1, 1, 5927.66796875, 644.7076416015625, 645.5087890625, 5.986480236053466796, 0, 0, -0.14780902862548828, 0.989015936851501464, 120, 255, 1, "", 48632, NULL),
|
||||
(60479, 191950, 571, 0, 0, 1, 1, 5893.23486328125, 528.2362060546875, 641.39501953125, 5.017822265625, 0, 0, -0.5913095474243164, 0.806444704532623291, 120, 255, 1, "", 48632, NULL),
|
||||
(60509, 191951, 571, 0, 0, 1, 1, 5690.9208984375, 681.9393310546875, 646.130859375, 5.742133140563964843, 0, 0, -0.26723861694335937, 0.963630378246307373, 120, 255, 1, "", 48632, NULL),
|
||||
(60519, 191952, 571, 0, 0, 1, 1, 5740.30419921875, 680.889404296875, 644.65704345703125, 5.785767555236816406, 0, 0, -0.24615287780761718, 0.969231009483337402, 120, 255, 1, "", 48632, NULL),
|
||||
(60545, 191953, 571, 0, 0, 1, 1, 5734.775390625, 744.04644775390625, 641.73516845703125, 0.881391823291778564, 0, 0, 0.426568984985351562, 0.904455006122589111, 120, 255, 1, "", 48632, NULL),
|
||||
(60554, 191954, 571, 0, 0, 1, 1, 5743.07763671875, 626.9576416015625, 648.4044189453125, 0.27925160527229309, 0, 0, 0.139172554016113281, 0.990268170833587646, 120, 255, 1, "", 48632, NULL),
|
||||
(60563, 191955, 571, 0, 0, 1, 1, 5886.2646484375, 716.32843017578125, 640.5423583984375, 0.349065244197845458, 0, 0, 0.173647880554199218, 0.984807789325714111, 120, 255, 1, "", 48632, NULL),
|
||||
(60576, 191956, 571, 0, 0, 1, 1, 5800.7392578125, 731.10186767578125, 640.4296875, 4.721115589141845703, 0, 0, -0.70401477813720703, 0.71018528938293457, 120, 255, 1, "", 48632, NULL),
|
||||
(60591, 191957, 571, 0, 0, 1, 1, 5797.9052734375, 558.436279296875, 650.71917724609375, 4.363324165344238281, 0, 0, -0.81915187835693359, 0.573576688766479492, 120, 255, 1, "", 48632, NULL),
|
||||
(60953, 194016, 571, 0, 0, 1, 1, 6677.02587890625, -202.756942749023437, 951.6678466796875, 5.131268978118896484, 0, 0, -0.54463863372802734, 0.838670849800109863, 120, 255, 1, "", 50664, NULL),
|
||||
(61662, 191228, 571, 0, 0, 1, 1, 3000.864501953125, 4067.616455078125, 26.89543533325195312, 1.239183306694030761, 0, 0, 0.580702781677246093, 0.814115643501281738, 120, 255, 1, "", 49345, NULL),
|
||||
(61819, 193791, 571, 0, 0, 1, 1, 7809.5849609375, -2956.826416015625, 1257.4970703125, 0.942478775978088378, 0, 0, 0.453990936279296875, 0.891006350517272949, 120, 255, 1, "", 50664, NULL),
|
||||
(62014, 193030, 571, 0, 0, 1, 1, 6402.078125, 457.835845947265625, 511.9805908203125, 4.398232460021972656, 0, 0, -0.80901622772216796, 0.587786316871643066, 120, 255, 1, "", 50172, NULL),
|
||||
(62980, 194027, 571, 0, 0, 1, 1, 8415.34765625, 2696.229248046875, 655.0931396484375, 1.796540141105651855, 0, 0, 0.782250404357910156, 0.622964143753051757, 120, 255, 1, "", 50664, NULL),
|
||||
(63134, 191832, 571, 0, 0, 1, 1, 2789.627685546875, 6148.1201171875, 84.58600616455078125, 0.724311470985412597, 0, 0, 0.354290962219238281, 0.935135245323181152, 120, 255, 1, "", 47720, NULL),
|
||||
(66065, 190914, 609, 0, 0, 1, 1, 2113.5400390625, -5796.0625, 99.71340179443359375, 0.671950221061706542, -0.0012969970703125, 0.0041656494140625, 0.329686164855957031, 0.944080471992492675, 120, 255, 1, "", 50664, NULL),
|
||||
(66357, 190915, 609, 0, 0, 1, 4, 2113.588623046875, -5796.01904296875, 99.69663238525390625, 3.883359670639038085, 0.014132976531982421, -0.00137233734130859, -0.93194293975830078, 0.362326800823211669, 120, 255, 1, "", 50664, NULL),
|
||||
(66633, 188682, 571, 0, 0, 1, 1, 3668.736083984375, -703.61456298828125, 214.52703857421875, 4.616398334503173828, -0.00070858001708984, -0.00169086456298828, -0.74021530151367187, 0.672367453575134277, 120, 255, 1, "", 50664, NULL),
|
||||
(7555, 142095, 1, 0, 0, 1, 1, -3618.420166015625, -4437.94091796875, 13.45739459991455078, 3.141592741012573242, 0, 0, -1, 0, 120, 255, 1, "", 49345, NULL),
|
||||
(7574, 186629, 1, 0, 0, 1, 1, -3158.546630859375, -2894.1171875, 33.67470169067382812, 2.827429771423339843, 0, 0, 0.987688064575195312, 0.156436234712600708, 120, 255, 1, "", 50172, NULL),
|
||||
(7597, 186230, 1, 0, 0, 1, 1, -4599.271484375, -3178.7314453125, 34.8251190185546875, 0.078540004789829254, 0, 0, 0.039259910583496093, 0.999229073524475097, 120, 255, 1, "", 50172, NULL),
|
||||
(866, 171699, 0, 0, 0, 1, 1, -4910.3818359375, -976.211669921875, 501.40789794921875, 2.268925428390502929, 0, 0, 0.906307220458984375, 0.422619491815567016, 120, 255, 1, "", 48632, NULL),
|
||||
(92053, 195218, 1, 0, 0, 1, 1, 8008.7421875, -2668.053955078125, 512.06414794921875, 2.757613182067871093, 0, 0, 0.981626510620117187, 0.190812408924102783, 120, 255, 1, "", 50664, NULL);
|
||||
|
||||
-- new spawns
|
||||
DELETE FROM `gameobject` WHERE (`id` IN (185965, 188132, 195219, 195605, 195620)) AND (`guid` BETWEEN 929 AND 933);
|
||||
INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `VerifiedBuild`, `Comment`) VALUES
|
||||
(929, 185965, 530, 0, 0, 1, 1, 2511.02783203125, 7346.34130859375, 380.741790771484375, 3.586656570434570312, 0, 0, -0.975341796875, 0.220699742436408996, 120, 255, 1, "", 52237, NULL),
|
||||
(930, 188132, 530, 0, 0, 1, 1, 2209.026123046875, 4735.65625, 159.667083740234375, 3.586656570434570312, 0, 0, -0.975341796875, 0.220699742436408996, 120, 255, 1, "", 50664, NULL),
|
||||
(931, 195219, 1, 0, 0, 1, 1, 7867.26904296875, -2575.546875, 486.91259765625, 3.24634718894958496, 0, 0, -0.99862861633300781, 0.052353221923112869, 120, 255, 1, "", 49345, NULL),
|
||||
(932, 195605, 0, 0, 0, 1, 1, -8559.0166015625, 457.105499267578125, 104.6490020751953125, 1.946041464805603027, 0, 0, 0.826589584350585937, 0.56280517578125, 120, 255, 1, "", 48632, NULL),
|
||||
(933, 195620, 0, 0, 0, 1, 1, -8753.294921875, 565.23223876953125, 97.53444671630859375, 2.373644113540649414, 0, 0, 0.927183151245117187, 0.37460830807685852, 120, 255, 1, "", 48632, NULL);
|
||||
|
||||
-- remove duplicate / invalid spawns
|
||||
DELETE FROM `gameobject` WHERE (`id` IN (173221, 177044, 185471)) AND (`guid` IN (31694, 268684, 268687, 268685, 268686, 26174));
|
||||
DELETE FROM `gameobject_addon` WHERE (`guid` IN (31694, 268684, 268687, 268685, 268686, 26174));
|
||||
DELETE FROM `game_event_gameobject` WHERE (`guid` IN (31694, 268684, 268687, 268685, 268686, 26174));
|
||||
@@ -0,0 +1,8 @@
|
||||
-- DB update 2024_01_01_00 -> 2024_01_01_01
|
||||
--
|
||||
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 17683;
|
||||
|
||||
DELETE FROM `smart_scripts` WHERE `entryorguid` = 17683 AND `source_type` = 0;
|
||||
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
|
||||
(17683, 0, 0, 0, 0, 0, 100, 0, 22650, 46000, 24260, 65400, 0, 0, 11, 744, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Zarakh - In Combat - Cast \'Poison\''),
|
||||
(17683, 0, 1, 0, 0, 0, 100, 0, 1600, 19790, 17720, 40430, 0, 0, 11, 745, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Zarakh - In Combat - Cast \'Web\'');
|
||||
@@ -0,0 +1,9 @@
|
||||
-- DB update 2024_01_01_01 -> 2024_01_01_02
|
||||
--
|
||||
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 17604;
|
||||
|
||||
DELETE FROM `smart_scripts` WHERE `entryorguid` = 17604 AND `source_type` = 0;
|
||||
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
|
||||
(17604, 0, 0, 0, 26, 0, 100, 1, 0, 10, 0, 1, 0, 0, 11, 31734, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sunhawk Spy - In Combat LOS 10 yards - Cast \'31734\' (No Repeat)'),
|
||||
(17604, 0, 1, 0, 0, 0, 100, 0, 4800, 29700, 16140, 25110, 0, 0, 11, 13730, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sunhawk Spy - In Combat - Cast \'Demoralizing Shout\''),
|
||||
(17604, 0, 2, 0, 0, 0, 100, 0, 6450, 9380, 9700, 21250, 0, 0, 11, 31827, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sunhawk Spy - In Combat - Cast \'Heroic Strike\'');
|
||||
@@ -0,0 +1,3 @@
|
||||
-- DB update 2024_01_01_02 -> 2024_01_01_03
|
||||
--
|
||||
UPDATE `creature_model_info` SET `BoundingRadius`=6.315000057220458984, `CombatReach`=6 WHERE `DisplayID`=20739;
|
||||
@@ -0,0 +1,22 @@
|
||||
-- DB update 2024_01_01_03 -> 2024_01_01_04
|
||||
-- Update creature 26188 '[PH] Torch Catching Target Bunny' with sniffed values
|
||||
-- updated spawns
|
||||
DELETE FROM `creature` WHERE (`id1` = 26188) AND (`guid` IN (245595, 245600, 245604, 245606, 245610, 245614, 245635, 245640));
|
||||
INSERT INTO `creature` (`guid`, `id1`, `map`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`, `CreateObject`, `Comment`) VALUES
|
||||
(245595, 26188, 1, 1, 1, 0, 8687.6015625, 971.4619140625, 11.0921945571899414, 3.351032257080078125, 120, 0, 0, 0, 0, 0, "", 50063, 1, NULL),
|
||||
(245600, 26188, 1, 1, 1, 0, -1026.82470703125, 284.664947509765625, 135.8292694091796875, 5.113814830780029296, 120, 0, 0, 0, 0, 0, "", 50172, 1, NULL),
|
||||
(245604, 26188, 1, 1, 1, 0, 1930.842041015625, -4341.5693359375, 19.84100914001464843, 5.445427417755126953, 120, 0, 0, 0, 0, 0, "", 50172, 1, NULL),
|
||||
(245606, 26188, 0, 1, 1, 0, 1826.7586669921875, 254.811309814453125, 59.9133148193359375, 0.680678427219390869, 120, 0, 0, 0, 0, 0, "", 50063, 1, NULL),
|
||||
(245610, 26188, 0, 1, 1, 0, -4716.79296875, -1203.8480224609375, 501.74273681640625, 3.019419670104980468, 120, 0, 0, 0, 0, 0, "", 50063, 1, NULL),
|
||||
(245614, 26188, 0, 1, 1, 0, -8814.5283203125, 876.83599853515625, 98.82147216796875, 3.96189737319946289, 120, 0, 0, 0, 0, 0, "", 50063, 1, NULL),
|
||||
(245635, 26188, 530, 1, 1, 0, 9816.404296875, -7269.10205078125, 26.31508064270019531, 4.485496044158935546, 120, 0, 0, 0, 0, 0, "", 50063, 1, NULL),
|
||||
(245640, 26188, 530, 1, 1, 0, -3769, -11506.2119140625, -134.381103515625, 3.333578824996948242, 120, 0, 0, 0, 0, 0, "", 50063, 1, NULL);
|
||||
|
||||
-- remove duplicate spawns
|
||||
DELETE FROM `creature` WHERE (`id1` = 26188) AND (`guid` IN (245611, 245609, 245612, 245594, 245615, 245613, 245608, 245607, 245601, 245598, 245599, 245602, 245605, 245603, 245596, 245597, 245639, 245641, 245638, 245636, 245637, 245634));
|
||||
DELETE FROM `creature_addon` WHERE (`guid` IN (245611, 245609, 245612, 245594, 245615, 245613, 245608, 245607, 245601, 245598, 245599, 245602, 245605, 245603, 245596, 245597, 245639, 245641, 245638, 245636, 245637, 245634));
|
||||
DELETE FROM `game_event_creature` WHERE (`guid` IN (245611, 245609, 245612, 245594, 245615, 245613, 245608, 245607, 245601, 245598, 245599, 245602, 245605, 245603, 245596, 245597, 245639, 245641, 245638, 245636, 245637, 245634));
|
||||
|
||||
-- enable all spawns for eventEntry 1
|
||||
DELETE FROM `game_event_creature` WHERE (`eventEntry` = 1) AND (`guid` IN (SELECT `guid` FROM `creature` WHERE `id1` = 26188));
|
||||
INSERT INTO `game_event_creature` (SELECT 1, `guid` FROM `creature` WHERE `id1` = 26188);
|
||||
@@ -0,0 +1,29 @@
|
||||
-- DB update 2024_01_01_04 -> 2024_01_01_05
|
||||
--
|
||||
DELETE FROM `areatrigger_scripts` WHERE `entry` IN (5046, 5047);
|
||||
INSERT INTO `areatrigger_scripts` (`entry`, `ScriptName`) VALUES
|
||||
(5046, 'SmartTrigger'),
|
||||
(5047, 'SmartTrigger');
|
||||
|
||||
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 5046) AND (`source_type` = 2) AND (`id` IN (0));
|
||||
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `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
|
||||
(5046, 2, 0, 0, 46, 0, 100, 0, 5046, 0, 0, 0, 0, 0, 134, 52056, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Areatrigger - On Trigger - Cast \'Sholazar to Un`goro Teleport\'');
|
||||
|
||||
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 5047) AND (`source_type` = 2) AND (`id` IN (0));
|
||||
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `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
|
||||
(5047, 2, 0, 0, 46, 0, 100, 0, 5047, 0, 0, 0, 0, 0, 134, 52057, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Areatrigger - On Trigger - Cast \'Un`goro to Sholazar Teleport\'');
|
||||
|
||||
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=1 AND `SourceEntry` IN (5046, 5047) AND `SourceId`=2;
|
||||
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
|
||||
(22, 1, 5046, 2, 0, 36, 0, 0, 0, 0, 0, 0, 0, '', 'Player must be alive'),
|
||||
(22, 1, 5046, 2, 0, 14, 0, 13956, 0, 0, 1, 0, 0, '', 'Cast Teleport to Un\'goro if Meeting a Great One (13956) status is not none.'),
|
||||
(22, 1, 5046, 2, 1, 36, 0, 0, 0, 0, 0, 0, 0, '', 'Player must be alive'),
|
||||
(22, 1, 5046, 2, 1, 8, 0, 12613, 0, 0, 0, 0, 0, '', 'Cast Teleport to Un\'goro if The Makers Overlook (12613) has been rewarded.'),
|
||||
(22, 1, 5046, 2, 1, 8, 0, 12559, 0, 0, 0, 0, 0, '', 'Cast Teleport to Un\'goro if The Makers Perch (12559) has been rewarded.');
|
||||
|
||||
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
|
||||
(22, 1, 5047, 2, 0, 36, 0, 0, 0, 0, 0, 0, 0, '', 'Player must be alive'),
|
||||
(22, 1, 5047, 2, 0, 14, 0, 13956, 0, 0, 1, 0, 0, '', 'Cast Teleport to Sholazar if Meeting a Great One (13956) status is not none.'),
|
||||
(22, 1, 5047, 2, 1, 36, 0, 0, 0, 0, 0, 0, 0, '', 'Player must be alive'),
|
||||
(22, 1, 5047, 2, 1, 8, 0, 12613, 0, 0, 0, 0, 0, '', 'Cast Teleport to Sholazar if The Makers Overlook (12613) has been rewarded.'),
|
||||
(22, 1, 5047, 2, 1, 8, 0, 12559, 0, 0, 0, 0, 0, '', 'Cast Teleport to Sholazar if The Makers Perch (12559) has been rewarded.');
|
||||
@@ -0,0 +1,49 @@
|
||||
-- DB update 2024_01_01_05 -> 2024_01_02_00
|
||||
--
|
||||
DELETE FROM `waypoints` WHERE `entry` IN (1829800, 1829801);
|
||||
INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `point_comment`) VALUES
|
||||
(1829800, 1, -2672.9744, 7931.336, -27.176205, NULL, 0, 'Gava\'xi'),
|
||||
(1829800, 2, -2684.0105, 7918.5903, -31.449396, NULL, 0, 'Gava\'xi'),
|
||||
(1829800, 3, -2709.6504, 7895.3516, -40.8449, NULL, 0, 'Gava\'xi'),
|
||||
(1829800, 4, -2722.3762, 7894.163, -41.931747, NULL, 0, 'Gava\'xi'),
|
||||
(1829800, 5, -2732.9348, 7900.942, -41.43452, NULL, 0, 'Gava\'xi'),
|
||||
(1829800, 6, -2738.069, 7909.868, -41.615604, NULL, 0, 'Gava\'xi'),
|
||||
(1829800, 7, -2731.4773, 7926.874, -40.430233, NULL, 0, 'Gava\'xi'),
|
||||
(1829800, 8, -2706.214, 7966.6875, -44.424637, NULL, 0, 'Gava\'xi'),
|
||||
(1829800, 9, -2678.335, 7982.9517, -46.47888, NULL, 0, 'Gava\'xi'),
|
||||
(1829800, 10, -2664.7808, 7981.76, -47.284157, NULL, 0, 'Gava\'xi'),
|
||||
(1829800, 11, -2643.7148, 7983.618, -47.950817, NULL, 0, 'Gava\'xi'),
|
||||
(1829800, 12, -2627.47, 7988.2173, -48.725338, NULL, 0, 'Gava\'xi'),
|
||||
(1829800, 13, -2608.5688, 7992.2085, -49.956314, NULL, 0, 'Gava\'xi'),
|
||||
(1829800, 14, -2591.1943, 7998.155, -51.645016, NULL, 0, 'Gava\'xi'),
|
||||
(1829800, 15, -2587.0571, 8000.884, -51.988026, NULL, 0, 'Gava\'xi'),
|
||||
(1829801, 1, -2595.9915, 7978.7476, -51.318558, NULL, 0, 'Gava\'xi'),
|
||||
(1829801, 2, -2606.409, 7970.6963, -50.899216, NULL, 0, 'Gava\'xi'),
|
||||
(1829801, 3, -2618.4011, 7955.8125, -51.952393, NULL, 0, 'Gava\'xi'),
|
||||
(1829801, 4, -2631.3743, 7933.137, -52.171066, NULL, 0, 'Gava\'xi'),
|
||||
(1829801, 5, -2629.679, 7916.777, -53.126976, NULL, 0, 'Gava\'xi'),
|
||||
(1829801, 6, -2638.3762, 7903.308, -51.517876, NULL, 0, 'Gava\'xi'),
|
||||
(1829801, 7, -2654.426, 7890.7925, -49.859486, NULL, 0, 'Gava\'xi'),
|
||||
(1829801, 8, -2675.7644, 7878.1504, -45.659203, NULL, 0, 'Gava\'xi'),
|
||||
(1829801, 9, -2694.0188, 7872.3525, -44.287346, NULL, 0, 'Gava\'xi'),
|
||||
(1829801, 10, -2705.9536, 7878.065, -43.997498, NULL, 0, 'Gava\'xi'),
|
||||
(1829801, 11, -2707.866, 7888.1953, -41.754112, NULL, 0, 'Gava\'xi'),
|
||||
(1829801, 12, -2702.4153, 7895.1562, -39.975098, NULL, 0, 'Gava\'xi'),
|
||||
(1829801, 13, -2694.282, 7903.423, -37.312958, NULL, 0, 'Gava\'xi'),
|
||||
(1829801, 14, -2675.754, 7928.2773, -28.246132, NULL, 0, 'Gava\'xi'),
|
||||
(1829801, 15, -2670.222, 7942.9243, -23.193773, NULL, 0, 'Gava\'xi'),
|
||||
(1829801, 16, -2665.6055, 7953.998, -18.960806, NULL, 0, 'Gava\'xi');
|
||||
|
||||
DELETE FROM `smart_scripts` WHERE `entryorguid` = 18298 AND `source_type` = 0;
|
||||
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
|
||||
(18298, 0, 0, 0, 0, 0, 100, 0, 2500, 4000, 9500, 12000, 0, 0, 11, 14873, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Gava\'xi - In Combat - Cast \'Sinister Strike\''),
|
||||
(18298, 0, 1, 0, 2, 0, 100, 1, 20, 80, 0, 0, 0, 0, 11, 12540, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Gava\'xi - Between 20-80% Health - Cast \'Gouge\' (No Repeat)'),
|
||||
(18298, 0, 2, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 53, 1, 1829800, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gava\'xi - Respawn - Start waypoint movement'),
|
||||
(18298, 0, 3, 4, 40, 0, 100, 0, 15, 1829800, 0, 0, 0, 0, 89, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gava\'xi - WP reached - Start wander movement (10yds)'),
|
||||
(18298, 0, 4, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 67, 1, 15000, 15000, 0, 0, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gava\'xi - WP reached - Do timed event 1'),
|
||||
(18298, 0, 5, 0, 59, 0, 100, 0, 1, 0, 0, 0, 0, 0, 53, 0, 1829801, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gava\'xi - On timed event triggered - Start waypoint movement'),
|
||||
(18298, 0, 6, 7, 40, 0, 100, 0, 16, 1829801, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gava\'xi - WP reached - Start wander movement (0yds)'),
|
||||
(18298, 0, 7, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 67, 2, 4000, 4000, 0, 0, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gava\'xi - WP reached - Do timed event 2'),
|
||||
(18298, 0, 8, 9, 59, 0, 100, 0, 2, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gava\'xi - On timed event triggered - Do emote \'ONESHOT_ROAR\''),
|
||||
(18298, 0, 9, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 67, 3, 22000, 22000, 0, 0, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gava\'xi - On timed event triggered - Do timed event 3'),
|
||||
(18298, 0, 10, 0, 59, 0, 100, 0, 3, 0, 0, 0, 0, 0, 53, 1, 1829800, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gava\'xi - On timed event triggered - Start waypoint movement');
|
||||
@@ -0,0 +1,33 @@
|
||||
-- DB update 2024_01_02_00 -> 2024_01_03_00
|
||||
# Lord Cobrahn
|
||||
DELETE FROM `smart_scripts` WHERE `entryorguid`=3669 AND `source_type`=0 AND `id`=6 AND `link`=7;
|
||||
UPDATE `smart_scripts` SET `id`=6 WHERE `entryorguid`=3669 AND `source_type`=0 AND `id`=7 AND `link`=0;
|
||||
UPDATE `smart_scripts` SET `id`=7 WHERE `entryorguid`=3669 AND `source_type`=0 AND `id`=8 AND `link`=0;
|
||||
|
||||
# Druid of the Fang
|
||||
DELETE FROM `smart_scripts` WHERE `entryorguid`=3840 AND `source_type`=0 AND `id`=4 AND `link`=0;
|
||||
UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=3840 AND `source_type`=0 AND `id`=3 AND `link`=4;
|
||||
UPDATE `smart_scripts` SET `id`=4, `link`=5 WHERE `entryorguid`=3840 AND `source_type`=0 AND `id`=5 AND `link`=6;
|
||||
UPDATE `smart_scripts` SET `id`=5 WHERE `entryorguid`=3840 AND `source_type`=0 AND `id`=6 AND `link`=0;
|
||||
UPDATE `smart_scripts` SET `id`=6 WHERE `entryorguid`=3840 AND `source_type`=0 AND `id`=7 AND `link`=0;
|
||||
|
||||
# Phantom Guest
|
||||
DELETE FROM `smart_scripts` WHERE `entryorguid`=16409 AND `source_type`=0 AND `id`=6 AND `link`=0;
|
||||
UPDATE `smart_scripts` SET `id`=6 WHERE `entryorguid`=16409 AND `source_type`=0 AND `id`=7 AND `link`=0;
|
||||
UPDATE `smart_scripts` SET `id`=7 WHERE `entryorguid`=16409 AND `source_type`=0 AND `id`=8 AND `link`=0;
|
||||
UPDATE `smart_scripts` SET `id`=8 WHERE `entryorguid`=16409 AND `source_type`=0 AND `id`=9 AND `link`=0;
|
||||
UPDATE `smart_scripts` SET `id`=9 WHERE `entryorguid`=16409 AND `source_type`=0 AND `id`=10 AND `link`=0;
|
||||
UPDATE `smart_scripts` SET `id`=10 WHERE `entryorguid`=16409 AND `source_type`=0 AND `id`=11 AND `link`=0;
|
||||
UPDATE `smart_scripts` SET `id`=11 WHERE `entryorguid`=16409 AND `source_type`=0 AND `id`=12 AND `link`=0;
|
||||
UPDATE `smart_scripts` SET `id`=12 WHERE `entryorguid`=16409 AND `source_type`=0 AND `id`=13 AND `link`=0;
|
||||
UPDATE `smart_scripts` SET `id`=13 WHERE `entryorguid`=16409 AND `source_type`=0 AND `id`=14 AND `link`=0;
|
||||
UPDATE `smart_scripts` SET `id`=14 WHERE `entryorguid`=16409 AND `source_type`=0 AND `id`=15 AND `link`=0;
|
||||
UPDATE `smart_scripts` SET `id`=15 WHERE `entryorguid`=16409 AND `source_type`=0 AND `id`=20 AND `link`=0;
|
||||
UPDATE `smart_scripts` SET `id`=16 WHERE `entryorguid`=16409 AND `source_type`=0 AND `id`=21 AND `link`=0;
|
||||
UPDATE `smart_scripts` SET `id`=17 WHERE `entryorguid`=16409 AND `source_type`=0 AND `id`=22 AND `link`=0;
|
||||
|
||||
# Maiev Shadowsong
|
||||
DELETE FROM `smart_scripts` WHERE `entryorguid`=23197 AND `source_type`=0 AND `id`=7 AND `link`=0;
|
||||
DELETE FROM `smart_scripts` WHERE `entryorguid`=23197 AND `source_type`=0 AND `id`=8 AND `link`=0;
|
||||
UPDATE `smart_scripts` SET `id`=7 WHERE `entryorguid`=23197 AND `source_type`=0 AND `id`=9 AND `link`=0;
|
||||
UPDATE `smart_scripts` SET `id`=8 WHERE `entryorguid`=23197 AND `source_type`=0 AND `id`=10 AND `link`=0;
|
||||
@@ -0,0 +1,9 @@
|
||||
-- DB update 2024_01_03_00 -> 2024_01_03_01
|
||||
--
|
||||
DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 18) AND (`SourceGroup` = 29857) AND (`SourceEntry` = 55460) AND (`SourceId` = 0) AND (`ElseGroup` = 0) AND (`ConditionTypeOrReference` = 9) AND (`ConditionTarget` = 0) AND (`ConditionValue1` = 12910) AND (`ConditionValue2` = 0) AND (`ConditionValue3` = 0);
|
||||
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
|
||||
(18, 29857, 55460, 0, 0, 9, 0, 12910, 0, 0, 0, 0, 0, '', 'Ride Frostbite (Khaliisi\'s Pet) Spellclick requires Active (taken) quest \'Sniffing Out the Perpetrator\'.');
|
||||
|
||||
DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 17) AND (`SourceGroup` = 0) AND (`SourceEntry` = 54997) AND (`SourceId` = 0) AND (`ElseGroup` = 0) AND (`ConditionTypeOrReference` = 31) AND (`ConditionTarget` = 1) AND (`ConditionValue1` = 3) AND (`ConditionValue2` = 29696) AND (`ConditionValue3` = 0);
|
||||
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
|
||||
(17, 0, 54997, 0, 0, 31, 1, 3, 29696, 0, 0, 0, 0, '', 'Immobilizes a Stormforged Pursuer.');
|
||||
@@ -0,0 +1,54 @@
|
||||
-- DB update 2024_01_03_01 -> 2024_01_03_02
|
||||
--
|
||||
DELETE FROM `smart_scripts` WHERE `entryorguid` = 18670 AND `source_type` = 0;
|
||||
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
|
||||
(18670, 0, 0, 0, 0, 0, 100, 0, 2000, 4000, 30000, 35000, 0, 0, 11, 32918, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Ironjaw - In Combat - Cast \'Chilling Howl\''),
|
||||
(18670, 0, 1, 0, 0, 0, 100, 0, 4000, 6000, 4000, 6000, 0, 0, 11, 32919, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Ironjaw - In Combat - Cast \'Snarl\''),
|
||||
(18670, 0, 2, 0, 0, 0, 100, 0, 8000, 11000, 9000, 11000, 0, 0, 11, 32962, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Ironjaw - In Combat - Cast \'Iron Bite\''),
|
||||
(18670, 0, 3, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 53, 0, 1867000, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ironjaw - Respawn - Start waypoint movement');
|
||||
|
||||
DELETE FROM `creature` WHERE `guid` = 66940 and `id1` = 18670;
|
||||
INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`, `CreateObject`, `Comment`) VALUES
|
||||
(66940, 18670, 0, 0, 530, 0, 0, 1, 1, 0, -2255.6384, 3470.4573, -23.312017, 1.83568, 300, 0, 0, 5715, 0, 0, 0, 0, 0, '', 0, 0, NULL);
|
||||
|
||||
DELETE FROM `waypoints` WHERE `entry` = 1867000;
|
||||
INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `point_comment`) VALUES
|
||||
(1867000, 1, -2254.9797, 3456.6707, -22.450056, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 2, -2260.0933, 3436.6528, -19.26712, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 3, -2269.3323, 3417.3464, -18.036856, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 4, -2261.3965, 3401.6484, -19.311249, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 5, -2241.924, 3399.447, -20.934261, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 6, -2223.0876, 3399.6868, -22.344685, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 7, -2212.784, 3398.4434, -25.655071, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 8, -2203.8513, 3393.8677, -29.047827, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 9, -2193.1848, 3385.0598, -31.713863, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 10, -2187.9397, 3375.0015, -31.811998, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 11, -2188.9473, 3363.0488, -31.13889, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 12, -2190.2373, 3350.6533, -31.041891, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 13, -2188.941, 3363.031, -31.168343, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 14, -2187.9397, 3375.0015, -31.811998, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 15, -2193.1848, 3385.0598, -31.713863, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 16, -2203.8513, 3393.8677, -29.047827, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 17, -2223.0876, 3399.6868, -22.344685, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 18, -2241.924, 3399.447, -20.934261, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 19, -2261.3965, 3401.6484, -19.311249, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 20, -2269.3323, 3417.3464, -18.036856, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 21, -2260.0933, 3436.6528, -19.26712, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 22, -2254.9797, 3456.6707, -22.450056, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 23, -2255.6384, 3470.4573, -23.312017, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 24, -2264.9858, 3485.0881, -24.062012, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 25, -2261.0608, 3496.8245, -23.882532, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 26, -2254.7573, 3518.5947, -25.678585, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 27, -2256.2546, 3543.88, -22.95422, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 28, -2260.6467, 3560.1096, -16.475277, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 29, -2264.5212, 3586.5452, -18.401897, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 30, -2273.019, 3609.3972, -15.251651, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 31, -2271.3945, 3641.3662, -9.791668, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 32, -2273.019, 3609.3972, -15.251651, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 33, -2264.5212, 3586.5452, -18.401897, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 34, -2260.6467, 3560.1096, -16.475277, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 35, -2256.2546, 3543.88, -22.95422, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 36, -2254.7573, 3518.5947, -25.678585, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 37, -2261.0608, 3496.8245, -23.882532, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 38, -2264.9858, 3485.0881, -24.062012, NULL, 0, 'Ironjaw'),
|
||||
(1867000, 39, -2255.6384, 3470.4573, -23.312017, NULL, 0, 'Ironjaw');
|
||||
File diff suppressed because it is too large
Load Diff
@@ -604,9 +604,9 @@ void CharacterDatabaseConnection::DoPrepareStatements()
|
||||
PrepareStatement(CHAR_DEL_CHAR_SETTINGS, "DELETE FROM character_settings WHERE guid = ?", CONNECTION_ASYNC);
|
||||
|
||||
// Instance saved data. Stores the states of gameobjects in instances to be loaded on server start
|
||||
PrepareStatement(CHAR_SELECT_INSTANCE_SAVED_DATA, "SELECT id, guid, state FROM instance_saved_go_state_data", CONNECTION_SYNCH);
|
||||
PrepareStatement(CHAR_UPDATE_INSTANCE_SAVED_DATA, "UPDATE instance_saved_go_state_data SET state = ? WHERE guid = ? AND id = ?", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_INSERT_INSTANCE_SAVED_DATA, "INSERT INTO instance_saved_go_state_data (id, guid, state) VALUES (?, ?, ?)", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_SELECT_INSTANCE_SAVED_DATA, "SELECT guid, state FROM instance_saved_go_state_data WHERE id = ?", CONNECTION_SYNCH);
|
||||
PrepareStatement(CHAR_INSERT_INSTANCE_SAVED_DATA, "INSERT INTO instance_saved_go_state_data (id, guid, state) VALUES (?, ?, ?)"
|
||||
"ON DUPLICATE KEY UPDATE state = VALUES(state)", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_DELETE_INSTANCE_SAVED_DATA, "DELETE FROM instance_saved_go_state_data WHERE id = ?", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_SANITIZE_INSTANCE_SAVED_DATA, "DELETE FROM instance_saved_go_state_data WHERE id NOT IN (SELECT instance.id FROM instance)", CONNECTION_ASYNC);
|
||||
}
|
||||
|
||||
@@ -517,7 +517,6 @@ enum CharacterDatabaseStatements : uint32
|
||||
CHAR_DEL_CHAR_SETTINGS,
|
||||
|
||||
CHAR_SELECT_INSTANCE_SAVED_DATA,
|
||||
CHAR_UPDATE_INSTANCE_SAVED_DATA,
|
||||
CHAR_INSERT_INSTANCE_SAVED_DATA,
|
||||
CHAR_DELETE_INSTANCE_SAVED_DATA,
|
||||
CHAR_SANITIZE_INSTANCE_SAVED_DATA,
|
||||
|
||||
@@ -500,6 +500,7 @@ void SmartAI::CheckConditions(const uint32 diff)
|
||||
|
||||
void SmartAI::UpdateAI(uint32 diff)
|
||||
{
|
||||
bool hasVictim = UpdateVictim();
|
||||
CheckConditions(diff);
|
||||
GetScript()->OnUpdate(diff);
|
||||
UpdatePath(diff);
|
||||
@@ -535,7 +536,7 @@ void SmartAI::UpdateAI(uint32 diff)
|
||||
return;
|
||||
}
|
||||
|
||||
if (!UpdateVictim())
|
||||
if (!hasVictim)
|
||||
return;
|
||||
|
||||
if (mCanAutoAttack)
|
||||
@@ -827,14 +828,14 @@ void SmartAI::AttackStart(Unit* who)
|
||||
// xinef: dont allow charmed npcs to act on their own
|
||||
if (me->HasUnitFlag(UNIT_FLAG_POSSESSED))
|
||||
{
|
||||
if (who && mCanAutoAttack)
|
||||
me->Attack(who, true);
|
||||
if (who)
|
||||
me->Attack(who, mCanAutoAttack);
|
||||
return;
|
||||
}
|
||||
|
||||
if (who && me->Attack(who, me->IsWithinMeleeRange(who)))
|
||||
{
|
||||
if (mCanCombatMove || GetScript()->GetMaxCombatDist())
|
||||
if (mCanCombatMove)
|
||||
{
|
||||
SetRun(mRun);
|
||||
MovementGeneratorType type = me->GetMotionMaster()->GetMotionSlotType(MOTION_SLOT_ACTIVE);
|
||||
@@ -843,8 +844,8 @@ void SmartAI::AttackStart(Unit* who)
|
||||
me->GetMotionMaster()->MovementExpired();
|
||||
me->StopMoving();
|
||||
}
|
||||
float range = GetScript()->GetCasterActualDist() > 0.f ? GetScript()->GetCasterActualDist() : GetScript()->GetActualCombatDist();
|
||||
me->GetMotionMaster()->MoveChase(who, range > 0.f ? ChaseRange(range) : std::optional<ChaseRange>());
|
||||
|
||||
me->GetMotionMaster()->MoveChase(who);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1019,21 +1020,8 @@ void SmartAI::sQuestReward(Player* player, Quest const* quest, uint32 opt)
|
||||
GetScript()->ProcessEventsFor(SMART_EVENT_REWARD_QUEST, player, quest->GetQuestId(), opt);
|
||||
}
|
||||
|
||||
void SmartAI::SetForcedCombatMove(float dist)
|
||||
void SmartAI::SetCombatMove(bool on, float chaseRange)
|
||||
{
|
||||
if (!me->GetVictim())
|
||||
return;
|
||||
|
||||
SetRun(mRun);
|
||||
me->GetMotionMaster()->MoveChase(me->GetVictim(), dist);
|
||||
}
|
||||
|
||||
void SmartAI::SetCombatMove(bool on)
|
||||
{
|
||||
// Xinef: Fix Combat Movement
|
||||
if (GetScript()->GetMaxCombatDist()/* || GetScript()->GetCasterMaxDist()*/) // Xinef: we only need this hack for old caster movement system
|
||||
return;
|
||||
|
||||
if (mCanCombatMove == on)
|
||||
return;
|
||||
|
||||
@@ -1049,7 +1037,7 @@ void SmartAI::SetCombatMove(bool on)
|
||||
if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == IDLE_MOTION_TYPE)
|
||||
{
|
||||
SetRun(mRun);
|
||||
me->GetMotionMaster()->MoveChase(me->GetVictim());
|
||||
me->GetMotionMaster()->MoveChase(me->GetVictim(), chaseRange);
|
||||
me->CastStop();
|
||||
}
|
||||
}
|
||||
@@ -1115,6 +1103,32 @@ void SmartAI::StopFollow(bool complete)
|
||||
GetScript()->ProcessEventsFor(SMART_EVENT_FOLLOW_COMPLETED, player);
|
||||
}
|
||||
|
||||
void SmartAI::MoveAway(float distance)
|
||||
{
|
||||
if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == POINT_MOTION_TYPE)
|
||||
return;
|
||||
|
||||
mCanCombatMove = false;
|
||||
|
||||
if (!IsAIControlled())
|
||||
return;
|
||||
|
||||
if (!HasEscortState(SMART_ESCORT_ESCORTING))
|
||||
{
|
||||
if (me->GetVictim())
|
||||
{
|
||||
me->StopMoving();
|
||||
if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE)
|
||||
me->GetMotionMaster()->Clear(false);
|
||||
|
||||
float x, y, z;
|
||||
me->GetClosePoint(x, y, z, me->GetObjectSize(), distance, M_PI);
|
||||
if (me->GetVictim()->IsWithinLOS(x, y, z))
|
||||
me->GetMotionMaster()->MovePoint(SMART_RANDOM_POINT, x, y, z);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SmartAI::SetScript9(SmartScriptHolder& e, uint32 entry, Unit* invoker)
|
||||
{
|
||||
if (invoker)
|
||||
|
||||
@@ -64,10 +64,11 @@ public:
|
||||
bool IsEscorted() override { return (mEscortState & SMART_ESCORT_ESCORTING); }
|
||||
void RemoveEscortState(uint32 uiEscortState) { mEscortState &= ~uiEscortState; }
|
||||
void SetAutoAttack(bool on) { mCanAutoAttack = on; }
|
||||
void SetCombatMove(bool on);
|
||||
void SetCombatMove(bool on, float chaseRange = 0.0f);
|
||||
bool CanCombatMove() { return mCanCombatMove; }
|
||||
void SetFollow(Unit* target, float dist = 0.0f, float angle = 0.0f, uint32 credit = 0, uint32 end = 0, uint32 creditType = 0, bool aliveState = true);
|
||||
void StopFollow(bool complete);
|
||||
void MoveAway(float distance);
|
||||
|
||||
void SetScript9(SmartScriptHolder& e, uint32 entry, Unit* invoker);
|
||||
SmartScript* GetScript() { return &mScript; }
|
||||
@@ -205,7 +206,6 @@ public:
|
||||
|
||||
// Xinef
|
||||
void SetWPPauseTimer(uint32 time) { mWPPauseTimer = time; }
|
||||
void SetForcedCombatMove(float dist);
|
||||
|
||||
private:
|
||||
bool mIsCharmed;
|
||||
|
||||
@@ -56,15 +56,8 @@ SmartScript::SmartScript()
|
||||
mTemplate = SMARTAI_TEMPLATE_BASIC;
|
||||
mScriptType = SMART_SCRIPT_TYPE_CREATURE;
|
||||
isProcessingTimedActionList = false;
|
||||
|
||||
// Xinef: Fix Combat Movement
|
||||
mActualCombatDist = 0;
|
||||
mMaxCombatDist = 0;
|
||||
|
||||
smartCasterActualDist = 0.0f;
|
||||
smartCasterMaxDist = 0.0f;
|
||||
smartCasterPowerType = POWER_MANA;
|
||||
|
||||
mCurrentPriority = 0;
|
||||
mEventSortingRequired = false;
|
||||
_allowPhaseReset = true;
|
||||
}
|
||||
|
||||
@@ -87,14 +80,16 @@ void SmartScript::OnReset()
|
||||
InitTimer((*i));
|
||||
(*i).runOnce = false;
|
||||
}
|
||||
|
||||
if ((*i).priority != SmartScriptHolder::DEFAULT_PRIORITY)
|
||||
{
|
||||
(*i).priority = SmartScriptHolder::DEFAULT_PRIORITY;
|
||||
mEventSortingRequired = true;
|
||||
}
|
||||
}
|
||||
ProcessEventsFor(SMART_EVENT_RESET);
|
||||
mLastInvoker.Clear();
|
||||
mCounterList.clear();
|
||||
|
||||
// Xinef: Fix Combat Movement
|
||||
RestoreMaxCombatDist();
|
||||
RestoreCasterMaxDist();
|
||||
}
|
||||
|
||||
void SmartScript::ProcessEventsFor(SMART_EVENT e, Unit* unit, uint32 var0, uint32 var1, bool bvar, SpellInfo const* spell, GameObject* gob)
|
||||
@@ -118,14 +113,18 @@ void SmartScript::ProcessEventsFor(SMART_EVENT e, Unit* unit, uint32 var0, uint3
|
||||
|
||||
void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, uint32 var1, bool bvar, SpellInfo const* spell, GameObject* gob)
|
||||
{
|
||||
e.runOnce = true;//used for repeat check
|
||||
|
||||
//calc random
|
||||
if (e.event.event_chance < 100 && e.event.event_chance)
|
||||
if (e.event.event_chance < 100 && e.event.event_chance && !(e.event.event_flags & SMART_EVENT_FLAG_TEMP_IGNORE_CHANCE_ROLL))
|
||||
{
|
||||
uint32 rnd = urand(1, 100);
|
||||
if (e.event.event_chance <= rnd)
|
||||
return;
|
||||
}
|
||||
e.runOnce = true;//used for repeat check
|
||||
|
||||
// Remove SMART_EVENT_FLAG_TEMP_IGNORE_CHANCE_ROLL flag after processing roll chances as it's not needed anymore
|
||||
e.event.event_flags &= ~SMART_EVENT_FLAG_TEMP_IGNORE_CHANCE_ROLL;
|
||||
|
||||
if (unit)
|
||||
mLastInvoker = unit->GetGUID();
|
||||
@@ -589,6 +588,8 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
|
||||
if (e.action.cast.targetsLimit)
|
||||
Acore::Containers::RandomResize(targets, e.action.cast.targetsLimit);
|
||||
|
||||
bool failedSpellCast = false, successfulSpellCast = false;
|
||||
|
||||
for (WorldObject* target : targets)
|
||||
{
|
||||
// may be nullptr
|
||||
@@ -621,23 +622,40 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
|
||||
if (e.action.cast.castFlags & SMARTCAST_INTERRUPT_PREVIOUS)
|
||||
me->InterruptNonMeleeSpells(false);
|
||||
|
||||
// Flag usable only if caster has max dist set.
|
||||
if ((e.action.cast.castFlags & SMARTCAST_COMBAT_MOVE) && GetCasterMaxDist() > 0.0f && me->GetMaxPower(GetCasterPowerType()) > 0)
|
||||
{
|
||||
// Check mana case only and operate movement accordingly, LoS and range is checked in targetet movement generator.
|
||||
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(e.action.cast.spell);
|
||||
int32 currentPower = me->GetPower(GetCasterPowerType());
|
||||
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(e.action.cast.spell);
|
||||
float distanceToTarget = me->GetDistance(target->ToUnit());
|
||||
float spellMaxRange = me->GetSpellMaxRangeForTarget(target->ToUnit(), spellInfo);
|
||||
float spellMinRange = me->GetSpellMinRangeForTarget(target->ToUnit(), spellInfo);
|
||||
float meleeRange = me->GetMeleeRange(target->ToUnit());
|
||||
|
||||
if ((spellInfo && (currentPower < spellInfo->CalcPowerCost(me, spellInfo->GetSchoolMask()) || me->IsSpellProhibited(spellInfo->GetSchoolMask()))) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SILENCED))
|
||||
{
|
||||
SetCasterActualDist(0);
|
||||
CAST_AI(SmartAI, me->AI())->SetForcedCombatMove(0);
|
||||
}
|
||||
else if (GetCasterActualDist() == 0.0f && me->GetPowerPct(GetCasterPowerType()) > 30.0f)
|
||||
{
|
||||
RestoreCasterMaxDist();
|
||||
CAST_AI(SmartAI, me->AI())->SetForcedCombatMove(GetCasterActualDist());
|
||||
}
|
||||
bool isWithinLOSInMap = me->IsWithinLOSInMap(target->ToUnit());
|
||||
bool isWithinMeleeRange = distanceToTarget <= meleeRange;
|
||||
bool isRangedAttack = spellMaxRange > NOMINAL_MELEE_RANGE;
|
||||
bool isTargetRooted = target->ToUnit()->HasUnitState(UNIT_STATE_ROOT);
|
||||
// To prevent running back and forth when OOM, we must have more than 10% mana.
|
||||
bool canCastSpell = me->GetPowerPct(POWER_MANA) > 10.0f && spellInfo->CalcPowerCost(me, spellInfo->GetSchoolMask()) < (int32)me->GetPower(POWER_MANA) && !me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SILENCED);
|
||||
|
||||
// If target is rooted we move out of melee range before casting, but not further than spell max range.
|
||||
if (isWithinLOSInMap && isWithinMeleeRange && isRangedAttack && isTargetRooted && canCastSpell)
|
||||
{
|
||||
failedSpellCast = true; // Mark spellcast as failed so we can retry it later
|
||||
float minDistance = std::max(meleeRange, spellMinRange) - distanceToTarget + NOMINAL_MELEE_RANGE;
|
||||
CAST_AI(SmartAI, me->AI())->MoveAway(std::min(minDistance, spellMaxRange));
|
||||
continue;
|
||||
}
|
||||
|
||||
// Let us not try to cast spell if we know it is going to fail anyway. Stick to chasing and continue.
|
||||
if (distanceToTarget > spellMaxRange && isWithinLOSInMap)
|
||||
{
|
||||
failedSpellCast = true;
|
||||
CAST_AI(SmartAI, me->AI())->SetCombatMove(true, std::max(spellMaxRange - NOMINAL_MELEE_RANGE, 0.0f));
|
||||
continue;
|
||||
}
|
||||
else if (distanceToTarget < spellMinRange || !isWithinLOSInMap)
|
||||
{
|
||||
failedSpellCast = true;
|
||||
CAST_AI(SmartAI, me->AI())->SetCombatMove(true);
|
||||
continue;
|
||||
}
|
||||
|
||||
TriggerCastFlags triggerFlags = TRIGGERED_NONE;
|
||||
@@ -649,11 +667,38 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
|
||||
triggerFlags = TRIGGERED_FULL_MASK;
|
||||
}
|
||||
|
||||
me->CastSpell(target->ToUnit(), e.action.cast.spell, triggerFlags);
|
||||
SpellCastResult result = me->CastSpell(target->ToUnit(), e.action.cast.spell, triggerFlags);
|
||||
bool spellCastFailed = (result != SPELL_CAST_OK && result != SPELL_FAILED_SPELL_IN_PROGRESS);
|
||||
|
||||
if (e.action.cast.castFlags & SMARTCAST_COMBAT_MOVE)
|
||||
{
|
||||
// If cast flag SMARTCAST_COMBAT_MOVE is set combat movement will not be allowed unless target is outside spell range, out of mana, or LOS.
|
||||
if (result == SPELL_FAILED_OUT_OF_RANGE)
|
||||
// if we are just out of range, we only chase until we are back in spell range.
|
||||
CAST_AI(SmartAI, me->AI())->SetCombatMove(true, std::max(spellMaxRange - NOMINAL_MELEE_RANGE, 0.0f));
|
||||
else
|
||||
// if spell fail for any other reason, we chase to melee range, or stay where we are if spellcast was successful.
|
||||
CAST_AI(SmartAI, me->AI())->SetCombatMove(spellCastFailed);
|
||||
}
|
||||
|
||||
if (spellCastFailed)
|
||||
failedSpellCast = true;
|
||||
else
|
||||
successfulSpellCast = true;
|
||||
|
||||
LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_CAST: Unit {} casts spell {} on target {} with castflags {}",
|
||||
me->GetGUID().ToString(), e.action.cast.spell, target->GetGUID().ToString(), e.action.cast.castFlags);
|
||||
}
|
||||
}
|
||||
|
||||
// If there is at least 1 failed cast and no successful casts at all, retry again on next loop
|
||||
if (failedSpellCast && !successfulSpellCast)
|
||||
{
|
||||
RetryLater(e, true);
|
||||
// Don't execute linked events
|
||||
return;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case SMART_ACTION_SELF_CAST:
|
||||
@@ -864,15 +909,8 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
|
||||
if (!IsSmart())
|
||||
break;
|
||||
|
||||
// Xinef: Fix Combat Movement
|
||||
bool move = e.action.combatMove.move;
|
||||
if (move && GetMaxCombatDist() && e.GetEventType() == SMART_EVENT_MANA_PCT)
|
||||
{
|
||||
SetActualCombatDist(0);
|
||||
CAST_AI(SmartAI, me->AI())->SetForcedCombatMove(0);
|
||||
}
|
||||
else
|
||||
CAST_AI(SmartAI, me->AI())->SetCombatMove(move);
|
||||
CAST_AI(SmartAI, me->AI())->SetCombatMove(move);
|
||||
LOG_DEBUG("sql.sql", "SmartScript::ProcessAction:: SMART_ACTION_ALLOW_COMBAT_MOVEMENT: Creature {} bool on = {}",
|
||||
me->GetGUID().ToString(), e.action.combatMove.move);
|
||||
break;
|
||||
@@ -2425,17 +2463,6 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
|
||||
|
||||
break;
|
||||
}
|
||||
case SMART_ACTION_SET_CASTER_COMBAT_DIST:
|
||||
{
|
||||
if (e.action.casterDistance.reset)
|
||||
RestoreCasterMaxDist();
|
||||
else
|
||||
SetCasterActualDist(e.action.casterDistance.dist);
|
||||
|
||||
if (me->GetVictim() && me->GetMotionMaster()->GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE)
|
||||
me->GetMotionMaster()->MoveChase(me->GetVictim(), GetCasterActualDist());
|
||||
break;
|
||||
}
|
||||
case SMART_ACTION_SET_SIGHT_DIST:
|
||||
{
|
||||
for (WorldObject* const target : targets)
|
||||
@@ -4577,7 +4604,7 @@ void SmartScript::UpdateTimer(SmartScriptHolder& e, uint32 const diff)
|
||||
{
|
||||
if (me && me->HasUnitState(UNIT_STATE_CASTING))
|
||||
{
|
||||
e.timer = 1200;
|
||||
RaisePriority(e);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -4635,6 +4662,18 @@ void SmartScript::UpdateTimer(SmartScriptHolder& e, uint32 const diff)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (e.priority != SmartScriptHolder::DEFAULT_PRIORITY)
|
||||
{
|
||||
// Reset priority to default one only if the event hasn't been rescheduled again to next loop
|
||||
if (e.timer > 1)
|
||||
{
|
||||
// Re-sort events if this was moved to the top of the queue
|
||||
mEventSortingRequired = true;
|
||||
// Reset priority to default one
|
||||
e.priority = SmartScriptHolder::DEFAULT_PRIORITY;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
e.timer -= diff;
|
||||
@@ -4663,6 +4702,12 @@ void SmartScript::OnUpdate(uint32 const diff)
|
||||
|
||||
InstallEvents();//before UpdateTimers
|
||||
|
||||
if (mEventSortingRequired)
|
||||
{
|
||||
SortEvents(mEvents);
|
||||
mEventSortingRequired = false;
|
||||
}
|
||||
|
||||
for (SmartAIEventList::iterator i = mEvents.begin(); i != mEvents.end(); ++i)
|
||||
UpdateTimer(*i, diff);
|
||||
|
||||
@@ -4718,6 +4763,33 @@ void SmartScript::OnUpdate(uint32 const diff)
|
||||
}
|
||||
}
|
||||
|
||||
void SmartScript::SortEvents(SmartAIEventList& events)
|
||||
{
|
||||
std::sort(events.begin(), events.end());
|
||||
}
|
||||
|
||||
void SmartScript::RaisePriority(SmartScriptHolder& e)
|
||||
{
|
||||
e.timer = 1200;
|
||||
// Change priority only if it's set to default, otherwise keep the current order of events
|
||||
if (e.priority == SmartScriptHolder::DEFAULT_PRIORITY)
|
||||
{
|
||||
e.priority = mCurrentPriority++;
|
||||
mEventSortingRequired = true;
|
||||
}
|
||||
}
|
||||
|
||||
void SmartScript::RetryLater(SmartScriptHolder& e, bool ignoreChanceRoll)
|
||||
{
|
||||
RaisePriority(e);
|
||||
|
||||
// This allows to retry the action later without rolling again the chance roll (which might fail and end up not executing the action)
|
||||
if (ignoreChanceRoll)
|
||||
e.event.event_flags |= SMART_EVENT_FLAG_TEMP_IGNORE_CHANCE_ROLL;
|
||||
|
||||
e.runOnce = false;
|
||||
}
|
||||
|
||||
void SmartScript::FillScript(SmartAIEventList e, WorldObject* obj, AreaTrigger const* at)
|
||||
{
|
||||
(void)at; // ensure that the variable is referenced even if extra logs are disabled in order to pass compiler checks
|
||||
@@ -4822,37 +4894,8 @@ void SmartScript::OnInitialize(WorldObject* obj, AreaTrigger const* at)
|
||||
|
||||
GetScript();//load copy of script
|
||||
|
||||
uint32 maxDisableDist = 0;
|
||||
uint32 minEnableDist = 0;
|
||||
for (SmartAIEventList::iterator i = mEvents.begin(); i != mEvents.end(); ++i)
|
||||
{
|
||||
InitTimer((*i));//calculate timers for first time use
|
||||
if (i->GetEventType() == SMART_EVENT_RANGE && i->GetActionType() == SMART_ACTION_ALLOW_COMBAT_MOVEMENT)
|
||||
{
|
||||
if (i->action.combatMove.move == 1 && i->event.minMaxRepeat.rangeMin > minEnableDist)
|
||||
minEnableDist = i->event.minMaxRepeat.rangeMin;
|
||||
else if (i->action.combatMove.move == 0 && (i->event.minMaxRepeat.rangeMax < maxDisableDist || maxDisableDist == 0))
|
||||
maxDisableDist = i->event.minMaxRepeat.rangeMax;
|
||||
}
|
||||
|
||||
// Xinef: if smartcast combat move flag is present
|
||||
if (i->GetActionType() == SMART_ACTION_CAST && (i->action.cast.castFlags & SMARTCAST_COMBAT_MOVE))
|
||||
{
|
||||
if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(i->action.cast.spell))
|
||||
{
|
||||
float maxRange = spellInfo->GetMaxRange(spellInfo->IsPositive());
|
||||
float minRange = spellInfo->GetMinRange(spellInfo->IsPositive());
|
||||
|
||||
if (maxRange > 0 && minRange <= maxRange)
|
||||
{
|
||||
smartCasterMaxDist = minRange + ((maxRange - minRange) * 0.65f);
|
||||
smartCasterPowerType = (Powers)spellInfo->PowerType;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (maxDisableDist > 0 && minEnableDist >= maxDisableDist)
|
||||
mMaxCombatDist = uint32(maxDisableDist + ((minEnableDist - maxDisableDist) / 2));
|
||||
for (SmartScriptHolder& event : mEvents)
|
||||
InitTimer(event);//calculate timers for first time use
|
||||
|
||||
ProcessEventsFor(SMART_EVENT_AI_INIT);
|
||||
InstallEvents();
|
||||
|
||||
@@ -216,19 +216,6 @@ public:
|
||||
typedef std::unordered_map<uint32, uint32> CounterMap;
|
||||
CounterMap mCounterList;
|
||||
|
||||
// Xinef: Fix Combat Movement
|
||||
void SetActualCombatDist(uint32 dist) { mActualCombatDist = dist; }
|
||||
void RestoreMaxCombatDist() { mActualCombatDist = mMaxCombatDist; }
|
||||
uint32 GetActualCombatDist() const { return mActualCombatDist; }
|
||||
uint32 GetMaxCombatDist() const { return mMaxCombatDist; }
|
||||
|
||||
// Xinef: SmartCasterAI, replace above
|
||||
void SetCasterActualDist(float dist) { smartCasterActualDist = dist; }
|
||||
void RestoreCasterMaxDist() { smartCasterActualDist = smartCasterMaxDist; }
|
||||
Powers GetCasterPowerType() const { return smartCasterPowerType; }
|
||||
float GetCasterActualDist() const { return smartCasterActualDist; }
|
||||
float GetCasterMaxDist() const { return smartCasterMaxDist; }
|
||||
|
||||
bool AllowPhaseReset() const { return _allowPhaseReset; }
|
||||
void SetPhaseReset(bool allow) { _allowPhaseReset = allow; }
|
||||
|
||||
@@ -241,6 +228,10 @@ private:
|
||||
void SetPhase(uint32 p);
|
||||
bool IsInPhase(uint32 p) const;
|
||||
|
||||
void SortEvents(SmartAIEventList& events);
|
||||
void RaisePriority(SmartScriptHolder& e);
|
||||
void RetryLater(SmartScriptHolder& e, bool ignoreChanceRoll = false);
|
||||
|
||||
SmartAIEventList mEvents;
|
||||
SmartAIEventList mInstallEvents;
|
||||
SmartAIEventList mTimedActionList;
|
||||
@@ -262,15 +253,8 @@ private:
|
||||
uint32 mLastTextID;
|
||||
uint32 mTalkerEntry;
|
||||
bool mUseTextTimer;
|
||||
|
||||
// Xinef: Fix Combat Movement
|
||||
uint32 mActualCombatDist;
|
||||
uint32 mMaxCombatDist;
|
||||
|
||||
// Xinef: SmartCasterAI, replace above in future
|
||||
uint32 smartCasterActualDist;
|
||||
uint32 smartCasterMaxDist;
|
||||
Powers smartCasterPowerType;
|
||||
uint32 mCurrentPriority;
|
||||
bool mEventSortingRequired;
|
||||
|
||||
// Xinef: misc
|
||||
bool _allowPhaseReset;
|
||||
|
||||
@@ -755,7 +755,6 @@ bool SmartAIMgr::CheckUnusedActionParams(SmartScriptHolder const& e)
|
||||
case SMART_ACTION_EXIT_VEHICLE: return NO_PARAMS;
|
||||
case SMART_ACTION_SET_UNIT_MOVEMENT_FLAGS: return sizeof(SmartAction::movementFlag);
|
||||
case SMART_ACTION_SET_COMBAT_DISTANCE: return sizeof(SmartAction::combatDistance);
|
||||
case SMART_ACTION_SET_CASTER_COMBAT_DIST: return sizeof(SmartAction::casterDistance);
|
||||
case SMART_ACTION_FALL: return NO_PARAMS;
|
||||
case SMART_ACTION_SET_EVENT_FLAG_RESET: return sizeof(SmartAction::setActive);
|
||||
case SMART_ACTION_STOP_MOTION: return sizeof(SmartAction::stopMotion);
|
||||
@@ -1918,7 +1917,6 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
|
||||
case SMART_ACTION_EXIT_VEHICLE:
|
||||
case SMART_ACTION_SET_UNIT_MOVEMENT_FLAGS:
|
||||
case SMART_ACTION_SET_COMBAT_DISTANCE:
|
||||
case SMART_ACTION_SET_CASTER_COMBAT_DIST:
|
||||
case SMART_ACTION_SET_SIGHT_DIST:
|
||||
case SMART_ACTION_FLEE:
|
||||
case SMART_ACTION_ADD_THREAT:
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "Spell.h"
|
||||
#include "SpellMgr.h"
|
||||
#include "Unit.h"
|
||||
#include <limits>
|
||||
|
||||
typedef uint32 SAIBool;
|
||||
|
||||
@@ -686,7 +687,7 @@ enum SMART_ACTION
|
||||
SMART_ACTION_EXIT_VEHICLE = 203, // none
|
||||
SMART_ACTION_SET_UNIT_MOVEMENT_FLAGS = 204, // flags
|
||||
SMART_ACTION_SET_COMBAT_DISTANCE = 205, // combatDistance
|
||||
SMART_ACTION_SET_CASTER_COMBAT_DIST = 206, // followDistance, resetToMax
|
||||
// UNUSED = 206,
|
||||
SMART_ACTION_SET_HOVER = 207, // 0/1
|
||||
SMART_ACTION_ADD_IMMUNITY = 208, // type, id, value
|
||||
SMART_ACTION_REMOVE_IMMUNITY = 209, // type, id, value
|
||||
@@ -1859,7 +1860,10 @@ enum SmartEventFlags
|
||||
SMART_EVENT_FLAG_WHILE_CHARMED = 0x200, // Event occurs even if AI owner is charmed
|
||||
|
||||
SMART_EVENT_FLAG_DIFFICULTY_ALL = (SMART_EVENT_FLAG_DIFFICULTY_0 | SMART_EVENT_FLAG_DIFFICULTY_1 | SMART_EVENT_FLAG_DIFFICULTY_2 | SMART_EVENT_FLAG_DIFFICULTY_3),
|
||||
SMART_EVENT_FLAGS_ALL = (SMART_EVENT_FLAG_NOT_REPEATABLE | SMART_EVENT_FLAG_DIFFICULTY_ALL | SMART_EVENT_FLAG_RESERVED_5 | SMART_EVENT_FLAG_RESERVED_6 | SMART_EVENT_FLAG_DEBUG_ONLY | SMART_EVENT_FLAG_DONT_RESET | SMART_EVENT_FLAG_WHILE_CHARMED)
|
||||
SMART_EVENT_FLAGS_ALL = (SMART_EVENT_FLAG_NOT_REPEATABLE | SMART_EVENT_FLAG_DIFFICULTY_ALL | SMART_EVENT_FLAG_RESERVED_5 | SMART_EVENT_FLAG_RESERVED_6 | SMART_EVENT_FLAG_DEBUG_ONLY | SMART_EVENT_FLAG_DONT_RESET | SMART_EVENT_FLAG_WHILE_CHARMED),
|
||||
|
||||
// Temp flags, used only at runtime, never stored in DB
|
||||
SMART_EVENT_FLAG_TEMP_IGNORE_CHANCE_ROLL = 0x40000000, //Event occurs no matter what roll_chance_i(e.event.event_chance) returns.
|
||||
};
|
||||
|
||||
enum SmartCastFlags
|
||||
@@ -1889,7 +1893,7 @@ enum SmartFollowType
|
||||
struct SmartScriptHolder
|
||||
{
|
||||
SmartScriptHolder() : entryOrGuid(0), source_type(SMART_SCRIPT_TYPE_CREATURE)
|
||||
, event_id(0), link(0), event(), action(), target(), timer(0), active(false), runOnce(false)
|
||||
, event_id(0), link(0), event(), action(), target(), timer(0), priority(DEFAULT_PRIORITY), active(false), runOnce(false)
|
||||
, enableTimed(false) {}
|
||||
|
||||
int32 entryOrGuid;
|
||||
@@ -1908,9 +1912,18 @@ public:
|
||||
uint32 GetTargetType() const { return (uint32)target.type; }
|
||||
|
||||
uint32 timer;
|
||||
uint32 priority;
|
||||
bool active;
|
||||
bool runOnce;
|
||||
bool enableTimed;
|
||||
|
||||
// Default comparision operator using priority field as first ordering field
|
||||
bool operator<(SmartScriptHolder const& other) const
|
||||
{
|
||||
return std::tie(priority, entryOrGuid, source_type, event_id, link) < std::tie(other.priority, other.entryOrGuid, other.source_type, other.event_id, other.link);
|
||||
}
|
||||
|
||||
static constexpr uint32 DEFAULT_PRIORITY = std::numeric_limits<uint32>::max();
|
||||
};
|
||||
|
||||
typedef std::unordered_map<uint32, WayPoint*> WPPath;
|
||||
|
||||
@@ -335,21 +335,22 @@ bool GameObject::Create(ObjectGuid::LowType guidlow, uint32 name_id, Map* map, u
|
||||
|
||||
if (IsInstanceGameobject())
|
||||
{
|
||||
switch (GetStateSavedOnInstance())
|
||||
if (InstanceScript* instance = GetInstanceScript())
|
||||
{
|
||||
case 0:
|
||||
SetGoState(GO_STATE_READY);
|
||||
SwitchDoorOrButton(true);
|
||||
break;
|
||||
case 1:
|
||||
SetGoState(GO_STATE_READY);
|
||||
break;
|
||||
case 2:
|
||||
SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
|
||||
break;
|
||||
default:
|
||||
SetGoState(go_state);
|
||||
break;
|
||||
switch (uint8 state = instance->GetStoredGameObjectState(GetSpawnId()))
|
||||
{
|
||||
case 0:
|
||||
SetGoState(GO_STATE_READY);
|
||||
SwitchDoorOrButton(true);
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
SetGoState((GOState)state);
|
||||
break;
|
||||
default:
|
||||
SetGoState(go_state);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -2505,21 +2506,13 @@ void GameObject::SetGoState(GOState state)
|
||||
* save it's state on the database to be loaded properly
|
||||
* on server restart or crash.
|
||||
*/
|
||||
if (IsInstanceGameobject() && IsAbleToSaveOnDb())
|
||||
if (IsInstanceGameobject() && IsAllowedToSaveToDB())
|
||||
{
|
||||
// Save the gameobject state on the Database
|
||||
if (!FindStateSavedOnInstance())
|
||||
{
|
||||
SaveInstanceData(GameobjectStateToInt(&state));
|
||||
}
|
||||
else
|
||||
{
|
||||
UpdateInstanceData(GameobjectStateToInt(&state));
|
||||
}
|
||||
SaveStateToDB();
|
||||
}
|
||||
}
|
||||
|
||||
bool GameObject::IsInstanceGameobject()
|
||||
bool GameObject::IsInstanceGameobject() const
|
||||
{
|
||||
// Avoid checking for unecessary gameobjects whose
|
||||
// states don't matter for the dungeon progression
|
||||
@@ -2538,7 +2531,7 @@ bool GameObject::IsInstanceGameobject()
|
||||
return false;
|
||||
}
|
||||
|
||||
bool GameObject::ValidateGameobjectType()
|
||||
bool GameObject::ValidateGameobjectType() const
|
||||
{
|
||||
switch (m_goInfo->type)
|
||||
{
|
||||
@@ -2553,7 +2546,7 @@ bool GameObject::ValidateGameobjectType()
|
||||
}
|
||||
}
|
||||
|
||||
uint8 GameObject::GameobjectStateToInt(GOState* state)
|
||||
uint8 GameObject::GameobjectStateToInt(GOState* state) const
|
||||
{
|
||||
uint8 m_state = 3;
|
||||
|
||||
@@ -2578,71 +2571,24 @@ uint8 GameObject::GameobjectStateToInt(GOState* state)
|
||||
return m_state;
|
||||
}
|
||||
|
||||
bool GameObject::IsAbleToSaveOnDb()
|
||||
{
|
||||
return m_saveStateOnDb;
|
||||
}
|
||||
|
||||
void GameObject::UpdateSaveToDb(bool enable)
|
||||
{
|
||||
m_saveStateOnDb = enable;
|
||||
|
||||
if (enable)
|
||||
{
|
||||
SavingStateOnDB();
|
||||
}
|
||||
}
|
||||
|
||||
void GameObject::SavingStateOnDB()
|
||||
void GameObject::SaveStateToDB()
|
||||
{
|
||||
if (IsInstanceGameobject())
|
||||
{
|
||||
GOState param = GetGoState();
|
||||
if (!FindStateSavedOnInstance())
|
||||
if (InstanceScript* instance = GetInstanceScript())
|
||||
{
|
||||
SaveInstanceData(GameobjectStateToInt(¶m));
|
||||
GOState param = GetGoState();
|
||||
instance->StoreGameObjectState(GetSpawnId(), GameobjectStateToInt(¶m));
|
||||
|
||||
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INSERT_INSTANCE_SAVED_DATA);
|
||||
stmt->SetData(0, GetInstanceId());
|
||||
stmt->SetData(1, GetSpawnId());
|
||||
stmt->SetData(2, GameobjectStateToInt(¶m));
|
||||
CharacterDatabase.Execute(stmt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GameObject::SaveInstanceData(uint8 state)
|
||||
{
|
||||
uint32 id = GetInstanceId();
|
||||
uint32 guid = GetSpawnId();
|
||||
|
||||
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INSERT_INSTANCE_SAVED_DATA);
|
||||
stmt->SetData(0, id);
|
||||
stmt->SetData(1, guid);
|
||||
stmt->SetData(2, state);
|
||||
CharacterDatabase.Execute(stmt);
|
||||
|
||||
sObjectMgr->NewInstanceSavedGameobjectState(id, guid, state);
|
||||
}
|
||||
|
||||
void GameObject::UpdateInstanceData(uint8 state)
|
||||
{
|
||||
uint32 id = GetInstanceId();
|
||||
uint32 guid = GetSpawnId();
|
||||
|
||||
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_INSTANCE_SAVED_DATA);
|
||||
stmt->SetData(0, state);
|
||||
stmt->SetData(1, guid);
|
||||
stmt->SetData(2, id);
|
||||
CharacterDatabase.Execute(stmt);
|
||||
|
||||
sObjectMgr->SetInstanceSavedGameobjectState(id, guid, state);
|
||||
}
|
||||
|
||||
uint8 GameObject::GetStateSavedOnInstance()
|
||||
{
|
||||
return sObjectMgr->GetInstanceSavedGameobjectState(GetInstanceId(), GetSpawnId());
|
||||
}
|
||||
|
||||
bool GameObject::FindStateSavedOnInstance()
|
||||
{
|
||||
return sObjectMgr->FindInstanceSavedGameobjectState(GetInstanceId(), GetSpawnId());
|
||||
}
|
||||
|
||||
void GameObject::SetDisplayId(uint32 displayid)
|
||||
{
|
||||
SetUInt32Value(GAMEOBJECT_DISPLAYID, displayid);
|
||||
|
||||
@@ -350,25 +350,21 @@ public:
|
||||
|
||||
static std::unordered_map<int, goEventFlag> gameObjectToEventFlag; // Gameobject -> event flag
|
||||
|
||||
void SaveInstanceData(uint8 state);
|
||||
void UpdateInstanceData(uint8 state);
|
||||
bool FindStateSavedOnInstance();
|
||||
bool ValidateGameobjectType();
|
||||
uint8 GetStateSavedOnInstance();
|
||||
bool IsInstanceGameobject();
|
||||
uint8 GameobjectStateToInt(GOState* state);
|
||||
[[nodiscard]] bool ValidateGameobjectType() const;
|
||||
[[nodiscard]] bool IsInstanceGameobject() const;
|
||||
[[nodiscard]] uint8 GameobjectStateToInt(GOState* state) const;
|
||||
|
||||
/* A check to verify if this object is available to be saved on the DB when
|
||||
* a state change occurs
|
||||
*/
|
||||
bool IsAbleToSaveOnDb();
|
||||
[[nodiscard]] bool IsAllowedToSaveToDB() const { return m_saveStateOnDb; };
|
||||
|
||||
/* Enable or Disable the ability to save on the database this gameobject's state
|
||||
* whenever it changes
|
||||
*/
|
||||
void UpdateSaveToDb(bool enable);
|
||||
void AllowSaveToDB(bool enable) { m_saveStateOnDb = enable; };
|
||||
|
||||
void SavingStateOnDB();
|
||||
void SaveStateToDB();
|
||||
|
||||
std::string GetDebugInfo() const override;
|
||||
protected:
|
||||
|
||||
@@ -105,6 +105,14 @@ void Pet::AddToWorld()
|
||||
|
||||
if (GetOwnerGUID().IsPlayer())
|
||||
{
|
||||
if (Player* owner = GetOwner())
|
||||
{
|
||||
if (getPetType() == SUMMON_PET && owner->getClass() == CLASS_WARLOCK)
|
||||
{
|
||||
owner->SetLastPetSpell(GetUInt32Value(UNIT_CREATED_BY_SPELL));
|
||||
}
|
||||
}
|
||||
|
||||
sScriptMgr->OnPetAddToWorld(this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2524,6 +2524,11 @@ void Player::GiveLevel(uint8 level)
|
||||
sScriptMgr->OnPlayerLevelChanged(this, oldLevel);
|
||||
}
|
||||
|
||||
bool Player::IsMaxLevel() const
|
||||
{
|
||||
return GetLevel() >= GetUInt32Value(PLAYER_FIELD_MAX_LEVEL);
|
||||
}
|
||||
|
||||
void Player::InitTalentForLevel()
|
||||
{
|
||||
uint32 talentPointsForLevel = CalculateTalentsPoints();
|
||||
@@ -14166,24 +14171,21 @@ void Player::ResummonPetTemporaryUnSummonedIfAny()
|
||||
|
||||
bool Player::CanResummonPet(uint32 spellid)
|
||||
{
|
||||
switch (getClass())
|
||||
if (getClass() == CLASS_DEATH_KNIGHT)
|
||||
{
|
||||
case CLASS_DEATH_KNIGHT:
|
||||
if (CanSeeDKPet())
|
||||
return true;
|
||||
else if (spellid == 52150) //Raise Dead
|
||||
return false;
|
||||
break;
|
||||
case CLASS_MAGE:
|
||||
if (HasSpell(31687) && HasAura(70937)) //Has [Summon Water Elemental] spell and [Glyph of Eternal Water].
|
||||
return true;
|
||||
break;
|
||||
case CLASS_HUNTER:
|
||||
case CLASS_WARLOCK:
|
||||
if (CanSeeDKPet())
|
||||
return true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
else if (spellid == 52150) // Raise Dead
|
||||
return false;
|
||||
}
|
||||
else if (getClass() == CLASS_MAGE)
|
||||
{
|
||||
if (HasSpell(31687) && HasAura(70937)) //Has [Summon Water Elemental] spell and [Glyph of Eternal Water].
|
||||
return true;
|
||||
}
|
||||
else if (getClass() == CLASS_HUNTER)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return HasSpell(spellid);
|
||||
|
||||
@@ -1686,6 +1686,7 @@ public:
|
||||
void SetFreeTalentPoints(uint32 points);
|
||||
bool resetTalents(bool noResetCost = false);
|
||||
[[nodiscard]] uint32 resetTalentsCost() const;
|
||||
bool IsMaxLevel() const;
|
||||
void InitTalentForLevel();
|
||||
void BuildPlayerTalentsInfoData(WorldPacket* data);
|
||||
void BuildPetTalentsInfoData(WorldPacket* data);
|
||||
|
||||
@@ -2352,7 +2352,7 @@ void Player::SendQuestReward(Quest const* quest, uint32 XP)
|
||||
WorldPacket data(SMSG_QUESTGIVER_QUEST_COMPLETE, (4 + 4 + 4 + 4 + 4));
|
||||
data << uint32(questid);
|
||||
|
||||
if (GetLevel() < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
|
||||
if (!IsMaxLevel())
|
||||
{
|
||||
data << uint32(XP);
|
||||
data << uint32(quest->GetRewOrReqMoney(GetLevel()));
|
||||
|
||||
@@ -4468,19 +4468,12 @@ void Unit::_ApplyAura(AuraApplication* aurApp, uint8 effMask)
|
||||
SpellInfo const* spellInfo = aura->GetSpellInfo();
|
||||
if (AuraStateType aState = spellInfo->GetAuraState())
|
||||
{
|
||||
if (aState != AURA_STATE_CONFLAGRATE)
|
||||
{
|
||||
// Sting (hunter's pet ability), Faerie Fire (druid versions)
|
||||
if (aState == AURA_STATE_FAERIE_FIRE)
|
||||
aurApp->GetTarget()->RemoveAurasByType(SPELL_AURA_MOD_STEALTH);
|
||||
|
||||
uint32 aStateMask = (1 << (aState - 1));
|
||||
// force update so the new caster registers it
|
||||
if ((aStateMask & PER_CASTER_AURA_STATE_MASK) && HasFlag(UNIT_FIELD_AURASTATE, aStateMask))
|
||||
ForceValuesUpdateAtIndex(UNIT_FIELD_AURASTATE);
|
||||
else
|
||||
ModifyAuraState(aState, true);
|
||||
}
|
||||
else if (caster)
|
||||
{
|
||||
ConflagrateAuraStateDelayEvent* pEvent = new ConflagrateAuraStateDelayEvent(this, caster->GetGUID());
|
||||
m_Events.AddEvent(pEvent, m_Events.CalculateTime(700)); // intended 700ms delay before allowing to cast conflagrate
|
||||
}
|
||||
}
|
||||
|
||||
if (aurApp->GetRemoveMode())
|
||||
@@ -4575,9 +4568,19 @@ void Unit::_UnapplyAura(AuraApplicationMap::iterator& i, AuraRemoveMode removeMo
|
||||
ToTotem()->setDeathState(DeathState::JustDied);
|
||||
}
|
||||
|
||||
// Remove aurastates only if were not found
|
||||
if (!auraStateFound)
|
||||
ModifyAuraState(auraState, false);
|
||||
// Remove aurastates only if needed and were not found
|
||||
if (auraState)
|
||||
{
|
||||
if (!auraStateFound)
|
||||
ModifyAuraState(auraState, false);
|
||||
else
|
||||
{
|
||||
// update for casters, some shouldn't 'see' the aura state
|
||||
uint32 aStateMask = (1 << (auraState - 1));
|
||||
if ((aStateMask & PER_CASTER_AURA_STATE_MASK) != 0)
|
||||
ForceValuesUpdateAtIndex(UNIT_FIELD_AURASTATE);
|
||||
}
|
||||
}
|
||||
|
||||
aura->HandleAuraSpecificMods(aurApp, caster, false, false);
|
||||
|
||||
@@ -20762,16 +20765,6 @@ int32 Unit::CalculateAOEDamageReduction(int32 damage, uint32 schoolMask, Unit* c
|
||||
return damage;
|
||||
}
|
||||
|
||||
bool ConflagrateAuraStateDelayEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
|
||||
{
|
||||
if (m_owner->IsInWorld())
|
||||
if (m_owner->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_WARLOCK, 0x4, 0, 0, m_casterGUID) || // immolate
|
||||
m_owner->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_WARLOCK, 0, 0, 0x2, m_casterGUID)) // shadowflame
|
||||
m_owner->ModifyAuraState(AURA_STATE_CONFLAGRATE, true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void Unit::ExecuteDelayedUnitRelocationEvent()
|
||||
{
|
||||
this->RemoveFromNotify(NOTIFY_VISIBILITY_CHANGED);
|
||||
|
||||
@@ -2674,17 +2674,6 @@ namespace Acore
|
||||
};
|
||||
}
|
||||
|
||||
class ConflagrateAuraStateDelayEvent : public BasicEvent
|
||||
{
|
||||
public:
|
||||
ConflagrateAuraStateDelayEvent(Unit* owner, ObjectGuid casterGUID) : BasicEvent(), m_owner(owner), m_casterGUID(casterGUID) { }
|
||||
bool Execute(uint64 e_time, uint32 p_time) override;
|
||||
|
||||
private:
|
||||
Unit* m_owner;
|
||||
ObjectGuid m_casterGUID;
|
||||
};
|
||||
|
||||
class RedirectSpellEvent : public BasicEvent
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -10135,72 +10135,6 @@ uint32 ObjectMgr::GetQuestMoneyReward(uint8 level, uint32 questMoneyDifficulty)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ObjectMgr::LoadInstanceSavedGameobjectStateData()
|
||||
{
|
||||
uint32 oldMSTime = getMSTime();
|
||||
|
||||
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SELECT_INSTANCE_SAVED_DATA);
|
||||
PreparedQueryResult result = CharacterDatabase.Query(stmt);
|
||||
|
||||
if (!result)
|
||||
{
|
||||
// There's no gameobject with this GUID saved on the DB
|
||||
LOG_INFO("sql.sql", ">> Loaded 0 Instance saved gameobject state data. DB table `instance_saved_go_state_data` is empty.");
|
||||
return;
|
||||
}
|
||||
|
||||
Field* fields;
|
||||
uint32 count = 0;
|
||||
do
|
||||
{
|
||||
fields = result->Fetch();
|
||||
GameobjectInstanceSavedStateList.push_back({ fields[0].Get<uint32>(), fields[1].Get<uint32>(), fields[2].Get<unsigned short>() });
|
||||
count++;
|
||||
} while (result->NextRow());
|
||||
|
||||
LOG_INFO("server.loading", ">> Loaded {} instance saved gameobject state data in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
|
||||
LOG_INFO("server.loading", " ");
|
||||
}
|
||||
|
||||
uint8 ObjectMgr::GetInstanceSavedGameobjectState(uint32 id, uint32 guid)
|
||||
{
|
||||
for (auto it = GameobjectInstanceSavedStateList.begin(); it != GameobjectInstanceSavedStateList.end(); it++)
|
||||
{
|
||||
if (it->m_guid == guid && it->m_instance == id)
|
||||
{
|
||||
return it->m_state;
|
||||
}
|
||||
}
|
||||
return 3; // Any state higher than 2 to get the default state
|
||||
}
|
||||
|
||||
bool ObjectMgr::FindInstanceSavedGameobjectState(uint32 id, uint32 guid)
|
||||
{
|
||||
for (auto it = GameobjectInstanceSavedStateList.begin(); it != GameobjectInstanceSavedStateList.end(); it++)
|
||||
{
|
||||
if (it->m_guid == guid && it->m_instance == id)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void ObjectMgr::SetInstanceSavedGameobjectState(uint32 id, uint32 guid, uint8 state)
|
||||
{
|
||||
for (auto it = GameobjectInstanceSavedStateList.begin(); it != GameobjectInstanceSavedStateList.end(); it++)
|
||||
{
|
||||
if (it->m_guid == guid && it->m_instance == id)
|
||||
{
|
||||
it->m_state = state;
|
||||
}
|
||||
}
|
||||
}
|
||||
void ObjectMgr::NewInstanceSavedGameobjectState(uint32 id, uint32 guid, uint8 state)
|
||||
{
|
||||
GameobjectInstanceSavedStateList.push_back({ id, guid, state });
|
||||
}
|
||||
|
||||
void ObjectMgr::SendServerMail(Player* player, uint32 id, uint32 reqLevel, uint32 reqPlayTime, uint32 rewardMoneyA, uint32 rewardMoneyH, uint32 rewardItemA, uint32 rewardItemCountA, uint32 rewardItemH, uint32 rewardItemCountH, std::string subject, std::string body, uint8 active) const
|
||||
{
|
||||
if (active)
|
||||
|
||||
@@ -1445,12 +1445,6 @@ public:
|
||||
|
||||
[[nodiscard]] uint32 GetQuestMoneyReward(uint8 level, uint32 questMoneyDifficulty) const;
|
||||
void SendServerMail(Player* player, uint32 id, uint32 reqLevel, uint32 reqPlayTime, uint32 rewardMoneyA, uint32 rewardMoneyH, uint32 rewardItemA, uint32 rewardItemCountA, uint32 rewardItemH, uint32 rewardItemCountH, std::string subject, std::string body, uint8 active) const;
|
||||
|
||||
void LoadInstanceSavedGameobjectStateData();
|
||||
bool FindInstanceSavedGameobjectState(uint32 id, uint32 guid);
|
||||
uint8 GetInstanceSavedGameobjectState(uint32 id, uint32 guid);
|
||||
void SetInstanceSavedGameobjectState(uint32 id, uint32 guid, uint8 state);
|
||||
void NewInstanceSavedGameobjectState(uint32 id, uint32 guid, uint8 state);
|
||||
private:
|
||||
// first free id for selected id type
|
||||
uint32 _auctionId; // pussywizard: accessed by a single thread
|
||||
|
||||
@@ -371,10 +371,6 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData)
|
||||
item2->SetState(ITEM_CHANGED, _player);
|
||||
_player->ItemRemovedQuestCheck(item2->GetEntry(), count[j]);
|
||||
item2->SendUpdateToPlayer(_player);
|
||||
|
||||
CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction();
|
||||
item2->SaveToDB(trans);
|
||||
CharacterDatabase.CommitTransaction(trans);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -188,7 +188,10 @@ void WorldSession::HandleLfgPlayerLockInfoRequestOpcode(WorldPacket& /*recvData*
|
||||
uint8 playerLevel = GetPlayer() ? GetPlayer()->GetLevel() : 0;
|
||||
data << uint8(done);
|
||||
data << uint32(quest->GetRewOrReqMoney(playerLevel));
|
||||
data << uint32(quest->XPValue(playerLevel));
|
||||
if (!GetPlayer()->IsMaxLevel())
|
||||
data << uint32(quest->XPValue(playerLevel));
|
||||
else
|
||||
data << uint32(0);
|
||||
data << uint32(0);
|
||||
data << uint32(0);
|
||||
data << uint8(quest->GetRewItemsCount());
|
||||
|
||||
@@ -740,6 +740,26 @@ void InstanceScript::SendEncounterUnit(uint32 type, Unit* unit /*= nullptr*/, ui
|
||||
instance->SendToPlayers(&data);
|
||||
}
|
||||
|
||||
void InstanceScript::LoadInstanceSavedGameobjectStateData()
|
||||
{
|
||||
_objectStateMap.clear();
|
||||
|
||||
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SELECT_INSTANCE_SAVED_DATA);
|
||||
stmt->SetData(0, instance->GetInstanceId());
|
||||
|
||||
if (PreparedQueryResult result = CharacterDatabase.Query(stmt))
|
||||
{
|
||||
Field* fields;
|
||||
|
||||
do
|
||||
{
|
||||
fields = result->Fetch();
|
||||
StoreGameObjectState(fields[0].Get<uint32>(), fields[1].Get<uint8>());
|
||||
|
||||
} while (result->NextRow());
|
||||
}
|
||||
}
|
||||
|
||||
std::string InstanceScript::GetBossStateName(uint8 state)
|
||||
{
|
||||
// See enum EncounterState in InstanceScript.h
|
||||
@@ -762,6 +782,18 @@ std::string InstanceScript::GetBossStateName(uint8 state)
|
||||
}
|
||||
}
|
||||
|
||||
uint8 InstanceScript::GetStoredGameObjectState(ObjectGuid::LowType spawnId) const
|
||||
{
|
||||
auto i = _objectStateMap.find(spawnId);
|
||||
|
||||
if (i != _objectStateMap.end())
|
||||
{
|
||||
return i->second;
|
||||
}
|
||||
|
||||
return 3; // Any state higher than 2 to get the default state for the object we are loading.
|
||||
}
|
||||
|
||||
bool InstanceHasScript(WorldObject const* obj, char const* scriptName)
|
||||
{
|
||||
if (InstanceMap* instance = obj->GetMap()->ToInstanceMap())
|
||||
|
||||
@@ -136,6 +136,7 @@ typedef std::pair<DoorInfoMap::const_iterator, DoorInfoMap::const_iterator> Door
|
||||
typedef std::map<uint32 /*entry*/, MinionInfo> MinionInfoMap;
|
||||
typedef std::map<uint32 /*type*/, ObjectGuid /*guid*/> ObjectGuidMap;
|
||||
typedef std::map<uint32 /*entry*/, uint32 /*type*/> ObjectInfoMap;
|
||||
typedef std::map<ObjectGuid::LowType /*spawnId*/, uint8 /*state*/> ObjectStateMap;
|
||||
|
||||
class InstanceScript : public ZoneScript
|
||||
{
|
||||
@@ -265,6 +266,12 @@ public:
|
||||
// Allows executing code using all creatures registered in the instance script as minions
|
||||
void DoForAllMinions(uint32 id, std::function<void(Creature*)> exec);
|
||||
|
||||
//
|
||||
void StoreGameObjectState(ObjectGuid::LowType spawnId, uint8 state) { _objectStateMap[spawnId] = state; };
|
||||
[[nodiscard]] uint8 GetStoredGameObjectState(ObjectGuid::LowType spawnId) const;
|
||||
|
||||
void LoadInstanceSavedGameobjectStateData();
|
||||
|
||||
TaskScheduler scheduler;
|
||||
protected:
|
||||
void SetHeaders(std::string const& dataHeaders);
|
||||
@@ -311,6 +318,7 @@ private:
|
||||
ObjectInfoMap _creatureInfo;
|
||||
ObjectInfoMap _gameObjectInfo;
|
||||
ObjectGuidMap _objectGuids;
|
||||
ObjectStateMap _objectStateMap;
|
||||
uint32 completedEncounters; // completed encounter mask, bit indexes are DungeonEncounter.dbc boss numbers, used for packets
|
||||
std::unordered_set<uint32> _activatedAreaTriggers;
|
||||
};
|
||||
|
||||
@@ -3096,6 +3096,8 @@ void InstanceMap::CreateInstanceScript(bool load, std::string data, uint32 compl
|
||||
if (data != "")
|
||||
instance_data->Load(data.c_str());
|
||||
}
|
||||
|
||||
instance_data->LoadInstanceSavedGameobjectStateData();
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -107,7 +107,7 @@ bool ChaseMovementGenerator<T>::DoUpdate(T* owner, uint32 time_diff)
|
||||
|
||||
if (i_recalculateTravel && PositionOkay(owner, target, _movingTowards ? maxTarget : Optional<float>(), angle))
|
||||
{
|
||||
if (owner->HasUnitState(UNIT_STATE_CHASE_MOVE) && !target->isMoving() && !mutualChase)
|
||||
if ((owner->HasUnitState(UNIT_STATE_CHASE_MOVE) && !target->isMoving() && !mutualChase) || _range)
|
||||
{
|
||||
i_recalculateTravel = false;
|
||||
i_path = nullptr;
|
||||
@@ -134,11 +134,11 @@ bool ChaseMovementGenerator<T>::DoUpdate(T* owner, uint32 time_diff)
|
||||
}
|
||||
|
||||
// if the target moved, we have to consider whether to adjust
|
||||
if (!_lastTargetPosition || target->GetPosition() != _lastTargetPosition.value() || mutualChase != _mutualChase)
|
||||
if (!_lastTargetPosition || target->GetPosition() != _lastTargetPosition.value() || mutualChase != _mutualChase || !owner->IsWithinLOSInMap(target))
|
||||
{
|
||||
_lastTargetPosition = target->GetPosition();
|
||||
_mutualChase = mutualChase;
|
||||
if (owner->HasUnitState(UNIT_STATE_CHASE_MOVE) || !PositionOkay(owner, target, target->isMoving() ? maxTarget : maxRange, angle))
|
||||
if (owner->HasUnitState(UNIT_STATE_CHASE_MOVE) || !PositionOkay(owner, target, maxTarget, angle))
|
||||
{
|
||||
// can we get to the target?
|
||||
if (cOwner && !target->isInAccessiblePlaceFor(cOwner))
|
||||
@@ -150,10 +150,10 @@ bool ChaseMovementGenerator<T>::DoUpdate(T* owner, uint32 time_diff)
|
||||
}
|
||||
|
||||
// figure out which way we want to move
|
||||
float tarX, tarY, tarZ;
|
||||
target->GetPosition(tarX, tarY, tarZ);
|
||||
float x, y, z;
|
||||
target->GetPosition(x, y, z);
|
||||
bool withinRange = owner->IsInDist(target, maxRange);
|
||||
bool withinLOS = owner->IsWithinLOS(tarX, tarY, tarZ);
|
||||
bool withinLOS = owner->IsWithinLOS(x, y, z);
|
||||
bool moveToward = !(withinRange && withinLOS);
|
||||
|
||||
// make a new path if we have to...
|
||||
@@ -181,14 +181,12 @@ bool ChaseMovementGenerator<T>::DoUpdate(T* owner, uint32 time_diff)
|
||||
additionalRange = owner->GetExactDistSq(target) < G3D::square(speed) ? 0 : speed;
|
||||
}
|
||||
|
||||
float x, y, z;
|
||||
bool shortenPath;
|
||||
|
||||
// if we want to move toward the target and there's no fixed angle...
|
||||
if (moveToward && !angle)
|
||||
{
|
||||
// ...we'll pathfind to the center, then shorten the path
|
||||
target->GetPosition(x, y, z);
|
||||
shortenPath = true;
|
||||
}
|
||||
else
|
||||
@@ -214,7 +212,7 @@ bool ChaseMovementGenerator<T>::DoUpdate(T* owner, uint32 time_diff)
|
||||
}
|
||||
|
||||
if (shortenPath)
|
||||
i_path->ShortenPathUntilDist(G3D::Vector3(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ()), maxTarget);
|
||||
i_path->ShortenPathUntilDist(G3D::Vector3(x, y, z), maxTarget);
|
||||
|
||||
if (cOwner)
|
||||
{
|
||||
|
||||
@@ -385,10 +385,6 @@ void Spell::EffectSchoolDMG(SpellEffIndex effIndex)
|
||||
damage += damage / 4;
|
||||
}
|
||||
}
|
||||
// Immolate - hidden delay for conflagrate
|
||||
else if (m_spellInfo->SpellFamilyFlags[0] & 0x4)
|
||||
{
|
||||
}
|
||||
// Conflagrate - consumes Immolate or Shadowflame
|
||||
else if (m_spellInfo->TargetAuraState == AURA_STATE_CONFLAGRATE)
|
||||
{
|
||||
|
||||
@@ -612,6 +612,7 @@ public:
|
||||
virtual void SetRealmName(std::string name) = 0;
|
||||
virtual void RemoveOldCorpses() = 0;
|
||||
virtual SQLQueryHolderCallback& AddQueryHolderCallback(SQLQueryHolderCallback&& callback) = 0;
|
||||
virtual void DoForAllOnlinePlayers(std::function<void(Player*)> exec) = 0;
|
||||
};
|
||||
|
||||
#endif //AZEROTHCORE_IWORLD_H
|
||||
|
||||
@@ -1615,9 +1615,6 @@ void World::SetInitialWorldSettings()
|
||||
LOG_INFO("server.loading", "Loading Instance Template...");
|
||||
sObjectMgr->LoadInstanceTemplate();
|
||||
|
||||
LOG_INFO("server.loading", "Loading Instance Saved Gameobject State Data...");
|
||||
sObjectMgr->LoadInstanceSavedGameobjectStateData();
|
||||
|
||||
LOG_INFO("server.loading", "Loading Character Cache...");
|
||||
sCharacterCache->LoadCharacterCacheStorage();
|
||||
|
||||
@@ -3273,6 +3270,23 @@ void World::RemoveOldCorpses()
|
||||
_timers[WUPDATE_CORPSES].SetCurrent(_timers[WUPDATE_CORPSES].GetInterval());
|
||||
}
|
||||
|
||||
void World::DoForAllOnlinePlayers(std::function<void(Player*)> exec)
|
||||
{
|
||||
std::shared_lock lock(*HashMapHolder<Player>::GetLock());
|
||||
for (auto const& it : ObjectAccessor::GetPlayers())
|
||||
{
|
||||
if (Player* player = it.second)
|
||||
{
|
||||
if (!player->IsInWorld())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
exec(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool World::IsPvPRealm() const
|
||||
{
|
||||
return getIntConfig(CONFIG_GAME_TYPE) == REALM_TYPE_PVP || getIntConfig(CONFIG_GAME_TYPE) == REALM_TYPE_RPPVP || getIntConfig(CONFIG_GAME_TYPE) == REALM_TYPE_FFA_PVP;
|
||||
|
||||
@@ -352,6 +352,8 @@ public:
|
||||
|
||||
void RemoveOldCorpses() override;
|
||||
|
||||
void DoForAllOnlinePlayers(std::function<void(Player*)> exec) override;
|
||||
|
||||
protected:
|
||||
void _UpdateGameTime();
|
||||
// callback for UpdateRealmCharacters
|
||||
|
||||
@@ -290,10 +290,9 @@ public:
|
||||
stmt->SetData(0, uint16(atLogin));
|
||||
CharacterDatabase.Execute(stmt);
|
||||
|
||||
std::shared_lock<std::shared_mutex> lock(*HashMapHolder<Player>::GetLock());
|
||||
HashMapHolder<Player>::MapType const& plist = ObjectAccessor::GetPlayers();
|
||||
for (auto itr = plist.begin(); itr != plist.end(); ++itr)
|
||||
itr->second->SetAtLoginFlag(atLogin);
|
||||
sWorld->DoForAllOnlinePlayers([&] (Player* player){
|
||||
player->SetAtLoginFlag(atLogin);
|
||||
});
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
-2
@@ -23,13 +23,11 @@
|
||||
#include "GridNotifiers.h"
|
||||
#include "InstanceMapScript.h"
|
||||
#include "InstanceScript.h"
|
||||
#include "ObjectDefines.h"
|
||||
#include "ObjectMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "SpellScript.h"
|
||||
#include "SpellScriptLoader.h"
|
||||
#include "blackrock_spire.h"
|
||||
#include "GridNotifiersImpl.h"
|
||||
|
||||
uint32 const DragonspireMobs[3] = { NPC_BLACKHAND_DREADWEAVER, NPC_BLACKHAND_SUMMONER, NPC_BLACKHAND_VETERAN };
|
||||
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "Containers.h"
|
||||
#include "CreatureScript.h"
|
||||
#include "ObjectAccessor.h"
|
||||
#include "ScriptedCreature.h"
|
||||
|
||||
@@ -46,17 +46,17 @@ public:
|
||||
case GO_DOOR_LEVER_2:
|
||||
case GO_DOOR_LEVER_3:
|
||||
case GO_CANNON:
|
||||
gameobject->UpdateSaveToDb(true);
|
||||
gameobject->AllowSaveToDB(true);
|
||||
break;
|
||||
case GO_FACTORY_DOOR:
|
||||
gameobject->UpdateSaveToDb(true);
|
||||
gameobject->AllowSaveToDB(true);
|
||||
// GoState (Door opened) is restored during GO creation, but we need to set LootState to prevent Lever from closing it again
|
||||
if (_encounters[TYPE_RHAHK_ZOR] == DONE)
|
||||
gameobject->SetLootState(GO_ACTIVATED);
|
||||
break;
|
||||
case GO_IRON_CLAD_DOOR:
|
||||
gameobject->UpdateSaveToDb(true);
|
||||
if (gameobject->GetStateSavedOnInstance() == GO_STATE_ACTIVE)
|
||||
gameobject->AllowSaveToDB(true);
|
||||
if (GetStoredGameObjectState(gameobject->GetSpawnId()) == GO_STATE_ACTIVE)
|
||||
{
|
||||
gameobject->DespawnOrUnsummon();
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ public:
|
||||
case GO_CAVE_IN_2:
|
||||
case GO_WORKSHOP_DOOR:
|
||||
case GO_FINAL_CHAMBER_DOOR:
|
||||
gameobject->UpdateSaveToDb(true);
|
||||
gameobject->AllowSaveToDB(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
#include "SpellInfo.h"
|
||||
#include "SpellScript.h"
|
||||
#include "SpellScriptLoader.h"
|
||||
#include "Unit.h"
|
||||
|
||||
class spell_q12779_an_end_to_all_things : public SpellScript
|
||||
{
|
||||
|
||||
@@ -538,7 +538,7 @@ public:
|
||||
|
||||
void DamageTaken(Unit* /*doneBy*/, uint32& damage, DamageEffectType, SpellSchoolMask) override
|
||||
{
|
||||
if (!canResurrectCheck && damage >= me->GetHealth())
|
||||
if ((!canResurrectCheck || canResurrect) && damage >= me->GetHealth())
|
||||
damage = me->GetHealth() - 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ public:
|
||||
GateKirtonosGUID = go->GetGUID();
|
||||
break;
|
||||
case GO_DOOR_OPENED_WITH_KEY:
|
||||
go->UpdateSaveToDb(true);
|
||||
go->AllowSaveToDB(true);
|
||||
break;
|
||||
case GO_GATE_GANDLING_DOWN_NORTH:
|
||||
GandlingGatesGUID[0] = go->GetGUID();
|
||||
|
||||
@@ -178,69 +178,69 @@ public:
|
||||
case GO_HALL_OF_HIGH_COMMAND:
|
||||
case GO_GAUNTLET_DOOR_1:
|
||||
case GO_GAUNTLET_DOOR_2:
|
||||
go->UpdateSaveToDb(true);
|
||||
go->AllowSaveToDB(true);
|
||||
break;
|
||||
case GO_ZIGGURAT_DOORS1:
|
||||
go->UpdateSaveToDb(true);
|
||||
go->AllowSaveToDB(true);
|
||||
_zigguratDoorsGUID1 = go->GetGUID();
|
||||
if (GetData(TYPE_ZIGGURAT1) >= 1)
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
break;
|
||||
case GO_ZIGGURAT_DOORS2:
|
||||
go->UpdateSaveToDb(true);
|
||||
go->AllowSaveToDB(true);
|
||||
_zigguratDoorsGUID2 = go->GetGUID();
|
||||
if (GetData(TYPE_ZIGGURAT2) >= 1)
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
break;
|
||||
case GO_ZIGGURAT_DOORS3:
|
||||
go->UpdateSaveToDb(true);
|
||||
go->AllowSaveToDB(true);
|
||||
_zigguratDoorsGUID3 = go->GetGUID();
|
||||
if (GetData(TYPE_ZIGGURAT3) >= 1)
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
break;
|
||||
case GO_GAUNTLET_GATE:
|
||||
go->UpdateSaveToDb(true);
|
||||
go->AllowSaveToDB(true);
|
||||
_gauntletGateGUID = go->GetGUID();
|
||||
if (_zigguratState1 == 2 && _zigguratState2 == 2 && _zigguratState3 == 2)
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
break;
|
||||
case GO_SLAUGTHER_GATE:
|
||||
go->UpdateSaveToDb(true);
|
||||
go->AllowSaveToDB(true);
|
||||
_slaughterGateGUID = go->GetGUID();
|
||||
if (_zigguratState1 == 2 && _zigguratState2 == 2 && _zigguratState3 == 2)
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
break;
|
||||
case GO_ZIGGURAT_DOORS4:
|
||||
go->UpdateSaveToDb(true);
|
||||
go->AllowSaveToDB(true);
|
||||
_zigguratDoorsGUID4 = go->GetGUID();
|
||||
if (_slaughterProgress == 4)
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
break;
|
||||
case GO_ZIGGURAT_DOORS5:
|
||||
go->UpdateSaveToDb(true);
|
||||
go->AllowSaveToDB(true);
|
||||
_zigguratDoorsGUID5 = go->GetGUID();
|
||||
if (_slaughterProgress == 4)
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
break;
|
||||
case GO_SLAUGHTER_GATE_SIDE:
|
||||
go->UpdateSaveToDb(true);
|
||||
go->AllowSaveToDB(true);
|
||||
if (_slaughterProgress >= 2)
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
break;
|
||||
case GO_PORT_TRAP_GATE_1:
|
||||
go->UpdateSaveToDb(true);
|
||||
go->AllowSaveToDB(true);
|
||||
_trapGatesGUIDs[0] = go->GetGUID();
|
||||
break;
|
||||
case GO_PORT_TRAP_GATE_2:
|
||||
go->UpdateSaveToDb(true);
|
||||
go->AllowSaveToDB(true);
|
||||
_trapGatesGUIDs[1] = go->GetGUID();
|
||||
break;
|
||||
case GO_PORT_TRAP_GATE_3:
|
||||
go->UpdateSaveToDb(true);
|
||||
go->AllowSaveToDB(true);
|
||||
_trapGatesGUIDs[2] = go->GetGUID();
|
||||
break;
|
||||
case GO_PORT_TRAP_GATE_4:
|
||||
go->UpdateSaveToDb(true);
|
||||
go->AllowSaveToDB(true);
|
||||
_trapGatesGUIDs[3] = go->GetGUID();
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
#include "SpellScript.h"
|
||||
#include "SpellScriptLoader.h"
|
||||
#include "TaskScheduler.h"
|
||||
#include "WaypointMgr.h"
|
||||
#include "zulgurub.h"
|
||||
|
||||
enum Says
|
||||
|
||||
@@ -20,7 +20,6 @@ Blasted_Lands
|
||||
Quest support: 3628. Teleporter to Rise of the Defiler.
|
||||
*/
|
||||
|
||||
#include "CreatureScript.h"
|
||||
#include "Group.h"
|
||||
#include "Player.h"
|
||||
#include "ScriptedCreature.h"
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
#include "CreatureScript.h"
|
||||
#include "Player.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "ScriptedGossip.h"
|
||||
|
||||
/*######
|
||||
## NPC 9836: Maredis Firestar
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
#include "Player.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "ScriptedEscortAI.h"
|
||||
#include "ScriptedGossip.h"
|
||||
|
||||
/*######
|
||||
## npc_ranger_lilatha
|
||||
|
||||
@@ -1014,44 +1014,29 @@ class spell_midsummer_fling_torch : public SpellScript
|
||||
bool handled;
|
||||
bool Load() override { handled = false; return true; }
|
||||
|
||||
SpellCastResult CheckCast()
|
||||
{
|
||||
GetCaster()->GetCreaturesWithEntryInRange(_crList, 100.0f, NPC_TORCH_TARGET);
|
||||
if (_crList.empty())
|
||||
{
|
||||
return SPELL_FAILED_NOT_HERE;
|
||||
}
|
||||
|
||||
return SPELL_CAST_OK;
|
||||
}
|
||||
|
||||
void ThrowNextTorch(Unit* caster)
|
||||
{
|
||||
uint8 rand = urand(0, _crList.size() - 1);
|
||||
Position pos;
|
||||
pos.Relocate(0.0f, 0.0f, 0.0f);
|
||||
for (std::list<Creature*>::const_iterator itr = _crList.begin(); itr != _crList.end(); ++itr, --rand)
|
||||
{
|
||||
if (caster->GetDistance(*itr) < 5)
|
||||
{
|
||||
if (!rand)
|
||||
rand++;
|
||||
continue;
|
||||
}
|
||||
Creature* bunny = caster->FindNearestCreature(NPC_TORCH_TARGET, 100.0f);
|
||||
|
||||
if (!rand)
|
||||
{
|
||||
pos.Relocate(*itr);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!bunny)
|
||||
return;
|
||||
|
||||
// we have any pos
|
||||
if (pos.GetPositionX())
|
||||
{
|
||||
caster->CastSpell(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), SPELL_FLING_TORCH, true);
|
||||
caster->CastSpell(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), SPELL_TORCH_SHADOW, true);
|
||||
}
|
||||
// targets are located on a circle with fixed radius around the target bunny
|
||||
// first target is chosen randomly anywhere on the circle
|
||||
// next target is chosen on the opposite half of the circle
|
||||
// so a minimum flight duration of the torch is guaranteed
|
||||
float angle = 0.0f;
|
||||
if (GetSpellInfo()->Id == SPELL_FLING_TORCH_DUMMY)
|
||||
angle = frand(-1.0f * M_PI, 1.0f * M_PI); // full circle
|
||||
else
|
||||
angle = frand(-0.5f * M_PI, 0.5f * M_PI); // half circle
|
||||
|
||||
Position pos = bunny->GetPosition();
|
||||
pos.SetOrientation(caster->GetPosition().GetAbsoluteAngle(pos));
|
||||
pos.RelocatePolarOffset(angle, 8.0f); // radius is sniffed value
|
||||
|
||||
caster->CastSpell(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), SPELL_FLING_TORCH, true);
|
||||
caster->CastSpell(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), SPELL_TORCH_SHADOW, true);
|
||||
}
|
||||
|
||||
void HandleFinish()
|
||||
@@ -1108,15 +1093,11 @@ class spell_midsummer_fling_torch : public SpellScript
|
||||
void Register() override
|
||||
{
|
||||
AfterCast += SpellCastFn(spell_midsummer_fling_torch::HandleFinish);
|
||||
OnCheckCast += SpellCheckCastFn(spell_midsummer_fling_torch::CheckCast);
|
||||
if (m_scriptSpellId == SPELL_JUGGLE_TORCH)
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_midsummer_fling_torch::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
std::list<Creature*> _crList;
|
||||
};
|
||||
|
||||
enum eJuggle
|
||||
|
||||
@@ -59,19 +59,12 @@ enum Misc
|
||||
|
||||
struct boss_high_astromancer_solarian : public BossAI
|
||||
{
|
||||
boss_high_astromancer_solarian(Creature* creature) : BossAI(creature, DATA_ASTROMANCER)
|
||||
{
|
||||
scheduler.SetValidator([this]
|
||||
{
|
||||
return !me->HasUnitState(UNIT_STATE_CASTING);
|
||||
});
|
||||
}
|
||||
boss_high_astromancer_solarian(Creature* creature) : BossAI(creature, DATA_ASTROMANCER) { }
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
BossAI::Reset();
|
||||
me->SetModelVisible(true);
|
||||
_visible = true;
|
||||
|
||||
ScheduleHealthCheckEvent(20, [&]{
|
||||
scheduler.CancelAll();
|
||||
@@ -131,7 +124,6 @@ struct boss_high_astromancer_solarian : public BossAI
|
||||
context.Repeat(33900ms, 48100ms);
|
||||
}).Schedule(52100ms, [this](TaskContext context)
|
||||
{
|
||||
_visible = false;
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->SetModelVisible(false);
|
||||
scheduler.DelayAll(21s);
|
||||
@@ -158,7 +150,6 @@ struct boss_high_astromancer_solarian : public BossAI
|
||||
});
|
||||
}).Schedule(20s, [this](TaskContext)
|
||||
{
|
||||
_visible = true;
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
Talk(SAY_SUMMON2);
|
||||
summons.DoForAllSummons([&](WorldObject* summon)
|
||||
@@ -204,7 +195,7 @@ struct boss_high_astromancer_solarian : public BossAI
|
||||
|
||||
scheduler.Update(diff);
|
||||
|
||||
if (_visible)
|
||||
if (me->GetReactState() == REACT_AGGRESSIVE)
|
||||
{
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
@@ -223,76 +214,52 @@ struct boss_high_astromancer_solarian : public BossAI
|
||||
{
|
||||
return me->GetDistance2d(432.59f, -371.93f) > 105.0f;
|
||||
}
|
||||
private:
|
||||
bool _visible;
|
||||
};
|
||||
|
||||
class spell_astromancer_wrath_of_the_astromancer : public SpellScriptLoader
|
||||
class spell_astromancer_wrath_of_the_astromancer : public AuraScript
|
||||
{
|
||||
public:
|
||||
spell_astromancer_wrath_of_the_astromancer() : SpellScriptLoader("spell_astromancer_wrath_of_the_astromancer") { }
|
||||
PrepareAuraScript(spell_astromancer_wrath_of_the_astromancer);
|
||||
|
||||
class spell_astromancer_wrath_of_the_astromancer_AuraScript : public AuraScript
|
||||
void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
PrepareAuraScript(spell_astromancer_wrath_of_the_astromancer_AuraScript);
|
||||
if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE)
|
||||
return;
|
||||
|
||||
void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE)
|
||||
return;
|
||||
Unit* target = GetUnitOwner();
|
||||
target->CastSpell(target, GetSpellInfo()->Effects[EFFECT_1].CalcValue(), false);
|
||||
}
|
||||
|
||||
Unit* target = GetUnitOwner();
|
||||
target->CastSpell(target, GetSpellInfo()->Effects[EFFECT_1].CalcValue(), false);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
AfterEffectRemove += AuraEffectRemoveFn(spell_astromancer_wrath_of_the_astromancer_AuraScript::AfterRemove, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
void Register() override
|
||||
{
|
||||
return new spell_astromancer_wrath_of_the_astromancer_AuraScript();
|
||||
AfterEffectRemove += AuraEffectRemoveFn(spell_astromancer_wrath_of_the_astromancer::AfterRemove, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_astromancer_solarian_transform : public SpellScriptLoader
|
||||
class spell_astromancer_solarian_transform : public AuraScript
|
||||
{
|
||||
public:
|
||||
spell_astromancer_solarian_transform() : SpellScriptLoader("spell_astromancer_solarian_transform") { }
|
||||
PrepareAuraScript(spell_astromancer_solarian_transform);
|
||||
|
||||
class spell_astromancer_solarian_transform_AuraScript : public AuraScript
|
||||
void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
PrepareAuraScript(spell_astromancer_solarian_transform_AuraScript);
|
||||
GetUnitOwner()->HandleStatModifier(UnitMods(UNIT_MOD_ARMOR), TOTAL_PCT, 400.0f, true);
|
||||
}
|
||||
|
||||
void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
GetUnitOwner()->HandleStatModifier(UnitMods(UNIT_MOD_ARMOR), TOTAL_PCT, 400.0f, true);
|
||||
}
|
||||
|
||||
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
GetUnitOwner()->HandleStatModifier(UnitMods(UNIT_MOD_ARMOR), TOTAL_PCT, 400.0f, false);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectApply += AuraEffectApplyFn(spell_astromancer_solarian_transform_AuraScript::OnApply, EFFECT_0, SPELL_AURA_TRANSFORM, AURA_EFFECT_HANDLE_REAL);
|
||||
OnEffectRemove += AuraEffectRemoveFn(spell_astromancer_solarian_transform_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_TRANSFORM, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
return new spell_astromancer_solarian_transform_AuraScript();
|
||||
GetUnitOwner()->HandleStatModifier(UnitMods(UNIT_MOD_ARMOR), TOTAL_PCT, 400.0f, false);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectApply += AuraEffectApplyFn(spell_astromancer_solarian_transform::OnApply, EFFECT_0, SPELL_AURA_TRANSFORM, AURA_EFFECT_HANDLE_REAL);
|
||||
OnEffectRemove += AuraEffectRemoveFn(spell_astromancer_solarian_transform::OnRemove, EFFECT_0, SPELL_AURA_TRANSFORM, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_high_astromancer_solarian()
|
||||
{
|
||||
RegisterTheEyeAI(boss_high_astromancer_solarian);
|
||||
new spell_astromancer_wrath_of_the_astromancer();
|
||||
new spell_astromancer_solarian_transform();
|
||||
RegisterSpellScript(spell_astromancer_wrath_of_the_astromancer);
|
||||
RegisterSpellScript(spell_astromancer_solarian_transform);
|
||||
}
|
||||
|
||||
|
||||
@@ -245,49 +245,6 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
/*######
|
||||
## at_sholazar_waygate
|
||||
######*/
|
||||
|
||||
enum Waygate
|
||||
{
|
||||
SPELL_SHOLAZAR_TO_UNGORO_TELEPORT = 52056,
|
||||
SPELL_UNGORO_TO_SHOLAZAR_TELEPORT = 52057,
|
||||
|
||||
AT_SHOLAZAR = 5046,
|
||||
AT_UNGORO = 5047,
|
||||
|
||||
QUEST_THE_MAKERS_OVERLOOK = 12613,
|
||||
QUEST_THE_MAKERS_PERCH = 12559,
|
||||
QUEST_MEETING_A_GREAT_ONE = 13956,
|
||||
};
|
||||
|
||||
class AreaTrigger_at_sholazar_waygate : public AreaTriggerScript
|
||||
{
|
||||
public:
|
||||
AreaTrigger_at_sholazar_waygate() : AreaTriggerScript("at_sholazar_waygate") { }
|
||||
|
||||
bool OnTrigger(Player* player, AreaTrigger const* trigger) override
|
||||
{
|
||||
if (!player->isDead() && (player->GetQuestStatus(QUEST_MEETING_A_GREAT_ONE) != QUEST_STATUS_NONE ||
|
||||
(player->GetQuestStatus(QUEST_THE_MAKERS_OVERLOOK) == QUEST_STATUS_REWARDED && player->GetQuestStatus(QUEST_THE_MAKERS_PERCH) == QUEST_STATUS_REWARDED)))
|
||||
{
|
||||
switch (trigger->entry)
|
||||
{
|
||||
case AT_SHOLAZAR:
|
||||
player->CastSpell(player, SPELL_SHOLAZAR_TO_UNGORO_TELEPORT, true);
|
||||
break;
|
||||
|
||||
case AT_UNGORO:
|
||||
player->CastSpell(player, SPELL_UNGORO_TO_SHOLAZAR_TELEPORT, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
/*######
|
||||
## at_nats_landing
|
||||
######*/
|
||||
@@ -490,7 +447,6 @@ void AddSC_areatrigger_scripts()
|
||||
new AreaTrigger_at_stormwright_shelf();
|
||||
new AreaTrigger_at_scent_larkorwi();
|
||||
new AreaTrigger_at_last_rites();
|
||||
new AreaTrigger_at_sholazar_waygate();
|
||||
new AreaTrigger_at_nats_landing();
|
||||
new AreaTrigger_at_sentry_point();
|
||||
new AreaTrigger_at_brewfest();
|
||||
|
||||
@@ -120,6 +120,7 @@ public:
|
||||
MOCK_METHOD(std::string const&, GetRealmName, (), (const));
|
||||
MOCK_METHOD(void, SetRealmName, (std::string name), ());
|
||||
MOCK_METHOD(void, RemoveOldCorpses, ());
|
||||
MOCK_METHOD(void, DoForAllOnlinePlayers, (std::function<void(Player*)> exec));
|
||||
};
|
||||
#pragma GCC diagnostic pop
|
||||
|
||||
|
||||
Reference in New Issue
Block a user