/////////////////////////////////////////////////////////////////////////////////
        // Item Switch
        /////////////////////////////////////////////////////////////////////////////////
        public void ItemMain()
        {
            #region Item Actions
            try
            {
                if (Character.State.Die || Character.Information.Scroll) return;
                PacketReader Reader = new PacketReader(PacketInformation.buffer);
                byte iType = Reader.Byte();

                switch (iType)
                {
                    case 0:
                        if (Character.State.Busy) return;
                        ItemMove(Reader.Byte(), Reader.Byte(), Reader.Int16());
                        break;
                    case 1:
                        ItemMoveInStorage(Reader.Byte(), Reader.Byte(), Reader.Int16());
                        break;
                    case 2:
                        Player_MoveItemToStorage(Reader.Byte(), Reader.Byte(), Reader.Int32());
                        break;
                    case 3:
                        Player_MoveStorageItemToInv(Reader.Byte(), Reader.Byte(), Reader.Int32());
                        break;
                    case 4:
                        ItemMoveToExhangePage(Reader.Byte());
                        break;
                    case 5:
                        ItemMoveExchangeToInv(Reader.Byte());
                        break;
                    case 8:
                        Player_BuyItem(Reader.Byte(), Reader.Byte(), Reader.Int16(), Reader.Int32());
                        break;
                    case 9:
                        Player_SellItem(Reader.Byte(), Reader.Int16(), Reader.UInt16());
                        break;
                    case 7:
                        if (Character.State.Busy) return;
                        Player_DropItem(Reader.Byte());
                        break;
                    case 10:
                        if (Character.State.Busy) return;
                        Player_DropGold(Reader.UInt64());
                        break;
                    case 11:
                        Player_TakeGoldW(iType, Reader.Int64());
                        break;
                    case 12:
                        Player_GiveGoldW(iType, Reader.Int64());
                        break;
                    case 13:
                        ItemExchangeGold(Reader.Int64());
                        break;
                    case 16:
                        MovePetToPet(Reader.Int32(), Reader.Byte(), Reader.Byte(), Reader.Int16());
                        break;
                    case 24:
                        //Player_BuyItemFromMall(Reader.Byte(), Reader.Byte(), Reader.Byte(), Reader.Byte(), Reader.Byte(), Reader.Text());
                        break;
                    case 26:
                        MoveItemFromPet(Reader.Int32(), Reader.Byte(), Reader.Byte());
                        break;
                    case 27:
                        MoveItemToPet(Reader.Int32(), Reader.Byte(), Reader.Byte());
                        break;
                    case 29:
                        ItemMoveInStorage(Reader.Byte(), Reader.Byte(), Reader.Int16());//Move inside guild storage
                        break;
                    case 30:
                        Player_MoveItemToStorage(Reader.Byte(), Reader.Byte(), Reader.Int32());//Move to guild storage
                        break;
                    case 31:
                        Player_MoveStorageItemToInv(Reader.Byte(), Reader.Byte(), Reader.Int32());//Move from guild storage
                        break;
                    case 32:
                        Player_GiveGoldW(iType, Reader.Int64());//Guild storage
                        break;
                    case 33:
                        Player_TakeGoldW(iType, Reader.Int64());//Guild storage
                        break;
                    case 35:
                        ItemAvatarUnEquip(Reader.Byte(), Reader.Byte());
                        break;
                    case 36:
                        ItemAvatarEquip(Reader.Byte(), Reader.Byte());
                        break;
                    default:
                        Print.Format("Unknown Item Function:{0}:{1}", iType, Decode.StringToPack(PacketInformation.buffer));
                        break;
                }
                Reader.Close();
            }
            catch (Exception ex)
            {
                Log.Exception(ex);
            }
            #endregion
        }
        public void StallMain()
        {
            try
            {
                PacketReader Reader = new PacketReader(PacketInformation.buffer);
                byte Type = Reader.Byte();

                //Item edit
                if (Type == 1)
                {
                    if (Character.Network.Stall.isOpened) return;
                    byte stallslot = Reader.Byte();
                    Reader.Skip(2);
                    ulong price = Reader.UInt64();
                    if (price <= 999999999)
                    {
                        int StallItemIndex = Character.Network.Stall.ItemList.FindIndex(i => (i.stallSlot == stallslot));
                        Character.Network.Stall.ItemList[StallItemIndex].price = price;

                        Character.Network.Stall.Send(Packet.StallModifyItem(stallslot, price));
                    }
                    else
                        return;
                }
                //Add an item
                else if (Type == 2)
                {
                    if (Character.Network.Stall.isOpened) return;
                    byte stallslot = Reader.Byte();
                    byte invpos = Reader.Byte();
                    short quantity = Reader.Int16();
                    ulong price = Reader.UInt64();

                    ObjData.slotItem uItemID = GetItem((uint)Character.Information.CharacterID, invpos, 0);

                    //Disable item mall items in stalls for now.
                    if (ObjData.Manager.ItemBase[uItemID.ID].Etctype == ObjData.item_database.EtcType.GLOBALCHAT ||
                        ObjData.Manager.ItemBase[uItemID.ID].Type == ObjData.item_database.ArmorType.AVATAR ||
                        ObjData.Manager.ItemBase[uItemID.ID].Type == ObjData.item_database.ArmorType.AVATARHAT ||
                        ObjData.Manager.ItemBase[uItemID.ID].Type == ObjData.item_database.ArmorType.AVATARATTACH
                        ) return;

                    if (quantity <= ObjData.Manager.ItemBase[uItemID.ID].Max_Stack)
                    {
                        WorldMgr.stall.stallItem StallItem = new WorldMgr.stall.stallItem();
                        LoadBluesid(uItemID.dbID);
                        StallItem.stallSlot = stallslot;
                        StallItem.price = price;
                        StallItem.Item = (GetItem((uint)Character.Information.CharacterID, invpos, 0));

                        if (Character.Network.Stall.ItemList.Exists((get => get.Item.dbID == StallItem.Item.dbID))) return;

                        Character.Network.Stall.ItemList.Add(StallItem);
                        Character.Network.Stall.Send(Packet.StallItemMain(Character.Network.Stall.ItemList));
                    }
                    else
                        return;
                }
                //Item pulling out
                else if (Type == 3)
                {
                        if (Character.Network.Stall.isOpened) return;
                        byte stallslot = Reader.Byte();

                        //remove stallItem from stall
                        Character.Network.Stall.ItemList.Remove(Character.Network.Stall.ItemList.Find(i => (i.stallSlot == stallslot)));
                        Character.Network.Stall.Send(Packet.StallItemMain(Character.Network.Stall.ItemList));
                }
                //Stall modify state
                else if (Type == 5)
                {
                    byte State = Reader.Byte();
                    Character.Network.Stall.isOpened = (State == 1) ? true : false;

                    Character.Network.Stall.Send(Packet.StallSetState(State));
                }
                //Set Welcome msg
                else if (Type == 6)
                {
                    if (Character.Network.Stall.isOpened) return;
                    short length = Reader.Int16();
                    Character.Network.Stall.WelcomeMsg = Reader.Text3();
                    //Console.WriteLine("New Welcome msg:" + welcome);
                    Character.Network.Stall.Send(Packet.StallWelcome(Character.Network.Stall.WelcomeMsg));
                }
                //Set StallName
                else if (Type == 7)
                {
                    string stallname = Reader.Text3();
                    Send(Packet.StallNameGlobal(Character.Information.UniqueID, stallname));
                    Character.Network.Stall.Send(Packet.StallName(stallname));
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Additem Stall error: {0}", ex);
            }
        }