public void RenameParty()
        {
            try
            {
                //Create new packet reader
                PacketReader reader = new PacketReader(PacketInformation.buffer);
                //First integer is party id
                int partyid = reader.Int32();
                //Second integer is not needed
                int NotNeeded = reader.Int32();
                //Byte party type
                byte ptype = reader.Byte();
                //Byte party purpose
                byte purpose = reader.Byte();
                //Byte minimum level
                byte minlevel = reader.Byte();
                //Byte max level to enter party
                byte maxlevel = reader.Byte();
                //Party name lenght
                short namel = reader.Int16();
                //Party name each character is a word value using text3
                string pname = reader.Text3();
                //Create new packet writer
                PacketWriter Writer = new PacketWriter();
                //Add opcode to server packet
                Writer.Create(OperationCode.SERVER_PARTY_CHANGENAME);
                //Write static byte 1
                Writer.Byte(1);
                //Write party id
                Writer.DWord(partyid);
                //Write dword 0
                Writer.DWord(0);
                //Write party type
                Writer.Byte(ptype);
                //Write party purpose
                Writer.Byte(purpose);
                //Write party minimum level
                Writer.Byte(minlevel);
                //Write party max level
                Writer.Byte(maxlevel);
                //Write party name
                Writer.Text3(pname);
                //Send bytes to client
                client.Send(Writer.GetBytes());
            }
            //If a error happens
            catch (Exception ex)
            {
                //Write the exception to the log

            }
        }
        public void Chat()
        {
            try
            {
                List<int> lis = Character.Spawn;
                //Main getinfo = new Main();
                PacketReader Reader = new PacketReader(PacketInformation.buffer);
                byte chatType = Reader.Byte();
                byte chatIndex = Reader.Byte();
                byte linkCount = Reader.Byte(); // added in 295 client

                switch (chatType)
                {
                    case 1://town chat
                        string Text = Reader.Text3();
                        Reader.Close();
                        Send(lis, Packet.ChatPacket(chatType, Character.Information.UniqueID, Text, null));
                        client.Send(Packet.ChatIndexPacket(chatType, chatIndex));
                        break;
                    case 3://town chat pink
                        if (Character.Information.GM == 1)
                        {
                            Text = Reader.Text3();
                            Reader.Close();
                            Send(lis, Packet.ChatPacket(chatType, Character.Information.UniqueID, Text, null));
                            client.Send(Packet.ChatIndexPacket(chatType, chatIndex));
                            break;
                        }
                        else
                        {
                            Disconnect("ban");
                        }
                        break;
                    case 2://Pm chat
                        string toName = Reader.Text();
                        PlayerMgr sys = null;
                        sys = Helpers.GetInformation.GetPlayerName(toName);
                        if (sys != null || sys.Character.InGame)
                        {
                            Text = Reader.Text3();
                            Reader.Close();

                            sys.client.Send(Packet.ChatPacket(chatType, 0, Text, Character.Information.Name));
                            client.Send(Packet.ChatIndexPacket(chatType, chatIndex));
                        }
                        break;

                    case 4://Party chat
                        if (Character.Network.Party != null)
                        {
                            Text = Reader.Text3();
                            Reader.Close();

                            Character.Network.Party.Send(Packet.ChatPacket(chatType, Character.Information.UniqueID, Text, Character.Information.Name));
                            client.Send(Packet.ChatIndexPacket(chatType, chatIndex));
                        }

                        break;
                    case 5://Guild Chat
                        Text = Reader.Text3();
                        Reader.Close();
                        foreach (int member in Character.Network.Guild.Members)
                        {
                            //Make sure the member is there
                            if (member != 0)
                            {
                                //If the user is not the newly invited member get player info
                                PlayerMgr tomember = Helpers.GetInformation.GetPlayerMainid(member);
                                //Send guild update packet
                                if (tomember != null)
                                {
                                    tomember.client.Send(Packet.ChatPacket(chatType, Character.Information.UniqueID, Text, Character.Information.Name));
                                }
                            }
                        }
                        client.Send(Packet.ChatIndexPacket(chatType, chatIndex));

                        break;
                    case 6://Global chat
                        string FromName = Reader.Text();
                        Text = Reader.Text3();
                        Console.WriteLine(Text);
                        Helpers.SendToClient.SendAll(Packet.ChatPacket(chatType, Character.Information.UniqueID, " " + Text, FromName));
                        break;
                    case 7://Notice chat
                        if (Character.Information.GM == 1)
                        {
                            Text = Reader.Text3();
                            Reader.Close();
                            Helpers.SendToClient.SendAll(sendnoticecon(chatType, Character.Information.UniqueID, Text, null));
                        }
                        else
                        {
                            Disconnect("ban");
                        }
                        break;
                    case 9://Stall chat
                        Text = Reader.Text3();
                        Reader.Close();

                        Character.Network.Stall.Send(Packet.ChatPacket(chatType, Character.Network.Stall.ownerID, Text, Character.Information.Name));
                        client.Send(Packet.ChatIndexPacket(chatType, chatIndex));

                        break;
                    case 10://Academy chat
                        Text = Reader.Text3();
                        Send(lis, Packet.ChatPacket(chatType, Character.Information.UniqueID, Text, Character.Information.Name));
                        break;

                    case 11://Union chat
                        Text = Reader.Text3();
                        Reader.Close();

                        if (!Character.Network.Guild.UnionActive) return;
                        foreach (int member in Character.Network.Guild.UnionMembers)
                        {
                            //Make sure the member is there
                            if (member != 0)
                            {
                                //If the user is not the newly invited member get player info
                                PlayerMgr tomember = Helpers.GetInformation.GetPlayerMainid(member);
                                //Send guild update packet
                                if (tomember != null)
                                {
                                    if (!tomember.Character.Network.Guild.SingleSend)
                                    {
                                        tomember.Character.Network.Guild.SingleSend = true;
                                        tomember.client.Send(Packet.ChatPacket(chatType, Character.Information.UniqueID, Text, Character.Information.Name));
                                    }
                                }
                            }
                        }
                        foreach (int member in Character.Network.Guild.UnionMembers)
                        {
                            //Make sure the member is there
                            if (member != 0)
                            {
                                //If the user is not the newly invited member get player info
                                PlayerMgr tomember = Helpers.GetInformation.GetPlayerMainid(member);
                                //Disable bool single send
                                if (tomember != null)
                                {
                                    tomember.Character.Network.Guild.SingleSend = false;
                                }
                            }
                        }
                        client.Send(Packet.ChatIndexPacket(chatType, chatIndex));
                        break;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Chat error {0}", ex);
                Log.Exception(ex);
            }
        }
        public void Handle()
        {
            try
            {
                //Read packet information
                PacketReader Reader = new PacketReader(PacketInformation.buffer);
                byte iSlot = Reader.Byte();
                //Get global item information
                ObjData.slotItem uItemID = GetItem((uint)Character.Information.CharacterID, iSlot, 0);
                //Checks before continuing
                if (uItemID.ID != 0 || !Character.State.Die)
                {
                    //###########################################################################################
                    // Grabpets
                    //###########################################################################################
                    #region Pets (PET OBJECTS)

                    // Grabpets
                    #region Grabpets
                    if (ObjData.Manager.ItemBase[uItemID.ID].Pettype == ObjData.item_database.PetType.GRABPET)
                    {
                        //Check if we have pet active allready.
                        if (!Character.Grabpet.Active && Character.Action.MonsterID.Count == 0)
                        {
                            //If not active , add new pet object.
                            HandleGrabPet(iSlot, uItemID.ID);
                            //Need to change this to active effect on slot.
                            HandleUpdateSlotn(iSlot, uItemID, Reader.Int32());
                        }
                    }
                    #endregion
                    // Attackpets
                    #region Attackpets
                    else if (ObjData.Manager.ItemBase[uItemID.ID].Pettype == ObjData.item_database.PetType.ATTACKPET)
                    {
                        //Check if we have pet active allready.
                        if (!Character.Attackpet.Active && Character.Action.MonsterID.Count == 0 || !Character.Attackpet.Active && Character.Action.MonsterID == null)
                        {
                            //If not active , add new pet object.
                            if (!Character.Attackpet.Active)
                            {
                                HandleUpdateSlotn(iSlot, uItemID, Reader.Int32());
                                HandleAttackPet(iSlot, uItemID.ID);
                                client.Send(Packet.Update2(iSlot));
                                client.Send(Packet.ChangeStatus(Character.Information.UniqueID, 5, 0));
                            }
                        }
                    }
                    #endregion
                    #endregion
                    // Horses (NOTE: Detail error messages per if statement (if level, summoned etc).
                    #region Horses
                    if (ObjData.Manager.ItemBase[uItemID.ID].Pettype == ObjData.item_database.PetType.TRANSPORT)
                    {
                        //Checks before we continue
                        if (!Character.Stall.Stallactive && !Character.Transport.Right && Character.Action.MonsterID.Count == 0 && !Character.State.Sitting && !Character.Information.Scroll)
                        {
                            //Check if level is high enough
                            if (Character.Information.Level >= ObjData.Manager.ItemBase[uItemID.ID].Level)
                            {
                                HandleUpdateSlot(iSlot, uItemID, Reader.Int32());
                                HandleHorseScroll(uItemID.ID);
                            }
                            //Else
                            else
                            {
                                client.Send(Packet.Message(OperationCode.SERVER_PLAYER_UPTOHORSE, Messages.UIIT_MSG_COSPETERR_CANT_PETSUM_HIGHLEVEL));
                            }
                        }
                    }
                    #endregion
                    // Special transport
                    #region Special transport
                    else if (ObjData.Manager.ItemBase[uItemID.ID].Pettype == ObjData.item_database.PetType.ATTACKPET)
                    {

                    }
                    #endregion
                    // Job Transport
                    #region Job Transport
                    else if (ObjData.Manager.ItemBase[uItemID.ID].Pettype == ObjData.item_database.PetType.JOBTRANSPORT)
                    {
                        //HandleJobTransport(uItemID.ID);
                    }
                    #endregion
                    //###########################################################################################
                    // Potions
                    //###########################################################################################
                    #region Potions
                    #region HP potion
                    if (ObjData.Manager.ItemBase[uItemID.ID].Etctype == ObjData.item_database.EtcType.HP_POTION && ObjData.Manager.ItemBase[uItemID.ID].Etctype != ObjData.item_database.EtcType.HPSTATPOTION)
                    {
                        HandlePotion(1, uItemID.ID);
                        HandleUpdateSlot(iSlot, uItemID, Reader.Int32());
                    }
                    #endregion
                    #region HP STAT Potions
                    else if (ObjData.Manager.ItemBase[uItemID.ID].Etctype != ObjData.item_database.EtcType.HP_POTION && ObjData.Manager.ItemBase[uItemID.ID].Etctype == ObjData.item_database.EtcType.HPSTATPOTION)
                    {

                    }
                    #endregion
                    #region MP potions
                    else if (ObjData.Manager.ItemBase[uItemID.ID].Etctype == ObjData.item_database.EtcType.MP_POTION && ObjData.Manager.ItemBase[uItemID.ID].Etctype != ObjData.item_database.EtcType.MPSTATPOTION)
                    {
                        HandlePotion(2, uItemID.ID);
                        HandleUpdateSlot(iSlot, uItemID, Reader.Int32());
                    }
                    #endregion
                    #region HP STAT Potions
                    else if (ObjData.Manager.ItemBase[uItemID.ID].Etctype != ObjData.item_database.EtcType.HP_POTION && ObjData.Manager.ItemBase[uItemID.ID].Etctype == ObjData.item_database.EtcType.MPSTATPOTION)
                    {

                    }
                    #endregion
                    #region Vigor potions
                    else if (ObjData.Manager.ItemBase[uItemID.ID].Etctype == ObjData.item_database.EtcType.VIGOR_POTION)
                    {
                        HandlePotion(5, uItemID.ID);
                        HandleUpdateSlot(iSlot, uItemID, Reader.Int32());
                    }
                    #endregion
                    #region Speed potions
                    else if (ObjData.Manager.ItemBase[uItemID.ID].Etctype == ObjData.item_database.EtcType.SPEED_POTION)
                    {
                        if (SkillGetSameBuff(ObjData.Manager.ItemBase[uItemID.ID].SkillID))
                        {
                            SpecialBuff(ObjData.Manager.ItemBase[uItemID.ID].SkillID);
                            HandleUpdateSlot(iSlot, uItemID, Reader.Int32());
                        }
                    }
                    #endregion
                    #region Berserk Potion
                    else if (ObjData.Manager.ItemBase[uItemID.ID].Etctype == ObjData.item_database.EtcType.BERSERKPOTION)
                    {
                        if (Character.Information.BerserkBar < 5)
                        {
                            if (Character.Information.Berserking == false)
                            {
                                Character.Information.BerserkBar = 5;
                                client.Send(Packet.InfoUpdate(4, 0, Character.Information.BerserkBar));
                                HandleUpdateSlot(iSlot, uItemID, Reader.Int32());
                            }
                        }
                    }
                    #endregion
                    #endregion
                    //###########################################################################################
                    // Tickets
                    //###########################################################################################
                    #region Tickets
                    //Forgotten world
                    #region Forgotten world
                    else if (ObjData.Manager.ItemBase[uItemID.ID].Ticket == ObjData.item_database.Tickets.DUNGEON_FORGOTTEN_WORLD)
                    {
                        //Must add check if user location currently is forgotten world.
                        //Must add level check of portal.
                        ForgottenWorld(uItemID.ID);
                        HandleUpdateSlot(iSlot, uItemID, Reader.Int32());
                    }
                    #endregion
                    #endregion
                    //###########################################################################################
                    // Global chat
                    //###########################################################################################
                    #region Global Chat
                    else if (ObjData.Manager.ItemBase[uItemID.ID].Etctype == ObjData.item_database.EtcType.GLOBALCHAT)
                    {
                        HandleUpdateSlot(iSlot, uItemID, Reader.Int32());
                        byte something = Reader.Byte();
                        string text = Reader.Text3();
                        Reader.Close();
                        Helpers.SendToClient.SendAll(Packet.ChatPacket(6, 0, text, Character.Information.Name));
                    }
                    #endregion
                    //###########################################################################################
                    // Stall decoration
                    //###########################################################################################
                    #region Stall decoration
                    else if (ObjData.Manager.ItemBase[uItemID.ID].Etctype == ObjData.item_database.EtcType.STALLDECORATION)
                    {
                        StallDeco(uItemID.ID, iSlot);
                        HandleUpdateSlot(iSlot, uItemID, Reader.Int32());
                    }
                    #endregion
                    //###########################################################################################
                    // Monster masks
                    //###########################################################################################
                    #region Monster masks
                    else if (ObjData.Manager.ItemBase[uItemID.ID].Etctype == ObjData.item_database.EtcType.MONSTERMASK)
                    {
                        //If character monster mask isnt enabled allready.
                        if (!Character.Transformed)
                        {
                            if (Character.Information.Level >= ObjData.Manager.ItemBase[uItemID.ID].Level)
                            {
                                //Load Mask
                                MonsterMasks(uItemID.ID, iSlot);
                                HandleUpdateSlot(iSlot, uItemID, Reader.Int32());
                            }
                            else
                            {
                                //Send msg level to low
                            }
                        }
                        else
                        {
                            //Send msg allready in use
                        }
                    }
                    #endregion
                    //###########################################################################################
                    // Return scrolls
                    //###########################################################################################
                    #region Return scrolls
                    else if (ObjData.Manager.ItemBase[uItemID.ID].Etctype == ObjData.item_database.EtcType.RETURNSCROLL && ObjData.Manager.ItemBase[uItemID.ID].Etctype != ObjData.item_database.EtcType.REVERSESCROLL)
                    {
                        if (Character.Information.Scroll) return;
                        if (Timer.Movement != null)
                        {
                            Timer.Movement.Dispose();
                            Character.Position.Walking = false;
                        }
                        HandleReturnScroll(uItemID.ID);
                        HandleUpdateSlot(iSlot, uItemID, Reader.Int32());

                    }
                    #endregion
                    //###########################################################################################
                    // Reverse scrolls
                    //###########################################################################################
                    #region Reverse scrolls
                    else if (ObjData.Manager.ItemBase[uItemID.ID].Etctype == ObjData.item_database.EtcType.REVERSESCROLL)
                    {
                        if (Character.Information.Scroll) return;
                        if (Character.Position.Walking) return;
                        //Read item id
                        int itemid = Reader.Int32();
                        //Our switch byte
                        byte type = Reader.Byte();
                        //locations for reverse
                        int locid = 0;
                        if (type == 7) locid = Reader.Int32();
                        //Start our handle
                        HandleReverse(itemid, type, locid);
                        //Update slot
                        HandleUpdateSlot(iSlot, uItemID, itemid);
                    }
                    #endregion
                    //###########################################################################################
                    // Thief scrolls
                    //###########################################################################################
                    #region Thief scrolls
                    else if (ObjData.Manager.ItemBase[uItemID.ID].Etctype == ObjData.item_database.EtcType.BANDITSCROLL)
                    {
                        if (Character.Information.Scroll) return;
                        HandleThiefScroll(uItemID.ID);
                        HandleUpdateSlot(iSlot, uItemID, Reader.Int32());
                    }
                    #endregion
                    //###########################################################################################
                    // Summon scrolls
                    //###########################################################################################
                    #region Summon scrolls
                    else if (ObjData.Manager.ItemBase[uItemID.ID].Etctype == ObjData.item_database.EtcType.SUMMONSCROLL)
                    {
                        HandleSummon(Character.Information.Level);
                        HandleUpdateSlot(iSlot, uItemID, Reader.Int32());
                    }
                    #endregion
                    //###########################################################################################
                    // Skin change scrolls
                    //###########################################################################################
                    #region Skin change scrolls
                    else if (ObjData.Manager.ItemBase[uItemID.ID].Etctype == ObjData.item_database.EtcType.CHANGESKIN)
                    {
                        HandleUpdateSlot(iSlot, uItemID, Reader.Int32());
                        int skinmodel = Reader.Int32();
                        HandleSkinScroll(skinmodel, uItemID.ID);
                    }
                    #endregion
                    #region Repair Items
                    //if (!Character.Action.repair)
                    //{
                    //    Character.Action.repair = true;
                    //    RepairTimer(30000);
                    //    //Check if there are any items that need repair
                    //    double durability = ObjData.Manager.ItemBase[uItemID.ID].Defans.Durability;
                    //    double currentdurability = ObjData.Manager.ItemBase[uItemID.dbID].Defans.Durability;

                    //    if (currentdurability < durability)
                    //    {
                    //        int countrepairs = DB.GetRowsCount("SELECT * FROM char_items WHERE owner='" + Character.Information.CharacterID + "'");
                    //        if (countrepairs == 0)
                    //        {
                    //            //Do nothing client sends message automaticly
                    //        }
                    //        else
                    //        {
                    //            //Start repairing call handle
                    //            HandleRepair(iSlot, uItemID.dbID);
                    //            HandleUpdateSlot(iSlot, uItemID, Reader.Int32());
                    //        }
                    //    }
                    //}
                    #endregion
                    #region Item change tool
                    else if (ObjData.Manager.ItemBase[uItemID.ID].Etctype == ObjData.item_database.EtcType.ITEMCHANGETOOL)
                    {
                        int itemid = Reader.Int32();
                        byte targetslot = Reader.Byte();
                        //Make sure the item target is not equiped.
                        if (targetslot < 13) return;
                        //Continue
                        HandleUpdateSlot(iSlot, uItemID, itemid);
                        HandleItemChange(uItemID.ID, iSlot, targetslot);
                    }
                    #endregion
                    //###########################################################################################
                    // Dungeon items
                    //###########################################################################################
                    #region Forgotten world
                    else if (ObjData.Manager.ItemBase[uItemID.ID].Ticket == ObjData.item_database.Tickets.DUNGEON_FORGOTTEN_WORLD)
                    {
                        HandleUpdateSlot(iSlot, uItemID, Reader.Int32());
                        ForgottenWorld(uItemID.ID);
                    }
                    #endregion
                    //###########################################################################################
                    // Inventory expansion
                    //###########################################################################################
                    #region Inventory expansion
                    else if (ObjData.Manager.ItemBase[uItemID.ID].Etctype == ObjData.item_database.EtcType.INVENTORYEXPANSION)
                    {
                        if (HandleInventoryExp(uItemID.ID))
                        {
                            HandleUpdateSlot(iSlot, uItemID, Reader.Int32());
                        }

                    }
                    #endregion
                    //###########################################################################################
                    // Warehouse expansion
                    //###########################################################################################
                    #region Warehouse expansion
                    else if (ObjData.Manager.ItemBase[uItemID.ID].Etctype == ObjData.item_database.EtcType.WAREHOUSE)
                    {
                        HandleWareHouse(uItemID.ID);
                        HandleUpdateSlot(iSlot, uItemID, Reader.Int32());
                    }
                    #endregion
                    //###########################################################################################
                    // Guild related
                    //###########################################################################################
                    #region Guild Icon
                    else if (ObjData.Manager.ItemBase[uItemID.ID].Etctype == ObjData.item_database.EtcType.GUILD_ICON)
                    {
                        HandleRegisterIcon();
                    }
                    #endregion
                    //###########################################################################################
                    // Non coded types
                    //###########################################################################################
                    else
                    {
                        //Need to make message in progress or such
                    }
                }
                // Close our packet reader
                Reader.Close();
            }
            catch (Exception ex)
            {
                Log.Exception(ex);
            }
        }
        public void CreateFormedParty()
        {
            try
            {
                //Get packet data
                PacketReader Reader = new PacketReader(PacketInformation.buffer);
                //First and second dword are static
                int masteryid1 = Reader.Int32(); // MasteryID
                int masteryid2 = Reader.Int32(); // MasteryID2
                //First byte is our party type
                byte PartyType = Reader.Byte();
                //Second byte is purpose information
                byte PartyPurpose = Reader.Byte();
                //3rd byte is minimal level required to join
                byte PartyMinLevelReq = Reader.Byte();
                //4th byte is max level to join
                byte PartyMaxLevelReq = Reader.Byte();
                //5th is short, party name lenght
                //6th is party name
                string PartyName = Reader.Text3();
                //Close our reader
                Reader.Close();

                //Make sure the user isnt in a party yet.
                if (Character.Network.Party != null)
                {
                    //If party is formed allready return
                    if (Character.Network.Party.IsFormed)
                    {
                        return;
                    }
                    //If party is not formed
                    else
                    {
                        //Get current party information
                        WorldMgr.party CurrentParty = Character.Network.Party;
                        //Set formed state
                        CurrentParty.IsFormed = true;
                        //Party type
                        CurrentParty.Type = PartyType;
                        //Party purpose
                        CurrentParty.ptpurpose = PartyPurpose;
                        //Party minimal level
                        CurrentParty.minlevel = PartyMinLevelReq;
                        //Party maximum level
                        CurrentParty.maxlevel = PartyMaxLevelReq;
                        //Party name
                        CurrentParty.partyname = PartyName;
                        //Party owner
                        CurrentParty.LeaderID = Character.Information.UniqueID;
                        //Add party eu / ch information by model
                        CurrentParty.Race = Character.Information.Race;
                        //Send packet information to user
                        client.Send(Packet.CreateFormedParty(CurrentParty));
                        //Add party to list
                        Helpers.Manager.Party.Add(CurrentParty);
                    }
                }
                //If a new formed party is created from 0
                else
                {
                    //New party for details
                    WorldMgr.party newparty = new WorldMgr.party();
                    //Set formed state
                    newparty.IsFormed = true;
                    //Party type
                    newparty.Type = PartyType;
                    //Party purpose
                    newparty.ptpurpose = PartyPurpose;
                    //Party minimal level
                    newparty.minlevel = PartyMinLevelReq;
                    //Party maximum level
                    newparty.maxlevel = PartyMaxLevelReq;
                    //Party name
                    newparty.partyname = PartyName;
                    //Party owner
                    newparty.LeaderID = Character.Information.UniqueID;
                    //Add party eu / ch information by model
                    newparty.Race = Character.Information.Race;
                    //Add our player to the member list
                    newparty.Members.Add(Character.Information.UniqueID);
                    //Add player client to party list information
                    newparty.MembersClient.Add(client);
                    //Party id , is current count of party's + 1
                    newparty.ptid = Helpers.Manager.Party.Count + 1;
                    //Add the new party list
                    Helpers.Manager.Party.Add(newparty);
                    //Set party to player
                    Character.Network.Party = newparty;
                    //bool set player in party
                    Character.Network.Party.InParty = true;
                    //Send packet information to user
                    client.Send(Packet.CreateFormedParty(newparty));
                }

            }
            //Catch bad exception errors
            catch (Exception ex)
            {
                Log.Exception(ex);
            }
        }
        public void StallOpen()
        {
            try
            {
                PacketReader Reader = new PacketReader(PacketInformation.buffer);

                if (Character.Stall.Stallactive || Character.State.Sitting || Character.Transport.Spawned || Character.Information.Scroll) return;

                Character.Network.Stall = new WorldMgr.stall();

                Character.Network.Stall.ItemList = new List<WorldMgr.stall.stallItem>();
                Character.Network.Stall.StallName = Reader.Text3();
                Character.Network.Stall.Members.Add(Character.Information.UniqueID);
                Character.Network.Stall.MembersClient.Add(client);
                Character.Network.Stall.ownerID = Character.Information.UniqueID;
                Character.Network.Stall.isOpened = false;

                client.Send(Packet.StallOpen(Character.Network.Stall.StallName, Character.Information.UniqueID, Character.Information.StallModel));
                client.Send(Packet.StallOpened());
                Send(Packet.StallOpenGlobal(Character.Network.Stall.StallName, Character.Information.UniqueID, Character.Information.StallModel));
                Character.Stall.Stallactive = true;
            }
            catch (Exception ex)
            {
                Log.Exception(ex);
            }
        }
        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);
            }
        }