public static ushort LoginUser(string aID, ref string aPass, ref WorldMgr.player aPlayer, bool localConnect)
        {
            if (Helpers.Manager.clients.Count >= Helpers.Manager.maxSlots)
            {
                return(0); // crowded
            }
            DB ms = new DB("SELECT * FROM users WHERE id = '" + aID + "'");

            if (ms.Count() == 0)
            {
                ms.Close();
                return(1);
            }
            ms = new DB("SELECT * FROM users WHERE id = '" + aID + "' AND password='******'");
            if (ms.Count() == 0)
            {
                ms.Close();
                return(5);
            }
            using (System.Data.SqlClient.SqlDataReader reader = ms.Read())
            {
                while (reader.Read())
                {
                    if (reader.GetString(1).ToLower() == aID.ToLower()) // id
                    {
                        if (reader.GetByte(3) == 1)                     // online
                        {
                            ms.Close();
                            return(2); // already online
                        }

                        if (reader.GetInt32(5) == 1) // banned
                        {
                            aPass = reader.GetString(4);
                            ms.Close();
                            return(3); // banned
                        }

                        if (aPlayer == null && localConnect)
                        {
                            DB.query("UPDATE users SET online=1 WHERE userid='" + reader.GetInt32(0) + "'");
                        }
                        aPlayer             = new WorldMgr.player();
                        aPlayer.AccountName = aID;
                        aPlayer.Password    = aPass; // Nukei: ?? whats the reason for saving password in memory ?
                        aPlayer.ID          = reader.GetInt32(0);
                        aPlayer.pGold       = reader.GetInt64(7);
                        aPlayer.Silk        = reader.GetInt32(6);
                        aPlayer.SilkPrem    = reader.GetInt32(9);
                        aPlayer.wSlots      = reader.GetByte(11);
                        ms.Close();
                        return(4);
                    }
                }
            }
            ms.Close();
            return(6); // Bilinmeyen geri dönüş:Özel bir durum oluşmadı. (Mecburi Gönderim)
        }
        public static ushort LoginUser(string aID, ref string aPass, ref WorldMgr.player aPlayer, bool localConnect)
        {
            if (Helpers.Manager.clients.Count >= Helpers.Manager.maxSlots)
            {
                return 0; // crowded
            }
            DB ms = new DB("SELECT * FROM users WHERE id = '" + aID + "'");
            if (ms.Count() == 0)
            {
                ms.Close();
                return 1;
            }
            ms = new DB("SELECT * FROM users WHERE id = '" + aID + "' AND password='******'");
            if (ms.Count() == 0)
            {
                ms.Close();
                return 5;
            }
            using (System.Data.SqlClient.SqlDataReader reader = ms.Read())
            {
                while (reader.Read())
                {
                    if (reader.GetString(1).ToLower() == aID.ToLower()) // id
                    {
                        if (reader.GetByte(3) == 1) // online
                        {
                            ms.Close();
                            return 2; // already online
                        }

                        if (reader.GetInt32(5) == 1) // banned
                        {
                            aPass = reader.GetString(4);
                            ms.Close();
                            return 3; // banned
                        }

                        if (aPlayer == null && localConnect) DB.query("UPDATE users SET online=1 WHERE userid='" + reader.GetInt32(0) + "'");
                        aPlayer = new WorldMgr.player();
                        aPlayer.AccountName = aID;
                        aPlayer.Password = aPass; // Nukei: ?? whats the reason for saving password in memory ?
                        aPlayer.ID = reader.GetInt32(0);
                        aPlayer.pGold = reader.GetInt64(7);
                        aPlayer.Silk = reader.GetInt32(6);
                        aPlayer.SilkPrem = reader.GetInt32(9);
                        aPlayer.wSlots = reader.GetByte(11);
                        ms.Close();
                        return 4;
                    }
                }
            }
            ms.Close();
            return 6; // Bilinmeyen geri dönüş:Özel bir durum oluşmadı. (Mecburi Gönderim)
        }
        public static void _OnIPC(Socket aSocket, EndPoint ep, byte[] data)
        {
            try
            {
                if (data.Length >= 6)
                {
                    ushort pServer = (ushort)(data[0] + (data[1] << 8));
                    Helpers.Settings.SrevoServerInfo remoteLoginServer = Helpers.GetInformation.GetServerByEndPoint(((IPEndPoint)ep).Address.ToString(), pServer);
                    if (remoteLoginServer != null)
                    {
                        // decode data
                        Servers.IPCdeCode(ref data, remoteLoginServer.code);

                        byte pCmd = data[3];
                        int  dLen = (data[4] + (data[5] << 8));
                        byte crc  = Servers.BCRC(data, data.Length - 1);
                        if (data[data.Length - 1] != crc) // wrong CRC
                        {
                            Log.Exception("[IPC] Wrong Checksum from Server " + remoteLoginServer.id + ". Please Check !");
                            return;
                        }
                        if (data.Length >= (dLen + 6))
                        {
                            if (pCmd == (byte)IPCCommand.IPC_REQUEST_SERVERINFO)
                            {
                                remoteLoginServer.lastPing = DateTime.Now;
                                byte[] rspBuf = Helpers.Manager.IPC.PacketResponseServerInfo(Servers.IPCPort, 1, 100, Helpers.Manager.GetOnlineClientCount, Helpers.Settings.ClientVersion);
                                Servers.IPCenCode(ref rspBuf, remoteLoginServer.code);
                                Helpers.Manager.IPC.Send(remoteLoginServer.ip, remoteLoginServer.ipcport, rspBuf);
                            }
                            else if (pCmd == (byte)IPCCommand.IPC_REQUEST_LOGIN)
                            {
                                remoteLoginServer.lastPing = DateTime.Now;
                                if (dLen > 4)
                                {
                                    int    bp     = 6;
                                    byte   cLen   = data[bp++];
                                    byte[] tmpbuf = new byte[cLen];
                                    Buffer.BlockCopy(data, bp, tmpbuf, 0, cLen);
                                    bp += cLen;
                                    string tmpID = ASCIIEncoding.ASCII.GetString(tmpbuf);
                                    cLen   = data[bp++];
                                    tmpbuf = new byte[cLen];
                                    Buffer.BlockCopy(data, bp, tmpbuf, 0, cLen);
                                    bp += cLen;
                                    ushort          rCode     = (ushort)(data[bp] + (data[bp + 1] << 8));
                                    string          tmpPW     = ASCIIEncoding.ASCII.GetString(tmpbuf);
                                    WorldMgr.player tmpPlayer = null;
                                    ushort          lResult   = PlayerMgr.LoginUser(tmpID, ref tmpPW, ref tmpPlayer, false);
                                    tmpPlayer = null;
                                    tmpbuf    = Helpers.Manager.IPC.PacketResponseLogin(Servers.IPCPort, lResult, rCode, lResult == 4 ? tmpPW : "");
                                    Servers.IPCenCode(ref tmpbuf, remoteLoginServer.code);
                                    Helpers.Manager.IPC.Send(remoteLoginServer.ip, remoteLoginServer.ipcport, tmpbuf);
                                }
                                else
                                {
                                    Console.WriteLine("[IPC] content to short");
                                }
                            }
                            else
                            {
                                Console.WriteLine("[IPC] unknown command recevied");
                            }
                        }
                        else
                        {
                            Console.WriteLine("[IPC] data to short");
                        }
                    }
                    else
                    {
                        Console.WriteLine("[IPC] can't find the LoginServer {0}:{1}", ((IPEndPoint)ep).Address.ToString(), pServer);
                    }
                }
                else
                {
                    Log.Exception("[IPC] packet to short from " + ep.ToString());
                }
            }
            catch (Exception ex)
            {
                Log.Exception("[IPC.OnIPC] ", ex);
            }
        }