using C = ClientPackets; using S = ServerPackets; public abstract class Packet { public static bool IsServer; public virtual bool Observable => true; public virtual bool Compressed => false; public abstract short Index { get; } public static Packet ReceivePacket(byte[] rawBytes, out byte[] extra) { extra = rawBytes; Packet p; if (rawBytes.Length < 4) return null; //| 2Bytes: Packet Size | 2Bytes: Packet ID | var length = BitConverter.ToUInt16(rawBytes, 0); var id = BitConverter.ToInt16(rawBytes, 2); if (length > rawBytes.Length || length < 2) return null; try { p = IsServer ? GetClientPacket(id) : GetServerPacket(id); if (p == null) { //prevents server from getting stuck in a 'loop' (only on this connection) //if the incomming data is corrupt/invalid > simply remove all data instead of trying to process it over and over again extra = new byte[0]; return null; } using var ms = p.Compressed ? new MemoryStream(p.DecompressPacket(rawBytes[4..(length - 4)])) : new MemoryStream(rawBytes, 4, length - 4); using var reader = new BinaryReader(ms); p.ReadPacket(reader); } catch (Exception e) { throw new InvalidDataException(); } extra = new byte[rawBytes.Length - length]; Buffer.BlockCopy(rawBytes, length, extra, 0, rawBytes.Length - length); return p; } public IEnumerable GetPacketBytes() { if (Index < 0) return new byte[0]; byte[] data, mem; using (var ms = new MemoryStream()) { using (var writer = new BinaryWriter(ms)) { WritePacket(writer); } mem = Compressed ? CompressPacket(ms.ToArray()) : ms.ToArray(); } using (var ms = new MemoryStream()) { ms.SetLength(2); ms.Seek(2, SeekOrigin.Begin); using (var writer = new BinaryWriter(ms)) { writer.Write(Index); writer.Write(mem); ms.Seek(0, SeekOrigin.Begin); writer.Write((ushort)ms.Length); data = ms.ToArray(); } } return data; } protected abstract void ReadPacket(BinaryReader reader); protected abstract void WritePacket(BinaryWriter writer); protected virtual byte[] DecompressPacket(byte[] buffer) => Functions.DecompressBytes(buffer); protected virtual byte[] CompressPacket(byte[] buffer) => Functions.CompressBytes(buffer); private static Packet GetClientPacket(short index) { switch (index) { case (short)ClientPacketIds.ClientVersion: return new C.ClientVersion(); case (short)ClientPacketIds.Disconnect: return new C.Disconnect(); case (short)ClientPacketIds.KeepAlive: return new C.KeepAlive(); case (short)ClientPacketIds.NewAccount: return new C.NewAccount(); case (short)ClientPacketIds.ChangePassword: return new C.ChangePassword(); case (short)ClientPacketIds.UnlockStorage: return new C.UnlockStorage(); case (short)ClientPacketIds.SetStoragePassword: return new C.SetStoragePassword(); case (short)ClientPacketIds.RemoveStoragePassword: return new C.RemoveStoragePassword(); case (short)ClientPacketIds.Login: return new C.Login(); case (short)ClientPacketIds.NewCharacter: return new C.NewCharacter(); case (short)ClientPacketIds.DeleteCharacter: return new C.DeleteCharacter(); case (short)ClientPacketIds.StartGame: return new C.StartGame(); case (short)ClientPacketIds.LogOut: return new C.LogOut(); case (short)ClientPacketIds.Turn: return new C.Turn(); case (short)ClientPacketIds.Walk: return new C.Walk(); case (short)ClientPacketIds.Run: return new C.Run(); case (short)ClientPacketIds.Chat: return new C.Chat(); case (short)ClientPacketIds.MoveItem: return new C.MoveItem(); case (short)ClientPacketIds.StoreItem: return new C.StoreItem(); case (short)ClientPacketIds.TakeBackItem: return new C.TakeBackItem(); case (short)ClientPacketIds.MergeItem: return new C.MergeItem(); case (short)ClientPacketIds.EquipItem: return new C.EquipItem(); case (short)ClientPacketIds.RemoveItem: return new C.RemoveItem(); case (short)ClientPacketIds.RemoveSlotItem: return new C.RemoveSlotItem(); case (short)ClientPacketIds.SplitItem: return new C.SplitItem(); case (short)ClientPacketIds.UseItem: return new C.UseItem(); case (short)ClientPacketIds.DropItem: return new C.DropItem(); case (short)ClientPacketIds.DepositRefineItem: return new C.DepositRefineItem(); case (short)ClientPacketIds.RetrieveRefineItem: return new C.RetrieveRefineItem(); case (short)ClientPacketIds.RefineCancel: return new C.RefineCancel(); case (short)ClientPacketIds.RefineItem: return new C.RefineItem(); case (short)ClientPacketIds.CheckRefine: return new C.CheckRefine(); case (short)ClientPacketIds.ReplaceWedRing: return new C.ReplaceWedRing(); case (short)ClientPacketIds.DepositTradeItem: return new C.DepositTradeItem(); case (short)ClientPacketIds.RetrieveTradeItem: return new C.RetrieveTradeItem(); case (short)ClientPacketIds.TakeBackHeroItem: return new C.TakeBackHeroItem(); case (short)ClientPacketIds.TransferHeroItem: return new C.TransferHeroItem(); case (short)ClientPacketIds.DropGold: return new C.DropGold(); case (short)ClientPacketIds.PickUp: return new C.PickUp(); case (short)ClientPacketIds.RequestMapInfo: return new C.RequestMapInfo(); case (short)ClientPacketIds.RequestMonsterInfo: return new C.RequestMonsterInfo(); case (short)ClientPacketIds.RequestNPCInfo: return new C.RequestNPCInfo(); case (short)ClientPacketIds.RequestItemInfo: return new C.RequestItemInfo(); case (short)ClientPacketIds.TeleportToNPC: return new C.TeleportToNPC(); case (short)ClientPacketIds.SearchMap: return new C.SearchMap(); case (short)ClientPacketIds.Inspect: return new C.Inspect(); case (short)ClientPacketIds.Observe: return new C.Observe(); case (short)ClientPacketIds.ChangeAMode: return new C.ChangeAMode(); case (short)ClientPacketIds.ChangePMode: return new C.ChangePMode(); case (short)ClientPacketIds.ChangeTrade: return new C.ChangeTrade(); case (short)ClientPacketIds.Attack: return new C.Attack(); case (short)ClientPacketIds.RangeAttack: return new C.RangeAttack(); case (short)ClientPacketIds.Harvest: return new C.Harvest(); case (short)ClientPacketIds.CallNPC: return new C.CallNPC(); case (short)ClientPacketIds.BuyItem: return new C.BuyItem(); case (short)ClientPacketIds.SellItem: return new C.SellItem(); case (short)ClientPacketIds.CraftItem: return new C.CraftItem(); case (short)ClientPacketIds.RepairItem: return new C.RepairItem(); case (short)ClientPacketIds.BuyItemBack: return new C.BuyItemBack(); case (short)ClientPacketIds.SRepairItem: return new C.SRepairItem(); case (short)ClientPacketIds.MagicKey: return new C.MagicKey(); case (short)ClientPacketIds.Magic: return new C.Magic(); case (short)ClientPacketIds.SwitchGroup: return new C.SwitchGroup(); case (short)ClientPacketIds.AddMember: return new C.AddMember(); case (short)ClientPacketIds.DellMember: return new C.DelMember(); case (short)ClientPacketIds.GroupInvite: return new C.GroupInvite(); case (short)ClientPacketIds.NewHero: return new C.NewHero(); case (short)ClientPacketIds.SetAutoPotValue: return new C.SetAutoPotValue(); case (short)ClientPacketIds.SetAutoPotItem: return new C.SetAutoPotItem(); case (short)ClientPacketIds.SetHeroBehaviour: return new C.SetHeroBehaviour(); case (short)ClientPacketIds.ChangeHero: return new C.ChangeHero(); case (short)ClientPacketIds.TownRevive: return new C.TownRevive(); case (short)ClientPacketIds.SpellToggle: return new C.SpellToggle(); case (short)ClientPacketIds.ConsignItem: return new C.ConsignItem(); case (short)ClientPacketIds.MarketSearch: return new C.MarketSearch(); case (short)ClientPacketIds.MarketRefresh: return new C.MarketRefresh(); case (short)ClientPacketIds.MarketPage: return new C.MarketPage(); case (short)ClientPacketIds.MarketBuy: return new C.MarketBuy(); case (short)ClientPacketIds.MarketGetBack: return new C.MarketGetBack(); case (short)ClientPacketIds.MarketSellNow: return new C.MarketSellNow(); case (short)ClientPacketIds.RequestUserName: return new C.RequestUserName(); case (short)ClientPacketIds.RequestChatItem: return new C.RequestChatItem(); case (short)ClientPacketIds.EditGuildMember: return new C.EditGuildMember(); case (short)ClientPacketIds.EditGuildNotice: return new C.EditGuildNotice(); case (short)ClientPacketIds.GuildInvite: return new C.GuildInvite(); case (short)ClientPacketIds.GuildNameReturn: return new C.GuildNameReturn(); case (short)ClientPacketIds.RequestGuildInfo: return new C.RequestGuildInfo(); case (short)ClientPacketIds.GuildStorageGoldChange: return new C.GuildStorageGoldChange(); case (short)ClientPacketIds.GuildStorageItemChange: return new C.GuildStorageItemChange(); case (short)ClientPacketIds.GuildWarReturn: return new C.GuildWarReturn(); case (short)ClientPacketIds.MarriageRequest: return new C.MarriageRequest(); case (short)ClientPacketIds.MarriageReply: return new C.MarriageReply(); case (short)ClientPacketIds.ChangeMarriage: return new C.ChangeMarriage(); case (short)ClientPacketIds.DivorceRequest: return new C.DivorceRequest(); case (short)ClientPacketIds.DivorceReply: return new C.DivorceReply(); case (short)ClientPacketIds.AddMentor: return new C.AddMentor(); case (short)ClientPacketIds.MentorReply: return new C.MentorReply(); case (short)ClientPacketIds.AllowMentor: return new C.AllowMentor(); case (short)ClientPacketIds.CancelMentor: return new C.CancelMentor(); case (short)ClientPacketIds.TradeRequest: return new C.TradeRequest(); case (short)ClientPacketIds.TradeReply: return new C.TradeReply(); case (short)ClientPacketIds.TradeGold: return new C.TradeGold(); case (short)ClientPacketIds.TradeConfirm: return new C.TradeConfirm(); case (short)ClientPacketIds.TradeCancel: return new C.TradeCancel(); case (short)ClientPacketIds.EquipSlotItem: return new C.EquipSlotItem(); case (short)ClientPacketIds.FishingCast: return new C.FishingCast(); case (short)ClientPacketIds.FishingChangeAutocast: return new C.FishingChangeAutocast(); case (short)ClientPacketIds.AcceptQuest: return new C.AcceptQuest(); case (short)ClientPacketIds.FinishQuest: return new C.FinishQuest(); case (short)ClientPacketIds.AbandonQuest: return new C.AbandonQuest(); case (short)ClientPacketIds.ShareQuest: return new C.ShareQuest(); case (short)ClientPacketIds.AcceptReincarnation: return new C.AcceptReincarnation(); case (short)ClientPacketIds.CancelReincarnation: return new C.CancelReincarnation(); case (short)ClientPacketIds.CombineItem: return new C.CombineItem(); case (short)ClientPacketIds.AwakeningNeedMaterials: return new C.AwakeningNeedMaterials(); case (short)ClientPacketIds.AwakeningLockedItem: return new C.AwakeningLockedItem(); case (short)ClientPacketIds.Awakening: return new C.Awakening(); case (short)ClientPacketIds.DisassembleItem: return new C.DisassembleItem(); case (short)ClientPacketIds.DowngradeAwakening: return new C.DowngradeAwakening(); case (short)ClientPacketIds.ResetAddedItem: return new C.ResetAddedItem(); case (short)ClientPacketIds.SendMail: return new C.SendMail(); case (short)ClientPacketIds.ReadMail: return new C.ReadMail(); case (short)ClientPacketIds.CollectParcel: return new C.CollectParcel(); case (short)ClientPacketIds.DeleteMail: return new C.DeleteMail(); case (short)ClientPacketIds.LockMail: return new C.LockMail(); case (short)ClientPacketIds.MailLockedItem: return new C.MailLockedItem(); case (short)ClientPacketIds.MailCost: return new C.MailCost(); case (short)ClientPacketIds.RequestIntelligentCreatureUpdates: return new C.RequestIntelligentCreatureUpdates(); case (short)ClientPacketIds.UpdateIntelligentCreature: return new C.UpdateIntelligentCreature(); case (short)ClientPacketIds.IntelligentCreaturePickup: return new C.IntelligentCreaturePickup(); case (short)ClientPacketIds.AddFriend: return new C.AddFriend(); case (short)ClientPacketIds.RemoveFriend: return new C.RemoveFriend(); case (short)ClientPacketIds.RefreshFriends: return new C.RefreshFriends(); case (short)ClientPacketIds.AddMemo: return new C.AddMemo(); case (short)ClientPacketIds.GuildBuffUpdate: return new C.GuildBuffUpdate(); case (short)ClientPacketIds.GameshopBuy: return new C.GameshopBuy(); case (short)ClientPacketIds.NPCConfirmInput: return new C.NPCConfirmInput(); case (short)ClientPacketIds.ReportIssue: return new C.ReportIssue(); case (short)ClientPacketIds.GetRanking: return new C.GetRanking(); case (short)ClientPacketIds.Opendoor: return new C.Opendoor(); case (short)ClientPacketIds.GetRentedItems: return new C.GetRentedItems(); case (short)ClientPacketIds.ItemRentalRequest: return new C.ItemRentalRequest(); case (short)ClientPacketIds.ItemRentalFee: return new C.ItemRentalFee(); case (short)ClientPacketIds.ItemRentalPeriod: return new C.ItemRentalPeriod(); case (short)ClientPacketIds.DepositRentalItem: return new C.DepositRentalItem(); case (short)ClientPacketIds.RetrieveRentalItem: return new C.RetrieveRentalItem(); case (short)ClientPacketIds.CancelItemRental: return new C.CancelItemRental(); case (short)ClientPacketIds.ItemRentalLockFee: return new C.ItemRentalLockFee(); case (short)ClientPacketIds.ItemRentalLockItem: return new C.ItemRentalLockItem(); case (short)ClientPacketIds.ConfirmItemRental: return new C.ConfirmItemRental(); case (short)ClientPacketIds.GuildTerritoryPage: return new C.GuildTerritoryPage(); case (short)ClientPacketIds.DeleteItem: return new C.DeleteItem(); default: return null; } } public static Packet GetServerPacket(short index) { switch (index) { case (short)ServerPacketIds.Connected: return new S.Connected(); case (short)ServerPacketIds.ClientVersion: return new S.ClientVersion(); case (short)ServerPacketIds.Disconnect: return new S.Disconnect(); case (short)ServerPacketIds.KeepAlive: return new S.KeepAlive(); case (short)ServerPacketIds.NewAccount: return new S.NewAccount(); case (short)ServerPacketIds.ChangePassword: return new S.ChangePassword(); case (short)ServerPacketIds.ChangePasswordBanned: return new S.ChangePasswordBanned(); case (short)ServerPacketIds.StorageUnlockResult: return new S.StorageUnlockResult(); case (short)ServerPacketIds.StoragePasswordResult: return new S.StoragePasswordResult(); case (short)ServerPacketIds.Login: return new S.Login(); case (short)ServerPacketIds.LoginBanned: return new S.LoginBanned(); case (short)ServerPacketIds.LoginSuccess: return new S.LoginSuccess(); case (short)ServerPacketIds.NewCharacter: return new S.NewCharacter(); case (short)ServerPacketIds.NewCharacterSuccess: return new S.NewCharacterSuccess(); case (short)ServerPacketIds.DeleteCharacter: return new S.DeleteCharacter(); case (short)ServerPacketIds.DeleteCharacterSuccess: return new S.DeleteCharacterSuccess(); case (short)ServerPacketIds.StartGame: return new S.StartGame(); case (short)ServerPacketIds.StartGameBanned: return new S.StartGameBanned(); case (short)ServerPacketIds.StartGameDelay: return new S.StartGameDelay(); case (short)ServerPacketIds.MapInformation: return new S.MapInformation(); case (short)ServerPacketIds.NewMapInfo: return new S.NewMapInfo(); case (short)ServerPacketIds.WorldMapSetup: return new S.WorldMapSetupInfo(); case (short)ServerPacketIds.SearchMapResult: return new S.SearchMapResult(); case (short)ServerPacketIds.UserInformation: return new S.UserInformation(); case (short)ServerPacketIds.UserSlotsRefresh: return new S.UserSlotsRefresh(); case (short)ServerPacketIds.UserLocation: return new S.UserLocation(); case (short)ServerPacketIds.ObjectPlayer: return new S.ObjectPlayer(); case (short)ServerPacketIds.ObjectHero: return new S.ObjectHero(); case (short)ServerPacketIds.ObjectRemove: return new S.ObjectRemove(); case (short)ServerPacketIds.ObjectTurn: return new S.ObjectTurn(); case (short)ServerPacketIds.ObjectWalk: return new S.ObjectWalk(); case (short)ServerPacketIds.ObjectRun: return new S.ObjectRun(); case (short)ServerPacketIds.Chat: return new S.Chat(); case (short)ServerPacketIds.ObjectChat: return new S.ObjectChat(); case (short)ServerPacketIds.NewItemInfo: return new S.NewItemInfo(); case (short)ServerPacketIds.NewMonsterInfo: return new S.NewMonsterInfo(); case (short)ServerPacketIds.NewNPCInfo: return new S.NewNPCInfo(); case (short)ServerPacketIds.NewHeroInfo: return new S.NewHeroInfo(); case (short)ServerPacketIds.NewChatItem: return new S.NewChatItem(); case (short)ServerPacketIds.MoveItem: return new S.MoveItem(); case (short)ServerPacketIds.EquipItem: return new S.EquipItem(); case (short)ServerPacketIds.MergeItem: return new S.MergeItem(); case (short)ServerPacketIds.RemoveItem: return new S.RemoveItem(); case (short)ServerPacketIds.RemoveSlotItem: return new S.RemoveSlotItem(); case (short)ServerPacketIds.TakeBackItem: return new S.TakeBackItem(); case (short)ServerPacketIds.TakeBackHeroItem: return new S.TakeBackHeroItem(); case (short)ServerPacketIds.TransferHeroItem: return new S.TransferHeroItem(); case (short)ServerPacketIds.StoreItem: return new S.StoreItem(); case (short)ServerPacketIds.DepositRefineItem: return new S.DepositRefineItem(); case (short)ServerPacketIds.RetrieveRefineItem: return new S.RetrieveRefineItem(); case (short)ServerPacketIds.RefineItem: return new S.RefineItem(); case (short)ServerPacketIds.DepositTradeItem: return new S.DepositTradeItem(); case (short)ServerPacketIds.RetrieveTradeItem: return new S.RetrieveTradeItem(); case (short)ServerPacketIds.SplitItem: return new S.SplitItem(); case (short)ServerPacketIds.SplitItem1: return new S.SplitItem1(); case (short)ServerPacketIds.UseItem: return new S.UseItem(); case (short)ServerPacketIds.DropItem: return new S.DropItem(); case (short)ServerPacketIds.PlayerUpdate: return new S.PlayerUpdate(); case (short)ServerPacketIds.PlayerInspect: return new S.PlayerInspect(); case (short)ServerPacketIds.LogOutSuccess: return new S.LogOutSuccess(); case (short)ServerPacketIds.LogOutFailed: return new S.LogOutFailed(); case (short)ServerPacketIds.ReturnToLogin: return new S.ReturnToLogin(); case (short)ServerPacketIds.TimeOfDay: return new S.TimeOfDay(); case (short)ServerPacketIds.ChangeAMode: return new S.ChangeAMode(); case (short)ServerPacketIds.ChangePMode: return new S.ChangePMode(); case (short)ServerPacketIds.ObjectItem: return new S.ObjectItem(); case (short)ServerPacketIds.ObjectGold: return new S.ObjectGold(); case (short)ServerPacketIds.GainedItem: return new S.GainedItem(); case (short)ServerPacketIds.GainedGold: return new S.GainedGold(); case (short)ServerPacketIds.LoseGold: return new S.LoseGold(); case (short)ServerPacketIds.GainedCredit: return new S.GainedCredit(); case (short)ServerPacketIds.LoseCredit: return new S.LoseCredit(); case (short)ServerPacketIds.ObjectMonster: return new S.ObjectMonster(); case (short)ServerPacketIds.ObjectAttack: return new S.ObjectAttack(); case (short)ServerPacketIds.Struck: return new S.Struck(); case (short)ServerPacketIds.DamageIndicator: return new S.DamageIndicator(); case (short)ServerPacketIds.ObjectStruck: return new S.ObjectStruck(); case (short)ServerPacketIds.DuraChanged: return new S.DuraChanged(); case (short)ServerPacketIds.HealthChanged: return new S.HealthChanged(); case (short)ServerPacketIds.HeroHealthChanged: return new S.HeroHealthChanged(); case (short)ServerPacketIds.DeleteItem: return new S.DeleteItem(); case (short)ServerPacketIds.Death: return new S.Death(); case (short)ServerPacketIds.ObjectDied: return new S.ObjectDied(); case (short)ServerPacketIds.ColourChanged: return new S.ColourChanged(); case (short)ServerPacketIds.ObjectColourChanged: return new S.ObjectColourChanged(); case (short)ServerPacketIds.ObjectGuildNameChanged: return new S.ObjectGuildNameChanged(); case (short)ServerPacketIds.GainExperience: return new S.GainExperience(); case (short)ServerPacketIds.GainHeroExperience: return new S.GainHeroExperience(); case (short)ServerPacketIds.LevelChanged: return new S.LevelChanged(); case (short)ServerPacketIds.HeroLevelChanged: return new S.HeroLevelChanged(); case (short)ServerPacketIds.ObjectLeveled: return new S.ObjectLeveled(); case (short)ServerPacketIds.ObjectHarvest: return new S.ObjectHarvest(); case (short)ServerPacketIds.ObjectHarvested: return new S.ObjectHarvested(); case (short)ServerPacketIds.ObjectNpc: return new S.ObjectNPC(); case (short)ServerPacketIds.NPCResponse: return new S.NPCResponse(); case (short)ServerPacketIds.ObjectHide: return new S.ObjectHide(); case (short)ServerPacketIds.ObjectShow: return new S.ObjectShow(); case (short)ServerPacketIds.Poisoned: return new S.Poisoned(); case (short)ServerPacketIds.ObjectPoisoned: return new S.ObjectPoisoned(); case (short)ServerPacketIds.MapChanged: return new S.MapChanged(); case (short)ServerPacketIds.ObjectTeleportOut: return new S.ObjectTeleportOut(); case (short)ServerPacketIds.ObjectTeleportIn: return new S.ObjectTeleportIn(); case (short)ServerPacketIds.TeleportIn: return new S.TeleportIn(); case (short)ServerPacketIds.NPCGoods: return new S.NPCGoods(); case (short)ServerPacketIds.NPCSell: return new S.NPCSell(); case (short)ServerPacketIds.NPCRepair: return new S.NPCRepair(); case (short)ServerPacketIds.NPCSRepair: return new S.NPCSRepair(); case (short)ServerPacketIds.NPCRefine: return new S.NPCRefine(); case (short)ServerPacketIds.NPCCheckRefine: return new S.NPCCheckRefine(); case (short)ServerPacketIds.NPCCollectRefine: return new S.NPCCollectRefine(); case (short)ServerPacketIds.NPCReplaceWedRing: return new S.NPCReplaceWedRing(); case (short)ServerPacketIds.NPCStorage: return new S.NPCStorage(); case (short)ServerPacketIds.SellItem: return new S.SellItem(); case (short)ServerPacketIds.CraftItem: return new S.CraftItem(); case (short)ServerPacketIds.RepairItem: return new S.RepairItem(); case (short)ServerPacketIds.ItemRepaired: return new S.ItemRepaired(); case (short)ServerPacketIds.ItemSlotSizeChanged: return new S.ItemSlotSizeChanged(); case (short)ServerPacketIds.ItemSealChanged: return new S.ItemSealChanged(); case (short)ServerPacketIds.NewMagic: return new S.NewMagic(); case (short)ServerPacketIds.MagicLeveled: return new S.MagicLeveled(); case (short)ServerPacketIds.Magic: return new S.Magic(); case (short)ServerPacketIds.MagicDelay: return new S.MagicDelay(); case (short)ServerPacketIds.MagicCast: return new S.MagicCast(); case (short)ServerPacketIds.ObjectMagic: return new S.ObjectMagic(); case (short)ServerPacketIds.ObjectProjectile: return new S.ObjectProjectile(); case (short)ServerPacketIds.ObjectEffect: return new S.ObjectEffect(); case (short)ServerPacketIds.RangeAttack: return new S.RangeAttack(); case (short)ServerPacketIds.Pushed: return new S.Pushed(); case (short)ServerPacketIds.ObjectPushed: return new S.ObjectPushed(); case (short)ServerPacketIds.ObjectName: return new S.ObjectName(); case (short)ServerPacketIds.UserStorage: return new S.UserStorage(); case (short)ServerPacketIds.SwitchGroup: return new S.SwitchGroup(); case (short)ServerPacketIds.DeleteGroup: return new S.DeleteGroup(); case (short)ServerPacketIds.DeleteMember: return new S.DeleteMember(); case (short)ServerPacketIds.GroupInvite: return new S.GroupInvite(); case (short)ServerPacketIds.AddMember: return new S.AddMember(); case (short)ServerPacketIds.GroupMembersMap: return new S.GroupMembersMap(); case (short)ServerPacketIds.SendMemberLocation: return new S.SendMemberLocation(); case (short)ServerPacketIds.Revived: return new S.Revived(); case (short)ServerPacketIds.ObjectRevived: return new S.ObjectRevived(); case (short)ServerPacketIds.SpellToggle: return new S.SpellToggle(); case (short)ServerPacketIds.ObjectHealth: return new S.ObjectHealth(); case (short)ServerPacketIds.ObjectMana: return new S.ObjectMana(); case (short)ServerPacketIds.MapEffect: return new S.MapEffect(); case (short)ServerPacketIds.AllowObserve: return new S.AllowObserve(); case (short)ServerPacketIds.ObjectRangeAttack: return new S.ObjectRangeAttack(); case (short)ServerPacketIds.AddBuff: return new S.AddBuff(); case (short)ServerPacketIds.RemoveBuff: return new S.RemoveBuff(); case (short)ServerPacketIds.PauseBuff: return new S.PauseBuff(); case (short)ServerPacketIds.ObjectHidden: return new S.ObjectHidden(); case (short)ServerPacketIds.RefreshItem: return new S.RefreshItem(); case (short)ServerPacketIds.ObjectSpell: return new S.ObjectSpell(); case (short)ServerPacketIds.UserDash: return new S.UserDash(); case (short)ServerPacketIds.ObjectDash: return new S.ObjectDash(); case (short)ServerPacketIds.UserDashFail: return new S.UserDashFail(); case (short)ServerPacketIds.ObjectDashFail: return new S.ObjectDashFail(); case (short)ServerPacketIds.NPCConsign: return new S.NPCConsign(); case (short)ServerPacketIds.NPCMarket: return new S.NPCMarket(); case (short)ServerPacketIds.NPCMarketPage: return new S.NPCMarketPage(); case (short)ServerPacketIds.ConsignItem: return new S.ConsignItem(); case (short)ServerPacketIds.MarketFail: return new S.MarketFail(); case (short)ServerPacketIds.MarketSuccess: return new S.MarketSuccess(); case (short)ServerPacketIds.ObjectSitDown: return new S.ObjectSitDown(); case (short)ServerPacketIds.InTrapRock: return new S.InTrapRock(); case (short)ServerPacketIds.RemoveMagic: return new S.RemoveMagic(); case (short)ServerPacketIds.BaseStatsInfo: return new S.BaseStatsInfo(); case (short)ServerPacketIds.HeroBaseStatsInfo: return new S.HeroBaseStatsInfo(); case (short)ServerPacketIds.UserName: return new S.UserName(); case (short)ServerPacketIds.ChatItemStats: return new S.ChatItemStats(); case (short)ServerPacketIds.GuildMemberChange: return new S.GuildMemberChange(); case (short)ServerPacketIds.GuildNoticeChange: return new S.GuildNoticeChange(); case (short)ServerPacketIds.GuildStatus: return new S.GuildStatus(); case (short)ServerPacketIds.GuildInvite: return new S.GuildInvite(); case (short)ServerPacketIds.GuildExpGain: return new S.GuildExpGain(); case (short)ServerPacketIds.GuildNameRequest: return new S.GuildNameRequest(); case (short)ServerPacketIds.GuildStorageGoldChange: return new S.GuildStorageGoldChange(); case (short)ServerPacketIds.GuildStorageItemChange: return new S.GuildStorageItemChange(); case (short)ServerPacketIds.GuildStorageList: return new S.GuildStorageList(); case (short)ServerPacketIds.GuildRequestWar: return new S.GuildRequestWar(); case (short)ServerPacketIds.HeroCreateRequest: return new S.HeroCreateRequest(); case (short)ServerPacketIds.NewHero: return new S.NewHero(); case (short)ServerPacketIds.HeroInformation: return new S.HeroInformation(); case (short)ServerPacketIds.UpdateHeroSpawnState: return new S.UpdateHeroSpawnState(); case (short)ServerPacketIds.UnlockHeroAutoPot: return new S.UnlockHeroAutoPot(); case (short)ServerPacketIds.SetAutoPotValue: return new S.SetAutoPotValue(); case (short)ServerPacketIds.SetAutoPotItem: return new S.SetAutoPotItem(); case (short)ServerPacketIds.SetHeroBehaviour: return new S.SetHeroBehaviour(); case (short)ServerPacketIds.ManageHeroes: return new S.ManageHeroes(); case (short)ServerPacketIds.ChangeHero: return new S.ChangeHero(); case (short)ServerPacketIds.DefaultNPC: return new S.DefaultNPC(); case (short)ServerPacketIds.NPCUpdate: return new S.NPCUpdate(); case (short)ServerPacketIds.NPCImageUpdate: return new S.NPCImageUpdate(); case (short)ServerPacketIds.MarriageRequest: return new S.MarriageRequest(); case (short)ServerPacketIds.DivorceRequest: return new S.DivorceRequest(); case (short)ServerPacketIds.MentorRequest: return new S.MentorRequest(); case (short)ServerPacketIds.TradeRequest: return new S.TradeRequest(); case (short)ServerPacketIds.TradeAccept: return new S.TradeAccept(); case (short)ServerPacketIds.TradeGold: return new S.TradeGold(); case (short)ServerPacketIds.TradeItem: return new S.TradeItem(); case (short)ServerPacketIds.TradeConfirm: return new S.TradeConfirm(); case (short)ServerPacketIds.TradeCancel: return new S.TradeCancel(); case (short)ServerPacketIds.MountUpdate: return new S.MountUpdate(); case (short)ServerPacketIds.TransformUpdate: return new S.TransformUpdate(); case (short)ServerPacketIds.EquipSlotItem: return new S.EquipSlotItem(); case (short)ServerPacketIds.FishingUpdate: return new S.FishingUpdate(); case (short)ServerPacketIds.ChangeQuest: return new S.ChangeQuest(); case (short)ServerPacketIds.CompleteQuest: return new S.CompleteQuest(); case (short)ServerPacketIds.ShareQuest: return new S.ShareQuest(); case (short)ServerPacketIds.NewQuestInfo: return new S.NewQuestInfo(); case (short)ServerPacketIds.GainedQuestItem: return new S.GainedQuestItem(); case (short)ServerPacketIds.DeleteQuestItem: return new S.DeleteQuestItem(); case (short)ServerPacketIds.CancelReincarnation: return new S.CancelReincarnation(); case (short)ServerPacketIds.RequestReincarnation: return new S.RequestReincarnation(); case (short)ServerPacketIds.UserBackStep: return new S.UserBackStep(); case (short)ServerPacketIds.ObjectBackStep: return new S.ObjectBackStep(); case (short)ServerPacketIds.UserDashAttack: return new S.UserDashAttack(); case (short)ServerPacketIds.ObjectDashAttack: return new S.ObjectDashAttack(); case (short)ServerPacketIds.UserAttackMove://Warrior Skill - SlashingBurst return new S.UserAttackMove(); case (short)ServerPacketIds.CombineItem: return new S.CombineItem(); case (short)ServerPacketIds.ItemUpgraded: return new S.ItemUpgraded(); case (short)ServerPacketIds.SetConcentration: return new S.SetConcentration(); case (short)ServerPacketIds.SetElemental: return new S.SetElemental(); case (short)ServerPacketIds.RemoveDelayedExplosion: return new S.RemoveDelayedExplosion(); case (short)ServerPacketIds.ObjectDeco: return new S.ObjectDeco(); case (short)ServerPacketIds.ObjectSneaking: return new S.ObjectSneaking(); case (short)ServerPacketIds.ObjectLevelEffects: return new S.ObjectLevelEffects(); case (short)ServerPacketIds.SetBindingShot: return new S.SetBindingShot(); case (short)ServerPacketIds.SendOutputMessage: return new S.SendOutputMessage(); case (short)ServerPacketIds.NPCAwakening: return new S.NPCAwakening(); case (short)ServerPacketIds.NPCDisassemble: return new S.NPCDisassemble(); case (short)ServerPacketIds.NPCDowngrade: return new S.NPCDowngrade(); case (short)ServerPacketIds.NPCReset: return new S.NPCReset(); case (short)ServerPacketIds.AwakeningNeedMaterials: return new S.AwakeningNeedMaterials(); case (short)ServerPacketIds.AwakeningLockedItem: return new S.AwakeningLockedItem(); case (short)ServerPacketIds.Awakening: return new S.Awakening(); case (short)ServerPacketIds.ReceiveMail: return new S.ReceiveMail(); case (short)ServerPacketIds.MailLockedItem: return new S.MailLockedItem(); case (short)ServerPacketIds.MailSent: return new S.MailSent(); case (short)ServerPacketIds.MailSendRequest: return new S.MailSendRequest(); case (short)ServerPacketIds.ParcelCollected: return new S.ParcelCollected(); case (short)ServerPacketIds.MailCost: return new S.MailCost(); case (short)ServerPacketIds.ResizeInventory: return new S.ResizeInventory(); case (short)ServerPacketIds.ResizeStorage: return new S.ResizeStorage(); case (short)ServerPacketIds.NewIntelligentCreature: return new S.NewIntelligentCreature(); case (short)ServerPacketIds.UpdateIntelligentCreatureList: return new S.UpdateIntelligentCreatureList(); case (short)ServerPacketIds.IntelligentCreatureEnableRename: return new S.IntelligentCreatureEnableRename(); case (short)ServerPacketIds.IntelligentCreaturePickup: return new S.IntelligentCreaturePickup(); case (short)ServerPacketIds.NPCPearlGoods: return new S.NPCPearlGoods(); case (short)ServerPacketIds.FriendUpdate: return new S.FriendUpdate(); case (short)ServerPacketIds.LoverUpdate: return new S.LoverUpdate(); case (short)ServerPacketIds.MentorUpdate: return new S.MentorUpdate(); case (short)ServerPacketIds.GuildBuffList: return new S.GuildBuffList(); case (short)ServerPacketIds.GameShopInfo: return new S.GameShopInfo(); case (short)ServerPacketIds.GameShopStock: return new S.GameShopStock(); case (short)ServerPacketIds.NPCRequestInput: return new S.NPCRequestInput(); case (short)ServerPacketIds.Rankings: return new S.Rankings(); case (short)ServerPacketIds.Opendoor: return new S.Opendoor(); case (short)ServerPacketIds.GetRentedItems: return new S.GetRentedItems(); case (short)ServerPacketIds.ItemRentalRequest: return new S.ItemRentalRequest(); case (short)ServerPacketIds.ItemRentalFee: return new S.ItemRentalFee(); case (short)ServerPacketIds.ItemRentalPeriod: return new S.ItemRentalPeriod(); case (short)ServerPacketIds.DepositRentalItem: return new S.DepositRentalItem(); case (short)ServerPacketIds.RetrieveRentalItem: return new S.RetrieveRentalItem(); case (short)ServerPacketIds.UpdateRentalItem: return new S.UpdateRentalItem(); case (short)ServerPacketIds.CancelItemRental: return new S.CancelItemRental(); case (short)ServerPacketIds.ItemRentalLock: return new S.ItemRentalLock(); case (short)ServerPacketIds.ItemRentalPartnerLock: return new S.ItemRentalPartnerLock(); case (short)ServerPacketIds.CanConfirmItemRental: return new S.CanConfirmItemRental(); case (short)ServerPacketIds.ConfirmItemRental: return new S.ConfirmItemRental(); case (short)ServerPacketIds.NewRecipeInfo: return new S.NewRecipeInfo(); case (short)ServerPacketIds.OpenBrowser: return new S.OpenBrowser(); case (short)ServerPacketIds.PlaySound: return new S.PlaySound(); case (short)ServerPacketIds.SetTimer: return new S.SetTimer(); case (short)ServerPacketIds.ExpireTimer: return new S.ExpireTimer(); case (short)ServerPacketIds.UpdateNotice: return new S.UpdateNotice(); case (short)ServerPacketIds.Roll: return new S.Roll(); case (short)ServerPacketIds.SetCompass: return new S.SetCompass(); case (short)ServerPacketIds.GuildTerritoryPage: return new S.GuildTerritoryPage(); default: return null; } } }