diff options
author | Rat <gmstreetrat@gmail.com> | 2014-12-01 21:09:23 +0100 |
---|---|---|
committer | Rat <gmstreetrat@gmail.com> | 2014-12-01 21:09:23 +0100 |
commit | b91ac01bc7b9f9a60b85f7e92b88a8d4c16d350c (patch) | |
tree | 752ff4331fa77c4ad907f30c075b930072ca18e8 | |
parent | e7f3f11ed5d7fec26de2c4fd9f2cb219d8019f9b (diff) | |
parent | 05913b82084ed2b640c7e44e7a55bdb7b797ca5c (diff) |
Merge branch '6.x' of https://github.com/TrinityCore/TrinityCore into Spells
34 files changed, 537 insertions, 274 deletions
diff --git a/sql/updates/world/2014_11_30_00_world.sql b/sql/updates/world/2014_11_30_00_world.sql new file mode 100644 index 00000000000..d946231922c --- /dev/null +++ b/sql/updates/world/2014_11_30_00_world.sql @@ -0,0 +1,30 @@ +ALTER TABLE `creature_template` CHANGE `minlevel` `minlevel` SMALLINT(5) NOT NULL DEFAULT '1' AFTER `gossip_menu_id`; +ALTER TABLE `creature_template` CHANGE `maxlevel` `maxlevel` SMALLINT(5) NOT NULL DEFAULT '1' AFTER `minlevel`; + +UPDATE `creature_template` SET `exp`=-1 WHERE `entry` IN (68, 309, 347, 352, 523, 603, 853, 857, 907, 931, 1233, 1284, 1387, 1571, 1572, 1573, 1642, 1652, 1735, 1736, 1737, 1739, 1740, 1741, 1756, 1976, 2041, 2225, 2226, 2299, 2302, 2389, 2409, 2432, 2804, 2835, 2851, 2858, 2859, 2861, 2941, 2995, 3083, 3084, 3210, 3211, 3213, 3214, 3296, 3305, 3310, 3343, 3468, 3469, 3502, 3575, 3615, 3625, 3838, 3841, 3890, 3936, 4255, 4257, 4262, 4267, 4309, 4310, 4312, 4314, 4317, 4319, 4321, 4407, 4423, 4551, 4624, 4968, 5118, 5134, 5135, 5139, 5595, 5597, 5603, 5624, 5952, 6026, 6526, 6706, 6726, 7410, 7427, 7823, 7824, 7975, 7980, 7999, 8018, 8019, 8020, 8055, 8096, 8609, 8610, 8670, 8719, 9297, 9460, 9521, 9526, 9527, 10038, 10181, 10360, 10364, 10367, 10583, 10897, 10981, 10982, 10985, 10986, 10987, 10989, 10990, 10991, 11099, 11102, 11138, 11139, 11190, 11194, 11600, 11602, 11603, 11604, 11605, 11606, 11657, 11675, 11676, 11677, 11678, 11822, 11837, 11838, 11839, 11840, 11899, 11900, 11901, 11946, 11947, 11948, 11949, 11997, 11998, 12047, 12048, 12050, 12051, 12052, 12053, 12096, 12097, 12121, 12122, 12127, 12159, 12160, 12197, 12198, 12577, 12578, 12596, 12616, 12617, 12636, 12740, 13078, 13079, 13080, 13081, 13086, 13087, 13088, 13089, 13096, 13097, 13098, 13099, 13116, 13117, 13137, 13138, 13139, 13140, 13143, 13144, 13145, 13146, 13147, 13149, 13150, 13151, 13152, 13153, 13154, 13155, 13161, 13176, 13177, 13178, 13179, 13180, 13181, 13216, 13218, 13221, 13236, 13256, 13257, 13281, 13284, 13296, 13297, 13298, 13299, 13300, 13316, 13317, 13318, 13319, 13320, 13324, 13325, 13326, 13327, 13328, 13329, 13330, 13331, 13332, 13333, 13334, 13335, 13336, 13337, 13356, 13357, 13358, 13359, 13377, 13378, 13396, 13397, 13416, 13419, 13421, 13422, 13424, 13425, 13426, 13427, 13428, 13437, 13438, 13439, 13440, 13441, 13442, 13443, 13446, 13447, 13448, 13449, 13496, 13516, 13517, 13518, 13519, 13520, 13521, 13522, 13523, 13524, 13525, 13526, 13527, 13528, 13529, 13530, 13531, 13534, 13535, 13536, 13537, 13538, 13539, 13540, 13541, 13542, 13543, 13544, 13545, 13546, 13547, 13548, 13549, 13550, 13551, 13552, 13553, 13554, 13555, 13556, 13557, 13576, 13577, 13597, 13598, 13616, 13617, 13618, 13676, 13777, 13797, 13798, 13839, 13959, 13977, 14016, 14018, 14019, 14026, 14027, 14028, 14029, 14030, 14031, 14141, 14142, 14185, 14186, 14187, 14188, 14242, 14282, 14283, 14284, 14285, 14304, 14363, 14365, 14367, 14375, 14376, 14377, 14378, 14379, 14380, 14402, 14403, 14404, 14423, 14438, 14439, 14440, 14441, 14442, 14622, 14717, 14762, 14763, 14764, 14765, 14766, 14767, 14768, 14769, 14770, 14771, 14772, 14773, 14774, 14775, 14776, 14777, 14832, 14848, 14913, 14942, 14943, 14944, 14945, 14946, 14947, 14948, 14981, 14982, 15006, 15007, 15008, 15088, 15139, 15177, 15178, 15184, 15193, 15195, 15371, 15466, 15467, 15518, 15519, 15659, 15961, 16096, 16189, 16192, 16222, 16227, 16378, 16392, 16587, 16694, 16695, 16696, 16711, 16733, 16800, 16801, 16802, 16822, 16921, 17468, 17506, 17507, 17554, 17555, 17855, 18103, 18139, 18785, 18788, 18789, 18791, 18807, 18808, 18809, 18895, 18930, 18931, 18937, 18938, 18939, 18940, 18942, 18953, 18989, 19317, 19504, 19529, 19541, 19558, 19581, 19583, 19855, 19858, 19859, 19905, 19906, 19907, 19908, 19909, 19910, 19911, 19912, 19915, 19923, 19925, 20118, 20119, 20120, 20234, 20269, 20271, 20272, 20273, 20274, 20276, 20362, 20374, 20381, 20382, 20383, 20384, 20385, 20386, 20388, 20390, 20447, 20497, 20499, 20515, 20556, 20674, 20762, 21107, 21235, 21766, 21984, 21986, 22216, 22407, 22455, 22485, 22494, 22522, 22931, 22935, 22937, 23090, 23115, 23612, 23619, 23623, 23624, 23625, 23626, 23636, 23736, 23775, 23859, 24032, 24061, 24155, 24366, 24470, 24795, 24851, 25040, 25145, 25148, 25149, 25150, 25151, 25152, 25288, 25499, 25991, 26016, 26017, 26019, 26020, 26021, 26024, 26027, 26028, 26029, 26030, 26031, 26032, 26033, 26037, 26038, 26253, 26560, 26566, 26602, 26844, 26845, 26847, 26848, 26850, 26851, 26852, 26853, 26876, 26877, 26878, 26879, 26880, 26881, 27046, 27170, 27175, 27344, 27881, 27894, 27946, 27953, 28037, 28094, 28195, 28196, 28197, 28312, 28319, 28366, 28574, 28613, 28615, 28618, 28621, 28623, 28624, 28674, 28781, 28801, 28818, 28863, 28865, 29260, 29262, 29480, 29533, 29568, 29611, 29617, 29712, 29721, 29749, 29750, 29757, 29762, 29910, 29950, 29951, 30231, 30269, 30271, 30280, 30312, 30314, 30400, 30433, 30488, 30489, 30499, 30560, 30569, 30578, 30579, 30580, 30581, 30582, 30583, 30584, 30586, 30587, 30590, 30610, 30611, 30626, 30737, 30739, 30740, 30853, 30869, 30870, 31036, 31051, 31052, 31053, 31054, 31069, 31078, 31091, 31101, 31102, 31106, 31107, 31108, 31109, 31146, 31151, 31153, 31250, 31416, 31426, 31430, 31708, 31715, 31841, 31842, 32169, 32170, 32294, 32296, 32307, 32308, 32330, 32332, 32333, 32571, 32615, 32616, 32617, 32618, 32619, 32620, 32621, 32622, 32623, 32624, 32625, 32626, 32627, 32629, 33253, 33254, 33502, 33504, 33505, 33506, 33508, 33510, 33511, 33849, 34018, 34019, 34021, 34022, 34024, 34025, 34026, 34027, 34028, 34029, 34374, 34378, 34429, 34775, 34776, 34777, 34778, 34793, 34802, 34918, 34919, 34922, 34924, 34927, 34929, 34935, 34943, 34944, 34955, 34971, 34972, 34973, 34976, 34978, 34983, 34985, 34986, 34987, 34988, 34989, 34991, 34993, 34997, 34998, 34999, 35000, 35001, 35002, 35007, 35008, 35017, 35019, 35020, 35021, 35022, 35023, 35024, 35025, 35026, 35027, 35069, 35136, 35137, 35138, 35139, 35140, 35141, 35273, 35315, 35322, 35345, 35346, 35450, 35478, 35480, 35481, 35556, 35562, 35596, 35597, 35600, 35601, 35602, 35603, 35611, 35612, 35819, 36151, 36152, 36162, 36164, 36165, 36166, 36213, 36217, 36224, 36225, 36226, 36273, 36355, 36356, 36481, 36648, 36728, 37005, 37058, 37790, 37825, 37860, 37869, 37888, 37915, 37944, 38217, 38831, 38898, 38899, 38966, 39172, 39173, 39175, 39196, 39210, 39211, 39212, 39330, 39340, 39605, 39656, 39898, 39934, 40138, 40333, 40358, 40367, 40413, 40473, 40552, 40553, 40558, 40768, 40769, 40809, 40827, 40851, 40852, 40866, 40867, 40871, 40873, 40966, 41140, 41142, 41214, 41215, 41240, 41246, 41321, 41322, 41323, 41325, 41332, 41383, 41580, 41605, 41860, 41861, 41896, 42129, 42131, 42316, 42317, 42319, 42406, 42426, 42623, 42928, 42974, 42983, 43000, 43042, 43043, 43045, 43049, 43052, 43053, 43072, 43073, 43079, 43085, 43086, 43087, 43088, 43104, 43107, 43114, 43121, 43124, 43216, 43220, 43225, 43287, 43289, 43290, 43293, 43295, 43328, 43371, 43375, 43427, 43440, 43481, 43549, 43570, 43573, 43690, 43695, 43697, 43701, 43702, 43841, 43842, 43845, 43867, 43889, 43931, 43991, 44036, 44059, 44060, 44230, 44231, 44232, 44233, 44244, 44399, 44407, 44408, 44409, 44410, 44440, 44441, 44451, 44787, 44825, 44865, 44866, 44867, 44868, 44871, 44872, 44874, 44876, 44877, 44878, 45015, 45042, 45082, 45111, 45230, 45250, 45253, 45344, 45382, 45479, 45564, 45659, 45814, 45822, 45827, 45829, 46004, 46006, 46011, 46071, 46077, 46142, 46180, 46181, 46190, 46236, 46552, 46637, 46638, 46639, 46640, 46667, 46717, 46757, 46833, 46844, 46986, 47060, 47061, 47116, 47118, 47119, 47121, 47133, 47147, 47154, 47155, 47156, 47174, 47434, 47581, 47582, 47584, 47586, 47587, 47588, 47589, 47644, 47655, 47661, 47663, 47665, 47688, 47718, 47736, 47745, 47844, 47875, 47927, 48075, 48273, 48274, 48275, 48318, 48321, 48546, 48572, 48736, 48738, 48874, 48883, 49038, 49420, 49533, 49573, 49809, 49820, 50043, 50083, 50084, 50369, 50440, 50441, 50442, 50443, 50445, 50463, 50546, 50548, 50549, 50550, 50551, 50552, 50553, 50668, 50670, 50674, 50676, 50678, 50683, 50684, 51257, 51309, 51310, 51323, 51334, 51346, 51348, 51355, 51371, 51372, 51383, 51384, 51429, 51450, 51451, 51468, 51471, 51472, 51473, 51474, 51475, 51476, 51478, 51507, 51508, 51509, 51510, 51511, 51513, 51514, 51515, 51516, 51517, 51518, 51519, 51520, 51521, 51522, 51523, 51524, 51525, 51532, 51533, 51534, 51535, 51536, 51537, 51538, 51539, 51540, 51541, 51542, 51543, 51544, 51545, 51546, 51547, 51548, 51549, 51554, 51571, 51605, 51610, 51666, 51732, 51768, 51769, 51770, 51771, 51772, 51773, 51774, 51775, 51776, 51777, 51778, 51779, 51780, 51781, 51782, 51783, 51784, 51785, 51786, 51787, 51788, 51789, 51790, 51791, 51792, 51793, 51794, 51795, 51796, 51797, 51798, 51799, 51800, 51801, 51802, 51803, 51804, 51805, 51806, 51807, 51808, 51809, 51810, 51811, 51812, 51813, 51814, 51815, 51816, 51817, 51818, 51819, 51820, 51821, 51822, 51823, 51824, 51825, 51827, 51828, 51829, 51830, 51831, 51832, 51834, 51835, 51837, 51838, 51839, 51840, 51841, 51842, 51843, 51844, 51845, 51846, 51847, 51848, 51849, 51850, 51851, 51852, 51853, 51854, 51855, 51856, 51857, 51858, 51859, 51860, 51861, 51862, 51863, 51864, 51867, 51868, 51869, 51870, 51871, 51872, 51873, 51874, 51875, 51876, 51877, 51878, 51879, 51880, 51881, 51882, 51883, 51884, 51885, 51886, 51887, 51888, 51889, 51890, 51891, 51892, 51893, 51894, 51895, 51896, 51897, 51898, 51899, 51900, 51901, 51902, 51903, 51904, 51905, 51906, 51907, 51908, 51909, 51910, 51911, 51912, 51913, 51914, 51915, 51916, 51917, 51918, 51919, 51920, 51921, 51922, 51923, 51924, 51925, 51938, 51986, 52009, 52010, 52011, 52012, 52013, 52018, 52060, 52084, 52184, 52280, 52404, 52410, 52646, 52670, 52700, 52753, 52767, 52792, 52817, 52821, 52983, 52996, 53000, 53008, 53352, 53518, 53537, 53562, 53563, 53598, 53649, 53657, 53660, 53663, 53667, 53669, 53676, 53736, 53755, 53783, 53905, 53956, 53957, 53958, 53959, 53960, 54116, 54168, 54208, 54209, 54226, 54260, 54297, 54300, 54301, 54302, 54306, 54313, 54334, 54344, 54345, 54346, 54392, 54393, 54441, 54442, 54443, 54471, 54472, 54473, 54499, 54502, 54509, 54519, 54523, 54524, 54548, 54601, 54788, 55003, 55382, 55396, 55402, 55520, 55561, 55568, 55577, 55578, 55657, 55660, 55778, 55779, 55805, 55810, 55842, 55844, 55860, 55861, 55904, 55911, 55912, 55913, 55914, 55967, 55968, 55969, 55971, 55996, 56041, 56139, 56140, 56141, 56142, 56143, 56144, 56160, 56737, 56771, 57281, 57287, 57288, 57289, 57473, 57474, 57475, 57629, 57630, 57800, 57801, 58181, 58255, 58336, 58505, 58612, 58765, 58770, 58777, 58782, 58784, 58787, 58788, 58792, 58816, 58840, 58855, 58870, 58877, 58878, 58912, 58913, 58914, 58929, 58934, 58936, 58939, 58948, 59048, 59086, 59087, 59088, 59089, 59317, 59375, 59471, 59595, 59596, 59604, 59654, 59658, 59812, 59922, 59923, 59952, 60152, 60219, 60226, 60227, 60228, 60969, 60971, 61138, 61478, 61744, 61745, 61759, 62087, 62092, 62334, 62742, 62808, 62824, 62827, 62841, 62911, 62912, 62913, 62926, 63351, 63357, 63364, 63372, 63373, 64044, 64045, 64250, 64479, 64519, 64526, 64529, 64560, 64564, 64565, 64573, 64574, 64584, 64586, 64587, 64600, 64615, 64629, 64709, 64727, 64728, 64729, 64732, 64733, 64734, 64735, 64736, 64900, 64923, 64956, 64957, 64997, 64998, 65138, 65151, 65152, 65154, 65227, 65228, 65232, 65236, 65237, 65238, 65239, 65240, 65241, 65310, 65442, 65444, 65474, 65494, 65507, 65510, 65539, 65540, 65548, 65549, 65609, 65610, 65611, 65643, 65654, 65680, 65785, 65786, 65801, 65807, 65863, 65865, 65867, 66091, 66458, 66666, 66913, 67013, 67014, 67149, 67150, 67195, 67196, 67197, 67198, 67199, 67200, 67260, 67267, 67418, 67560, 67580, 67581, 67754, 67785, 67790, 67796, 67840, 67864, 67867, 67923, 67944, 67945, 67947, 67953, 67965, 67968, 67973, 67979, 67987, 67989, 67992, 68003, 68008, 68023, 68025, 68053, 68054, 68059, 68072, 68084, 68085, 68086, 68088, 68108, 68144, 68216, 68223, 68226, 68235, 68236, 68237, 68242, 68278, 68287, 68293, 68315, 68323, 68329, 68336, 68339, 68357, 68363, 68364, 68365, 68370, 68372, 68392, 68399, 68403, 68404, 68405, 68406, 68408, 68424, 68425, 68429, 68430, 68496, 68514, 68538, 68544, 68586, 68589, 68590, 68592, 68593, 68609, 68631, 68633, 68634, 68637, 68642, 68643, 68644, 68645, 68651, 68652, 68677, 68678, 68679, 68689, 68690, 68749, 68764, 68765, 68767, 68768, 68777, 68792, 68794, 68842, 68882, 68920, 68921, 68922, 68924, 68930, 68941, 68955, 68966, 68970, 68972, 68975, 68979, 68980, 68981, 68982, 68990, 68991, 68992, 68994, 68995, 68996, 69026, 69359, 69360, 69422, 69797, 69799, 69838, 70085, 70086, 70087, 70088, 70131, 70132, 70245, 70253, 70309, 70337, 70354, 70362, 70363, 70370, 70371, 70381, 70498, 70643, 70682, 70690, 70691, 70705, 70706, 70741, 70799, 70822, 70824, 70877, 70959, 70978, 71042, 71111, 71112, 71123, 71147, 71148, 71149, 71151, 71177, 71210, 71246, 71249, 71250, 71265, 71280, 71302, 71303, 71340, 71344, 71358, 71359, 71360, 71369, 71487, 71490, 71491, 71492, 71589, 71592, 71718, 71719, 71794, 71837, 71972, 71973, 71974, 71982, 71992, 72005, 72038, 72227, 72302, 72311, 72312, 72313, 72318, 72366, 72371, 72376, 72392, 72394, 72422, 72423, 72424, 72425, 72501, 72515, 72534, 72548, 72549, 72559, 72560, 72561, 72570, 72579, 72580, 72581, 72614, 72774, 72886, 72911, 72912, 73082, 73120, 73121, 73122, 73343, 73347, 73361, 73362, 73385, 73386, 73554, 73558, 73561, 73562, 73563, 73584, 73585, 73586, 73587, 73588, 73600, 73602, 73614, 73664, 73709, 73710, 73711, 73712, 73713, 73714, 73715, 73726, 73727, 73728, 73811, 73818, 73820, 73909, 73910, 73927, 73929, 73941, 73942, 73957, 73962, 74060, 74061, 74089, 74217, 74219, 76357); + +UPDATE `creature_template` SET `minlevel`=-10 WHERE `entry` IN (10981, 10990, 13618, 13676, 25499); +UPDATE `creature_template` SET `maxlevel`=-10 WHERE `entry` IN (10981, 10990); +UPDATE `creature_template` SET `maxlevel`=-9 WHERE `entry` IN (13618, 13676); +UPDATE `creature_template` SET `minlevel`=-6 WHERE `entry` IN (11602, 11605, 13080, 13081, 13087, 13089, 13096, 13097, 13098, 13099); +UPDATE `creature_template` SET `minlevel`=-5 WHERE `entry` IN (2225, 3343, 3625, 4255, 4257, 5134, 5135, 5139, 10364, 10367, 12047, 12048, 12052, 12096, 12097, 13149); +UPDATE `creature_template` SET `maxlevel`=-5 WHERE `entry` IN (2225, 3343, 3625, 4255, 4257, 5134, 5135, 5139, 10364, 10367, 11602, 11605, 12047, 12048, 12052, 12096, 12097, 13080, 13081, 13087, 13089, 13096, 13097, 13098, 13099); +UPDATE `creature_template` SET `minlevel`=-4 WHERE `entry` IN (10989, 11838, 11839, 13325, 13327, 13330, 13448, 13534, 13537, 13540, 13543, 13546, 13549, 13552, 13555); +UPDATE `creature_template` SET `maxlevel`=-4 WHERE `entry` IN (13149, 13325, 13327, 13330); +UPDATE `creature_template` SET `minlevel`=-3 WHERE `entry` IN (12051, 12127, 13150, 13335, 13336, 13337); +UPDATE `creature_template` SET `maxlevel`=-3 WHERE `entry` IN (11838, 11839, 12051, 12127, 13335, 13336, 13337, 13448, 13534, 13537, 13540, 13543, 13546, 13549, 13552, 13555); +UPDATE `creature_template` SET `minlevel`=-2 WHERE `entry` IN (11657, 11677, 11840, 12050, 12053, 13078, 13079, 13086, 13088, 13180, 13216, 13218, 13221, 13284, 13324, 13329, 13426, 13427, 13428, 13438, 13440, 13447, 13516, 13520, 13524, 13528, 13535, 13538, 13541, 13544, 13547, 13550, 13553, 13556, 13576, 13777, 14141, 14142, 30739, 30740); +UPDATE `creature_template` SET `maxlevel`=-2 WHERE `entry` IN (10989, 11657, 11677, 12050, 12053, 13078, 13079, 13086, 13088, 13150, 13180, 13216, 13218, 13221, 13284, 13324, 13329, 13426, 13427, 13428, 13438, 13440, 13447, 13516, 13520, 13524, 13528, 13576, 14141, 14142, 30739, 30740); +UPDATE `creature_template` SET `minlevel`=-1 WHERE `entry` IN (13137, 13138, 13143, 13144, 13145, 13146, 13147, 13179, 13296, 13297, 13298, 13299, 13300, 13326, 13328, 13333, 13334, 13358, 13359, 13439, 13517, 13521, 13525, 13529, 14185, 14188, 15466, 56160, 58181, 58255, 64584, 65867, 67979, 70253, 70309, 70337, 70682, 72312, 72313, 72318, 72371, 72534, 72548, 72549, 72579, 72580, 72581, 72911, 72912, 73561, 73562, 73563, 73726, 73727, 73728, 73929, 74089); +UPDATE `creature_template` SET `maxlevel`=-1 WHERE `entry` IN (11840, 13137, 13138, 13143, 13144, 13145, 13146, 13147, 13179, 13296, 13297, 13298, 13299, 13300, 13326, 13328, 13333, 13334, 13439, 13517, 13521, 13525, 13529, 13535, 13538, 13541, 13544, 13547, 13550, 13553, 13556, 13777, 14185, 14188, 58181, 58255, 64584, 65867, 67979, 70253, 70309, 70337, 70682, 72312, 72313, 72318, 72534, 72548, 72549, 72579, 72580, 72581, 72911, 72912, 73561, 73562, 73563, 73726, 73727, 73728, 73929, 74089); +UPDATE `creature_template` SET `minlevel`=0 WHERE `entry` IN (68, 309, 347, 352, 523, 603, 857, 907, 931, 1233, 1387, 1571, 1572, 1573, 1652, 1735, 1756, 1976, 2041, 2226, 2299, 2302, 2389, 2409, 2432, 2804, 2835, 2851, 2858, 2859, 2861, 2941, 2995, 3083, 3084, 3296, 3305, 3310, 3468, 3469, 3502, 3575, 3615, 3838, 3841, 3890, 4262, 4267, 4309, 4310, 4312, 4314, 4317, 4319, 4321, 4407, 4423, 4551, 4624, 5118, 5595, 5597, 5603, 5624, 6026, 6526, 6706, 6726, 7410, 7427, 7823, 7824, 7980, 8018, 8019, 8020, 8055, 8096, 8609, 8610, 8670, 8719, 9297, 9460, 9521, 9526, 9527, 10038, 10360, 10583, 10897, 11099, 11102, 11138, 11139, 11190, 11194, 11822, 11899, 11900, 11901, 11947, 11949, 11997, 11998, 12121, 12122, 12197, 12198, 12577, 12578, 12596, 12616, 12617, 12636, 12740, 13116, 13117, 13151, 13155, 13161, 13176, 13177, 13178, 13181, 13236, 13257, 13281, 13331, 13332, 13377, 13378, 13416, 13424, 13425, 13437, 13441, 13442, 13443, 13518, 13522, 13526, 13530, 13536, 13539, 13542, 13545, 13548, 13551, 13554, 13557, 13577, 13616, 13617, 13797, 13798, 13839, 14026, 14027, 14028, 14029, 14030, 14031, 14186, 14187, 14242, 14284, 14285, 14304, 14363, 14365, 14367, 14375, 14376, 14377, 14378, 14379, 14380, 14402, 14403, 14404, 14423, 14438, 14439, 14440, 14441, 14442, 14622, 14717, 14762, 14763, 14764, 14765, 14766, 14767, 14768, 14769, 14770, 14771, 14772, 14773, 14774, 14775, 14776, 14777, 14832, 14848, 14913, 14942, 14943, 14944, 14945, 14946, 14947, 14948, 14981, 14982, 15006, 15007, 15008, 15139, 15177, 15178, 15184, 15195, 15518, 15519, 15659, 15961, 16096, 16189, 16192, 16222, 16227, 16378, 16392, 16587, 16694, 16695, 16696, 16711, 16733, 16822, 17506, 17507, 17554, 17555, 17855, 18103, 18139, 18785, 18788, 18789, 18791, 18807, 18808, 18809, 18895, 18930, 18931, 18937, 18938, 18939, 18940, 18942, 18953, 18989, 19317, 19504, 19529, 19541, 19558, 19581, 19583, 19855, 19858, 19859, 19905, 19906, 19907, 19908, 19909, 19910, 19911, 19912, 19915, 19923, 19925, 20118, 20119, 20120, 20234, 20269, 20271, 20272, 20273, 20274, 20276, 20362, 20374, 20381, 20382, 20383, 20384, 20385, 20386, 20388, 20390, 20447, 20497, 20499, 20515, 20556, 20674, 20762, 21107, 21235, 21766, 21986, 22216, 22407, 22455, 22485, 22494, 22931, 22935, 22937, 23090, 23115, 23612, 23619, 23623, 23624, 23625, 23626, 23636, 23736, 23859, 24032, 24061, 24155, 24366, 24470, 24795, 24851, 25040, 25145, 25148, 25149, 25150, 25151, 25152, 25288, 25991, 26016, 26017, 26019, 26020, 26021, 26024, 26027, 26028, 26029, 26030, 26031, 26032, 26033, 26037, 26038, 26253, 26560, 26566, 26602, 26844, 26845, 26847, 26848, 26850, 26851, 26852, 26853, 26876, 26877, 26878, 26879, 26880, 26881, 27046, 27170, 27175, 27344, 27881, 27894, 27946, 27953, 28037, 28094, 28195, 28196, 28197, 28312, 28319, 28366, 28574, 28613, 28615, 28618, 28621, 28623, 28624, 28674, 28781, 28801, 28818, 28863, 28865, 29260, 29262, 29480, 29533, 29568, 29617, 29712, 29721, 29749, 29750, 29757, 29762, 29910, 29950, 29951, 30231, 30269, 30271, 30280, 30312, 30314, 30400, 30433, 30488, 30489, 30499, 30560, 30569, 30578, 30579, 30580, 30581, 30582, 30583, 30584, 30586, 30587, 30590, 30610, 30611, 30626, 30737, 30853, 30869, 30870, 31036, 31051, 31052, 31053, 31054, 31069, 31078, 31091, 31101, 31102, 31106, 31107, 31108, 31109, 31151, 31153, 31250, 31416, 31426, 31430, 31708, 31715, 31841, 31842, 32169, 32170, 32294, 32296, 32307, 32308, 32330, 32332, 32333, 32571, 32615, 32616, 32617, 32618, 32619, 32620, 32621, 32622, 32623, 32624, 32625, 32626, 32627, 32629, 33253, 33254, 33502, 33504, 33505, 33506, 33508, 33510, 33511, 33849, 34018, 34019, 34021, 34022, 34024, 34025, 34026, 34027, 34028, 34029, 34374, 34378, 34429, 34775, 34776, 34777, 34778, 34793, 34802, 34918, 34919, 34927, 34929, 34935, 34943, 34944, 34955, 34971, 34972, 34973, 34976, 34978, 34983, 34985, 34986, 34987, 34988, 34989, 34991, 34993, 34997, 34998, 34999, 35000, 35001, 35002, 35007, 35008, 35017, 35019, 35020, 35021, 35022, 35023, 35024, 35025, 35026, 35027, 35069, 35136, 35137, 35138, 35139, 35140, 35141, 35273, 35315, 35322, 35345, 35346, 35450, 35478, 35480, 35481, 35556, 35562, 35596, 35597, 35600, 35601, 35602, 35603, 35611, 35612, 35819, 36151, 36152, 36162, 36164, 36165, 36166, 36213, 36217, 36224, 36225, 36226, 36273, 36355, 36356, 36481, 36728, 37005, 37790, 37825, 37860, 37869, 37888, 37915, 37944, 38831, 39172, 39173, 39175, 39210, 39211, 39212, 39330, 39340, 39898, 39934, 40138, 40333, 40358, 40367, 40413, 40473, 40552, 40553, 40558, 40768, 40769, 40809, 40827, 40851, 40852, 40866, 40867, 40871, 40873, 40966, 41140, 41142, 41214, 41215, 41240, 41246, 41321, 41322, 41323, 41325, 41332, 41383, 41580, 41605, 41860, 41861, 41896, 42319, 42406, 42426, 42623, 42974, 42983, 43000, 43042, 43043, 43045, 43049, 43052, 43053, 43072, 43073, 43079, 43085, 43086, 43087, 43088, 43104, 43107, 43114, 43121, 43124, 43216, 43220, 43225, 43287, 43289, 43290, 43293, 43295, 43328, 43371, 43375, 43427, 43440, 43481, 43549, 43570, 43573, 43690, 43695, 43697, 43701, 43702, 43841, 43842, 43889, 43991, 44036, 44059, 44060, 44230, 44231, 44232, 44233, 44244, 44399, 44407, 44408, 44409, 44410, 44440, 44787, 44825, 44865, 44866, 44867, 44868, 44871, 44872, 44874, 44876, 44877, 44878, 45015, 45082, 45230, 45344, 45479, 45564, 45659, 45814, 45822, 45827, 45829, 46004, 46006, 46011, 46071, 46077, 46142, 46180, 46181, 46190, 46552, 46637, 46638, 46639, 46640, 46667, 46986, 47060, 47061, 47116, 47118, 47119, 47121, 47133, 47147, 47154, 47155, 47156, 47174, 47434, 47581, 47582, 47584, 47586, 47587, 47588, 47589, 47644, 47655, 47661, 47663, 47665, 47688, 47844, 47875, 47927, 48075, 48273, 48274, 48275, 48318, 48321, 48874, 48883, 49038, 49573, 50083, 50084, 50440, 50441, 50442, 50443, 50445, 50463, 50546, 50548, 50549, 50550, 50551, 50552, 50553, 50668, 50670, 50674, 50676, 50678, 50683, 50684, 51257, 51309, 51310, 51323, 51334, 51346, 51348, 51371, 51372, 51383, 51384, 51429, 51450, 51451, 51468, 51471, 51472, 51473, 51474, 51475, 51476, 51478, 51507, 51508, 51509, 51510, 51511, 51513, 51514, 51515, 51516, 51517, 51518, 51519, 51520, 51521, 51522, 51523, 51524, 51525, 51532, 51533, 51534, 51535, 51536, 51537, 51538, 51539, 51540, 51541, 51542, 51543, 51544, 51545, 51546, 51547, 51548, 51549, 51554, 51605, 51610, 51732, 51768, 51769, 51770, 51771, 51772, 51773, 51774, 51775, 51776, 51777, 51778, 51779, 51780, 51781, 51782, 51783, 51784, 51785, 51786, 51789, 51790, 51791, 51792, 51793, 51794, 51795, 51796, 51797, 51798, 51799, 51800, 51801, 51802, 51803, 51804, 51805, 51806, 51807, 51808, 51809, 51810, 51811, 51812, 51813, 51814, 51815, 51816, 51817, 51818, 51819, 51820, 51821, 51822, 51823, 51824, 51825, 51827, 51828, 51829, 51830, 51831, 51832, 51834, 51835, 51837, 51838, 51839, 51840, 51841, 51842, 51843, 51844, 51845, 51846, 51847, 51848, 51849, 51850, 51851, 51852, 51853, 51854, 51855, 51856, 51857, 51858, 51859, 51860, 51861, 51862, 51863, 51864, 51867, 51868, 51869, 51870, 51871, 51872, 51873, 51874, 51875, 51876, 51877, 51878, 51879, 51880, 51881, 51882, 51883, 51884, 51885, 51886, 51887, 51888, 51889, 51890, 51891, 51892, 51893, 51894, 51895, 51896, 51897, 51898, 51899, 51900, 51901, 51902, 51903, 51904, 51905, 51906, 51907, 51908, 51909, 51910, 51911, 51912, 51913, 51914, 51915, 51916, 51917, 51918, 51919, 51920, 51921, 51922, 51923, 51924, 51925, 51986, 52009, 52010, 52011, 52012, 52013, 52018, 52060, 52084, 52184, 52280, 52404, 52410, 52646, 52670, 52753, 52817, 52821, 52983, 52996, 53000, 53008, 53352, 53562, 53563, 53598, 53783, 54208, 54209, 54334, 54345, 54346, 54392, 54393, 54441, 54442, 54443, 54471, 54472, 54473, 54502, 54509, 54519, 54523, 54524, 54548, 54601, 54788, 55003, 55382, 55396, 55402, 55568, 55577, 55578, 55657, 55660, 55778, 55779, 55805, 55810, 55842, 55844, 55860, 55861, 55904, 55996, 56041, 56737, 56771, 57287, 57288, 57289, 57473, 57474, 57475, 57629, 57630, 57800, 57801, 58505, 58612, 58770, 58782, 58784, 58788, 58792, 58816, 58855, 58877, 58912, 58913, 58914, 58929, 58934, 58939, 59048, 59317, 59471, 59595, 59596, 59604, 59654, 59658, 59812, 59922, 59923, 59952, 60152, 60969, 60971, 61744, 61745, 61759, 62334, 62824, 62913, 62926, 63351, 63357, 63364, 63372, 63373, 64044, 64045, 64519, 64573, 64574, 64586, 64587, 64615, 64709, 64728, 64729, 64732, 64733, 64734, 64735, 64736, 64923, 64956, 64957, 64997, 64998, 65138, 65232, 65236, 65237, 65238, 65239, 65240, 65241, 65474, 65494, 65507, 65510, 65548, 65549, 65610, 65611, 65643, 65654, 65680, 65785, 65786, 65801, 65807, 65863, 65865, 66666, 66913, 67013, 67014, 67149, 67150, 67195, 67196, 67197, 67198, 67199, 67200, 67260, 67267, 67418, 67754, 67785, 67790, 67796, 67923, 67944, 67945, 67965, 67987, 68008, 68053, 68054, 68216, 68226, 68293, 68323, 68363, 68364, 68365, 68372, 68403, 68404, 68405, 68406, 68408, 68424, 68425, 68678, 68764, 68765, 68767, 68768, 68792, 68794, 68979, 68980, 68981, 68982, 68990, 68991, 68992, 68994, 68995, 68996, 69359, 69360, 69422, 70085, 70086, 70087, 70088, 70354, 70381, 70498, 70643, 70690, 70705, 70706, 70741, 70824, 70877, 71111, 71112, 71210, 71246, 71265, 71280, 71302, 71303, 71340, 71358, 71359, 71369, 71487, 71490, 71491, 71589, 71718, 71719, 71794, 71837, 71972, 71973, 71974, 72005, 72038, 72366, 72376, 72422, 72423, 72424, 72425, 72501, 72515, 72559, 72570, 72614, 72774, 72886, 73082, 73120, 73121, 73122, 73343, 73361, 73362, 73385, 73386, 73600, 73602, 73664, 73811, 73818, 73820, 74219); +UPDATE `creature_template` SET `maxlevel`=0 WHERE `entry` IN (68, 309, 347, 352, 523, 603, 857, 907, 931, 1233, 1387, 1571, 1572, 1573, 1652, 1735, 1756, 1976, 2041, 2226, 2299, 2302, 2389, 2409, 2432, 2804, 2835, 2851, 2858, 2859, 2861, 2941, 2995, 3083, 3084, 3296, 3305, 3310, 3468, 3469, 3502, 3575, 3615, 3838, 3841, 3890, 4262, 4267, 4309, 4310, 4312, 4314, 4317, 4319, 4321, 4407, 4423, 4551, 4624, 5118, 5595, 5597, 5603, 5624, 6026, 6526, 6706, 6726, 7410, 7427, 7823, 7824, 7980, 8018, 8019, 8020, 8055, 8096, 8609, 8610, 8670, 8719, 9297, 9460, 9521, 9526, 9527, 10038, 10360, 10583, 10897, 11099, 11102, 11138, 11139, 11190, 11194, 11822, 11899, 11900, 11901, 11947, 11949, 11997, 11998, 12121, 12122, 12197, 12198, 12577, 12578, 12596, 12616, 12617, 12636, 12740, 13116, 13117, 13151, 13155, 13161, 13176, 13177, 13178, 13181, 13236, 13257, 13281, 13331, 13332, 13358, 13359, 13377, 13378, 13416, 13424, 13425, 13437, 13441, 13442, 13443, 13518, 13522, 13526, 13530, 13536, 13539, 13542, 13545, 13548, 13551, 13554, 13557, 13577, 13616, 13617, 13839, 14026, 14027, 14028, 14029, 14030, 14031, 14186, 14187, 14242, 14284, 14285, 14304, 14363, 14365, 14367, 14375, 14376, 14377, 14378, 14379, 14380, 14402, 14403, 14404, 14423, 14438, 14439, 14440, 14441, 14442, 14622, 14717, 14762, 14763, 14764, 14765, 14766, 14767, 14768, 14769, 14770, 14771, 14772, 14773, 14774, 14775, 14776, 14777, 14832, 14848, 14913, 14942, 14943, 14944, 14945, 14946, 14947, 14948, 14981, 14982, 15006, 15007, 15008, 15139, 15177, 15178, 15184, 15195, 15466, 15518, 15519, 15659, 15961, 16096, 16189, 16192, 16222, 16227, 16378, 16392, 16587, 16694, 16695, 16696, 16711, 16733, 16822, 17506, 17507, 17554, 17555, 17855, 18103, 18139, 18785, 18788, 18789, 18791, 18807, 18808, 18809, 18895, 18930, 18931, 18937, 18938, 18939, 18940, 18942, 18953, 18989, 19317, 19504, 19529, 19541, 19558, 19581, 19583, 19855, 19858, 19859, 19905, 19906, 19907, 19908, 19909, 19910, 19911, 19912, 19915, 19923, 19925, 20118, 20119, 20120, 20234, 20269, 20271, 20272, 20273, 20274, 20276, 20362, 20374, 20381, 20382, 20383, 20384, 20385, 20386, 20388, 20390, 20447, 20497, 20499, 20515, 20556, 20674, 20762, 21107, 21235, 21766, 21986, 22216, 22407, 22455, 22485, 22494, 22931, 22935, 22937, 23090, 23115, 23612, 23619, 23623, 23624, 23625, 23626, 23636, 23736, 23859, 24032, 24061, 24155, 24366, 24470, 24795, 24851, 25040, 25145, 25148, 25149, 25150, 25151, 25152, 25288, 25499, 25991, 26016, 26017, 26019, 26020, 26021, 26024, 26027, 26028, 26029, 26030, 26031, 26032, 26033, 26037, 26038, 26253, 26560, 26566, 26602, 26844, 26845, 26847, 26848, 26850, 26851, 26852, 26853, 26876, 26877, 26878, 26879, 26880, 26881, 27046, 27170, 27175, 27344, 27881, 27894, 27946, 27953, 28037, 28094, 28195, 28196, 28197, 28312, 28319, 28366, 28574, 28613, 28615, 28618, 28621, 28623, 28624, 28674, 28781, 28801, 28818, 28863, 28865, 29260, 29262, 29480, 29533, 29568, 29617, 29712, 29721, 29749, 29750, 29757, 29762, 29910, 29950, 29951, 30231, 30269, 30271, 30280, 30312, 30314, 30400, 30433, 30488, 30489, 30499, 30560, 30569, 30578, 30579, 30580, 30581, 30582, 30583, 30584, 30586, 30587, 30590, 30610, 30611, 30626, 30737, 30853, 30869, 30870, 31036, 31051, 31052, 31053, 31054, 31069, 31078, 31091, 31101, 31102, 31106, 31107, 31108, 31109, 31151, 31153, 31250, 31416, 31426, 31430, 31708, 31715, 31841, 31842, 32169, 32170, 32294, 32296, 32307, 32308, 32330, 32332, 32333, 32571, 32615, 32616, 32617, 32618, 32619, 32620, 32621, 32622, 32623, 32624, 32625, 32626, 32627, 32629, 33253, 33254, 33502, 33504, 33505, 33506, 33508, 33510, 33511, 33849, 34018, 34019, 34021, 34022, 34024, 34025, 34026, 34027, 34028, 34029, 34374, 34378, 34429, 34775, 34776, 34777, 34778, 34793, 34802, 34918, 34919, 34927, 34929, 34935, 34943, 34944, 34955, 34971, 34972, 34973, 34976, 34978, 34983, 34985, 34986, 34987, 34988, 34989, 34991, 34993, 34997, 34998, 34999, 35000, 35001, 35002, 35007, 35008, 35017, 35019, 35020, 35021, 35022, 35023, 35024, 35025, 35026, 35027, 35069, 35136, 35137, 35138, 35139, 35140, 35141, 35273, 35315, 35322, 35345, 35346, 35450, 35478, 35480, 35481, 35556, 35562, 35596, 35597, 35600, 35601, 35602, 35603, 35611, 35612, 35819, 36151, 36152, 36162, 36164, 36165, 36166, 36213, 36217, 36224, 36225, 36226, 36273, 36355, 36356, 36481, 36728, 37005, 37790, 37825, 37860, 37869, 37888, 37915, 37944, 38831, 39172, 39173, 39175, 39210, 39211, 39212, 39330, 39340, 39898, 39934, 40138, 40333, 40358, 40367, 40413, 40473, 40552, 40553, 40558, 40768, 40769, 40809, 40827, 40851, 40852, 40866, 40867, 40871, 40873, 40966, 41140, 41142, 41214, 41215, 41240, 41246, 41321, 41322, 41323, 41325, 41332, 41383, 41580, 41605, 41860, 41861, 41896, 42319, 42406, 42426, 42623, 42974, 42983, 43000, 43042, 43043, 43045, 43049, 43052, 43053, 43072, 43073, 43079, 43085, 43086, 43087, 43088, 43104, 43107, 43114, 43121, 43124, 43216, 43220, 43225, 43287, 43289, 43290, 43293, 43295, 43328, 43371, 43375, 43427, 43440, 43481, 43549, 43570, 43573, 43690, 43695, 43697, 43701, 43702, 43841, 43842, 43889, 43991, 44036, 44059, 44060, 44230, 44231, 44232, 44233, 44244, 44399, 44407, 44408, 44409, 44410, 44440, 44787, 44825, 44865, 44866, 44867, 44868, 44871, 44872, 44874, 44876, 44877, 44878, 45015, 45082, 45230, 45344, 45479, 45564, 45659, 45814, 45822, 45827, 45829, 46004, 46006, 46011, 46071, 46077, 46142, 46180, 46181, 46190, 46552, 46637, 46638, 46639, 46640, 46667, 46986, 47060, 47061, 47116, 47118, 47119, 47121, 47133, 47147, 47154, 47155, 47156, 47174, 47434, 47581, 47582, 47584, 47586, 47587, 47588, 47589, 47644, 47655, 47661, 47663, 47665, 47688, 47844, 47875, 47927, 48075, 48273, 48274, 48275, 48318, 48321, 48874, 48883, 49038, 49573, 50083, 50084, 50440, 50441, 50442, 50443, 50445, 50463, 50546, 50548, 50549, 50550, 50551, 50552, 50553, 50668, 50670, 50674, 50676, 50678, 50683, 50684, 51257, 51309, 51310, 51323, 51334, 51346, 51348, 51371, 51372, 51383, 51384, 51429, 51450, 51451, 51468, 51471, 51472, 51473, 51474, 51475, 51476, 51478, 51507, 51508, 51509, 51510, 51511, 51513, 51514, 51515, 51516, 51517, 51518, 51519, 51520, 51521, 51522, 51523, 51524, 51525, 51532, 51533, 51534, 51535, 51536, 51537, 51538, 51539, 51540, 51541, 51542, 51543, 51544, 51545, 51546, 51547, 51548, 51549, 51554, 51605, 51610, 51732, 51768, 51769, 51770, 51771, 51772, 51773, 51774, 51775, 51776, 51777, 51778, 51779, 51780, 51781, 51782, 51783, 51784, 51785, 51786, 51789, 51790, 51791, 51792, 51793, 51794, 51795, 51796, 51797, 51798, 51799, 51800, 51801, 51802, 51803, 51804, 51805, 51806, 51807, 51808, 51809, 51810, 51811, 51812, 51813, 51814, 51815, 51816, 51817, 51818, 51819, 51820, 51821, 51822, 51823, 51824, 51825, 51827, 51828, 51829, 51830, 51831, 51832, 51834, 51835, 51837, 51838, 51839, 51840, 51841, 51842, 51843, 51844, 51845, 51846, 51847, 51848, 51849, 51850, 51851, 51852, 51853, 51854, 51855, 51856, 51857, 51858, 51859, 51860, 51861, 51862, 51863, 51864, 51867, 51868, 51869, 51870, 51871, 51872, 51873, 51874, 51875, 51876, 51877, 51878, 51879, 51880, 51881, 51882, 51883, 51884, 51885, 51886, 51887, 51888, 51889, 51890, 51891, 51892, 51893, 51894, 51895, 51896, 51897, 51898, 51899, 51900, 51901, 51902, 51903, 51904, 51905, 51906, 51907, 51908, 51909, 51910, 51911, 51912, 51913, 51914, 51915, 51916, 51917, 51918, 51919, 51920, 51921, 51922, 51923, 51924, 51925, 51986, 52009, 52010, 52011, 52012, 52013, 52018, 52060, 52084, 52184, 52280, 52404, 52410, 52646, 52670, 52753, 52817, 52821, 52983, 52996, 53000, 53008, 53352, 53562, 53563, 53598, 53783, 54208, 54209, 54334, 54345, 54346, 54392, 54393, 54441, 54442, 54443, 54471, 54472, 54473, 54502, 54509, 54519, 54523, 54524, 54548, 54601, 54788, 55003, 55382, 55396, 55402, 55568, 55577, 55578, 55657, 55660, 55778, 55779, 55805, 55810, 55842, 55844, 55860, 55861, 55904, 55996, 56041, 56160, 56737, 56771, 57287, 57288, 57289, 57473, 57474, 57475, 57629, 57630, 57800, 57801, 58505, 58612, 58770, 58782, 58784, 58788, 58792, 58816, 58855, 58877, 58912, 58913, 58914, 58929, 58934, 58939, 59048, 59317, 59471, 59595, 59596, 59604, 59654, 59658, 59812, 59922, 59923, 59952, 60152, 60969, 60971, 61744, 61745, 61759, 62334, 62824, 62913, 62926, 63351, 63357, 63364, 63372, 63373, 64044, 64045, 64519, 64573, 64574, 64586, 64587, 64615, 64709, 64728, 64729, 64732, 64733, 64734, 64735, 64736, 64923, 64956, 64957, 64997, 64998, 65138, 65232, 65236, 65237, 65238, 65239, 65240, 65241, 65474, 65494, 65507, 65510, 65548, 65549, 65610, 65611, 65643, 65654, 65680, 65785, 65786, 65801, 65807, 65863, 65865, 66666, 66913, 67013, 67014, 67149, 67150, 67195, 67196, 67197, 67198, 67199, 67200, 67260, 67267, 67418, 67754, 67785, 67790, 67796, 67923, 67944, 67945, 67965, 67987, 68008, 68053, 68054, 68216, 68226, 68293, 68323, 68363, 68364, 68365, 68372, 68403, 68404, 68405, 68406, 68408, 68424, 68425, 68678, 68764, 68765, 68767, 68768, 68792, 68794, 68979, 68980, 68981, 68982, 68990, 68991, 68992, 68994, 68995, 68996, 69359, 69360, 69422, 70085, 70086, 70087, 70088, 70354, 70381, 70498, 70643, 70690, 70705, 70706, 70741, 70824, 70877, 71111, 71112, 71210, 71246, 71265, 71280, 71302, 71303, 71340, 71358, 71359, 71369, 71487, 71490, 71491, 71589, 71718, 71719, 71794, 71837, 71972, 71973, 71974, 72005, 72038, 72366, 72371, 72376, 72422, 72423, 72424, 72425, 72501, 72515, 72559, 72570, 72614, 72774, 72886, 73082, 73120, 73121, 73122, 73343, 73361, 73362, 73385, 73386, 73600, 73602, 73664, 73811, 73818, 73820, 74219); +UPDATE `creature_template` SET `minlevel`=1 WHERE `entry` IN (10985, 11946, 11948, 13139, 13140, 13152, 13153, 13154, 13256, 13318, 13319, 13320, 13356, 13357, 13419, 13421, 13422, 13446, 13449, 13496, 13519, 13523, 13527, 13531, 13597, 13598, 13959, 13977, 34922, 34924); +UPDATE `creature_template` SET `maxlevel`=1 WHERE `entry` IN (10985, 11946, 11948, 13139, 13140, 13152, 13153, 13154, 13256, 13318, 13319, 13320, 13356, 13357, 13419, 13421, 13422, 13446, 13449, 13496, 13519, 13523, 13527, 13531, 13597, 13598, 13797, 13798, 13959, 13977, 34922, 34924); + +UPDATE `creature_template` SET `minlevel`=-84, `maxlevel`=-84 WHERE `entry` IN (60226, 60227, 60228); +UPDATE `creature_template` SET `minlevel`=-8, `maxlevel`=-7 WHERE `entry` IN (10982, 10986, 10987, 10991, 11603, 11606, 11678, 13316, 13317, 13396, 13397, 76357); +UPDATE `creature_template` SET `minlevel`=-7, `maxlevel`=-6 WHERE `entry` IN (11600, 11604, 11675, 11837, 14282, 14283); +UPDATE `creature_template` SET `minlevel`=2, `maxlevel`=2 WHERE `entry` IN (11676, 12159, 23775); +UPDATE `creature_template` SET `minlevel`=3, `maxlevel`=3 WHERE `entry` IN (1284, 3936, 4968, 7999, 10181, 15088, 15193, 15467, 16800, 16801, 16802, 17468, 21984, 22522, 29611, 31146, 36648, 37058, 38966, 39605, 39656, 42129, 42131, 42317, 42928, 43845, 43867, 43931, 44441, 44451, 45042, 45111, 45250, 45253, 45382, 46236, 46717, 46757, 46833, 46844, 47718, 47736, 47745, 48546, 48572, 48736, 48738, 49420, 49533, 49809, 49820, 50043, 50369, 51355, 51571, 51666, 52700, 52767, 52792, 53518, 53537, 53649, 53657, 53660, 53663, 53667, 53669, 53676, 53736, 53755, 53905, 53956, 53957, 53958, 53959, 53960, 54131, 54132, 54168, 54226, 54260, 54297, 54300, 54301, 54302, 54306, 54313, 54344, 54499, 54611, 54631, 55148, 55150, 55189, 55561, 56730, 57164, 57205, 58336, 60219, 61138, 61170, 62087, 62092, 62163, 62742, 62808, 62827, 62841, 62911, 62912, 64402, 64526, 64529, 64560, 64564, 64565, 64600, 64629, 64727, 65227, 65228, 65539, 65540, 65659, 65660, 65661, 66154, 66155, 66156, 66458, 67560, 67580, 67581, 67840, 67864, 67867, 67947, 67953, 67968, 67973, 67989, 67992, 68003, 68023, 68025, 68059, 68072, 68084, 68085, 68086, 68088, 68108, 68144, 68223, 68235, 68236, 68237, 68242, 68278, 68287, 68315, 68329, 68336, 68339, 68357, 68370, 68392, 68399, 68429, 68496, 68514, 68538, 68544, 68567, 68568, 68569, 68570, 68571, 68572, 68573, 68575, 68586, 68589, 68590, 68592, 68593, 68609, 68631, 68633, 68634, 68637, 68642, 68643, 68644, 68645, 68651, 68652, 68677, 68679, 68689, 68690, 68749, 68777, 68842, 68882, 68920, 68921, 68922, 68924, 68930, 68941, 68955, 68966, 68970, 68972, 68975, 69026, 69797, 69799, 70131, 70132, 70245, 70362, 70363, 70370, 70371, 70799, 70978, 71042, 71147, 71148, 71149, 71151, 71177, 71249, 71250, 71344, 71592, 71992, 72302, 72311, 72392, 72394, 72560, 72561, 73554, 73558, 73709, 73710, 73909, 73910, 73927, 73941, 73942, 73957, 73962, 74217); +UPDATE `creature_template` SET `minlevel`=5, `maxlevel`=5 WHERE `entry` IN (3210, 3211, 3213, 3214, 5952, 7975, 12160, 15371, 16921, 38217, 38898, 38899, 39196, 42316); diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp index 51669deef9d..2d3751ccd9e 100644 --- a/src/server/game/DataStores/DB2Stores.cpp +++ b/src/server/game/DataStores/DB2Stores.cpp @@ -52,6 +52,7 @@ TaxiMask sAllianceTaxiNodesMask; TaxiMask sDeathKnightTaxiNodesMask; TaxiPathSetBySource sTaxiPathSetBySource; TaxiPathNodesByPath sTaxiPathNodesByPath; +PhaseGroupContainer sPhasesByGroup; typedef std::list<std::string> DB2StoreProblemList; @@ -142,6 +143,11 @@ void LoadDB2Stores(std::string const& dataPath) LoadDB2(availableDb2Locales, bad_db2_files, sTaxiNodesStore, db2Path, "TaxiNodes.db2"); LoadDB2(availableDb2Locales, bad_db2_files, sTaxiPathStore, db2Path, "TaxiPath.db2"); LoadDB2(availableDb2Locales, bad_db2_files, sTaxiPathNodeStore, db2Path, "TaxiPathNode.db2"); + + for (uint32 i = 0; i < sPhaseGroupStore.GetNumRows(); ++i) + if (PhaseGroupEntry const* group = sPhaseGroupStore.LookupEntry(i)) + if (PhaseEntry const* phase = sPhaseStore.LookupEntry(group->PhaseID)) + sPhasesByGroup[group->PhaseGroupID].insert(phase->ID); for (uint32 i = 0; i < sItemAppearanceStore.GetNumRows(); ++i) if (ItemAppearanceEntry const* entry = sItemAppearanceStore.LookupEntry(i)) @@ -277,3 +283,8 @@ uint32 GetItemDisplayID(uint32 appearanceID) return itr->second; return 0; } + +std::set<uint32> const& GetPhasesForGroup(uint32 group) +{ + return sPhasesByGroup[group]; +} diff --git a/src/server/game/DataStores/DB2Stores.h b/src/server/game/DataStores/DB2Stores.h index 29fe93ce2b1..4294636b138 100644 --- a/src/server/game/DataStores/DB2Stores.h +++ b/src/server/game/DataStores/DB2Stores.h @@ -59,4 +59,6 @@ DB2StorageBase const* GetDB2Storage(uint32 type); uint32 GetItemDisplayID(uint32 appearanceID); +std::set<uint32> const& GetPhasesForGroup(uint32 group); + #endif diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h index 249f95d80e4..e720017b09d 100644 --- a/src/server/game/DataStores/DB2Structure.h +++ b/src/server/game/DataStores/DB2Structure.h @@ -95,7 +95,7 @@ struct ItemSparseEntry { uint32 ID; // 0 uint32 Quality; // 1 - uint32 Flags[3]; // 2-4 + uint32 Flags[MAX_ITEM_PROTO_FLAGS]; // 2-4 float Unk1; // 5 float Unk2; // 6 uint32 BuyCount; // 7 @@ -379,4 +379,5 @@ typedef std::vector<TaxiPathNodeList> TaxiPathNodesByPath; #define TaxiMaskSize 114 typedef uint8 TaxiMask[TaxiMaskSize]; -#endif
\ No newline at end of file +typedef std::unordered_map<uint32, std::set<uint32>> PhaseGroupContainer; +#endif diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp index 2f5f3f9159d..cc85b56615b 100644 --- a/src/server/game/DataStores/DBCStores.cpp +++ b/src/server/game/DataStores/DBCStores.cpp @@ -17,7 +17,6 @@ */ #include "DBCStores.h" -#include "DB2Stores.h" #include "Containers.h" #include "Log.h" #include "SharedDefines.h" @@ -238,8 +237,6 @@ DBCStorage <WorldMapOverlayEntry> sWorldMapOverlayStore(WorldMapOverlayEntryfmt) DBCStorage <WorldSafeLocsEntry> sWorldSafeLocsStore(WorldSafeLocsEntryfmt); DBCStorage <PhaseEntry> sPhaseStore(PhaseEntryfmt); -PhaseGroupContainer sPhasesByGroup; - typedef std::list<std::string> StoreProblemList; uint32 DBCFileCount = 0; @@ -487,11 +484,6 @@ void LoadDBCStores(const std::string& dataPath) LoadDBC(availableDbcLocales, bad_dbc_files, sPhaseStore, dbcPath, "Phase.dbc"); // 19116 - for (uint32 i = 0; i < sPhaseGroupStore.GetNumRows(); ++i) - if (PhaseGroupEntry const* group = sPhaseGroupStore.LookupEntry(i)) - if (PhaseEntry const* phase = sPhaseStore.LookupEntry(group->PhaseID)) - sPhasesByGroup[group->PhaseGroupID].insert(phase->ID); - LoadDBC(availableDbcLocales, bad_dbc_files, sPowerDisplayStore, dbcPath, "PowerDisplay.dbc");//19116 LoadDBC(availableDbcLocales, bad_dbc_files, sPvPDifficultyStore, dbcPath, "PvpDifficulty.dbc");//19116 @@ -1214,11 +1206,6 @@ SkillRaceClassInfoEntry const* GetSkillRaceClassInfo(uint32 skill, uint8 race, u return NULL; } -std::set<uint32> const& GetPhasesForGroup(uint32 group) -{ - return sPhasesByGroup[group]; -} - uint32 GetClassBySkillId(uint32 skillId) { ClassBySkillIdStore::const_iterator iter = sClassBySkillIdStore.find(skillId); diff --git a/src/server/game/DataStores/DBCStores.h b/src/server/game/DataStores/DBCStores.h index a631a471eb4..a6ecadfaf45 100644 --- a/src/server/game/DataStores/DBCStores.h +++ b/src/server/game/DataStores/DBCStores.h @@ -89,8 +89,6 @@ LFGDungeonEntry const* GetLFGDungeon(uint32 mapId, Difficulty difficulty); uint32 GetDefaultMapLight(uint32 mapId); -std::set<uint32> const& GetPhasesForGroup(uint32 group); - typedef std::unordered_multimap<uint32, SkillRaceClassInfoEntry const*> SkillRaceClassInfoMap; typedef std::pair<SkillRaceClassInfoMap::iterator, SkillRaceClassInfoMap::iterator> SkillRaceClassInfoBounds; SkillRaceClassInfoEntry const* GetSkillRaceClassInfo(uint32 skill, uint8 race, uint8 class_); diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h index 4a58428abb1..ee168f2349f 100644 --- a/src/server/game/DataStores/DBCStructure.h +++ b/src/server/game/DataStores/DBCStructure.h @@ -647,7 +647,7 @@ struct BarberShopStyleEntry struct BattlemasterListEntry { uint32 ID; // 0 - uint32 MapID[16]; // 1-16 mapid + int32 MapID[16]; // 1-16 mapid uint32 InstanceType; // 17 map type (3 - BG, 4 - arena) //uint32 GroupsAllowed; // 18 (0 or 1) char* Name_lang; // 19 @@ -2384,6 +2384,4 @@ struct MapDifficulty }; typedef std::map<uint32, uint32> TalentSpellPosMap; - -typedef std::unordered_map<uint32, std::set<uint32>> PhaseGroupContainer; #endif diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 05405d6eddb..3cbe4057106 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -298,10 +298,10 @@ bool Creature::InitEntry(uint32 entry, CreatureData const* data /*= nullptr*/) m_creatureInfo = cinfo; // map mode related always // equal to player Race field, but creature does not have race - SetByteValue(UNIT_FIELD_BYTES_0, 0, 0); + SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_RACE, 0); // known valid are: CLASS_WARRIOR, CLASS_PALADIN, CLASS_ROGUE, CLASS_MAGE - SetByteValue(UNIT_FIELD_BYTES_0, 1, uint8(cinfo->unit_class)); + SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, uint8(cinfo->unit_class)); // Cancel load if no model defined if (!(cinfo->GetFirstValidModelId())) @@ -320,7 +320,7 @@ bool Creature::InitEntry(uint32 entry, CreatureData const* data /*= nullptr*/) SetDisplayId(displayID); SetNativeDisplayId(displayID); - SetByteValue(UNIT_FIELD_BYTES_0, 2, minfo->gender); + SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, minfo->gender); // Load creature equipment if (!data || data->equipmentId == 0) @@ -805,7 +805,7 @@ bool Creature::Create(ObjectGuid::LowType guidlow, Map* map, uint32 /*phaseMask* { SetDisplayId(displayID); SetNativeDisplayId(displayID); - SetByteValue(UNIT_FIELD_BYTES_0, 2, minfo->gender); + SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, minfo->gender); } LastUsedScriptID = GetCreatureTemplate()->ScriptID; @@ -1560,7 +1560,7 @@ void Creature::Respawn(bool force) { SetDisplayId(displayID); SetNativeDisplayId(displayID); - SetByteValue(UNIT_FIELD_BYTES_0, 2, minfo->gender); + SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, minfo->gender); } GetMotionMaster()->InitDefault(); diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 523a2eb2f4d..e9212b50933 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -88,9 +88,9 @@ struct CreatureTemplate std::string SubName; std::string IconName; uint32 GossipMenuId; - uint8 minlevel; - uint8 maxlevel; - uint32 expansion; + int16 minlevel; + int16 maxlevel; + int32 expansion; uint32 expansionUnknown; // either 0 or 3, sent to the client / wdb uint32 faction; uint32 npcflag; diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 7091901c229..382bf45052b 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -2150,7 +2150,7 @@ void GameObject::SetTransportState(GOState state, uint32 stopFrame /*= 0*/) } else { - ASSERT(state < GO_STATE_TRANSPORT_STOPPED + MAX_GO_STATE_TRANSPORT_STOP_FRAMES); + ASSERT(state < GOState(GO_STATE_TRANSPORT_STOPPED + MAX_GO_STATE_TRANSPORT_STOP_FRAMES)); ASSERT(stopFrame < m_goValue.Transport.StopFrames->size()); m_goValue.Transport.PathProgress = getMSTime() + m_goValue.Transport.StopFrames->at(stopFrame); SetGoState(GOState(GO_STATE_TRANSPORT_STOPPED + stopFrame)); diff --git a/src/server/game/Entities/Item/ItemPrototype.h b/src/server/game/Entities/Item/ItemPrototype.h index fe6051b4f9c..3846f7dd642 100644 --- a/src/server/game/Entities/Item/ItemPrototype.h +++ b/src/server/game/Entities/Item/ItemPrototype.h @@ -598,7 +598,7 @@ struct ItemEffect { uint32 SpellID; uint32 Trigger; - uint32 Charges; + int32 Charges; int32 Cooldown; uint32 Category; int32 CategoryCooldown; diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index 52045f46472..bc08e8b1baf 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -214,18 +214,15 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c { case SUMMON_PET: petlevel = owner->getLevel(); - - SetUInt32Value(UNIT_FIELD_BYTES_0, 0x800); // class = mage - SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); - // this enables popup window (pet dismiss, cancel) + SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, CLASS_MAGE); + SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); // this enables popup window (pet dismiss, cancel) break; case HUNTER_PET: - SetUInt32Value(UNIT_FIELD_BYTES_0, 0x02020100); // class = warrior, gender = none, power = focus + SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, CLASS_WARRIOR); + SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, GENDER_NONE); SetSheath(SHEATH_STATE_MELEE); SetByteFlag(UNIT_FIELD_BYTES_2, 2, fields[9].GetBool() ? UNIT_CAN_BE_ABANDONED : UNIT_CAN_BE_RENAMED | UNIT_CAN_BE_ABANDONED); - - SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); - // this enables popup window (pet abandon, cancel) + SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); // this enables popup window (pet abandon, cancel) setPowerType(POWER_FOCUS); break; default: @@ -782,7 +779,9 @@ bool Pet::CreateBaseAtTamed(CreatureTemplate const* cinfo, Map* map, uint32 phas if (cinfo->type == CREATURE_TYPE_BEAST) { - SetUInt32Value(UNIT_FIELD_BYTES_0, 0x02020100); + SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, CLASS_WARRIOR); + SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, GENDER_NONE); + SetUInt32Value(UNIT_FIELD_DISPLAY_POWER, POWER_FOCUS); SetSheath(SHEATH_STATE_MELEE); SetByteFlag(UNIT_FIELD_BYTES_2, 2, UNIT_CAN_BE_RENAMED | UNIT_CAN_BE_ABANDONED); } diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 7c7f0bb976e..52fb39993d2 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -985,9 +985,10 @@ bool Player::Create(ObjectGuid::LowType guidlow, WorldPackets::Character::Charac return false; } - uint32 RaceClassGender = (createInfo->Race) | (createInfo->Class << 8) | (createInfo->Sex << 16); - - SetUInt32Value(UNIT_FIELD_BYTES_0, (RaceClassGender | (powertype << 24))); + SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_RACE, createInfo->Race); + SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, createInfo->Class); + SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, createInfo->Sex); + SetUInt32Value(UNIT_FIELD_DISPLAY_POWER, powertype); InitDisplayIds(); if (sWorld->getIntConfig(CONFIG_GAME_TYPE) == REALM_TYPE_PVP || sWorld->getIntConfig(CONFIG_GAME_TYPE) == REALM_TYPE_RPPVP) { @@ -4896,7 +4897,7 @@ void Player::CreateCorpse() // prevent existence 2 corpse for player SpawnCorpseBones(); - uint32 _uf, _pb, _pb2, _cfb1, _cfb2; + uint32 _pb, _pb2, _cfb1, _cfb2; Corpse* corpse = new Corpse((m_ExtraFlags & PLAYER_EXTRA_PVP_DEATH) ? CORPSE_RESURRECTABLE_PVP : CORPSE_RESURRECTABLE_PVE); SetPvPDeath(false); @@ -4907,18 +4908,16 @@ void Player::CreateCorpse() return; } - _uf = GetUInt32Value(UNIT_FIELD_BYTES_0); _pb = GetUInt32Value(PLAYER_BYTES); _pb2 = GetUInt32Value(PLAYER_BYTES_2); - uint8 race = (uint8)(_uf); uint8 skin = (uint8)(_pb); uint8 face = (uint8)(_pb >> 8); uint8 hairstyle = (uint8)(_pb >> 16); uint8 haircolor = (uint8)(_pb >> 24); uint8 facialhair = (uint8)(_pb2); - _cfb1 = ((0x00) | (race << 8) | (getGender() << 16) | (skin << 24)); + _cfb1 = ((0x00) | (getRace() << 8) | (getGender() << 16) | (skin << 24)); _cfb2 = ((face) | (hairstyle << 8) | (haircolor << 16) | (facialhair << 24)); corpse->SetUInt32Value(CORPSE_FIELD_BYTES_1, _cfb1); @@ -9516,6 +9515,16 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid) data << uint32(4131) << uint32(0); // 10 WORLDSTATE_ALGALON_DESPAWN_TIMER } break; + // Halls of Refection + case 4820: + if (instance && mapid == 668) + instance->FillInitialWorldStates(data); + else + { + data << uint32(4884) << uint32(0); // 9 WORLD_STATE_HOR_WAVES_ENABLED + data << uint32(4882) << uint32(0); // 10 WORLD_STATE_HOR_WAVE_COUNT + } + break; // Zul Aman case 3805: if (instance && mapid == 568) @@ -9550,20 +9559,7 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid) // Wintergrasp case 4197: if (bf && bf->GetTypeId() == BATTLEFIELD_WG) - { bf->FillInitialWorldStates(data); - break; - } - // Halls of Refection - case 4820: - if (instance && mapid == 668) - instance->FillInitialWorldStates(data); - else - { - data << uint32(4884) << uint32(0); // 9 WORLD_STATE_HOR_WAVES_ENABLED - data << uint32(4882) << uint32(0); // 10 WORLD_STATE_HOR_WAVE_COUNT - } - break; // No break here, intended. default: data << uint32(0x914) << uint32(0x0); // 7 @@ -16950,12 +16946,9 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) return false; } - // overwrite some data fields - uint32 bytes0 = 0; - bytes0 |= fields[3].GetUInt8(); // race - bytes0 |= fields[4].GetUInt8() << 8; // class - bytes0 |= gender << 16; // gender - SetUInt32Value(UNIT_FIELD_BYTES_0, bytes0); + SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_RACE, fields[3].GetUInt8()); + SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, fields[4].GetUInt8()); + SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, gender); // check if race/class combination is valid PlayerInfo const* info = sObjectMgr->GetPlayerInfo(getRace(), getClass()); @@ -26795,7 +26788,7 @@ Pet* Player::SummonPet(uint32 entry, float x, float y, float z, float ang, PetTy case SUMMON_PET: // this enables pet details window (Shift+P) pet->GetCharmInfo()->SetPetNumber(pet_number, true); - pet->SetUInt32Value(UNIT_FIELD_BYTES_0, 2048); + pet->SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, CLASS_MAGE); pet->SetUInt32Value(UNIT_FIELD_PETEXPERIENCE, 0); pet->SetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP, 1000); pet->SetFullHealth(); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 21360909108..5fbc6e7632c 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -7027,7 +7027,7 @@ void Unit::setPowerType(Powers new_powertype) if (getPowerType() == new_powertype) return; - SetByteValue(UNIT_FIELD_BYTES_0, 3, new_powertype); + SetUInt32Value(UNIT_FIELD_DISPLAY_POWER, new_powertype); if (GetTypeId() == TYPEID_PLAYER) { @@ -10578,6 +10578,7 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced) propagateSpeedChange(); + // Spline packets are for creatures and move_update are for players static OpcodeServer const moveTypeToOpcode[MAX_MOVE_TYPE][3] = { {SMSG_SPLINE_MOVE_SET_WALK_SPEED, SMSG_MOVE_SET_WALK_SPEED, SMSG_MOVE_UPDATE_WALK_SPEED }, @@ -10604,16 +10605,22 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced) if (GetTypeId() == TYPEID_PLAYER && ToPlayer()->m_mover->GetTypeId() == TYPEID_PLAYER) { - /// @todo fix SMSG_MOVE_SET packets (were they removed?) - //_selfOpcode = playerControl; - WorldPackets::Movement::MoveUpdate packet(moveTypeToOpcode[mtype][2]); - packet.movementInfo = m_movementInfo; + // Send notification to self + WorldPackets::Movement::MoveSetSpeed selfpacket(moveTypeToOpcode[mtype][1]); + selfpacket.MoverGUID = GetGUID(); + selfpacket.SequenceIndex = m_movementCounter++; + selfpacket.Speed = rate; + ToPlayer()->GetSession()->SendPacket(selfpacket.Write()); + + // Send notification to other players + WorldPackets::Movement::MoveUpdateSpeed packet(moveTypeToOpcode[mtype][2]); + packet.movementInfo = &m_movementInfo; packet.Speed = rate; SendMessageToSet(packet.Write(), false); } else { - WorldPackets::Movement::MoveSplineSet packet(moveTypeToOpcode[mtype][0]); + WorldPackets::Movement::MoveSplineSetSpeed packet(moveTypeToOpcode[mtype][0]); packet.MoverGUID = GetGUID(); packet.Speed = rate; SendMessageToSet(packet.Write(), true); @@ -14138,7 +14145,7 @@ bool Unit::SetCharmedBy(Unit* charmer, CharmType type, AuraApplication const* au if (cinfo && cinfo->type == CREATURE_TYPE_DEMON) { // to prevent client crash - SetByteValue(UNIT_FIELD_BYTES_0, 1, (uint8)CLASS_MAGE); + SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, (uint8)CLASS_MAGE); // just to enable stat window if (GetCharmInfo()) @@ -14240,7 +14247,7 @@ void Unit::RemoveCharmedBy(Unit* charmer) CreatureTemplate const* cinfo = ToCreature()->GetCreatureTemplate(); if (cinfo && cinfo->type == CREATURE_TYPE_DEMON) { - SetByteValue(UNIT_FIELD_BYTES_0, 1, uint8(cinfo->unit_class)); + SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, uint8(cinfo->unit_class)); if (GetCharmInfo()) GetCharmInfo()->SetPetNumber(0, true); else @@ -15665,61 +15672,26 @@ void Unit::SendTeleportPacket(Position& pos) ObjectGuid guid = GetGUID(); ObjectGuid transGuid = GetTransGUID(); - WorldPacket data(SMSG_MOVE_UPDATE_TELEPORT, 38); - WriteMovementInfo(data); + WorldPackets::Movement::MoveUpdateTeleport packet; + packet.movementInfo = &m_movementInfo; if (GetTypeId() == TYPEID_PLAYER) { - WorldPacket data2(SMSG_MOVE_TELEPORT, 38); - data2.WriteBit(guid[6]); - data2.WriteBit(guid[0]); - data2.WriteBit(guid[3]); - data2.WriteBit(guid[2]); - data2.WriteBit(0); // unknown - data2.WriteBit(!transGuid.IsEmpty()); - data2.WriteBit(guid[1]); + WorldPackets::Movement::MoveTeleport selfPacket; + + selfPacket.MoverGUID = guid; + if (!transGuid.IsEmpty()) { - data2.WriteBit(transGuid[1]); - data2.WriteBit(transGuid[3]); - data2.WriteBit(transGuid[2]); - data2.WriteBit(transGuid[5]); - data2.WriteBit(transGuid[0]); - data2.WriteBit(transGuid[7]); - data2.WriteBit(transGuid[6]); - data2.WriteBit(transGuid[4]); + selfPacket.TransportGUID.Value = transGuid; + selfPacket.TransportGUID.HasValue = true; } - data2.WriteBit(guid[4]); - data2.WriteBit(guid[7]); - data2.WriteBit(guid[5]); - data2.FlushBits(); - if (!transGuid.IsEmpty()) - { - data2.WriteByteSeq(transGuid[6]); - data2.WriteByteSeq(transGuid[5]); - data2.WriteByteSeq(transGuid[1]); - data2.WriteByteSeq(transGuid[7]); - data2.WriteByteSeq(transGuid[0]); - data2.WriteByteSeq(transGuid[2]); - data2.WriteByteSeq(transGuid[4]); - data2.WriteByteSeq(transGuid[3]); - } - - data2 << uint32(0); // counter - data2.WriteByteSeq(guid[1]); - data2.WriteByteSeq(guid[2]); - data2.WriteByteSeq(guid[3]); - data2.WriteByteSeq(guid[5]); - data2 << float(GetPositionX()); - data2.WriteByteSeq(guid[4]); - data2 << float(GetOrientation()); - data2.WriteByteSeq(guid[7]); - data2 << float(GetPositionZMinusOffset()); - data2.WriteByteSeq(guid[0]); - data2.WriteByteSeq(guid[6]); - data2 << float(GetPositionY()); - ToPlayer()->SendDirectMessage(&data2); // Send the MSG_MOVE_TELEPORT packet to self. + selfPacket.Pos.Relocate(GetPositionX(), GetPositionY(), GetPositionZMinusOffset()); + selfPacket.Facing = GetOrientation(); + selfPacket.SequenceIndex = m_movementCounter++; + + ToPlayer()->SendDirectMessage(selfPacket.Write()); } // Relocate the player/creature to its old position, so we can broadcast to nearby players correctly @@ -15729,7 +15701,7 @@ void Unit::SendTeleportPacket(Position& pos) Relocate(&oldPos); // Broadcast the packet to everyone except self. - SendMessageToSet(&data, false); + SendMessageToSet(packet.Write(), false); } bool Unit::UpdatePosition(float x, float y, float z, float orientation, bool teleport) @@ -16122,10 +16094,27 @@ bool Unit::SetDisableGravity(bool disable, bool packetOnly /*= false*/) } } - if (disable) - Movement::PacketSender(this, SMSG_SPLINE_MOVE_GRAVITY_DISABLE, SMSG_MOVE_GRAVITY_DISABLE).Send(); + static OpcodeServer const gravityOpcodeTable[2][2] = + { + {SMSG_SPLINE_MOVE_GRAVITY_ENABLE, SMSG_MOVE_GRAVITY_ENABLE }, + {SMSG_SPLINE_MOVE_GRAVITY_DISABLE, SMSG_MOVE_GRAVITY_DISABLE } + }; + + bool player = GetTypeId() == TYPEID_PLAYER && ToPlayer()->m_mover->GetTypeId() == TYPEID_PLAYER; + + if (player) + { + WorldPackets::Movement::MoveSetFlag packet(gravityOpcodeTable[disable][1]); + packet.MoverGUID = GetGUID(); + packet.SequenceIndex = m_movementCounter++; + SendMessageToSet(packet.Write(), true); + } else - Movement::PacketSender(this, SMSG_SPLINE_MOVE_GRAVITY_ENABLE, SMSG_MOVE_GRAVITY_ENABLE).Send(); + { + WorldPackets::Movement::MoveSplineSetFlag packet(gravityOpcodeTable[disable][0]); + packet.MoverGUID = GetGUID(); + SendMessageToSet(packet.Write(), true); + } return true; } @@ -16156,10 +16145,11 @@ bool Unit::SetSwim(bool enable) else RemoveUnitMovementFlag(MOVEMENTFLAG_SWIMMING); - if (enable) - Movement::PacketSender(this, SMSG_SPLINE_MOVE_START_SWIM, static_cast<OpcodeServer>(NULL_OPCODE)).Send(); - else - Movement::PacketSender(this, SMSG_SPLINE_MOVE_STOP_SWIM, static_cast<OpcodeServer>(NULL_OPCODE)).Send(); + static OpcodeServer const swimOpcodeTable[2] = {SMSG_SPLINE_MOVE_STOP_SWIM, SMSG_SPLINE_MOVE_START_SWIM}; + + WorldPackets::Movement::MoveSplineSetFlag packet(swimOpcodeTable[enable]); + packet.MoverGUID = GetGUID(); + SendMessageToSet(packet.Write(), true); return true; } @@ -16182,10 +16172,27 @@ bool Unit::SetCanFly(bool enable) SetFall(true); } - if (enable) - Movement::PacketSender(this, SMSG_SPLINE_MOVE_SET_FLYING, SMSG_MOVE_SET_CAN_FLY).Send(); + static OpcodeServer const flyOpcodeTable[2][2] = + { + {SMSG_SPLINE_MOVE_UNSET_FLYING, SMSG_MOVE_UNSET_CAN_FLY }, + {SMSG_SPLINE_MOVE_SET_FLYING, SMSG_MOVE_SET_CAN_FLY } + }; + + bool player = GetTypeId() == TYPEID_PLAYER && ToPlayer()->m_mover->GetTypeId() == TYPEID_PLAYER; + + if (player) + { + WorldPackets::Movement::MoveSetFlag packet(flyOpcodeTable[enable][1]); + packet.MoverGUID = GetGUID(); + packet.SequenceIndex = m_movementCounter++; + SendMessageToSet(packet.Write(), true); + } else - Movement::PacketSender(this, SMSG_SPLINE_MOVE_UNSET_FLYING, SMSG_MOVE_UNSET_CAN_FLY).Send(); + { + WorldPackets::Movement::MoveSplineSetFlag packet(flyOpcodeTable[enable][0]); + packet.MoverGUID = GetGUID(); + SendMessageToSet(packet.Write(), true); + } return true; } @@ -16203,10 +16210,27 @@ bool Unit::SetWaterWalking(bool enable, bool packetOnly /*= false */) RemoveUnitMovementFlag(MOVEMENTFLAG_WATERWALKING); } - if (enable) - Movement::PacketSender(this, SMSG_SPLINE_MOVE_SET_WATER_WALK, SMSG_MOVE_WATER_WALK).Send(); + static OpcodeServer const waterWalkingOpcodeTable[2][2] = + { + {SMSG_SPLINE_MOVE_SET_LAND_WALK, SMSG_MOVE_LAND_WALK }, + {SMSG_SPLINE_MOVE_SET_WATER_WALK, SMSG_MOVE_WATER_WALK} + }; + + bool player = GetTypeId() == TYPEID_PLAYER && ToPlayer()->m_mover->GetTypeId() == TYPEID_PLAYER; + + if (player) + { + WorldPackets::Movement::MoveSetFlag packet(waterWalkingOpcodeTable[enable][1]); + packet.MoverGUID = GetGUID(); + packet.SequenceIndex = m_movementCounter++; + SendMessageToSet(packet.Write(), true); + } else - Movement::PacketSender(this, SMSG_SPLINE_MOVE_SET_LAND_WALK, SMSG_MOVE_LAND_WALK).Send(); + { + WorldPackets::Movement::MoveSplineSetFlag packet(waterWalkingOpcodeTable[enable][0]); + packet.MoverGUID = GetGUID(); + SendMessageToSet(packet.Write(), true); + } return true; } @@ -16224,10 +16248,27 @@ bool Unit::SetFeatherFall(bool enable, bool packetOnly /*= false */) RemoveUnitMovementFlag(MOVEMENTFLAG_FALLING_SLOW); } - if (enable) - Movement::PacketSender(this, SMSG_SPLINE_MOVE_SET_FEATHER_FALL, SMSG_MOVE_FEATHER_FALL).Send(); + static OpcodeServer const featherFallOpcodeTable[2][2] = + { + {SMSG_SPLINE_MOVE_SET_NORMAL_FALL, SMSG_MOVE_NORMAL_FALL }, + {SMSG_SPLINE_MOVE_SET_FEATHER_FALL, SMSG_MOVE_FEATHER_FALL } + }; + + bool player = GetTypeId() == TYPEID_PLAYER && ToPlayer()->m_mover->GetTypeId() == TYPEID_PLAYER; + + if (player) + { + WorldPackets::Movement::MoveSetFlag packet(featherFallOpcodeTable[enable][1]); + packet.MoverGUID = GetGUID(); + packet.SequenceIndex = m_movementCounter++; + SendMessageToSet(packet.Write(), true); + } else - Movement::PacketSender(this, SMSG_SPLINE_MOVE_SET_NORMAL_FALL, SMSG_MOVE_NORMAL_FALL).Send(); + { + WorldPackets::Movement::MoveSplineSetFlag packet(featherFallOpcodeTable[enable][0]); + packet.MoverGUID = GetGUID(); + SendMessageToSet(packet.Write(), true); + } return true; } @@ -16260,10 +16301,27 @@ bool Unit::SetHover(bool enable, bool packetOnly /*= false*/) } } - if (enable) - Movement::PacketSender(this, SMSG_SPLINE_MOVE_SET_HOVER, SMSG_MOVE_SET_HOVER).Send(); + static OpcodeServer const hoverOpcodeTable[2][2] = + { + {SMSG_SPLINE_MOVE_UNSET_HOVER, SMSG_MOVE_UNSET_HOVER }, + {SMSG_SPLINE_MOVE_SET_HOVER, SMSG_MOVE_SET_HOVER } + }; + + bool player = GetTypeId() == TYPEID_PLAYER && ToPlayer()->m_mover->GetTypeId() == TYPEID_PLAYER; + + if (player) + { + WorldPackets::Movement::MoveSetFlag packet(hoverOpcodeTable[enable][1]); + packet.MoverGUID = GetGUID(); + packet.SequenceIndex = m_movementCounter++; + SendMessageToSet(packet.Write(), true); + } else - Movement::PacketSender(this, SMSG_SPLINE_MOVE_UNSET_HOVER, SMSG_MOVE_UNSET_HOVER).Send(); + { + WorldPackets::Movement::MoveSplineSetFlag packet(hoverOpcodeTable[enable][0]); + packet.MoverGUID = GetGUID(); + SendMessageToSet(packet.Write(), true); + } return true; } diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 120eef7ae51..95dfcc431f9 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -221,6 +221,13 @@ enum UnitStandFlags UNIT_STAND_FLAGS_ALL = 0xFF }; +enum UnitBytes0Offsets +{ + UNIT_BYTES_0_OFFSET_RACE = 0, + UNIT_BYTES_0_OFFSET_CLASS = 1, + UNIT_BYTES_0_OFFSET_GENDER = 3, +}; + // byte flags value (UNIT_FIELD_BYTES_1, 3) enum UnitBytes1_Flags { @@ -1403,11 +1410,11 @@ class Unit : public WorldObject uint8 getLevel() const { return uint8(GetUInt32Value(UNIT_FIELD_LEVEL)); } uint8 getLevelForTarget(WorldObject const* /*target*/) const override { return getLevel(); } void SetLevel(uint8 lvl); - uint8 getRace() const { return GetByteValue(UNIT_FIELD_BYTES_0, 0); } + uint8 getRace() const { return GetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_RACE); } uint32 getRaceMask() const { return 1 << (getRace()-1); } - uint8 getClass() const { return GetByteValue(UNIT_FIELD_BYTES_0, 1); } + uint8 getClass() const { return GetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS); } uint32 getClassMask() const { return 1 << (getClass()-1); } - uint8 getGender() const { return GetByteValue(UNIT_FIELD_BYTES_0, 2); } + uint8 getGender() const { return GetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER); } float GetStat(Stats stat) const { return float(GetUInt32Value(UNIT_FIELD_STAT+stat)); } void SetStat(Stats stat, int32 val) { SetStatInt32Value(UNIT_FIELD_STAT+stat, val); } @@ -1436,7 +1443,7 @@ class Unit : public WorldObject int32 ModifyHealth(int32 val); int32 GetHealthGain(int32 dVal); - Powers getPowerType() const { return Powers(GetByteValue(UNIT_FIELD_BYTES_0, 3)); } + Powers getPowerType() const { return Powers(GetUInt32Value(UNIT_FIELD_DISPLAY_POWER)); } void setPowerType(Powers power); int32 GetPower(Powers power) const; int32 GetMinPower(Powers power) const { return power == POWER_ECLIPSE ? -100 : 0; } diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 040c9600852..4858800b3d2 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -482,8 +482,8 @@ void ObjectMgr::LoadCreatureTemplate(Field* fields) creatureTemplate.SubName = fields[12].GetString(); creatureTemplate.IconName = fields[13].GetString(); creatureTemplate.GossipMenuId = fields[14].GetUInt32(); - creatureTemplate.minlevel = fields[15].GetUInt8(); - creatureTemplate.maxlevel = fields[16].GetUInt8(); + creatureTemplate.minlevel = fields[15].GetInt16(); + creatureTemplate.maxlevel = fields[16].GetInt16(); creatureTemplate.expansion = uint32(fields[17].GetInt16()); creatureTemplate.expansionUnknown = uint32(fields[18].GetUInt16()); creatureTemplate.faction = uint32(fields[19].GetUInt16()); @@ -674,18 +674,6 @@ void ObjectMgr::CheckCreatureTemplate(CreatureTemplate const* cInfo) cInfo->Entry, cInfo->expansion, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->expansion); } - if (cInfo->minlevel > difficultyInfo->minlevel) - { - TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, minlevel %u) has lower `minlevel` in difficulty %u mode (Entry: %u, minlevel %u).", - cInfo->Entry, cInfo->minlevel, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->minlevel); - } - - if (cInfo->maxlevel > difficultyInfo->maxlevel) - { - TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, maxlevel %u) has lower `maxlevel` in difficulty %u mode (Entry: %u, maxlevel %u).", - cInfo->Entry, cInfo->maxlevel, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->maxlevel); - } - if (cInfo->faction != difficultyInfo->faction) { TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, faction %u) has different `faction` in difficulty %u mode (Entry: %u, faction %u).", @@ -983,6 +971,27 @@ void ObjectMgr::CheckCreatureTemplate(CreatureTemplate const* cInfo) const_cast<CreatureTemplate*>(cInfo)->flags_extra &= CREATURE_FLAG_EXTRA_DB_ALLOWED; } + // -1 is used in the client for auto-updating the levels + // having their expansion set to it to the latest one + if (cInfo->expansion == -1) + { + const_cast<CreatureTemplate*>(cInfo)->minlevel = (MAX_LEVEL + cInfo->minlevel); + const_cast<CreatureTemplate*>(cInfo)->maxlevel = (MAX_LEVEL + cInfo->maxlevel); + const_cast<CreatureTemplate*>(cInfo)->expansion = EXPANSION_WARLORDS_OF_DRAENOR; + } + + if (cInfo->minlevel < 1 || cInfo->minlevel > STRONG_MAX_LEVEL) + { + TC_LOG_ERROR("sql.sql", "Creature (ID: %u): MinLevel %i is not within [1, 255], value has been set to 1.", cInfo->Entry, cInfo->minlevel); + const_cast<CreatureTemplate*>(cInfo)->minlevel = 1; + } + + if (cInfo->maxlevel < 1 || cInfo->maxlevel > STRONG_MAX_LEVEL) + { + TC_LOG_ERROR("sql.sql", "Creature (ID: %u): MaxLevel %i is not within [1, 255], value has been set to 1.", cInfo->Entry, cInfo->maxlevel); + const_cast<CreatureTemplate*>(cInfo)->maxlevel = 1; + } + const_cast<CreatureTemplate*>(cInfo)->ModDamage *= Creature::_GetDamageMod(cInfo->rank); } @@ -9361,4 +9370,4 @@ std::string ObjectMgr::GetRealmName(uint32 realm) const { RealmNameContainer::const_iterator iter = _realmNameStore.find(realm); return iter != _realmNameStore.end() ? iter->second : ""; -}
\ No newline at end of file +} diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 1ccd7294cc8..096eaac26fa 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -197,41 +197,16 @@ void WorldSession::HandleMoveWorldportAckOpcode() GetPlayer()->ProcessDelayedOperations(); } -void WorldSession::HandleMoveTeleportAck(WorldPacket& recvPacket) +void WorldSession::HandleMoveTeleportAck(WorldPackets::Movement::MoveTeleportAck& packet) { - TC_LOG_DEBUG("network", "MSG_MOVE_TELEPORT_ACK"); - - ObjectGuid guid; - uint32 flags, time; - recvPacket >> flags >> time; - - guid[5] = recvPacket.ReadBit(); - guid[0] = recvPacket.ReadBit(); - guid[1] = recvPacket.ReadBit(); - guid[6] = recvPacket.ReadBit(); - guid[3] = recvPacket.ReadBit(); - guid[7] = recvPacket.ReadBit(); - guid[2] = recvPacket.ReadBit(); - guid[4] = recvPacket.ReadBit(); - - recvPacket.ReadByteSeq(guid[4]); - recvPacket.ReadByteSeq(guid[2]); - recvPacket.ReadByteSeq(guid[7]); - recvPacket.ReadByteSeq(guid[6]); - recvPacket.ReadByteSeq(guid[5]); - recvPacket.ReadByteSeq(guid[1]); - recvPacket.ReadByteSeq(guid[3]); - recvPacket.ReadByteSeq(guid[0]); - - TC_LOG_DEBUG("network", "%s ", guid.ToString().c_str()); - TC_LOG_DEBUG("network", "Flags %u, time %u", flags, time/IN_MILLISECONDS); + TC_LOG_DEBUG("network", "CMSG_MOVE_TELEPORT_ACK: Guid: %s, Sequence: %u, Time: %u", packet.MoverGUID.ToString().c_str(), packet.AckIndex, packet.MoveTime); Player* plMover = _player->m_mover->ToPlayer(); if (!plMover || !plMover->IsBeingTeleportedNear()) return; - if (guid != plMover->GetGUID()) + if (packet.MoverGUID != plMover->GetGUID()) return; plMover->SetSemaphoreTeleportNear(false); @@ -384,7 +359,7 @@ void WorldSession::HandleMovementOpcodes(WorldPackets::Movement::ClientPlayerMov mover->UpdatePosition(movementInfo.pos); WorldPackets::Movement::ServerPlayerMovement playerMovement; - playerMovement.mover = mover; + playerMovement.movementInfo = &mover->m_movementInfo; mover->SendMessageToSet(const_cast<WorldPacket*>(playerMovement.Write()), _player); if (plrMover) // nothing is charmed, or player charmed diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp index 12a8c6320fa..3ca660dccd1 100644 --- a/src/server/game/Handlers/SpellHandler.cpp +++ b/src/server/game/Handlers/SpellHandler.cpp @@ -153,7 +153,7 @@ void WorldSession::HandleUseItemOpcode(WorldPacket& recvPacket) if (pUser->IsInCombat()) { - for (int i = 0; i < proto->Effects.size(); ++i) + for (uint32 i = 0; i < proto->Effects.size(); ++i) { if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(proto->Effects[i].SpellID)) { diff --git a/src/server/game/Movement/Spline/MovementPacketBuilder.h b/src/server/game/Movement/Spline/MovementPacketBuilder.h index 83172b2c3e0..720c0b3b244 100644 --- a/src/server/game/Movement/Spline/MovementPacketBuilder.h +++ b/src/server/game/Movement/Spline/MovementPacketBuilder.h @@ -33,11 +33,8 @@ namespace Movement class MoveSpline; class PacketBuilder { - static void WriteCommonMonsterMovePart(const MoveSpline& mov, WorldPacket& data); public: - static void WriteMonsterMove(const MoveSpline& mov, WorldPackets::Movement::MovementMonsterSpline& movementMonsterSpline); - static void WriteStopMovement(Vector3 const& loc, uint32 splineId, ByteBuffer& data); static void WriteCreate(MoveSpline const& moveSpline, ByteBuffer& data); }; } diff --git a/src/server/game/Server/Packets/ChatPackets.h b/src/server/game/Server/Packets/ChatPackets.h index 3d65bb04c54..9cdc534528f 100644 --- a/src/server/game/Server/Packets/ChatPackets.h +++ b/src/server/game/Server/Packets/ChatPackets.h @@ -143,8 +143,8 @@ namespace WorldPackets ObjectGuid SenderAccountGUID; ObjectGuid TargetGUID; ObjectGuid PartyGUID; - uint32 SenderVirtualAddress; - uint32 TargetVirtualAddress; + uint32 SenderVirtualAddress = 0; + uint32 TargetVirtualAddress = 0; std::string SenderName; std::string TargetName; std::string Prefix; @@ -165,7 +165,7 @@ namespace WorldPackets WorldPacket const* Write() override; ObjectGuid Guid; - int32 EmoteID; + int32 EmoteID = 0; }; class CTextEmote final : public ClientPacket @@ -176,8 +176,8 @@ namespace WorldPackets void Read() override; ObjectGuid Target; - int32 EmoteID; - int32 SoundIndex; + int32 EmoteID = 0; + int32 SoundIndex = -1; }; class STextEmote final : public ServerPacket @@ -190,8 +190,8 @@ namespace WorldPackets ObjectGuid SourceGUID; ObjectGuid SourceAccountGUID; ObjectGuid TargetGUID; - int32 SoundIndex; - int32 EmoteID; + int32 SoundIndex = -1; + int32 EmoteID = 0; }; } } diff --git a/src/server/game/Server/Packets/ItemPackets.h b/src/server/game/Server/Packets/ItemPackets.h index cb87bc0c586..72e2a02fbe2 100644 --- a/src/server/game/Server/Packets/ItemPackets.h +++ b/src/server/game/Server/Packets/ItemPackets.h @@ -31,8 +31,8 @@ namespace WorldPackets WorldPacket const* Write() override; - uint32 ProficiencyMask; - uint8 ProficiencyClass; + uint32 ProficiencyMask = 0; + uint8 ProficiencyClass = 0; }; struct ItemBonusInstanceData diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp index 972a52dc41c..0c4d4bcff40 100644 --- a/src/server/game/Server/Packets/MovementPackets.cpp +++ b/src/server/game/Server/Packets/MovementPackets.cpp @@ -263,25 +263,44 @@ WorldPacket const* WorldPackets::Movement::MonsterMove::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Movement::MoveSplineSet::Write() +WorldPacket const* WorldPackets::Movement::MoveSplineSetSpeed::Write() { _worldPacket << MoverGUID; _worldPacket << Speed; return &_worldPacket; } -WorldPacket const* WorldPackets::Movement::MoveUpdate::Write() +WorldPacket const* WorldPackets::Movement::MoveSetSpeed::Write() { - _worldPacket << movementInfo; + _worldPacket << MoverGUID; + _worldPacket << SequenceIndex; _worldPacket << Speed; return &_worldPacket; } -WorldPacket const* WorldPackets::Movement::ServerPlayerMovement::Write() +WorldPacket const* WorldPackets::Movement::MoveUpdateSpeed::Write() +{ + _worldPacket << *movementInfo; + _worldPacket << Speed; + return &_worldPacket; +} + +WorldPacket const* WorldPackets::Movement::MoveSplineSetFlag::Write() { - MovementInfo movementInfo = mover->m_movementInfo; + _worldPacket << MoverGUID; + return &_worldPacket; +} + +WorldPacket const* WorldPackets::Movement::MoveSetFlag::Write() +{ + _worldPacket << MoverGUID; + _worldPacket << SequenceIndex; + return &_worldPacket; +} - _worldPacket << movementInfo; +WorldPacket const* WorldPackets::Movement::ServerPlayerMovement::Write() +{ + _worldPacket << *movementInfo; return &_worldPacket; } @@ -321,3 +340,90 @@ WorldPacket const* WorldPackets::Movement::NewWorld::Write() _worldPacket << Reason; return &_worldPacket; } + +WorldPacket const* WorldPackets::Movement::MoveTeleport::Write() +{ + _worldPacket << MoverGUID; + _worldPacket << SequenceIndex; + _worldPacket << Pos.PositionXYZOStream(); + _worldPacket << Facing; + + _worldPacket.WriteBit(TransportGUID.HasValue); + _worldPacket.WriteBit(Vehicle.HasValue); + _worldPacket.FlushBits(); + + if (TransportGUID.HasValue) + _worldPacket << TransportGUID.Value; + + if (Vehicle.HasValue) + { + _worldPacket << Vehicle.Value.VehicleSeatIndex; + _worldPacket.WriteBit(Vehicle.Value.VehicleExitVoluntary); + _worldPacket.WriteBit(Vehicle.Value.VehicleExitTeleport); + _worldPacket.FlushBits(); + } + + return &_worldPacket; +} + +WorldPacket const* WorldPackets::Movement::MoveUpdateTeleport::Write() +{ + _worldPacket << *movementInfo; + + _worldPacket << int32(MovementForces.size()); + for (WorldPackets::Movement::MovementForce const& force : MovementForces) + { + _worldPacket << force.ID; + _worldPacket << force.Direction; + _worldPacket << force.TransportID; + _worldPacket << force.Magnitude; + _worldPacket.WriteBits(force.Type, 2); + _worldPacket.FlushBits(); + } + + _worldPacket.WriteBit(WalkSpeed.HasValue); + _worldPacket.WriteBit(RunSpeed.HasValue); + _worldPacket.WriteBit(RunBackSpeed.HasValue); + _worldPacket.WriteBit(SwimSpeed.HasValue); + _worldPacket.WriteBit(SwimBackSpeed.HasValue); + _worldPacket.WriteBit(FlightSpeed.HasValue); + _worldPacket.WriteBit(FlightBackSpeed.HasValue); + _worldPacket.WriteBit(TurnRate.HasValue); + _worldPacket.WriteBit(PitchRate.HasValue); + + if (WalkSpeed.HasValue) + _worldPacket << WalkSpeed.Value; + + if (RunSpeed.HasValue) + _worldPacket << RunSpeed.Value; + + if (RunBackSpeed.HasValue) + _worldPacket << RunBackSpeed.Value; + + if (SwimSpeed.HasValue) + _worldPacket << SwimSpeed.Value; + + if (SwimBackSpeed.HasValue) + _worldPacket << SwimBackSpeed.Value; + + if (FlightSpeed.HasValue) + _worldPacket << FlightSpeed.Value; + + if (FlightBackSpeed.HasValue) + _worldPacket << FlightBackSpeed.Value; + + if (TurnRate.HasValue) + _worldPacket << TurnRate.Value; + + if (PitchRate.HasValue) + _worldPacket << PitchRate.Value; + + return &_worldPacket; +} + +void WorldPackets::Movement::MoveTeleportAck::Read() +{ + _worldPacket >> MoverGUID; + _worldPacket >> AckIndex; + _worldPacket >> MoveTime; +} diff --git a/src/server/game/Server/Packets/MovementPackets.h b/src/server/game/Server/Packets/MovementPackets.h index 6f3b19a661d..6d5d10526b3 100644 --- a/src/server/game/Server/Packets/MovementPackets.h +++ b/src/server/game/Server/Packets/MovementPackets.h @@ -43,23 +43,23 @@ namespace WorldPackets WorldPacket const* Write() override; - Unit* mover; + MovementInfo* movementInfo = nullptr; }; struct MonsterSplineFilterKey { - int16 Idx; - int16 Speed; + int16 Idx = 0; + int16 Speed = 0; }; struct MonsterSplineFilter { std::vector<MonsterSplineFilterKey> FilterKeys; - uint8 FilterFlags; - float BaseSpeed; - int16 StartOffset; - float DistToPrevFilterKey; - int16 AddedToStart; + uint8 FilterFlags = 0; + float BaseSpeed = 0.0f; + int16 StartOffset = 0; + float DistToPrevFilterKey = 0.0f; + int16 AddedToStart = 0; }; struct MovementSpline @@ -86,7 +86,7 @@ namespace WorldPackets struct MovementMonsterSpline { - uint32 ID; + uint32 ID = 0; G3D::Vector3 Destination; bool CrzTeleport = false; MovementSpline Move; @@ -104,26 +104,59 @@ namespace WorldPackets G3D::Vector3 Pos; }; - class MoveSplineSet : public ServerPacket + class MoveSplineSetSpeed : public ServerPacket { public: - MoveSplineSet(OpcodeServer opcode) : ServerPacket(opcode, 12) { } + MoveSplineSetSpeed(OpcodeServer opcode) : ServerPacket(opcode, 12) { } WorldPacket const* Write() override; ObjectGuid MoverGUID; - float Speed; + float Speed = 1.0f; }; - class MoveUpdate : public ServerPacket + class MoveSetSpeed : public ServerPacket { public: - MoveUpdate(OpcodeServer opcode) : ServerPacket(opcode) { } + MoveSetSpeed(OpcodeServer opcode) : ServerPacket(opcode) { } WorldPacket const* Write() override; - MovementInfo movementInfo; - float Speed; + ObjectGuid MoverGUID; + uint32 SequenceIndex = 0; ///< Unit movement packet index, incremented each time + float Speed = 1.0f; + }; + + class MoveUpdateSpeed : public ServerPacket + { + public: + MoveUpdateSpeed(OpcodeServer opcode) : ServerPacket(opcode) { } + + WorldPacket const* Write() override; + + MovementInfo* movementInfo = nullptr; + float Speed = 1.0f; + }; + + class MoveSplineSetFlag final : public ServerPacket + { + public: + MoveSplineSetFlag(OpcodeServer opcode) : ServerPacket(opcode, 8) { } + + WorldPacket const* Write() override; + + ObjectGuid MoverGUID; + }; + + class MoveSetFlag final : public ServerPacket + { + public: + MoveSetFlag(OpcodeServer opcode) : ServerPacket(opcode, 12) { } + + WorldPacket const* Write() override; + + ObjectGuid MoverGUID; + uint32 SequenceIndex = 0; ///< Unit movement packet index, incremented each time }; class TransferPending final : public ServerPacket @@ -163,8 +196,8 @@ namespace WorldPackets WorldPacket const* Write() override; - int32 MapID = 0; - uint32 Reason = 0; + int32 MapID = 0; + uint32 Reason = 0; Position Pos; }; @@ -175,6 +208,69 @@ namespace WorldPackets void Read() override { } }; + + struct VehicleTeleport + { + uint8 VehicleSeatIndex = 0; + bool VehicleExitVoluntary = false; + bool VehicleExitTeleport = false; + }; + + class MoveTeleport final : public ServerPacket + { + public: + MoveTeleport() : ServerPacket(SMSG_MOVE_TELEPORT, 12+4+16+16+4) { } + + WorldPacket const* Write() override; + + Position Pos; + Optional<VehicleTeleport> Vehicle; + uint32 SequenceIndex = 0; + ObjectGuid MoverGUID; + Optional<ObjectGuid> TransportGUID; + float Facing = 0.0f; + }; + + struct MovementForce + { + ObjectGuid ID; + G3D::Vector3 Direction; + uint32 TransportID = 0; + float Magnitude = 0; + uint8 Type = 0; + }; + + class MoveUpdateTeleport final : public ServerPacket + { + public: + MoveUpdateTeleport() : ServerPacket(SMSG_MOVE_UPDATE_TELEPORT) { } + + WorldPacket const* Write() override; + + MovementInfo* movementInfo = nullptr; + std::vector<MovementForce> MovementForces; + Optional<float> SwimBackSpeed; + Optional<float> FlightSpeed; + Optional<float> SwimSpeed; + Optional<float> WalkSpeed; + Optional<float> TurnRate; + Optional<float> RunSpeed; + Optional<float> FlightBackSpeed; + Optional<float> RunBackSpeed; + Optional<float> PitchRate; + }; + + class MoveTeleportAck final : public ClientPacket + { + public: + MoveTeleportAck(WorldPacket&& packet) : ClientPacket(CMSG_MOVE_TELEPORT_ACK, std::move(packet)) { } + + void Read() override; + + ObjectGuid MoverGUID; + int32 AckIndex = 0; + int32 MoveTime = 0; + }; } } diff --git a/src/server/game/Server/Packets/QueryPackets.h b/src/server/game/Server/Packets/QueryPackets.h index b9e04ec4260..8b6eae8db56 100644 --- a/src/server/game/Server/Packets/QueryPackets.h +++ b/src/server/game/Server/Packets/QueryPackets.h @@ -181,7 +181,7 @@ namespace WorldPackets void Read() override; - uint32 TableHash; + uint32 TableHash = 0; std::vector<DBQueryRecord> Queries; }; diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 67aa0efe9f3..79671b85892 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -474,7 +474,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_MOVE_STOP_STRAFE, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes); DEFINE_HANDLER(CMSG_MOVE_STOP_SWIM, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes); DEFINE_HANDLER(CMSG_MOVE_STOP_TURN, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes); - DEFINE_OPCODE_HANDLER_OLD(CMSG_MOVE_TELEPORT_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::HandleMoveTeleportAck ); + DEFINE_HANDLER(CMSG_MOVE_TELEPORT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::MoveTeleportAck, &WorldSession::HandleMoveTeleportAck); DEFINE_OPCODE_HANDLER_OLD(CMSG_MOVE_TIME_SKIPPED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::HandleMoveTimeSkippedOpcode ); DEFINE_OPCODE_HANDLER_OLD(CMSG_MOVE_WATER_WALK_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::HandleMoveWaterWalkAck ); DEFINE_HANDLER(CMSG_MOVE_WORLDPORT_ACK, STATUS_TRANSFER, PROCESS_THREADUNSAFE, WorldPackets::Movement::WorldPortAck, &WorldSession::HandleMoveWorldportAckOpcode); @@ -1098,34 +1098,32 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_COLLISION_DISABLE, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_COLLISION_ENABLE, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_FEATHER_FALL, STATUS_UNHANDLED); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_FORCE_RUN_SPEED_CHANGE, STATUS_UNHANDLED); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_FORCE_SWIM_SPEED_CHANGE, STATUS_UNHANDLED); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_GRAVITY_DISABLE, STATUS_UNHANDLED); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_GRAVITY_DISABLE, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_GRAVITY_ENABLE, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_KNOCK_BACK, STATUS_UNHANDLED); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_LAND_WALK, STATUS_UNHANDLED); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_LAND_WALK, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_NORMAL_FALL, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_ROOT, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ACTIVE_MOVER, STATUS_UNHANDLED); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_CAN_FLY, STATUS_UNHANDLED); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_CAN_FLY, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_COLLISION_HEIGHT, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_COMPOUND_STATE, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_FLIGHT_BACK_SPEED, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_FLIGHT_SPEED, STATUS_UNHANDLED); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_HOVER, STATUS_UNHANDLED); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_HOVER, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_PITCH_RATE, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_RUN_BACK_SPEED, STATUS_UNHANDLED); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_RUN_SPEED, STATUS_UNHANDLED); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_RUN_SPEED, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_SWIM_BACK_SPEED, STATUS_UNHANDLED); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_SWIM_SPEED, STATUS_UNHANDLED); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_SWIM_SPEED, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_TURN_RATE, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_WALK_SPEED, STATUS_UNHANDLED); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_TELEPORT, STATUS_UNHANDLED); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_TELEPORT, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNROOT, STATUS_UNHANDLED); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNSET_CAN_FLY, STATUS_UNHANDLED); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNSET_CAN_FLY, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNSET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY, STATUS_UNHANDLED); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNSET_HOVER, STATUS_UNHANDLED); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNSET_HOVER, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_COLLISION_HEIGHT, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_FLIGHT_BACK_SPEED, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_FLIGHT_SPEED, STATUS_UNHANDLED); @@ -1135,10 +1133,10 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_RUN_SPEED, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_SWIM_BACK_SPEED, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_SWIM_SPEED, STATUS_NEVER); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_TELEPORT, STATUS_UNHANDLED); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_TELEPORT, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_TURN_RATE, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_WALK_SPEED, STATUS_NEVER); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_WATER_WALK, STATUS_UNHANDLED); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_WATER_WALK, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MULTIPLE_PACKETS, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_NAME_QUERY_RESPONSE, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_NEW_TAXI_PATH, STATUS_UNHANDLED); @@ -1323,7 +1321,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPIRIT_HEALER_CONFIRM, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPLINE_MOVE_COLLISION_DISABLE, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPLINE_MOVE_COLLISION_ENABLE, STATUS_UNHANDLED); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPLINE_MOVE_GRAVITY_DISABLE, STATUS_UNHANDLED); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPLINE_MOVE_GRAVITY_DISABLE, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPLINE_MOVE_GRAVITY_ENABLE, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPLINE_MOVE_ROOT, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPLINE_MOVE_SET_ANIM, STATUS_UNHANDLED); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 70bc31fc5ce..f6bdf0892d7 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -1113,36 +1113,34 @@ enum OpcodeServer : uint32 SMSG_MOVE_COLLISION_DISABLE = 0xBADD, SMSG_MOVE_COLLISION_ENABLE = 0xBADD, SMSG_MOVE_FEATHER_FALL = 0xBADD, - SMSG_MOVE_FORCE_RUN_SPEED_CHANGE = 0x08F5, - SMSG_MOVE_FORCE_SWIM_SPEED_CHANGE = 0x061A, SMSG_MOVE_GRAVITY_DISABLE = 0x02C6, SMSG_MOVE_GRAVITY_ENABLE = 0xBADD, SMSG_MOVE_KNOCK_BACK = 0xBADD, - SMSG_MOVE_LAND_WALK = 0xBADD, + SMSG_MOVE_LAND_WALK = 0x13DA, SMSG_MOVE_NORMAL_FALL = 0xBADD, SMSG_MOVE_ROOT = 0x1B5A, SMSG_MOVE_SET_ACTIVE_MOVER = 0xBADD, - SMSG_MOVE_SET_CAN_FLY = 0xBADD, + SMSG_MOVE_SET_CAN_FLY = 0x01F6, SMSG_MOVE_SET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY = 0xBADD, SMSG_MOVE_SET_COLLISION_HEIGHT = 0x008D, SMSG_MOVE_SET_COMPOUND_STATE = 0xBADD, SMSG_MOVE_SET_FLIGHT_BACK_SPEED = 0xBADD, SMSG_MOVE_SET_FLIGHT_SPEED = 0xBADD, - SMSG_MOVE_SET_HOVER = 0xBADD, + SMSG_MOVE_SET_HOVER = 0x0296, SMSG_MOVE_SET_PITCH_RATE = 0xBADD, SMSG_MOVE_SET_RUN_BACK_SPEED = 0xBADD, - SMSG_MOVE_SET_RUN_SPEED = 0xBADD, + SMSG_MOVE_SET_RUN_SPEED = 0x08F5, SMSG_MOVE_SET_SWIM_BACK_SPEED = 0xBADD, - SMSG_MOVE_SET_SWIM_SPEED = 0xBADD, + SMSG_MOVE_SET_SWIM_SPEED = 0x061A, SMSG_MOVE_SET_TURN_RATE = 0xBADD, SMSG_MOVE_SET_VEHICLE_REC_ID = 0xBADD, SMSG_MOVE_SET_WALK_IN_AIR = 0xBADD, SMSG_MOVE_SET_WALK_SPEED = 0xBADD, SMSG_MOVE_TELEPORT = 0x03A6, SMSG_MOVE_UNROOT = 0xBADD, - SMSG_MOVE_UNSET_CAN_FLY = 0xBADD, + SMSG_MOVE_UNSET_CAN_FLY = 0x0BAE, SMSG_MOVE_UNSET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY = 0xBADD, - SMSG_MOVE_UNSET_HOVER = 0xBADD, + SMSG_MOVE_UNSET_HOVER = 0x01A5, SMSG_MOVE_UNSET_WALK_IN_AIR = 0xBADD, SMSG_MOVE_UPDATE_COLLISION_HEIGHT = 0xBADD, SMSG_MOVE_UPDATE_FLIGHT_BACK_SPEED = 0xBADD, @@ -1156,7 +1154,7 @@ enum OpcodeServer : uint32 SMSG_MOVE_UPDATE_TELEPORT = 0x03D5, SMSG_MOVE_UPDATE_TURN_RATE = 0x08BE, SMSG_MOVE_UPDATE_WALK_SPEED = 0x01E5, - SMSG_MOVE_WATER_WALK = 0xBADD, + SMSG_MOVE_WATER_WALK = 0x02A6, SMSG_MULTIPLE_PACKETS = 0xBADD, SMSG_NAME_QUERY_RESPONSE = 0x0828, SMSG_NEW_TAXI_PATH = 0xBADD, diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index a04bb45dfe7..26db96b232d 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -162,6 +162,13 @@ namespace WorldPackets class TutorialSetFlag; } + namespace Movement + { + class ClientPlayerMovement; + class WorldPortAck; + class MoveTeleportAck; + } + namespace NPC { class Hello; @@ -181,12 +188,6 @@ namespace WorldPackets class QuestGiverStatusQuery; class QuestGiverStatusMultipleQuery; } - - namespace Movement - { - class ClientPlayerMovement; - class WorldPortAck; - } } enum AccountDataType @@ -631,7 +632,7 @@ class WorldSession // Knockback void HandleMoveKnockBackAck(WorldPacket& recvPacket); - void HandleMoveTeleportAck(WorldPacket& recvPacket); + void HandleMoveTeleportAck(WorldPackets::Movement::MoveTeleportAck& packet); void HandleForceSpeedChangeAck(WorldPacket& recvData); void HandleSetCollisionHeightAck(WorldPacket& recvPacket); diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index c6b92f66fb9..303a885c39c 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -4365,7 +4365,7 @@ void Spell::TakeCastItem() bool expendable = false; bool withoutCharges = false; - for (int i = 0; i < proto->Effects.size(); ++i) + for (uint32 i = 0; i < proto->Effects.size(); ++i) { // item has limited charges if (proto->Effects[i].Charges) @@ -4607,7 +4607,7 @@ void Spell::TakeReagents() // if CastItem is also spell reagent if (castItemTemplate && castItemTemplate->ItemId == itemid) { - for (int s = 0; s < castItemTemplate->Effects.size(); ++s) + for (uint32 s = 0; s < castItemTemplate->Effects.size(); ++s) { // CastItem will be used up and does not count as reagent int32 charges = m_CastItem->GetSpellCharges(s); @@ -6343,15 +6343,15 @@ SpellCastResult Spell::CheckItems() case SPELL_EFFECT_CREATE_MANA_GEM: { uint32 item_id = effect->ItemType; - ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(item_id); + ItemTemplate const* proto = sObjectMgr->GetItemTemplate(item_id); - if (!pProto) + if (!proto) return SPELL_FAILED_ITEM_AT_MAX_CHARGES; - if (Item* pitem = player->GetItemByEntry(item_id)) + if (Item* item = player->GetItemByEntry(item_id)) { - for (int x = 0; x < pProto->Effects.size(); ++x) - if (pProto->Effects[x].Charges != 0 && pitem->GetSpellCharges(x) == pProto->Effects[x].Charges) + for (uint32 x = 0; x < proto->Effects.size(); ++x) + if (proto->Effects[x].Charges != 0 && item->GetSpellCharges(x) == proto->Effects[x].Charges) return SPELL_FAILED_ITEM_AT_MAX_CHARGES; } break; diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 22c68271aba..4ba129b4946 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -1600,7 +1600,7 @@ void SpellMgr::LoadSpellTargetPositions() mSpellTargetPositions.clear(); // need for reload case - // 0 1 2 3 4 5 + // 0 1 2 3 4 5 QueryResult result = WorldDatabase.Query("SELECT ID, EffectIndex, MapID, PositionX, PositionY, PositionZ FROM spell_target_position"); if (!result) { diff --git a/src/server/game/Texts/CreatureTextMgr.cpp b/src/server/game/Texts/CreatureTextMgr.cpp index 07d0bd53629..992942cefeb 100644 --- a/src/server/game/Texts/CreatureTextMgr.cpp +++ b/src/server/game/Texts/CreatureTextMgr.cpp @@ -60,7 +60,7 @@ class PlayerTextBuilder { std::string const& text = sCreatureTextMgr->GetLocalizedChatString(_source->GetEntry(), _gender, _textGroup, _textId, locale); WorldPackets::Chat::Chat packet; - return ChatHandler::BuildChatPacket(&packet, _msgType, Language(_language), _talker, _target, text, 0, "", locale); + ChatHandler::BuildChatPacket(&packet, _msgType, Language(_language), _talker, _target, text, 0, "", locale); data = *packet.Write(); } diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp index eb64c2f3eaa..aadf97e9b0c 100644 --- a/src/server/scripts/Commands/cs_modify.cpp +++ b/src/server/scripts/Commands/cs_modify.cpp @@ -1344,7 +1344,7 @@ public: } // Set gender - target->SetByteValue(UNIT_FIELD_BYTES_0, 2, gender); + target->SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, gender); target->SetByteValue(PLAYER_BYTES_3, 0, gender); // Change display ID diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp index fa6adcc8eb0..84e850034a9 100644 --- a/src/server/scripts/Commands/cs_reload.cpp +++ b/src/server/scripts/Commands/cs_reload.cpp @@ -954,7 +954,7 @@ public: sObjectMgr->LoadGraveyardZones(); - handler->SendGlobalGMSysMessage("DB table `game_graveyard_zone` reloaded."); + handler->SendGlobalGMSysMessage("DB table `graveyard_zone` reloaded."); return true; } diff --git a/src/server/scripts/Commands/cs_reset.cpp b/src/server/scripts/Commands/cs_reset.cpp index 01a0094bfc7..1c3bff77593 100644 --- a/src/server/scripts/Commands/cs_reset.cpp +++ b/src/server/scripts/Commands/cs_reset.cpp @@ -100,8 +100,7 @@ public: player->SetShapeshiftForm(FORM_NONE); player->setFactionForRace(player->getRace()); - - player->SetUInt32Value(UNIT_FIELD_BYTES_0, ((player->getRace()) | (player->getClass() << 8) | (player->getGender() << 16) | (powerType << 24))); + player->SetUInt32Value(UNIT_FIELD_DISPLAY_POWER, powerType); // reset only if player not in some form; if (player->GetShapeshiftForm() == FORM_NONE) diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 71bc9233f87..36395d4d06e 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -93,7 +93,7 @@ LogsDir = "" # Default: "127.0.0.1;3306;trinity;trinity;auth" - (LoginDatabaseInfo) # "127.0.0.1;3306;trinity;trinity;world" - (WorldDatabaseInfo) # "127.0.0.1;3306;trinity;trinity;characters" - (CharacterDatabaseInfo) -# "127.0.0.1;3306;trinity;trinity;hotfixes" - (HotfixDatabaseInfo) +# "127.0.0.1;3306;trinity;trinity;hotfixes" - (HotfixDatabaseInfo) LoginDatabaseInfo = "127.0.0.1;3306;trinity;trinity;auth" WorldDatabaseInfo = "127.0.0.1;3306;trinity;trinity;world" |