/////////////////////////////////////////////////////////////////////////////////
 // Movement angle
 /////////////////////////////////////////////////////////////////////////////////
 public void Angle()
 {
     PacketReader Reader = new PacketReader(PacketInformation.buffer);
     ushort angle = Reader.UInt16();
     client.Send(Packet.Angle(Character.Information.UniqueID, angle));
     client.Send(Packet.ChatPacket(7, 0, string.Format("ANGLE:{0}", angle), ""));
 }
        /////////////////////////////////////////////////////////////////////////////////
        // 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 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");
     }
 }
 void MovementSkyClicking(PacketReader Reader)
 {
     Character.Position.Walking = true;
     byte Type = Reader.Byte();
     ushort Angle = Reader.UInt16();
     Character.Information.Angle = (Angle) / 182.04166666666666;
     Character.Position.packetxSec = Character.Position.xSec;
     Character.Position.packetySec = Character.Position.ySec;
     Character.Position.packetX = (ushort)Formule.gamex(Character.Position.x, Character.Position.xSec);
     Character.Position.packetY = (ushort)Formule.gamex(Character.Position.y, Character.Position.ySec);
     double Distance = Formule.gamedistance(Character.Position.x, Character.Position.y, Formule.gamex((float)Character.Position.packetX, Character.Position.xSec), Formule.gamey((float)Character.Position.packetY, Character.Position.ySec));
     PacketWriter writer = new PacketWriter();
     writer.Create(0xb021);
     writer.DWord(Character.Information.UniqueID);
     writer.Byte(0);
     writer.Byte(Type);
     writer.Word(Angle);
     writer.Byte(1);
     writer.Byte(Character.Position.xSec);
     writer.Byte(Character.Position.ySec);
     writer.Word(Character.Position.packetX);
     writer.DWord(Character.Position.z);
     writer.Word(Character.Position.packetY);
     Send(writer.GetBytes());
     Reader.Close();
     StartSkyDromeTimer(1000);
 }