public static AddItemToShopInfo RecvAddItemToShop(Packet p)
        {
            p.Skip(2);
            byte frombag = p.ReadByte();
            byte fromslot = p.ReadByte();
            int itemid = p.ReadInt();
            byte slot = p.ReadByte();
            int price = p.ReadInt();

            AddItemToShopInfo i = new AddItemToShopInfo
            {
                FromBag = frombag,
                FromSlot = fromslot,
                ItemID = itemid,
                Slot = slot,
                Price = price
            };

            return i;
        }
        public static AcceptImbueItem RecvAcceptImbueItem(Packet p)
        {
            p.Skip(2);
            int NpcID = p.ReadInt();

            int toImbueID = p.ReadInt();
            byte toImbueBag = p.ReadByte();
            byte toImbueSlot = p.ReadByte();

            int imbueItem1ID = p.ReadInt();
            byte imbueItem1Bag = p.ReadByte();
            byte imbueItem1Slot = p.ReadByte();

            int imbueItem2ID = p.ReadInt();
            byte imbueItem2Bag = p.ReadByte();
            byte imbueItem2Slot = p.ReadByte();

            int imbueItem3ID = p.ReadInt();
            byte imbueItem3Bag = p.ReadByte();
            byte imbueItem3Slot = p.ReadByte();

            AcceptImbueItem i = new AcceptImbueItem
            {
                NpcID = NpcID,
                ToImbueItemID = toImbueID,
                ToImbueItemBag = toImbueBag,
                ToImbueItemSlot = toImbueSlot,
                ImbueItem1ID = imbueItem1ID,
                ImbueItem1Bag = imbueItem1Bag,
                ImbueItem1Slot = imbueItem1Slot,
                ImbueItem2ID = imbueItem2ID,
                ImbueItem2Bag = imbueItem2Bag,
                ImbueItem2Slot = imbueItem2Slot,
                ImbueItem3ID = imbueItem3ID,
                ImbueItem3Bag = imbueItem3Bag,
                ImbueItem3Slot = imbueItem3Slot
            };

            return i;
        }
        public static AddItemToWarehouseInfo RecvAddItemToWarehouse(Packet p)
        {
            p.Skip(2);
            int charid = p.ReadInt();
            int itemid = p.ReadInt();
            byte frombag = p.ReadByte();
            byte fromslot = p.ReadByte();
            byte toslot = p.ReadByte();
            byte tobag = p.ReadByte();

            AddItemToWarehouseInfo i = new AddItemToWarehouseInfo
            {
                CharacterID = charid,
                ItemID = itemid,
                FromBag = frombag,
                FromSlot = fromslot,
                ToBag = tobag,
                ToSlot = toslot
            };

            return i;
        }
        public static BuyItemInfo RecvBuyItem(Packet p)
        {
            p.Skip(2);
            int npcid = p.ReadInt();
            short wref = p.ReadShort();
            p.Skip(2);
            short amount = p.ReadShort();
            p.Skip(2);
            byte bag = p.ReadByte();

            BuyItemInfo i = new BuyItemInfo
            {
                NpcID = npcid,
                ReferenceID = wref,
                Amount = amount,
                Bag = bag
            };

            return i;
        }
        public static DropItemInfo RecvDropItem(Packet p)
        {
            p.Skip(2);
            byte frombag = p.ReadByte();
            byte fromslot = p.ReadByte();
            int itemid = p.ReadInt();
            short tox = p.ReadShort();
            short toy = p.ReadShort();
            byte toz = p.ReadByte();
            int something = p.ReadInt();

            DropItemInfo drop = new DropItemInfo
            {
                FromBag = frombag,
                FromSlot = fromslot,
                ItemID = itemid,
                ToX = tox,
                ToY = toy,
                ToZ = toz,
                Something = something
            };

            return drop;
        }
        public static LeavePartyInfo RecvLeaveParty(Packet p)
        {
            p.Skip(2);
            int partyid = p.ReadInt();

            LeavePartyInfo i = new LeavePartyInfo
            {
                PartyID = partyid
            };

            return i;
        }
 public static int RecvWalkToPortal(Packet p)
 {
     p.Skip(2);
     int mapid = p.ReadInt();
     return mapid;
 }
        public static MovementInfo RecvStopMoving(Packet p)
        {
            p.Skip(2);
            int charid = p.ReadInt();

            short from_x = p.ReadShort();
            short from_y = p.ReadShort();
            byte from_z = p.ReadByte();

            MovementInfo mi = new MovementInfo
            {
                PacketID = 3,
                CharacterID = charid,
                FromX = from_x,
                FromY = from_y,
                FromZ = from_z,
            };

            return mi;
        }
        public static MovementInfo RecvStartMoving(Packet p)
        {
            p.Skip(2);
            int charid = p.ReadInt();

            short from_x = p.ReadShort();
            short from_y = p.ReadShort();
            byte from_z = p.ReadByte();

            short to_x = p.ReadShort();
            short to_y = p.ReadShort();
            byte to_z = p.ReadByte();
            short direction = p.ReadShort();

            MovementInfo mi = new MovementInfo
            {
                PacketID = 1,
                CharacterID = charid,
                FromX = from_x,
                FromY = from_y,
                FromZ = from_z,
                ToX = to_x,
                ToY = to_y,
                ToZ = to_z,
                Rotation = direction
            };

            return mi;
        }
        public static PickItemInfo RecvPickItem(Packet p)
        {
            p.Skip(2);
            int mapid = p.ReadInt();
            int itemid = p.ReadInt();
            short fromx = p.ReadShort();
            short fromy = p.ReadShort();
            byte fromz = p.ReadByte();
            int mapitemid = p.ReadInt();
            short amount = p.ReadShort();

            PickItemInfo pi = new PickItemInfo
            {
                MapID = mapid,
                ItemID = itemid,
                FromX = fromx,
                FromY = fromy,
                FromZ = fromz,
                MapItemID = mapitemid,
                Amount = amount
            };

            return pi;
        }
        public static MoveItemInfo RecvMoveItem(Packet p)
        {
            p.Skip(2);
            byte frombag = p.ReadByte();
            byte fromslot = p.ReadByte();
            int itemid = p.ReadInt();
            byte tobag = p.ReadByte();
            byte toslot = p.ReadByte();
            int itemunder = p.ReadInt();

            MoveItemInfo mii = new MoveItemInfo
            {
                FromBag = frombag,
                FromSlot = fromslot,
                ItemID = itemid,
                ToBag = tobag,
                ToSlot = toslot,
                ItemIDUnder = itemunder
            };

            return mii;
        }
        public static PartyRequestInfo RecvPartyRequest(Packet p)
        {
            p.Skip(2);
            int asker = p.ReadInt();
            int target = p.ReadInt();
            PartyError error = (PartyError)p.ReadByte();
            PartyType type = (PartyType)p.ReadByte();

            PartyRequestInfo i = new PartyRequestInfo
            {
                AskerID = asker,
                TargetID = target,
                Error = error,
                Type = type
            };

            return i;
        }
        public static OpenWarehouseInfo RecvOpenWarehouse(Packet p)
        {
            p.Skip(2);
            int npcid = p.ReadInt();

            OpenWarehouseInfo i = new OpenWarehouseInfo
            {
                NpcID = npcid
            };

            return i;
        }
        public static OpenOtherPlayerShopInfo RecvOpenOtherPlayerShop(Packet p)
        {
            p.Skip(2);
            int playerid = p.ReadInt();

            OpenOtherPlayerShopInfo i = new OpenOtherPlayerShopInfo
            {
                CharacterID = playerid
            };

            return i;
        }
        public static MoveWarehouseItemInfo RecvMoveWarehouseItem(Packet p)
        {
            p.Skip(2);
            byte fromslot = p.ReadByte();
            int itemid = p.ReadInt();
            byte toslot = p.ReadByte();
            int itemunderid = p.ReadInt();

            MoveWarehouseItemInfo i = new MoveWarehouseItemInfo
            {
                FromSlot = fromslot,
                ItemID = itemid,
                ToSlot = toslot,
                ItemUnderID = itemunderid
            };

            return i;
        }
        public static MoveShopItemToBagInfo RecvMoveShopItemToBag(Packet p)
        {
            p.Skip(2);
            byte fromslot = p.ReadByte();
            int itemid = p.ReadInt();
            byte tobag = p.ReadByte();
            byte toslot = p.ReadByte();

            MoveShopItemToBagInfo i = new MoveShopItemToBagInfo
            {
                FromSlot = fromslot,
                ItemID = itemid,
                ToBag = tobag,
                ToSlot = toslot
            };

            return i;
        }
        public static MonsterSpawnRequestInfo RecvMonsterSpawnRequest(Packet p)
        {
            p.Skip(2);
            int monsterId = p.ReadInt();
            int mapId = p.ReadInt();

            MonsterSpawnRequestInfo i = new MonsterSpawnRequestInfo
            {
                MonsterId = monsterId,
                MapId = mapId
            };

            return i;
        }
        public static ImbueItemInfo RecvImbueItem(Packet p)
        {
            p.Skip(2);
            int itemid = p.ReadInt();
            byte bag = p.ReadByte();
            byte slot = p.ReadByte();

            ImbueItemInfo i = new ImbueItemInfo
            {
                ItemID = itemid,
                Bag = bag,
                Slot = slot
            };

            return i;
        }
        public static MapRequestInfo RecvMapRequest(Packet p)
        {
            p.Skip(2);
            int mapID = p.ReadInt();

            MapRequestInfo mr = new MapRequestInfo
            {
                MapID = mapID
            };

            return mr;
        }
        public static RequestPetStats RecvPetStatRequest(Packet p)
        {
            p.Skip(2);
            int mapid = p.ReadInt();
            int petid = p.ReadInt();

            RequestPetStats i = new RequestPetStats
            {
                MapID = mapid,
                PetID = petid
            };

            return i;
        }
        public static NpcTradeInfo RecvNpcTrade(Packet p)
        {
            p.Skip(2);
            int map = p.ReadInt();
            int npc = p.ReadInt();
            byte bag = p.ReadByte();

            NpcTradeInfo nti = new NpcTradeInfo
            {
                MapID = map,
                NpcID = npc,
                Bag = bag
            };

            return nti;
        }
        public static PetRequestInfo RecvPlayerPetRequest(Packet p)
        {
            p.Skip(2);
            int charid = p.ReadInt();

            PetRequestInfo sr = new PetRequestInfo
            {
                CharacterID = charid
            };

            return sr;
        }
        public static SpawnRequestInfo RecvSpawnOtherPlayerRequest(Packet p)
        {
            p.Skip(2);
            int charid = p.ReadInt();
            int mapid = p.ReadInt();

            SpawnRequestInfo sr = new SpawnRequestInfo
            {
                CharacterID = charid,
                MapID = mapid
            };

            return sr;
        }
        public static RenamePetInfo RecvRenamePet(Packet p)
        {
            p.Skip(2);
            int mapid = p.ReadInt();
            int petid = p.ReadInt();
            string newname = p.ReadString();

            RenamePetInfo i = new RenamePetInfo
            {
                MapID = mapid,
                PetID = petid,
                NewName = newname
            };

            return i;
        }
        public static StatRequestInfo RecvStatRequest(Packet p)
        {
            p.Skip(2);
            int charid = p.ReadInt();
            int mapid = p.ReadInt();

            StatRequestInfo sr = new StatRequestInfo
            {
                CharacterID = charid,
                MapID = mapid
            };

            return sr;
        }
        public static ChannelLogin RecvChannelLogin(Packet p)
        {
            p.Skip(2);
            int characterID = p.ReadInt();
            int accountID = p.ReadShort();
            int channelID = p.ReadShort();
            int worldID = p.ReadByte();

            ChannelLogin u = new ChannelLogin()
            {
                CharacterID = characterID,
                AccountID = accountID,
                ChannelID = channelID,
                WorldID = worldID
            };

            return u;
        }
        /// <summary>
        /// Generates the unit server login information from packet
        /// </summary>
        /// <param name="p"></param>
        /// <returns></returns>
        public static UnitLogin RecvUnitLogin(Packet p)
        {
            p.Skip(2);
            string account = p.ReadString();
            int hash = p.ReadShort();
            int map = p.ReadShort();
            int channel = p.ReadByte();
            p.Skip(6);
            int characterID = p.ReadInt();

            UnitLogin u = new UnitLogin()
            {
                Account = account,
                AccountID = hash,
                Channel = channel,
                CharacterID = characterID
            };

            return u;
        }
        public static KillPet RecvKillPet(Packet p)
        {
            p.Skip(2);
            byte type = p.ReadByte();
            int id = p.ReadInt();
            byte action = p.ReadByte();

            KillPet i = new KillPet
            {
                Type = type,
                PetID = id,
                Action = action
            };

            return i;
        }
        public static ChatMessageInfo RecvChatMessage(Packet p)
        {
            p.Skip(2);
            byte type = p.ReadByte();
            int targetId = p.ReadInt();
            string message = p.ReadString();
            string targetName = p.ReadString(); // if you dont have id

            ChatMessageInfo cmi = new ChatMessageInfo
            {
                Type = (ChatType)type,
                TargetID = targetId,
                Message = message,
                TargetName = targetName
            };

            return cmi;
        }
        public static LearnSkillInfo RecvLearnSkill(Packet p)
        {
            p.Skip(2);
            int skillid = p.ReadInt();

            LearnSkillInfo i = new LearnSkillInfo
            {
                SkillID = skillid
            };

            return i;
        }