public void Connect()
 {
     //Wrap our function inside a catcher
     try
     {
         //Open our packet reader
         PacketReader Reader = new PacketReader(PacketInformation.buffer);
         byte type = Reader.Byte();
         Reader.Skip(3);
         string ID = Reader.Text();
         string PW = Reader.Text();
         Reader.Close();
         //Set login result information
         int LoginResult = LoginUser(ID, ref PW, ref Player, true);
         //If the login is succesfull
         if (LoginResult == 4)
         {
             //Send succes packet
             client.Send(Packet.ConnectSuccess());
         }
         //If the login is wrong
         else
         {
             //Disconnect the user
             client.Disconnect(PacketInformation.Client);
         }
     }
     catch (Exception ex)
     {
         Log.Exception(ex);
     }
 }
        void HandleRegisterIcon()
        {
            try
            {
                PacketReader reader = new PacketReader(PacketInformation.buffer);
                byte type = reader.Byte();
                int iconlenght = reader.Int32();
                string icon = reader.Text();
                reader.Close();

                string convertedicon = ConvertToHex(icon);
                //Save output to .dat file in hex formatting.
            }
            catch (Exception ex)
            {
                Console.WriteLine("Guild icon register error {0}", ex);
            }
        }
 void CharacterDelete()
 {
     //Wrap our function in a catcher
     try
     {
         //Open our reader
         PacketReader Reader = new PacketReader(PacketInformation.buffer);
         byte unused = Reader.Byte();
         string name = Reader.Text();
         Reader.Close();
         //Update character deletion information
         DB.query("UPDATE character SET deletedtime=dateadd(dd,7,getdate()) WHERE name='" + name + "'");
         //Update character visual screen
         client.Send(Packet.ScreenSuccess(3));
     }
     catch (Exception ex)
     {
         Log.Exception(ex);
     }
 }
        public void CharacterCheck(byte[] buff)
        {
            //Wrap our function into a catcher
            try
            {
                //Open our reader
                PacketReader Reader = new PacketReader(buff);
                byte ignored = Reader.Byte();
                string name = Reader.Text();
                Reader.Close();

                if (CharacterCheck(name))
                    client.Send(Packet.CharacterName(4));
                else
                    client.Send(Packet.ScreenSuccess(4));
            }
            catch (Exception ex)
            {
                Log.Exception(ex);
            }
        }
 //Public void select opcode
 public static void Opcode_List(Decode information)
 {
     //Set definition for detailed information
     Definitions.Clientdefinition Control = (Definitions.Clientdefinition)information.Packet;
     //Set Packetinformation as information (short).
     Control.PacketInformation = information;
     //Create a new packet reader to view incoming packet data
     PacketReader R = new PacketReader(Control.PacketInformation.buffer);
     //Create switch code based on the opcode the client sends.
     switch (information.opcode)
     {
         case Opcodes.CLIENT.CLIENT_PING_CHECK:
             break;
         case Opcodes.CLIENT.CLIENT_INFO:
             //If the client connecting is silkroad
             if (R.Text() == "SR_Client")
                 Control.client.Send(Connect.GateWayPacket());
             break;
         case Opcodes.CLIENT.CLIENT_GATEWAY_PATCH_REQUEST:
             Functions.Connect.ClientCheck(Control);
             break;
         case Opcodes.CLIENT.CLIENT_GATEWAY_SERVERLIST_REQUEST:
             Control.client.Send(Serverlist.ServerListPacket(0));
             break;
         case Opcodes.CLIENT.CLIENT_GATEWAY_LOGIN_REQUEST:
             Functions.Auth.Connect(Control);
             break;
         case Opcodes.CLIENT.CLIENT_GATEWAY_NOTICE_REQUEST:
             Control.client.Send(Connect._6());
             Control.client.Send(News.NewsPacket());
             break;
         case 1905:
             byte[] buffer = information.buffer;
             Definitions.Clientdefinition.Connected_Users = BitConverter.ToInt16(buffer, 0);
             break;
         default:
             break;
     }
 }
 public static void ClientCheck(Definitions.Clientdefinition sys)
 {
     PacketReader Reader = new PacketReader(sys.PacketInformation.buffer);
     byte Locale = Reader.Byte();
     string Name = Reader.Text();
     int Version = Reader.Int32();
     Reader.Close();
     try
     {
         if (Name == "SR_Client")
         {
             sys.client.Send(Core.Packets.Connect._1());
             sys.client.Send(Core.Packets.Connect._2());
             sys.client.Send(Core.Packets.Connect._3());
             sys.client.Send(Core.Packets.Connect._4());
             sys.client.Send(Core.Packets.Connect._5());
             if (Version == Definitions.Serverdef.SilkroadClientVersion)//
             {
                 sys.client.Send(Core.Packets.Connect.ActualVersion());
             }
             else if (Version < Definitions.Serverdef.SilkroadClientVersion - 1)//
             {
                 sys.client.Send(Core.Packets.Connect.ClientIsToOld());
             }
             else if (Version > Definitions.Serverdef.SilkroadClientVersion)//
             {
                 sys.client.Send(Core.Packets.Connect.ClientIsToNew());
             }
             else
             {
                 //sys.client.Send(Patch.SendPatchFiles());
             }
         }
     }
     catch (Exception error)
     {
         Console.WriteLine("Connect.cs Error: {0}", error);
     }
 }
        void CharacterCreate()
        {
            //Start wrapper for catching errors
            try
            {
                //Check the amount of characters created (If 4 then we return). Todo: Check if any message shows up.
                if (DB.GetRowsCount("SELECT * FROM character WHERE account='" + Player.AccountName + "'") == 4)
                    return;
                //Open our packet reader
                PacketReader Reader = new PacketReader(PacketInformation.buffer);
                byte tocheck = Reader.Byte();
                string name = Reader.Text();
                int model = Reader.Int32();
                byte volume = Reader.Byte();
                int[] Item = new int[4];
                Item[0] = Reader.Int32();
                Item[1] = Reader.Int32();
                Item[2] = Reader.Int32();
                Item[3] = Reader.Int32();
                Reader.Close();
                //Check player name
                #region Check Name
                //Check the character name before creation
                if (CharacterCheck(name))
                {
                    //If bad send informational packet
                    client.Send(Packet.CharacterName(4));
                    //Finally return.
                    return;
                }
                //Set and disable special characters
                if (name.Contains("[")) return;
                else if (name.Contains("GM")) return;
                else if (name.Contains("]")) return;
                else if (name.Contains("-")) return;
                #endregion
                //Begin creation for EU characters
                #region European characters
                //Check by model type to see what race we have.
                if (model >= 14715 && model <= 14745)
                {
                    //Insert the basic information into the database
                    DB.query("INSERT INTO character (account, name, chartype, volume, xsect, ysect, xpos, zpos, ypos, savearea,GuideData) VALUES ('" + Player.AccountName + "','" + name + "', '" + model + "', '" + volume + "','79','105','387','1000','1279','20','0000000000000000')");
                    //Insert reverse scroll data into the database
                    DB.query("INSERT INTO character_rev (charname, revxsec, revysec, revx, revy, revz) VALUES ('" + name + "','79','105','1000','22','83')");
                    //Set definition for the character id information
                    Player.CreatingCharID = Convert.ToInt32(DB.GetData("Select * from character Where name='" + name + "'", "id"));
                    //Set default information (TODO: Check if all chars have same base).
                    double MagDef = 3;
                    double PhyDef = 6;
                    double Parry = 11;
                    double Hit = 11;
                    double MinPhyA = 6;
                    double MaxPhyA = 9;
                    double MinMagA = 6;
                    double MaxMagA = 10;

                    //Open new framework ini reading
                    Ini ini;
                    //Open settings information for start items
                    ini = new Ini(Environment.CurrentDirectory + @"\Settings\Settings.ini");
                    //5 Items max for starting characters
                    string Item1 = ini.GetValue("European.Start", "Item1", "").ToString();
                    string Item2 = ini.GetValue("European.Start", "Item2", "").ToString();
                    string Item3 = ini.GetValue("European.Start", "Item3", "").ToString();
                    string Item4 = ini.GetValue("European.Start", "Item4", "").ToString();
                    string Item5 = ini.GetValue("European.Start", "Item5", "").ToString();
                    //The amount related information
                    string Amount1 = ini.GetValue("European.Start", "Amount1", "").ToString();
                    string Amount2 = ini.GetValue("European.Start", "Amount2", "").ToString();
                    string Amount3 = ini.GetValue("European.Start", "Amount3", "").ToString();
                    string Amount4 = ini.GetValue("European.Start", "Amount4", "").ToString();
                    string Amount5 = ini.GetValue("European.Start", "Amount5", "").ToString();
                    //Add the custom items
                    try
                    {
                        AddItem(Convert.ToInt32(Item1), Convert.ToByte(Amount1), 13, Player.CreatingCharID, 0);
                        AddItem(Convert.ToInt32(Item2), Convert.ToByte(Amount2), 14, Player.CreatingCharID, 0);
                        AddItem(Convert.ToInt32(Item3), Convert.ToByte(Amount3), 15, Player.CreatingCharID, 0);
                        AddItem(Convert.ToInt32(Item4), Convert.ToByte(Amount4), 16, Player.CreatingCharID, 0);
                        AddItem(Convert.ToInt32(Item5), Convert.ToByte(Amount5), 17, Player.CreatingCharID, 0);
                    }
                    catch (Exception)
                    {
                    }
                    //Add the base items
                    AddItem(Item[0], 0, 1, Player.CreatingCharID, 0);
                    AddItem(Item[1], 0, 4, Player.CreatingCharID, 0);
                    AddItem(Item[2], 0, 5, Player.CreatingCharID, 0);
                    AddItem(Item[3], 0, 6, Player.CreatingCharID, 0);
                    //Set mag defense
                    MagDef += ObjData.Manager.ItemBase[Item[0]].Defans.MinMagDef;
                    MagDef += ObjData.Manager.ItemBase[Item[1]].Defans.MinMagDef;
                    MagDef += ObjData.Manager.ItemBase[Item[2]].Defans.MinMagDef;
                    //Set phy defence
                    PhyDef += ObjData.Manager.ItemBase[Item[0]].Defans.MinPhyDef;
                    PhyDef += ObjData.Manager.ItemBase[Item[1]].Defans.MinPhyDef;
                    PhyDef += ObjData.Manager.ItemBase[Item[2]].Defans.MinPhyDef;
                    //Set parry information
                    Parry += ObjData.Manager.ItemBase[Item[0]].Defans.Parry;
                    Parry += ObjData.Manager.ItemBase[Item[1]].Defans.Parry;
                    Parry += ObjData.Manager.ItemBase[Item[2]].Defans.Parry;
                    //Set hit ratio
                    Hit += ObjData.Manager.ItemBase[Item[3]].Attack.MinAttackRating;
                    //Set phy attack
                    MinPhyA += ObjData.Manager.ItemBase[Item[3]].Attack.Min_LPhyAttack;
                    MaxPhyA += ObjData.Manager.ItemBase[Item[3]].Attack.Min_HPhyAttack;
                    //Set mag attack
                    MinMagA += ObjData.Manager.ItemBase[Item[3]].Attack.Min_LMagAttack;
                    MaxMagA += ObjData.Manager.ItemBase[Item[3]].Attack.Min_HMagAttack;
                    //If the 3rd item is a sword or a dark staff
                    if (Item[3] == 10730 || Item[3] == 10734)
                    {
                        //Add the mag def information
                        MagDef += ObjData.Manager.ItemBase[251].Defans.MinMagDef;
                        //Add the phy def information
                        PhyDef += ObjData.Manager.ItemBase[251].Defans.MinPhyDef;
                        //Add parry ration
                        Parry += ObjData.Manager.ItemBase[251].Defans.Parry;
                        //Add shield item
                        AddItem(10738, 0, 7, Player.CreatingCharID, 0);
                    }
                    //If the 3rd item is a crossbow
                    if (Item[3] == 10733)
                    {
                        //We add our base bolts 250
                        AddItem(10376, 250, 7, Player.CreatingCharID, 0);
                    }
                    //Update database information for stats
                    DB.query("update character set min_phyatk='" + (int)Math.Round(MinPhyA) +
                            "', max_phyatk='" + Math.Round(MaxPhyA) +
                            "', min_magatk='" + Math.Round(MinMagA) +
                            "', max_magatk='" + Math.Round(MaxMagA) +
                            "', phydef='" + Math.Round(PhyDef) +
                            "', magdef='" + Math.Round(PhyDef) +
                            "', parry='" + Math.Round(Parry) +
                            "', hit='" + Math.Round(Hit) +
                            "' where name='" + name + "'");
                    //Add base mastery's for europe characters
                    AddMastery(513, Player.CreatingCharID); //Warrior
                    AddMastery(515, Player.CreatingCharID); //Rogue
                    AddMastery(514, Player.CreatingCharID); //Wizard
                    AddMastery(516, Player.CreatingCharID); //Warlock
                    AddMastery(517, Player.CreatingCharID); //Bard
                    AddMastery(518, Player.CreatingCharID); //Cleric
                    client.Send(Packet.ScreenSuccess(1));
                #endregion
                }
                //If the character model is an chinese character
                else
                {
                #region Chinese characters
                    DB.query("INSERT INTO character (account, name, chartype, volume,GuideData) VALUES ('" + Player.AccountName + "','" + name + "', '" + model + "', '" + volume + "','0000000000000000')");
                    DB.query("INSERT INTO character_rev (charname, revxsec, revysec, revx, revy, revz) VALUES ('" + name + "','168','79','911','1083','-32')");
                    Player.CreatingCharID = Convert.ToInt32(DB.GetData("Select * from character Where name='" + name + "'", "id"));

                    #region Item
                    double MagDef = 3;
                    double PhyDef = 6;
                    double Parry = 11;
                    double Hit = 11;
                    double MinPhyA = 6;
                    double MaxPhyA = 9;
                    double MinMagA = 6;
                    double MaxMagA = 10;

                    CLFramework.Ini ini;
                    ini = new CLFramework.Ini(Environment.CurrentDirectory + @"\Settings\Settings.ini");

                    string Item1 = ini.GetValue("Chinese.Start", "Item1", "").ToString();
                    string Item2 = ini.GetValue("Chinese.Start", "Item2", "").ToString();
                    string Item3 = ini.GetValue("Chinese.Start", "Item3", "").ToString();
                    string Item4 = ini.GetValue("Chinese.Start", "Item4", "").ToString();
                    string Item5 = ini.GetValue("Chinese.Start", "Item5", "").ToString();

                    string Amount1 = ini.GetValue("Chinese.Start", "Amount1", "").ToString();
                    string Amount2 = ini.GetValue("Chinese.Start", "Amount2", "").ToString();
                    string Amount3 = ini.GetValue("Chinese.Start", "Amount3", "").ToString();
                    string Amount4 = ini.GetValue("Chinese.Start", "Amount4", "").ToString();
                    string Amount5 = ini.GetValue("Chinese.Start", "Amount5", "").ToString();

                    try
                    {
                        AddItem(Convert.ToInt32(Item1), Convert.ToByte(Amount1), 13, Player.CreatingCharID, 0);
                        AddItem(Convert.ToInt32(Item2), Convert.ToByte(Amount2), 14, Player.CreatingCharID, 0);
                        AddItem(Convert.ToInt32(Item3), Convert.ToByte(Amount3), 15, Player.CreatingCharID, 0);
                        AddItem(Convert.ToInt32(Item4), Convert.ToByte(Amount4), 16, Player.CreatingCharID, 0);
                        AddItem(Convert.ToInt32(Item5), Convert.ToByte(Amount5), 17, Player.CreatingCharID, 0);
                    }
                    catch (Exception)
                    {

                    }

                    AddItem(Item[0], 0, 1, Player.CreatingCharID, 0);
                    AddItem(Item[1], 0, 4, Player.CreatingCharID, 0);
                    AddItem(Item[2], 0, 5, Player.CreatingCharID, 0);
                    AddItem(Item[3], 0, 6, Player.CreatingCharID, 0);

                    MagDef += ObjData.Manager.ItemBase[Item[0]].Defans.MinMagDef;
                    MagDef += ObjData.Manager.ItemBase[Item[1]].Defans.MinMagDef;
                    MagDef += ObjData.Manager.ItemBase[Item[2]].Defans.MinMagDef;
                    PhyDef += ObjData.Manager.ItemBase[Item[0]].Defans.MinPhyDef;
                    PhyDef += ObjData.Manager.ItemBase[Item[1]].Defans.MinPhyDef;
                    PhyDef += ObjData.Manager.ItemBase[Item[2]].Defans.MinPhyDef;
                    Parry += ObjData.Manager.ItemBase[Item[0]].Defans.Parry;
                    Parry += ObjData.Manager.ItemBase[Item[1]].Defans.Parry;
                    Parry += ObjData.Manager.ItemBase[Item[2]].Defans.Parry;
                    Hit += ObjData.Manager.ItemBase[Item[3]].Attack.MinAttackRating;
                    MinPhyA += ObjData.Manager.ItemBase[Item[3]].Attack.Min_LPhyAttack;
                    MaxPhyA += ObjData.Manager.ItemBase[Item[3]].Attack.Min_HPhyAttack;
                    MinMagA += ObjData.Manager.ItemBase[Item[3]].Attack.Min_LMagAttack;
                    MaxMagA += ObjData.Manager.ItemBase[Item[3]].Attack.Min_HMagAttack;

                    if (Item[3] == 3632 || Item[3] == 3633)
                    {
                        MagDef += ObjData.Manager.ItemBase[251].Defans.MinMagDef;
                        PhyDef += ObjData.Manager.ItemBase[251].Defans.MinPhyDef;
                        Parry += ObjData.Manager.ItemBase[251].Defans.Parry;
                        AddItem(251, 0, 7, Player.CreatingCharID, 0);
                    }
                    if (Item[3] == 3636)
                    {
                        AddItem(62, 250, 7, Player.CreatingCharID, 0);
                    }
                    #endregion

                    DB.query("update character set min_phyatk='" + (int)Math.Round(MinPhyA) +
                            "', max_phyatk='" + Math.Round(MaxPhyA) +
                            "', min_magatk='" + Math.Round(MinMagA) +
                            "', max_magatk='" + Math.Round(MaxMagA) +
                            "', phydef='" + Math.Round(PhyDef) +
                            "', magdef='" + Math.Round(PhyDef) +
                            "', parry='" + Math.Round(Parry) +
                            "', hit='" + Math.Round(Hit) +
                            "' where name='" + name + "'");

                    AddMastery(257, Player.CreatingCharID); //blade
                    AddMastery(258, Player.CreatingCharID); //heuksal
                    AddMastery(259, Player.CreatingCharID); //bow
                    AddMastery(273, Player.CreatingCharID); //cold
                    AddMastery(274, Player.CreatingCharID); //light
                    AddMastery(275, Player.CreatingCharID); //fire
                    AddMastery(276, Player.CreatingCharID); //force
                    client.Send(Packet.ScreenSuccess(1));
                    #endregion
                }
            }
            catch (Exception ex)
            {
                Log.Exception(ex);
            }
        }
        public void LoginScreen()
        {
            //Wrap our function inside a catcher
            try
            {
                //Open our packet reader
                PacketReader Reader = new PacketReader(PacketInformation.buffer);
                string name = Reader.Text();
                Reader.Close();
                //Anti hack checking sql query
                DB ms = new DB("SELECT name FROM character WHERE account='" + Player.AccountName + "' AND name='" + name + "'");
                //Check if the player account and character belongs together (count row).
                int checkinfo = ms.Count();
                //If there's no result
                if (checkinfo == 0)
                {
                    //Disconnect the user if hack attempt
                    client.Disconnect(client.clientSocket);
                    return;
                }
                //If there's a result we continue loading
                else
                {

                    //Create new character definition details
                    Character = new WorldMgr.character();
                    //Set character name
                    Character.Information.Name = name;
                    //Set player id
                    Character.Account.ID = Player.ID;
                    //Load player data
                    PlayerDataLoad();
                    Character.Ids = new GenerateUniqueID(Character.Information.CharacterID, GenerateUniqueID.IDS.Player);
                    Character.Information.UniqueID = Character.Ids.GetUniqueID;

                    //Load job data
                    LoadJobData();
                    //Check same character
                    checkSameChar(name, Character.Information.UniqueID);
                    //Check character stats
                    CheckCharStats(Character);
                    //Add new cient
                    lock (Helpers.Manager.clients)
                    {
                        Helpers.Manager.clients.Add(this);
                    }
                    //Send packets required
                    client.Send(Packet.LoginScreen());
                    client.Send(Packet.StartPlayerLoad());
                    client.Send(Packet.CharacterDataLoad(Character));
                    client.Send(Packet.EndPlayerLoad());
                    client.Send(Packet.PlayerUnknowPack(Character.Information.UniqueID));
                    //client.Send(Packet.UnknownPacket()); //need to research this packet.
                    //Update online status
                    DB.query("UPDATE character SET online='1' WHERE id='" + Character.Information.CharacterID + "'");
                    //Update server information
                    Brain.ServerMgr.UpdateServerInfo();
                    //Open our timer
                    OpenTimer();
                    Character.InitializeCharacter();
                    //Load blue data
                    LoadBlues(Character);

                    #region equipped items
                    List<ObjData.slotItem> EquipedItems = new List<ObjData.slotItem>();
                    //For each equiped item add
                    for (byte q = 0; q < 13; q++)
                    {
                        EquipedItems.Add(GetItem((uint)Character.Information.CharacterID, q, 0));
                    }
                    /*
                    //Load default values for resistance
                    #region Load Resistance default values
                    Character.Blues.Luck = 100;
                    Character.Blues.Resist_All = 100;
                    Character.Blues.Resist_Burn = 100;
                    Character.Blues.Resist_CSMP = 100;
                    Character.Blues.Resist_Disease = 100;
                    Character.Blues.Resist_Eshock = 100;
                    Character.Blues.Resist_Fear = 100;
                    Character.Blues.Resist_Frostbite = 100;
                    Character.Blues.Resist_Poison = 100;
                    Character.Blues.Resist_Sleep = 100;
                    Character.Blues.Resist_Stun = 100;
                    Character.Blues.Resist_Zombie = 100;
                    Character.Blues.MonsterIgnorance = 100;
                    Character.Blues.UniqueDMGInc = 100;
                    #endregion
                    */
                    //Load blues for each item
                    foreach (ObjData.slotItem sitem in EquipedItems)
                    {
                        if (ObjData.Manager.ItemBlue.ContainsKey(sitem.dbID))
                        {
                            LoadBluesid(sitem.dbID);
                            if (ObjData.Manager.ItemBlue[sitem.dbID].totalblue != 0)
                                AddRemoveBlues(this, sitem, true);
                        }
                    }
                    #endregion
                }
            }
            catch (Exception ex)
            {
                Log.Exception(ex);
            }
        }
        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);
            }
        }
 void CharacterRestore()
 {
     //Wrap our function in a catcher
     try
     {
         //Open packet readers
         PacketReader Reader = new PacketReader(PacketInformation.buffer);
         byte unused = Reader.Byte();
         string name = Reader.Text();
         Reader.Close();
         //Update database information set delete time to 0
         DB.query("UPDATE character SET deletedtime=0 WHERE name='" + name + "'");
         //Update visually screen with packet
         client.Send(Packet.ScreenSuccess(5));
     }
     catch (Exception ex)
     {
         Log.Exception(ex);
     }
 }
        public static void Connect(Definitions.Clientdefinition sys)
        {
            //Wrap our code in a try / catch to catch bad exception errors
            try
            {

                //Create a new packet reader to read packet data
                PacketReader Reader = new PacketReader(sys.PacketInformation.buffer);
                //If the first byte = 18 we continue
                if (Reader.Byte() == 18)
                {
                    //First string packet data is for the username
                    string ID = Reader.Text();
                    //Second string packet data is for the password
                    string PW = Reader.Text();

                    byte ReaderBy = Reader.Byte(); //Unknown byte not needed:0xff ?? Country?
                    //Check what server id is requested
                    ushort ShardID = Reader.UInt16();
                    //Set login result
                    ushort lResult = 99;
                    //Set new details for the server in the serverlist
                    Definitions.Serverdef.ServerDetails SSI = Definitions.Serverdef.Serverlist[ShardID];
                    //If the server chosen is not null
                    if (SSI != null)
                    {
                        //TODO: Continue commenting code here
                        ushort myKey = 0;
                        string sReason = "";
                        lock (Definitions.Serverdef.IPCResultList)
                        {
                            myKey = Definitions.Serverdef.IPCNewId++;
                        }
                        byte[] rqp = Definitions.Serverdef.IPCServer.PacketRequestLogin(Definitions.Serverdef.IPCPort, ID, PW, myKey);
                        Servers.IPCenCode(ref rqp, SSI.code);
                        lock (Definitions.Serverdef.IPCResultList)
                        {
                            Definitions.Serverdef.IPCResultList.Add(myKey, new Definitions.Serverdef.IPCItem());
                            Definitions.Serverdef.IPCResultList[myKey].ResultCode = 0x8000;
                        }
                        Definitions.Serverdef.IPCServer.Send(SSI.ip, SSI.ipcport, rqp);
                        DateTime tOut = DateTime.Now.AddSeconds(30);
                        while ((tOut >= DateTime.Now) && (Definitions.Serverdef.IPCResultList[myKey].ResultCode == 0x8000) && (sys.client.clientSocket.Connected))
                        {
                            System.Threading.Thread.Sleep(10);
                        }
                        lResult = Definitions.Serverdef.IPCResultList[myKey].ResultCode;
                        sReason = Definitions.Serverdef.IPCResultList[myKey].BanReason;
                        lock (Definitions.Serverdef.IPCResultList)
                        {
                            Definitions.Serverdef.IPCResultList[myKey] = null;
                            Definitions.Serverdef.IPCResultList.Remove(myKey);
                        }
                        rqp = null;
                        switch ((LOGIN_RESULT_TYPES)lResult)
                        {
                            case LOGIN_RESULT_TYPES.SERVER_CROWDED:
                                sys.client.Send(Core.Packets.Login.ServerIsFull());
                                sys.client.Disconnect(sys.PacketInformation.Client);
                                return;
                            case LOGIN_RESULT_TYPES.ACCOUNT_NOT_FOUND:
                                sys.client.Send(Core.Packets.Login.WriteMessage("Account ID Not Found.Please register new account www.clowenonline.com"));
                            break;
                            case LOGIN_RESULT_TYPES.ACCOUNT_ALREADY_ONLINE:
                                sys.client.Send(Core.Packets.Login.AllreadyConnected());
                                sys.client.Disconnect(sys.PacketInformation.Client);
                                return;
                            case LOGIN_RESULT_TYPES.ACCOUNT_BANNED:
                                sys.client.Send(Core.Packets.Login.AccountBanned(sReason/*,BannedTime*/));
                                sys.client.Disconnect(sys.PacketInformation.Client);
                                return;
                            case LOGIN_RESULT_TYPES.ACCOUNT_CONNECT_SUCCESSFULY:
                                sys.client.Send(Core.Packets.Login.ConnectSucces(SSI.extip != "" ? SSI.extip : SSI.ip, (Int16)SSI.port, 1));
                                return;
                            case LOGIN_RESULT_TYPES.ACCOUNT_INFORMATION_FAILED:
                                sys.client.Send( Core.Packets.Login.WriteMessage("You have typed wrong ID or PW.Please re-enter your ID or PW."));
                                //sys.client.Send(Core.Packets.Login.PasswordFailed(new Random().Next(1, 16), 16));
                                return;
                            default:
                                sys.client.Send(Core.Packets.Login.WriteMessage("Connection Failed."));
                                sys.client.Disconnect(sys.PacketInformation.Client);
                                if (lResult == 0x8000)
                                {
                                    //timeout
                                    sys.client.Send(Core.Packets.Login.WriteMessage("Connection Time out.Disconnecting."));
                                    sys.client.Disconnect(sys.PacketInformation.Client);
                                }
                                return;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Exception(ex);
            }
        }
 public void GameMaster()
 {
     if (Character.Information.GM == 1)
     {
         PacketReader Reader = new PacketReader(PacketInformation.buffer);
         if (Reader == null)
         {
             Disconnect("normal");
             return;
         }
         ushort CommandType = Reader.UInt16();
         Console.WriteLine("GM_COMMAND::{0} USED.BY:{1} ", (GM_COMMAND)CommandType, Character.Information.Name);
         switch ((GM_COMMAND)CommandType)
         {
             case GM_COMMAND.FINDUSER:
                 GMfinduser(Reader.Text());
                 break;
             case GM_COMMAND.GOTOWN:
                 GMgotown();
                 break;
             case GM_COMMAND.TOTOWN:
                 GMtotown(Reader.Text());
                 break;
             case GM_COMMAND.WORLDSTATUS:
                 GMworldstatus();
                 break;
             case GM_COMMAND.LOADMONSTER:
                 GMloadmonster(Reader.Int32(), Reader.Byte(), Reader.Byte());
                 break;
             case GM_COMMAND.MAKEITEM:
             case GM_COMMAND.MAKERENTITEM:
                 GMmakeitem(Reader.Int32(), Reader.Byte());
                 break;
             case GM_COMMAND.MOVETOUSER:
                 GMmovetouser(Reader.Text());
                 break;
             case GM_COMMAND.ZOE:
                 GMzoe(Reader.Int32(), Reader.Byte());
                 break;
             case GM_COMMAND.BAN:
                 GMban(Reader.Text());
                 break;
             case GM_COMMAND.INVISIBLE:
                 GMinvisible();
                 break;
             case GM_COMMAND.INVINCIBLE:
                 GMinvincible();
                 break;
             case GM_COMMAND.WARP:
                 if (PacketInformation.buffer.Length > 4)
                     GM_WP(Reader.Byte(), Reader.Byte(), Reader.Single(), Reader.Single(), Reader.Single());
                 break;
             case GM_COMMAND.RECALLUSER:
                 GMrecalluser(Reader.Text());
                 break;
             case GM_COMMAND.MOBKILL:
                 GMmobkill(Reader.Int32(), Reader.UInt16());
                 break;
             case GM_COMMAND.BLOCKLOGOUT:
                 GMblocklogout(Reader.Text(), Reader.Byte());
                 break;
             case GM_COMMAND.LIENAME:
                 GM_LIENAME(Reader.Text());
                 GM_TRANSFORM(Reader.Text());
                 break;
             case GM_COMMAND.INITQ:
                 GMinitq();
                 break;
             case GM_COMMAND.MOVETONPC:
                 GMmovetonpc(Reader.Text());
                 break;
             case GM_COMMAND.ROTIME: // Kontrol Edilecek
                 //GMspawnuniques();
                 break;
             case GM_COMMAND.CLEARINVENTORY:
                 GMclearinventory();
                 break;
             case GM_COMMAND.ENTERGMM:
                 GMentergmm();
                 break;
             case GM_COMMAND.WEATHER_RAIN:
                 Helpers.SendToClient.SendAll(Packet.Weather(2, Reader.Int32()));
                 break;
             case GM_COMMAND.WEATHER_SNOW:
                 Helpers.SendToClient.SendAll(Packet.Weather(3, Reader.Int32()));
                 break;
             case GM_COMMAND.WEATHER_CLEAR:
                 Helpers.SendToClient.SendAll(Packet.Weather(1, Reader.Int32()));
                 break;
             default:
                 Print.Format("Non Coded GM Command:{0} -> {1}", CommandType, Decode.StringToPack(PacketInformation.buffer));
                 break;
         }
         Reader.Close();
     }
     else
     {
         Disconnect("ban");
     }
 }
 /////////////////////////////////////////////////////////////////////////////////
 // Friend groups
 /////////////////////////////////////////////////////////////////////////////////
 public void FriendGroup(string type)
 {
     try
     {
         //We use string type for switch statement.
         switch (type)
         {
             //Add new group
             case "ADD":
                 //First check if the user has friends
                 int friendcount = DB.GetRowsCount("SELECT * FROM FRIENDS WHERE owner='" + Character.Information.CharacterID + "'");
                 //If the user has no friends return
                 if (friendcount == 0) return;
                 //Create our packet reader
                 PacketReader reader = new PacketReader(PacketInformation.buffer);
                 //Start reading information
                 string groupname = reader.Text();
                 //Close the reader
                 reader.Close();
                 //Update database information
                 DB.query("INSERT INTO friends_groups (playerid,groupname) VALUES ('" + Character.Information.CharacterID + "','" + groupname + "')");
                 //Get group id from count
                 short groupid = GetGroupId(Character.Information.CharacterID);
                 //Send packet to client
                 client.Send(Packet.FriendGroupManage("ADD", groupname, groupid, 0));
                 break;
             //Remove group
             case "REMOVE":
                 //Create our packet reader
                 reader = new PacketReader(PacketInformation.buffer);
                 //Start reading information
                 groupid = reader.Int16();
                 //Close the reader
                 reader.Close();
                 //Get group name
                 string groupnameinfo = GetGroupName(Character.Information.CharacterID, groupid);
                 //Update database information
                 DB.query("DELETE FROM friends_groups WHERE groupname='" + groupnameinfo + "'");
                 //Send packet to client
                 client.Send(Packet.FriendGroupManage("REMOVE", groupnameinfo, groupid, 0));
                 break;
             //Move to group
             case "MOVE":
                 //Create our packet reader
                 reader = new PacketReader(PacketInformation.buffer);
                 //Start reading information
                 int targetid = reader.Int32();
                 groupid = reader.Int16();
                 //Close the reader
                 reader.Close();
                 //Get groupname
                 groupnameinfo = GetGroupName(Character.Information.CharacterID, groupid);
                 //Update database information
                 DB.query("UPDATE friends SET group_name='" + groupnameinfo + "' WHERE owner='" + Character.Information.CharacterID + "' AND friend_name='" + targetid + "'");
                 //Send packet to client
                 client.Send(Packet.FriendGroupManage("MOVE", groupnameinfo, groupid, targetid));
                 break;
         }
     }
     catch (Exception ex)
     {
         Log.Exception(ex);
     }
 }