aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2014_11_30_00_world.sql30
-rw-r--r--src/server/game/DataStores/DB2Stores.cpp11
-rw-r--r--src/server/game/DataStores/DB2Stores.h2
-rw-r--r--src/server/game/DataStores/DB2Structure.h5
-rw-r--r--src/server/game/DataStores/DBCStores.cpp13
-rw-r--r--src/server/game/DataStores/DBCStores.h2
-rw-r--r--src/server/game/DataStores/DBCStructure.h4
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp10
-rw-r--r--src/server/game/Entities/Creature/Creature.h6
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp2
-rw-r--r--src/server/game/Entities/Item/ItemPrototype.h2
-rw-r--r--src/server/game/Entities/Pet/Pet.cpp17
-rw-r--r--src/server/game/Entities/Player/Player.cpp47
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp210
-rw-r--r--src/server/game/Entities/Unit/Unit.h15
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp39
-rw-r--r--src/server/game/Handlers/MovementHandler.cpp33
-rw-r--r--src/server/game/Handlers/SpellHandler.cpp2
-rw-r--r--src/server/game/Movement/Spline/MovementPacketBuilder.h3
-rw-r--r--src/server/game/Server/Packets/ChatPackets.h14
-rw-r--r--src/server/game/Server/Packets/ItemPackets.h4
-rw-r--r--src/server/game/Server/Packets/MovementPackets.cpp118
-rw-r--r--src/server/game/Server/Packets/MovementPackets.h132
-rw-r--r--src/server/game/Server/Packets/QueryPackets.h2
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp28
-rw-r--r--src/server/game/Server/Protocol/Opcodes.h18
-rw-r--r--src/server/game/Server/WorldSession.h15
-rw-r--r--src/server/game/Spells/Spell.cpp14
-rw-r--r--src/server/game/Spells/SpellMgr.cpp2
-rw-r--r--src/server/game/Texts/CreatureTextMgr.cpp2
-rw-r--r--src/server/scripts/Commands/cs_modify.cpp2
-rw-r--r--src/server/scripts/Commands/cs_reload.cpp2
-rw-r--r--src/server/scripts/Commands/cs_reset.cpp3
-rw-r--r--src/server/worldserver/worldserver.conf.dist2
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"