public static SMSG_ACCOUNT_LOGIN Login(String Username, String Password, SocketClient sockstate)
        {
            SMSG_ACCOUNT_LOGIN loginpacket = new SMSG_ACCOUNT_LOGIN();
            loginpacket.Username = Username;

            string salt;
            SqlDataReader sdr;

            sdr = Database.Query("SELECT salt FROM account WHERE username='******'");

            if (sdr == null)
            {
                loginpacket.State = (ushort)SMSG_ACCOUNT_LOGIN.LoginState.LOGIN_NOT_FOUND;
                return loginpacket;
            }

            if (sdr.HasRows)
            {
                salt        = Convert.ToString(sdr["salt"]);
                Password    = Misc.GetMD5Hash(Password + salt);

                sdr = Database.Query("Select id, access, username, options from account where username='******' and password='******'");

                if (sdr.HasRows)
                {
                    // set account options
                    sockstate.Account.Access        = Convert.ToInt32(sdr["access"]);
                    sockstate.Account.AID           = Convert.ToInt32(sdr["id"]);
                    sockstate.Account.Options       = Misc.GetOptions(Convert.ToString(sdr["options"]));

                    // check online status
                    foreach (SocketClient socks in Program.AvalonSrv.ClientList)
                    {
                        if (socks.Account.Username != null)
                        {
                            if (socks.Account.Username == Username)
                            {
                                Logger.Log(Logger.LogLevel.Access, "Server", "Account in use, disconnecting : {0} ", ((IPEndPoint)socks.Client.Socket.RemoteEndPoint).Address.ToString());
                                loginpacket.State = (ushort)SMSG_ACCOUNT_LOGIN.LoginState.LOGIN_IN_USE_LOBBY;
                                return loginpacket;
                            }
                        }
                    }

                    loginpacket.State = (ushort)SMSG_ACCOUNT_LOGIN.LoginState.LOGIN_OK;
                    return loginpacket;

                }
                else
                {
                    loginpacket.State = (ushort)SMSG_ACCOUNT_LOGIN.LoginState.LOGIN_BAD_PASSWORD;
                    return loginpacket;
                }
            }
            else
            {
                loginpacket.State = (ushort)SMSG_ACCOUNT_LOGIN.LoginState.LOGIN_NOT_FOUND;
                return loginpacket;
            }
        }