Packet.cs 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971
  1. using C = ClientPackets;
  2. using S = ServerPackets;
  3. public abstract class Packet
  4. {
  5. public static bool IsServer;
  6. public virtual bool Observable => true;
  7. public virtual bool Compressed => false;
  8. public abstract short Index { get; }
  9. public static Packet ReceivePacket(byte[] rawBytes, out byte[] extra)
  10. {
  11. extra = rawBytes;
  12. Packet p;
  13. if (rawBytes.Length < 4) return null; //| 2Bytes: Packet Size | 2Bytes: Packet ID |
  14. var length = BitConverter.ToUInt16(rawBytes, 0);
  15. var id = BitConverter.ToInt16(rawBytes, 2);
  16. if (length > rawBytes.Length || length < 2) return null;
  17. try
  18. {
  19. p = IsServer ? GetClientPacket(id) : GetServerPacket(id);
  20. if (p == null)
  21. {
  22. //prevents server from getting stuck in a 'loop' (only on this connection)
  23. //if the incomming data is corrupt/invalid > simply remove all data instead of trying to process it over and over again
  24. extra = new byte[0];
  25. return null;
  26. }
  27. using var ms = p.Compressed ?
  28. new MemoryStream(p.DecompressPacket(rawBytes[4..(length - 4)])) :
  29. new MemoryStream(rawBytes, 4, length - 4);
  30. using var reader = new BinaryReader(ms);
  31. p.ReadPacket(reader);
  32. }
  33. catch (Exception e)
  34. {
  35. throw new InvalidDataException();
  36. }
  37. extra = new byte[rawBytes.Length - length];
  38. Buffer.BlockCopy(rawBytes, length, extra, 0, rawBytes.Length - length);
  39. return p;
  40. }
  41. public IEnumerable<byte> GetPacketBytes()
  42. {
  43. if (Index < 0) return new byte[0];
  44. byte[] data, mem;
  45. using (var ms = new MemoryStream())
  46. {
  47. using (var writer = new BinaryWriter(ms))
  48. {
  49. WritePacket(writer);
  50. }
  51. mem = Compressed ? CompressPacket(ms.ToArray()) : ms.ToArray();
  52. }
  53. using (var ms = new MemoryStream())
  54. {
  55. ms.SetLength(2);
  56. ms.Seek(2, SeekOrigin.Begin);
  57. using (var writer = new BinaryWriter(ms))
  58. {
  59. writer.Write(Index);
  60. writer.Write(mem);
  61. ms.Seek(0, SeekOrigin.Begin);
  62. writer.Write((ushort)ms.Length);
  63. data = ms.ToArray();
  64. }
  65. }
  66. return data;
  67. }
  68. protected abstract void ReadPacket(BinaryReader reader);
  69. protected abstract void WritePacket(BinaryWriter writer);
  70. protected virtual byte[] DecompressPacket(byte[] buffer) => Functions.DecompressBytes(buffer);
  71. protected virtual byte[] CompressPacket(byte[] buffer) => Functions.CompressBytes(buffer);
  72. private static Packet GetClientPacket(short index)
  73. {
  74. switch (index)
  75. {
  76. case (short)ClientPacketIds.ClientVersion:
  77. return new C.ClientVersion();
  78. case (short)ClientPacketIds.Disconnect:
  79. return new C.Disconnect();
  80. case (short)ClientPacketIds.KeepAlive:
  81. return new C.KeepAlive();
  82. case (short)ClientPacketIds.NewAccount:
  83. return new C.NewAccount();
  84. case (short)ClientPacketIds.ChangePassword:
  85. return new C.ChangePassword();
  86. case (short)ClientPacketIds.UnlockStorage:
  87. return new C.UnlockStorage();
  88. case (short)ClientPacketIds.SetStoragePassword:
  89. return new C.SetStoragePassword();
  90. case (short)ClientPacketIds.RemoveStoragePassword:
  91. return new C.RemoveStoragePassword();
  92. case (short)ClientPacketIds.Login:
  93. return new C.Login();
  94. case (short)ClientPacketIds.NewCharacter:
  95. return new C.NewCharacter();
  96. case (short)ClientPacketIds.DeleteCharacter:
  97. return new C.DeleteCharacter();
  98. case (short)ClientPacketIds.StartGame:
  99. return new C.StartGame();
  100. case (short)ClientPacketIds.LogOut:
  101. return new C.LogOut();
  102. case (short)ClientPacketIds.Turn:
  103. return new C.Turn();
  104. case (short)ClientPacketIds.Walk:
  105. return new C.Walk();
  106. case (short)ClientPacketIds.Run:
  107. return new C.Run();
  108. case (short)ClientPacketIds.Chat:
  109. return new C.Chat();
  110. case (short)ClientPacketIds.MoveItem:
  111. return new C.MoveItem();
  112. case (short)ClientPacketIds.StoreItem:
  113. return new C.StoreItem();
  114. case (short)ClientPacketIds.TakeBackItem:
  115. return new C.TakeBackItem();
  116. case (short)ClientPacketIds.MergeItem:
  117. return new C.MergeItem();
  118. case (short)ClientPacketIds.EquipItem:
  119. return new C.EquipItem();
  120. case (short)ClientPacketIds.RemoveItem:
  121. return new C.RemoveItem();
  122. case (short)ClientPacketIds.RemoveSlotItem:
  123. return new C.RemoveSlotItem();
  124. case (short)ClientPacketIds.SplitItem:
  125. return new C.SplitItem();
  126. case (short)ClientPacketIds.UseItem:
  127. return new C.UseItem();
  128. case (short)ClientPacketIds.DropItem:
  129. return new C.DropItem();
  130. case (short)ClientPacketIds.DepositRefineItem:
  131. return new C.DepositRefineItem();
  132. case (short)ClientPacketIds.RetrieveRefineItem:
  133. return new C.RetrieveRefineItem();
  134. case (short)ClientPacketIds.RefineCancel:
  135. return new C.RefineCancel();
  136. case (short)ClientPacketIds.RefineItem:
  137. return new C.RefineItem();
  138. case (short)ClientPacketIds.CheckRefine:
  139. return new C.CheckRefine();
  140. case (short)ClientPacketIds.ReplaceWedRing:
  141. return new C.ReplaceWedRing();
  142. case (short)ClientPacketIds.DepositTradeItem:
  143. return new C.DepositTradeItem();
  144. case (short)ClientPacketIds.RetrieveTradeItem:
  145. return new C.RetrieveTradeItem();
  146. case (short)ClientPacketIds.TakeBackHeroItem:
  147. return new C.TakeBackHeroItem();
  148. case (short)ClientPacketIds.TransferHeroItem:
  149. return new C.TransferHeroItem();
  150. case (short)ClientPacketIds.DropGold:
  151. return new C.DropGold();
  152. case (short)ClientPacketIds.PickUp:
  153. return new C.PickUp();
  154. case (short)ClientPacketIds.RequestMapInfo:
  155. return new C.RequestMapInfo();
  156. case (short)ClientPacketIds.RequestMonsterInfo:
  157. return new C.RequestMonsterInfo();
  158. case (short)ClientPacketIds.RequestNPCInfo:
  159. return new C.RequestNPCInfo();
  160. case (short)ClientPacketIds.RequestItemInfo:
  161. return new C.RequestItemInfo();
  162. case (short)ClientPacketIds.TeleportToNPC:
  163. return new C.TeleportToNPC();
  164. case (short)ClientPacketIds.SearchMap:
  165. return new C.SearchMap();
  166. case (short)ClientPacketIds.Inspect:
  167. return new C.Inspect();
  168. case (short)ClientPacketIds.Observe:
  169. return new C.Observe();
  170. case (short)ClientPacketIds.ChangeAMode:
  171. return new C.ChangeAMode();
  172. case (short)ClientPacketIds.ChangePMode:
  173. return new C.ChangePMode();
  174. case (short)ClientPacketIds.ChangeTrade:
  175. return new C.ChangeTrade();
  176. case (short)ClientPacketIds.Attack:
  177. return new C.Attack();
  178. case (short)ClientPacketIds.RangeAttack:
  179. return new C.RangeAttack();
  180. case (short)ClientPacketIds.Harvest:
  181. return new C.Harvest();
  182. case (short)ClientPacketIds.CallNPC:
  183. return new C.CallNPC();
  184. case (short)ClientPacketIds.BuyItem:
  185. return new C.BuyItem();
  186. case (short)ClientPacketIds.SellItem:
  187. return new C.SellItem();
  188. case (short)ClientPacketIds.CraftItem:
  189. return new C.CraftItem();
  190. case (short)ClientPacketIds.RepairItem:
  191. return new C.RepairItem();
  192. case (short)ClientPacketIds.BuyItemBack:
  193. return new C.BuyItemBack();
  194. case (short)ClientPacketIds.SRepairItem:
  195. return new C.SRepairItem();
  196. case (short)ClientPacketIds.MagicKey:
  197. return new C.MagicKey();
  198. case (short)ClientPacketIds.Magic:
  199. return new C.Magic();
  200. case (short)ClientPacketIds.SwitchGroup:
  201. return new C.SwitchGroup();
  202. case (short)ClientPacketIds.AddMember:
  203. return new C.AddMember();
  204. case (short)ClientPacketIds.DellMember:
  205. return new C.DelMember();
  206. case (short)ClientPacketIds.GroupInvite:
  207. return new C.GroupInvite();
  208. case (short)ClientPacketIds.NewHero:
  209. return new C.NewHero();
  210. case (short)ClientPacketIds.SetAutoPotValue:
  211. return new C.SetAutoPotValue();
  212. case (short)ClientPacketIds.SetAutoPotItem:
  213. return new C.SetAutoPotItem();
  214. case (short)ClientPacketIds.SetHeroBehaviour:
  215. return new C.SetHeroBehaviour();
  216. case (short)ClientPacketIds.ChangeHero:
  217. return new C.ChangeHero();
  218. case (short)ClientPacketIds.TownRevive:
  219. return new C.TownRevive();
  220. case (short)ClientPacketIds.SpellToggle:
  221. return new C.SpellToggle();
  222. case (short)ClientPacketIds.ConsignItem:
  223. return new C.ConsignItem();
  224. case (short)ClientPacketIds.MarketSearch:
  225. return new C.MarketSearch();
  226. case (short)ClientPacketIds.MarketRefresh:
  227. return new C.MarketRefresh();
  228. case (short)ClientPacketIds.MarketPage:
  229. return new C.MarketPage();
  230. case (short)ClientPacketIds.MarketBuy:
  231. return new C.MarketBuy();
  232. case (short)ClientPacketIds.MarketGetBack:
  233. return new C.MarketGetBack();
  234. case (short)ClientPacketIds.MarketSellNow:
  235. return new C.MarketSellNow();
  236. case (short)ClientPacketIds.RequestUserName:
  237. return new C.RequestUserName();
  238. case (short)ClientPacketIds.RequestChatItem:
  239. return new C.RequestChatItem();
  240. case (short)ClientPacketIds.EditGuildMember:
  241. return new C.EditGuildMember();
  242. case (short)ClientPacketIds.EditGuildNotice:
  243. return new C.EditGuildNotice();
  244. case (short)ClientPacketIds.GuildInvite:
  245. return new C.GuildInvite();
  246. case (short)ClientPacketIds.GuildNameReturn:
  247. return new C.GuildNameReturn();
  248. case (short)ClientPacketIds.RequestGuildInfo:
  249. return new C.RequestGuildInfo();
  250. case (short)ClientPacketIds.GuildStorageGoldChange:
  251. return new C.GuildStorageGoldChange();
  252. case (short)ClientPacketIds.GuildStorageItemChange:
  253. return new C.GuildStorageItemChange();
  254. case (short)ClientPacketIds.GuildWarReturn:
  255. return new C.GuildWarReturn();
  256. case (short)ClientPacketIds.MarriageRequest:
  257. return new C.MarriageRequest();
  258. case (short)ClientPacketIds.MarriageReply:
  259. return new C.MarriageReply();
  260. case (short)ClientPacketIds.ChangeMarriage:
  261. return new C.ChangeMarriage();
  262. case (short)ClientPacketIds.DivorceRequest:
  263. return new C.DivorceRequest();
  264. case (short)ClientPacketIds.DivorceReply:
  265. return new C.DivorceReply();
  266. case (short)ClientPacketIds.AddMentor:
  267. return new C.AddMentor();
  268. case (short)ClientPacketIds.MentorReply:
  269. return new C.MentorReply();
  270. case (short)ClientPacketIds.AllowMentor:
  271. return new C.AllowMentor();
  272. case (short)ClientPacketIds.CancelMentor:
  273. return new C.CancelMentor();
  274. case (short)ClientPacketIds.TradeRequest:
  275. return new C.TradeRequest();
  276. case (short)ClientPacketIds.TradeReply:
  277. return new C.TradeReply();
  278. case (short)ClientPacketIds.TradeGold:
  279. return new C.TradeGold();
  280. case (short)ClientPacketIds.TradeConfirm:
  281. return new C.TradeConfirm();
  282. case (short)ClientPacketIds.TradeCancel:
  283. return new C.TradeCancel();
  284. case (short)ClientPacketIds.EquipSlotItem:
  285. return new C.EquipSlotItem();
  286. case (short)ClientPacketIds.FishingCast:
  287. return new C.FishingCast();
  288. case (short)ClientPacketIds.FishingChangeAutocast:
  289. return new C.FishingChangeAutocast();
  290. case (short)ClientPacketIds.AcceptQuest:
  291. return new C.AcceptQuest();
  292. case (short)ClientPacketIds.FinishQuest:
  293. return new C.FinishQuest();
  294. case (short)ClientPacketIds.AbandonQuest:
  295. return new C.AbandonQuest();
  296. case (short)ClientPacketIds.ShareQuest:
  297. return new C.ShareQuest();
  298. case (short)ClientPacketIds.AcceptReincarnation:
  299. return new C.AcceptReincarnation();
  300. case (short)ClientPacketIds.CancelReincarnation:
  301. return new C.CancelReincarnation();
  302. case (short)ClientPacketIds.CombineItem:
  303. return new C.CombineItem();
  304. case (short)ClientPacketIds.AwakeningNeedMaterials:
  305. return new C.AwakeningNeedMaterials();
  306. case (short)ClientPacketIds.AwakeningLockedItem:
  307. return new C.AwakeningLockedItem();
  308. case (short)ClientPacketIds.Awakening:
  309. return new C.Awakening();
  310. case (short)ClientPacketIds.DisassembleItem:
  311. return new C.DisassembleItem();
  312. case (short)ClientPacketIds.DowngradeAwakening:
  313. return new C.DowngradeAwakening();
  314. case (short)ClientPacketIds.ResetAddedItem:
  315. return new C.ResetAddedItem();
  316. case (short)ClientPacketIds.SendMail:
  317. return new C.SendMail();
  318. case (short)ClientPacketIds.ReadMail:
  319. return new C.ReadMail();
  320. case (short)ClientPacketIds.CollectParcel:
  321. return new C.CollectParcel();
  322. case (short)ClientPacketIds.DeleteMail:
  323. return new C.DeleteMail();
  324. case (short)ClientPacketIds.LockMail:
  325. return new C.LockMail();
  326. case (short)ClientPacketIds.MailLockedItem:
  327. return new C.MailLockedItem();
  328. case (short)ClientPacketIds.MailCost:
  329. return new C.MailCost();
  330. case (short)ClientPacketIds.RequestIntelligentCreatureUpdates:
  331. return new C.RequestIntelligentCreatureUpdates();
  332. case (short)ClientPacketIds.UpdateIntelligentCreature:
  333. return new C.UpdateIntelligentCreature();
  334. case (short)ClientPacketIds.IntelligentCreaturePickup:
  335. return new C.IntelligentCreaturePickup();
  336. case (short)ClientPacketIds.AddFriend:
  337. return new C.AddFriend();
  338. case (short)ClientPacketIds.RemoveFriend:
  339. return new C.RemoveFriend();
  340. case (short)ClientPacketIds.RefreshFriends:
  341. return new C.RefreshFriends();
  342. case (short)ClientPacketIds.AddMemo:
  343. return new C.AddMemo();
  344. case (short)ClientPacketIds.GuildBuffUpdate:
  345. return new C.GuildBuffUpdate();
  346. case (short)ClientPacketIds.GameshopBuy:
  347. return new C.GameshopBuy();
  348. case (short)ClientPacketIds.NPCConfirmInput:
  349. return new C.NPCConfirmInput();
  350. case (short)ClientPacketIds.ReportIssue:
  351. return new C.ReportIssue();
  352. case (short)ClientPacketIds.GetRanking:
  353. return new C.GetRanking();
  354. case (short)ClientPacketIds.Opendoor:
  355. return new C.Opendoor();
  356. case (short)ClientPacketIds.GetRentedItems:
  357. return new C.GetRentedItems();
  358. case (short)ClientPacketIds.ItemRentalRequest:
  359. return new C.ItemRentalRequest();
  360. case (short)ClientPacketIds.ItemRentalFee:
  361. return new C.ItemRentalFee();
  362. case (short)ClientPacketIds.ItemRentalPeriod:
  363. return new C.ItemRentalPeriod();
  364. case (short)ClientPacketIds.DepositRentalItem:
  365. return new C.DepositRentalItem();
  366. case (short)ClientPacketIds.RetrieveRentalItem:
  367. return new C.RetrieveRentalItem();
  368. case (short)ClientPacketIds.CancelItemRental:
  369. return new C.CancelItemRental();
  370. case (short)ClientPacketIds.ItemRentalLockFee:
  371. return new C.ItemRentalLockFee();
  372. case (short)ClientPacketIds.ItemRentalLockItem:
  373. return new C.ItemRentalLockItem();
  374. case (short)ClientPacketIds.ConfirmItemRental:
  375. return new C.ConfirmItemRental();
  376. case (short)ClientPacketIds.GuildTerritoryPage:
  377. return new C.GuildTerritoryPage();
  378. case (short)ClientPacketIds.DeleteItem:
  379. return new C.DeleteItem();
  380. default:
  381. return null;
  382. }
  383. }
  384. public static Packet GetServerPacket(short index)
  385. {
  386. switch (index)
  387. {
  388. case (short)ServerPacketIds.Connected:
  389. return new S.Connected();
  390. case (short)ServerPacketIds.ClientVersion:
  391. return new S.ClientVersion();
  392. case (short)ServerPacketIds.Disconnect:
  393. return new S.Disconnect();
  394. case (short)ServerPacketIds.KeepAlive:
  395. return new S.KeepAlive();
  396. case (short)ServerPacketIds.NewAccount:
  397. return new S.NewAccount();
  398. case (short)ServerPacketIds.ChangePassword:
  399. return new S.ChangePassword();
  400. case (short)ServerPacketIds.ChangePasswordBanned:
  401. return new S.ChangePasswordBanned();
  402. case (short)ServerPacketIds.StorageUnlockResult:
  403. return new S.StorageUnlockResult();
  404. case (short)ServerPacketIds.StoragePasswordResult:
  405. return new S.StoragePasswordResult();
  406. case (short)ServerPacketIds.Login:
  407. return new S.Login();
  408. case (short)ServerPacketIds.LoginBanned:
  409. return new S.LoginBanned();
  410. case (short)ServerPacketIds.LoginSuccess:
  411. return new S.LoginSuccess();
  412. case (short)ServerPacketIds.NewCharacter:
  413. return new S.NewCharacter();
  414. case (short)ServerPacketIds.NewCharacterSuccess:
  415. return new S.NewCharacterSuccess();
  416. case (short)ServerPacketIds.DeleteCharacter:
  417. return new S.DeleteCharacter();
  418. case (short)ServerPacketIds.DeleteCharacterSuccess:
  419. return new S.DeleteCharacterSuccess();
  420. case (short)ServerPacketIds.StartGame:
  421. return new S.StartGame();
  422. case (short)ServerPacketIds.StartGameBanned:
  423. return new S.StartGameBanned();
  424. case (short)ServerPacketIds.StartGameDelay:
  425. return new S.StartGameDelay();
  426. case (short)ServerPacketIds.MapInformation:
  427. return new S.MapInformation();
  428. case (short)ServerPacketIds.NewMapInfo:
  429. return new S.NewMapInfo();
  430. case (short)ServerPacketIds.WorldMapSetup:
  431. return new S.WorldMapSetupInfo();
  432. case (short)ServerPacketIds.SearchMapResult:
  433. return new S.SearchMapResult();
  434. case (short)ServerPacketIds.UserInformation:
  435. return new S.UserInformation();
  436. case (short)ServerPacketIds.UserSlotsRefresh:
  437. return new S.UserSlotsRefresh();
  438. case (short)ServerPacketIds.UserLocation:
  439. return new S.UserLocation();
  440. case (short)ServerPacketIds.ObjectPlayer:
  441. return new S.ObjectPlayer();
  442. case (short)ServerPacketIds.ObjectHero:
  443. return new S.ObjectHero();
  444. case (short)ServerPacketIds.ObjectRemove:
  445. return new S.ObjectRemove();
  446. case (short)ServerPacketIds.ObjectTurn:
  447. return new S.ObjectTurn();
  448. case (short)ServerPacketIds.ObjectWalk:
  449. return new S.ObjectWalk();
  450. case (short)ServerPacketIds.ObjectRun:
  451. return new S.ObjectRun();
  452. case (short)ServerPacketIds.Chat:
  453. return new S.Chat();
  454. case (short)ServerPacketIds.ObjectChat:
  455. return new S.ObjectChat();
  456. case (short)ServerPacketIds.NewItemInfo:
  457. return new S.NewItemInfo();
  458. case (short)ServerPacketIds.NewMonsterInfo:
  459. return new S.NewMonsterInfo();
  460. case (short)ServerPacketIds.NewNPCInfo:
  461. return new S.NewNPCInfo();
  462. case (short)ServerPacketIds.NewHeroInfo:
  463. return new S.NewHeroInfo();
  464. case (short)ServerPacketIds.NewChatItem:
  465. return new S.NewChatItem();
  466. case (short)ServerPacketIds.MoveItem:
  467. return new S.MoveItem();
  468. case (short)ServerPacketIds.EquipItem:
  469. return new S.EquipItem();
  470. case (short)ServerPacketIds.MergeItem:
  471. return new S.MergeItem();
  472. case (short)ServerPacketIds.RemoveItem:
  473. return new S.RemoveItem();
  474. case (short)ServerPacketIds.RemoveSlotItem:
  475. return new S.RemoveSlotItem();
  476. case (short)ServerPacketIds.TakeBackItem:
  477. return new S.TakeBackItem();
  478. case (short)ServerPacketIds.TakeBackHeroItem:
  479. return new S.TakeBackHeroItem();
  480. case (short)ServerPacketIds.TransferHeroItem:
  481. return new S.TransferHeroItem();
  482. case (short)ServerPacketIds.StoreItem:
  483. return new S.StoreItem();
  484. case (short)ServerPacketIds.DepositRefineItem:
  485. return new S.DepositRefineItem();
  486. case (short)ServerPacketIds.RetrieveRefineItem:
  487. return new S.RetrieveRefineItem();
  488. case (short)ServerPacketIds.RefineItem:
  489. return new S.RefineItem();
  490. case (short)ServerPacketIds.DepositTradeItem:
  491. return new S.DepositTradeItem();
  492. case (short)ServerPacketIds.RetrieveTradeItem:
  493. return new S.RetrieveTradeItem();
  494. case (short)ServerPacketIds.SplitItem:
  495. return new S.SplitItem();
  496. case (short)ServerPacketIds.SplitItem1:
  497. return new S.SplitItem1();
  498. case (short)ServerPacketIds.UseItem:
  499. return new S.UseItem();
  500. case (short)ServerPacketIds.DropItem:
  501. return new S.DropItem();
  502. case (short)ServerPacketIds.PlayerUpdate:
  503. return new S.PlayerUpdate();
  504. case (short)ServerPacketIds.PlayerInspect:
  505. return new S.PlayerInspect();
  506. case (short)ServerPacketIds.LogOutSuccess:
  507. return new S.LogOutSuccess();
  508. case (short)ServerPacketIds.LogOutFailed:
  509. return new S.LogOutFailed();
  510. case (short)ServerPacketIds.ReturnToLogin:
  511. return new S.ReturnToLogin();
  512. case (short)ServerPacketIds.TimeOfDay:
  513. return new S.TimeOfDay();
  514. case (short)ServerPacketIds.ChangeAMode:
  515. return new S.ChangeAMode();
  516. case (short)ServerPacketIds.ChangePMode:
  517. return new S.ChangePMode();
  518. case (short)ServerPacketIds.ObjectItem:
  519. return new S.ObjectItem();
  520. case (short)ServerPacketIds.ObjectGold:
  521. return new S.ObjectGold();
  522. case (short)ServerPacketIds.GainedItem:
  523. return new S.GainedItem();
  524. case (short)ServerPacketIds.GainedGold:
  525. return new S.GainedGold();
  526. case (short)ServerPacketIds.LoseGold:
  527. return new S.LoseGold();
  528. case (short)ServerPacketIds.GainedCredit:
  529. return new S.GainedCredit();
  530. case (short)ServerPacketIds.LoseCredit:
  531. return new S.LoseCredit();
  532. case (short)ServerPacketIds.ObjectMonster:
  533. return new S.ObjectMonster();
  534. case (short)ServerPacketIds.ObjectAttack:
  535. return new S.ObjectAttack();
  536. case (short)ServerPacketIds.Struck:
  537. return new S.Struck();
  538. case (short)ServerPacketIds.DamageIndicator:
  539. return new S.DamageIndicator();
  540. case (short)ServerPacketIds.ObjectStruck:
  541. return new S.ObjectStruck();
  542. case (short)ServerPacketIds.DuraChanged:
  543. return new S.DuraChanged();
  544. case (short)ServerPacketIds.HealthChanged:
  545. return new S.HealthChanged();
  546. case (short)ServerPacketIds.HeroHealthChanged:
  547. return new S.HeroHealthChanged();
  548. case (short)ServerPacketIds.DeleteItem:
  549. return new S.DeleteItem();
  550. case (short)ServerPacketIds.Death:
  551. return new S.Death();
  552. case (short)ServerPacketIds.ObjectDied:
  553. return new S.ObjectDied();
  554. case (short)ServerPacketIds.ColourChanged:
  555. return new S.ColourChanged();
  556. case (short)ServerPacketIds.ObjectColourChanged:
  557. return new S.ObjectColourChanged();
  558. case (short)ServerPacketIds.ObjectGuildNameChanged:
  559. return new S.ObjectGuildNameChanged();
  560. case (short)ServerPacketIds.GainExperience:
  561. return new S.GainExperience();
  562. case (short)ServerPacketIds.GainHeroExperience:
  563. return new S.GainHeroExperience();
  564. case (short)ServerPacketIds.LevelChanged:
  565. return new S.LevelChanged();
  566. case (short)ServerPacketIds.HeroLevelChanged:
  567. return new S.HeroLevelChanged();
  568. case (short)ServerPacketIds.ObjectLeveled:
  569. return new S.ObjectLeveled();
  570. case (short)ServerPacketIds.ObjectHarvest:
  571. return new S.ObjectHarvest();
  572. case (short)ServerPacketIds.ObjectHarvested:
  573. return new S.ObjectHarvested();
  574. case (short)ServerPacketIds.ObjectNpc:
  575. return new S.ObjectNPC();
  576. case (short)ServerPacketIds.NPCResponse:
  577. return new S.NPCResponse();
  578. case (short)ServerPacketIds.ObjectHide:
  579. return new S.ObjectHide();
  580. case (short)ServerPacketIds.ObjectShow:
  581. return new S.ObjectShow();
  582. case (short)ServerPacketIds.Poisoned:
  583. return new S.Poisoned();
  584. case (short)ServerPacketIds.ObjectPoisoned:
  585. return new S.ObjectPoisoned();
  586. case (short)ServerPacketIds.MapChanged:
  587. return new S.MapChanged();
  588. case (short)ServerPacketIds.ObjectTeleportOut:
  589. return new S.ObjectTeleportOut();
  590. case (short)ServerPacketIds.ObjectTeleportIn:
  591. return new S.ObjectTeleportIn();
  592. case (short)ServerPacketIds.TeleportIn:
  593. return new S.TeleportIn();
  594. case (short)ServerPacketIds.NPCGoods:
  595. return new S.NPCGoods();
  596. case (short)ServerPacketIds.NPCSell:
  597. return new S.NPCSell();
  598. case (short)ServerPacketIds.NPCRepair:
  599. return new S.NPCRepair();
  600. case (short)ServerPacketIds.NPCSRepair:
  601. return new S.NPCSRepair();
  602. case (short)ServerPacketIds.NPCRefine:
  603. return new S.NPCRefine();
  604. case (short)ServerPacketIds.NPCCheckRefine:
  605. return new S.NPCCheckRefine();
  606. case (short)ServerPacketIds.NPCCollectRefine:
  607. return new S.NPCCollectRefine();
  608. case (short)ServerPacketIds.NPCReplaceWedRing:
  609. return new S.NPCReplaceWedRing();
  610. case (short)ServerPacketIds.NPCStorage:
  611. return new S.NPCStorage();
  612. case (short)ServerPacketIds.SellItem:
  613. return new S.SellItem();
  614. case (short)ServerPacketIds.CraftItem:
  615. return new S.CraftItem();
  616. case (short)ServerPacketIds.RepairItem:
  617. return new S.RepairItem();
  618. case (short)ServerPacketIds.ItemRepaired:
  619. return new S.ItemRepaired();
  620. case (short)ServerPacketIds.ItemSlotSizeChanged:
  621. return new S.ItemSlotSizeChanged();
  622. case (short)ServerPacketIds.ItemSealChanged:
  623. return new S.ItemSealChanged();
  624. case (short)ServerPacketIds.NewMagic:
  625. return new S.NewMagic();
  626. case (short)ServerPacketIds.MagicLeveled:
  627. return new S.MagicLeveled();
  628. case (short)ServerPacketIds.Magic:
  629. return new S.Magic();
  630. case (short)ServerPacketIds.MagicDelay:
  631. return new S.MagicDelay();
  632. case (short)ServerPacketIds.MagicCast:
  633. return new S.MagicCast();
  634. case (short)ServerPacketIds.ObjectMagic:
  635. return new S.ObjectMagic();
  636. case (short)ServerPacketIds.ObjectProjectile:
  637. return new S.ObjectProjectile();
  638. case (short)ServerPacketIds.ObjectEffect:
  639. return new S.ObjectEffect();
  640. case (short)ServerPacketIds.RangeAttack:
  641. return new S.RangeAttack();
  642. case (short)ServerPacketIds.Pushed:
  643. return new S.Pushed();
  644. case (short)ServerPacketIds.ObjectPushed:
  645. return new S.ObjectPushed();
  646. case (short)ServerPacketIds.ObjectName:
  647. return new S.ObjectName();
  648. case (short)ServerPacketIds.UserStorage:
  649. return new S.UserStorage();
  650. case (short)ServerPacketIds.SwitchGroup:
  651. return new S.SwitchGroup();
  652. case (short)ServerPacketIds.DeleteGroup:
  653. return new S.DeleteGroup();
  654. case (short)ServerPacketIds.DeleteMember:
  655. return new S.DeleteMember();
  656. case (short)ServerPacketIds.GroupInvite:
  657. return new S.GroupInvite();
  658. case (short)ServerPacketIds.AddMember:
  659. return new S.AddMember();
  660. case (short)ServerPacketIds.GroupMembersMap:
  661. return new S.GroupMembersMap();
  662. case (short)ServerPacketIds.SendMemberLocation:
  663. return new S.SendMemberLocation();
  664. case (short)ServerPacketIds.Revived:
  665. return new S.Revived();
  666. case (short)ServerPacketIds.ObjectRevived:
  667. return new S.ObjectRevived();
  668. case (short)ServerPacketIds.SpellToggle:
  669. return new S.SpellToggle();
  670. case (short)ServerPacketIds.ObjectHealth:
  671. return new S.ObjectHealth();
  672. case (short)ServerPacketIds.ObjectMana:
  673. return new S.ObjectMana();
  674. case (short)ServerPacketIds.MapEffect:
  675. return new S.MapEffect();
  676. case (short)ServerPacketIds.AllowObserve:
  677. return new S.AllowObserve();
  678. case (short)ServerPacketIds.ObjectRangeAttack:
  679. return new S.ObjectRangeAttack();
  680. case (short)ServerPacketIds.AddBuff:
  681. return new S.AddBuff();
  682. case (short)ServerPacketIds.RemoveBuff:
  683. return new S.RemoveBuff();
  684. case (short)ServerPacketIds.PauseBuff:
  685. return new S.PauseBuff();
  686. case (short)ServerPacketIds.ObjectHidden:
  687. return new S.ObjectHidden();
  688. case (short)ServerPacketIds.RefreshItem:
  689. return new S.RefreshItem();
  690. case (short)ServerPacketIds.ObjectSpell:
  691. return new S.ObjectSpell();
  692. case (short)ServerPacketIds.UserDash:
  693. return new S.UserDash();
  694. case (short)ServerPacketIds.ObjectDash:
  695. return new S.ObjectDash();
  696. case (short)ServerPacketIds.UserDashFail:
  697. return new S.UserDashFail();
  698. case (short)ServerPacketIds.ObjectDashFail:
  699. return new S.ObjectDashFail();
  700. case (short)ServerPacketIds.NPCConsign:
  701. return new S.NPCConsign();
  702. case (short)ServerPacketIds.NPCMarket:
  703. return new S.NPCMarket();
  704. case (short)ServerPacketIds.NPCMarketPage:
  705. return new S.NPCMarketPage();
  706. case (short)ServerPacketIds.ConsignItem:
  707. return new S.ConsignItem();
  708. case (short)ServerPacketIds.MarketFail:
  709. return new S.MarketFail();
  710. case (short)ServerPacketIds.MarketSuccess:
  711. return new S.MarketSuccess();
  712. case (short)ServerPacketIds.ObjectSitDown:
  713. return new S.ObjectSitDown();
  714. case (short)ServerPacketIds.InTrapRock:
  715. return new S.InTrapRock();
  716. case (short)ServerPacketIds.RemoveMagic:
  717. return new S.RemoveMagic();
  718. case (short)ServerPacketIds.BaseStatsInfo:
  719. return new S.BaseStatsInfo();
  720. case (short)ServerPacketIds.HeroBaseStatsInfo:
  721. return new S.HeroBaseStatsInfo();
  722. case (short)ServerPacketIds.UserName:
  723. return new S.UserName();
  724. case (short)ServerPacketIds.ChatItemStats:
  725. return new S.ChatItemStats();
  726. case (short)ServerPacketIds.GuildMemberChange:
  727. return new S.GuildMemberChange();
  728. case (short)ServerPacketIds.GuildNoticeChange:
  729. return new S.GuildNoticeChange();
  730. case (short)ServerPacketIds.GuildStatus:
  731. return new S.GuildStatus();
  732. case (short)ServerPacketIds.GuildInvite:
  733. return new S.GuildInvite();
  734. case (short)ServerPacketIds.GuildExpGain:
  735. return new S.GuildExpGain();
  736. case (short)ServerPacketIds.GuildNameRequest:
  737. return new S.GuildNameRequest();
  738. case (short)ServerPacketIds.GuildStorageGoldChange:
  739. return new S.GuildStorageGoldChange();
  740. case (short)ServerPacketIds.GuildStorageItemChange:
  741. return new S.GuildStorageItemChange();
  742. case (short)ServerPacketIds.GuildStorageList:
  743. return new S.GuildStorageList();
  744. case (short)ServerPacketIds.GuildRequestWar:
  745. return new S.GuildRequestWar();
  746. case (short)ServerPacketIds.HeroCreateRequest:
  747. return new S.HeroCreateRequest();
  748. case (short)ServerPacketIds.NewHero:
  749. return new S.NewHero();
  750. case (short)ServerPacketIds.HeroInformation:
  751. return new S.HeroInformation();
  752. case (short)ServerPacketIds.UpdateHeroSpawnState:
  753. return new S.UpdateHeroSpawnState();
  754. case (short)ServerPacketIds.UnlockHeroAutoPot:
  755. return new S.UnlockHeroAutoPot();
  756. case (short)ServerPacketIds.SetAutoPotValue:
  757. return new S.SetAutoPotValue();
  758. case (short)ServerPacketIds.SetAutoPotItem:
  759. return new S.SetAutoPotItem();
  760. case (short)ServerPacketIds.SetHeroBehaviour:
  761. return new S.SetHeroBehaviour();
  762. case (short)ServerPacketIds.ManageHeroes:
  763. return new S.ManageHeroes();
  764. case (short)ServerPacketIds.ChangeHero:
  765. return new S.ChangeHero();
  766. case (short)ServerPacketIds.DefaultNPC:
  767. return new S.DefaultNPC();
  768. case (short)ServerPacketIds.NPCUpdate:
  769. return new S.NPCUpdate();
  770. case (short)ServerPacketIds.NPCImageUpdate:
  771. return new S.NPCImageUpdate();
  772. case (short)ServerPacketIds.MarriageRequest:
  773. return new S.MarriageRequest();
  774. case (short)ServerPacketIds.DivorceRequest:
  775. return new S.DivorceRequest();
  776. case (short)ServerPacketIds.MentorRequest:
  777. return new S.MentorRequest();
  778. case (short)ServerPacketIds.TradeRequest:
  779. return new S.TradeRequest();
  780. case (short)ServerPacketIds.TradeAccept:
  781. return new S.TradeAccept();
  782. case (short)ServerPacketIds.TradeGold:
  783. return new S.TradeGold();
  784. case (short)ServerPacketIds.TradeItem:
  785. return new S.TradeItem();
  786. case (short)ServerPacketIds.TradeConfirm:
  787. return new S.TradeConfirm();
  788. case (short)ServerPacketIds.TradeCancel:
  789. return new S.TradeCancel();
  790. case (short)ServerPacketIds.MountUpdate:
  791. return new S.MountUpdate();
  792. case (short)ServerPacketIds.TransformUpdate:
  793. return new S.TransformUpdate();
  794. case (short)ServerPacketIds.EquipSlotItem:
  795. return new S.EquipSlotItem();
  796. case (short)ServerPacketIds.FishingUpdate:
  797. return new S.FishingUpdate();
  798. case (short)ServerPacketIds.ChangeQuest:
  799. return new S.ChangeQuest();
  800. case (short)ServerPacketIds.CompleteQuest:
  801. return new S.CompleteQuest();
  802. case (short)ServerPacketIds.ShareQuest:
  803. return new S.ShareQuest();
  804. case (short)ServerPacketIds.NewQuestInfo:
  805. return new S.NewQuestInfo();
  806. case (short)ServerPacketIds.GainedQuestItem:
  807. return new S.GainedQuestItem();
  808. case (short)ServerPacketIds.DeleteQuestItem:
  809. return new S.DeleteQuestItem();
  810. case (short)ServerPacketIds.CancelReincarnation:
  811. return new S.CancelReincarnation();
  812. case (short)ServerPacketIds.RequestReincarnation:
  813. return new S.RequestReincarnation();
  814. case (short)ServerPacketIds.UserBackStep:
  815. return new S.UserBackStep();
  816. case (short)ServerPacketIds.ObjectBackStep:
  817. return new S.ObjectBackStep();
  818. case (short)ServerPacketIds.UserDashAttack:
  819. return new S.UserDashAttack();
  820. case (short)ServerPacketIds.ObjectDashAttack:
  821. return new S.ObjectDashAttack();
  822. case (short)ServerPacketIds.UserAttackMove://Warrior Skill - SlashingBurst
  823. return new S.UserAttackMove();
  824. case (short)ServerPacketIds.CombineItem:
  825. return new S.CombineItem();
  826. case (short)ServerPacketIds.ItemUpgraded:
  827. return new S.ItemUpgraded();
  828. case (short)ServerPacketIds.SetConcentration:
  829. return new S.SetConcentration();
  830. case (short)ServerPacketIds.SetElemental:
  831. return new S.SetElemental();
  832. case (short)ServerPacketIds.RemoveDelayedExplosion:
  833. return new S.RemoveDelayedExplosion();
  834. case (short)ServerPacketIds.ObjectDeco:
  835. return new S.ObjectDeco();
  836. case (short)ServerPacketIds.ObjectSneaking:
  837. return new S.ObjectSneaking();
  838. case (short)ServerPacketIds.ObjectLevelEffects:
  839. return new S.ObjectLevelEffects();
  840. case (short)ServerPacketIds.SetBindingShot:
  841. return new S.SetBindingShot();
  842. case (short)ServerPacketIds.SendOutputMessage:
  843. return new S.SendOutputMessage();
  844. case (short)ServerPacketIds.NPCAwakening:
  845. return new S.NPCAwakening();
  846. case (short)ServerPacketIds.NPCDisassemble:
  847. return new S.NPCDisassemble();
  848. case (short)ServerPacketIds.NPCDowngrade:
  849. return new S.NPCDowngrade();
  850. case (short)ServerPacketIds.NPCReset:
  851. return new S.NPCReset();
  852. case (short)ServerPacketIds.AwakeningNeedMaterials:
  853. return new S.AwakeningNeedMaterials();
  854. case (short)ServerPacketIds.AwakeningLockedItem:
  855. return new S.AwakeningLockedItem();
  856. case (short)ServerPacketIds.Awakening:
  857. return new S.Awakening();
  858. case (short)ServerPacketIds.ReceiveMail:
  859. return new S.ReceiveMail();
  860. case (short)ServerPacketIds.MailLockedItem:
  861. return new S.MailLockedItem();
  862. case (short)ServerPacketIds.MailSent:
  863. return new S.MailSent();
  864. case (short)ServerPacketIds.MailSendRequest:
  865. return new S.MailSendRequest();
  866. case (short)ServerPacketIds.ParcelCollected:
  867. return new S.ParcelCollected();
  868. case (short)ServerPacketIds.MailCost:
  869. return new S.MailCost();
  870. case (short)ServerPacketIds.ResizeInventory:
  871. return new S.ResizeInventory();
  872. case (short)ServerPacketIds.ResizeStorage:
  873. return new S.ResizeStorage();
  874. case (short)ServerPacketIds.NewIntelligentCreature:
  875. return new S.NewIntelligentCreature();
  876. case (short)ServerPacketIds.UpdateIntelligentCreatureList:
  877. return new S.UpdateIntelligentCreatureList();
  878. case (short)ServerPacketIds.IntelligentCreatureEnableRename:
  879. return new S.IntelligentCreatureEnableRename();
  880. case (short)ServerPacketIds.IntelligentCreaturePickup:
  881. return new S.IntelligentCreaturePickup();
  882. case (short)ServerPacketIds.NPCPearlGoods:
  883. return new S.NPCPearlGoods();
  884. case (short)ServerPacketIds.FriendUpdate:
  885. return new S.FriendUpdate();
  886. case (short)ServerPacketIds.LoverUpdate:
  887. return new S.LoverUpdate();
  888. case (short)ServerPacketIds.MentorUpdate:
  889. return new S.MentorUpdate();
  890. case (short)ServerPacketIds.GuildBuffList:
  891. return new S.GuildBuffList();
  892. case (short)ServerPacketIds.GameShopInfo:
  893. return new S.GameShopInfo();
  894. case (short)ServerPacketIds.GameShopStock:
  895. return new S.GameShopStock();
  896. case (short)ServerPacketIds.NPCRequestInput:
  897. return new S.NPCRequestInput();
  898. case (short)ServerPacketIds.Rankings:
  899. return new S.Rankings();
  900. case (short)ServerPacketIds.Opendoor:
  901. return new S.Opendoor();
  902. case (short)ServerPacketIds.GetRentedItems:
  903. return new S.GetRentedItems();
  904. case (short)ServerPacketIds.ItemRentalRequest:
  905. return new S.ItemRentalRequest();
  906. case (short)ServerPacketIds.ItemRentalFee:
  907. return new S.ItemRentalFee();
  908. case (short)ServerPacketIds.ItemRentalPeriod:
  909. return new S.ItemRentalPeriod();
  910. case (short)ServerPacketIds.DepositRentalItem:
  911. return new S.DepositRentalItem();
  912. case (short)ServerPacketIds.RetrieveRentalItem:
  913. return new S.RetrieveRentalItem();
  914. case (short)ServerPacketIds.UpdateRentalItem:
  915. return new S.UpdateRentalItem();
  916. case (short)ServerPacketIds.CancelItemRental:
  917. return new S.CancelItemRental();
  918. case (short)ServerPacketIds.ItemRentalLock:
  919. return new S.ItemRentalLock();
  920. case (short)ServerPacketIds.ItemRentalPartnerLock:
  921. return new S.ItemRentalPartnerLock();
  922. case (short)ServerPacketIds.CanConfirmItemRental:
  923. return new S.CanConfirmItemRental();
  924. case (short)ServerPacketIds.ConfirmItemRental:
  925. return new S.ConfirmItemRental();
  926. case (short)ServerPacketIds.NewRecipeInfo:
  927. return new S.NewRecipeInfo();
  928. case (short)ServerPacketIds.OpenBrowser:
  929. return new S.OpenBrowser();
  930. case (short)ServerPacketIds.PlaySound:
  931. return new S.PlaySound();
  932. case (short)ServerPacketIds.SetTimer:
  933. return new S.SetTimer();
  934. case (short)ServerPacketIds.ExpireTimer:
  935. return new S.ExpireTimer();
  936. case (short)ServerPacketIds.UpdateNotice:
  937. return new S.UpdateNotice();
  938. case (short)ServerPacketIds.Roll:
  939. return new S.Roll();
  940. case (short)ServerPacketIds.SetCompass:
  941. return new S.SetCompass();
  942. case (short)ServerPacketIds.GuildTerritoryPage:
  943. return new S.GuildTerritoryPage();
  944. default:
  945. return null;
  946. }
  947. }
  948. }