private static bool YSFHandle_12_Unjoin(Client ThisClient, Packets.GenericPacket InPacket)
                {
                    //ThisClient.YSFServer.SendPacket(InPacket);

                    //Re-Synchronise...
                    OpenYS_Link.OYS_Link_Response Response = OpenYS_Link.Get(OpenYS_Link.Stats._id, "stats_total_flight_seconds");
                    double OldTime = 0;
                    bool   Failed  = !Double.TryParse(Response.Response, out OldTime);

                    if (!Response.Success | Failed)
                    {
                        ThisClient.SendMessage("Failed to update your flight time due to a server error! Sorry about that!");
                        return(true);
                    }



                    //Update OYS_LINK...
                    double difference = OpenYS_Link.Stats.total_flight_seconds - OldTime;

                    Response = OpenYS_Link.Set(OpenYS_Link.Stats._id, "stats_total_flight_seconds", OpenYS_Link.Stats.total_flight_seconds);
                    if (Response.Success)
                    {
                        ThisClient.SendMessage("Successfully updated your flight time by " + Math.Round(difference.AsSeconds().TotalHours, 2).ToString() + " hours.");
                        ThisClient.SendMessage("Your new total flight time is " + Math.Round(OpenYS_Link.Stats.total_flight_seconds.AsSeconds().TotalHours, 2).ToString() + " hours.");

                        return(true);
                    }
                    else
                    {
                        ThisClient.SendMessage("Failed to update your flight time due to a server error! Sorry about that!");
                        return(true);
                    }
                }
 public static void GetAllStats()
 {
     #region total_flight_seconds
     OYS_Link_Response total_flight_seconds = OpenYS_Link.Get(Stats._id, "stats_total_flight_seconds");
     if (total_flight_seconds.Success)
     {
         bool Failed = !Double.TryParse(total_flight_seconds.Response, out Stats.total_flight_seconds);
     }
     #endregion
 }
        private void Authenticate()
        {
            //Disable all inputs!
            Username_TextBox.Enabled             = false;
            Password_TextBox.Enabled             = false;
            Authentication_Button.Enabled        = false;
            ShowPassword_CheckBox.Enabled        = false;
            AuthenticationStatus_Label.Text      = "AUTHENTICATING...";
            AuthenticationStatus_Label.ForeColor = Color.FromArgb(240, 200, 0);
            AuthenticationStatus_Label.BackColor = Color.Transparent;
            OpenYS_Link.Stats._id = 0;
            Application.DoEvents();

            using (var client = new WebClient())
            {
                var values = new NameValueCollection();
                values["username"] = Username_TextBox.Text;

                if (PasswordIsEncrypted)
                {
                    values["password"] = OYS_Cryptography.DecryptPassword(Password_TextBox.Text);
                }
                else
                {
                    values["password"] = Password_TextBox.Text;
                }
                try
                {
                    //Key Verification:
                    //https://forum.ysfhq.com/api-check.php?apikey=

                    string APIKey = Environment.GetAPIKey();

                    if (APIKey == "MISSINGNO." | APIKey == "")
                    {
                        MessageBox.Show("APIKey not supplied for this custom build of OYS!\n\nTo get your own API Key, contact YSFHQ Webmasters, then place that key inside APIKey.txt, inside OpenYS-Library/Utilities!", "API Key Not Found!");
                        Username_TextBox.Enabled             = false;
                        Password_TextBox.Enabled             = false;
                        ShowPassword_CheckBox.Enabled        = false;
                        Authentication_Button.Enabled        = false; //leave this false, unable to authenticate without reloading!
                        AuthenticationStatus_Label.Text      = "API KEY MISSING";
                        AuthenticationStatus_Label.ForeColor = Color.FromArgb(128, 0, 0);
                        AuthenticationStatus_Label.BackColor = Color.FromArgb(240, 200, 0);
                        OpenYS_Link.Stats._id = 0;
                        Application.DoEvents();
                        return;
                    }

                    var response       = client.UploadValues("https://forum.ysfhq.com/api-login.php?apikey=" + APIKey, values);
                    var responseString = Encoding.Default.GetString(response);
                    System.Console.WriteLine(responseString);
                    bool Failed = !Int32.TryParse(responseString.Replace("\"", ""), out OpenYS_Link.Stats._id);

                    if (Failed | OpenYS_Link.Stats._id <= 0)
                    {
                        //NO GOOD!
                        Username_TextBox.Enabled             = true;
                        Password_TextBox.Enabled             = true;
                        ShowPassword_CheckBox.Enabled        = true;
                        Authentication_Button.Enabled        = true;
                        AuthenticationStatus_Label.Text      = "AUTHENTICATION FAIL!";
                        AuthenticationStatus_Label.ForeColor = Color.FromArgb(240, 0, 0);
                        AuthenticationStatus_Label.BackColor = Color.Transparent;
                        Application.DoEvents();
                        return;
                    }
                    else
                    {
                        //ALL GOOD!
                        if (!PasswordIsEncrypted)
                        {
                            //Only update if the password has been modified!

                            SettingsHandler.LoadAll();
                            Settings.YSFHQ.Username          = Username_TextBox.Text;
                            Settings.YSFHQ.EncryptedPassword = OYS_Cryptography.EncryptPassword(Password_TextBox.Text);
                            SettingsHandler.SaveAll();
                        }
                        Username_TextBox.Enabled             = true;
                        Password_TextBox.Enabled             = true;
                        ShowPassword_CheckBox.Enabled        = true;
                        Authentication_Button.Enabled        = true;
                        AuthenticationStatus_Label.Text      = "AUTHENTICATED";
                        AuthenticationStatus_Label.ForeColor = Color.FromArgb(0, 128, 0);
                        AuthenticationStatus_Label.BackColor = Color.Transparent;
                        Application.DoEvents();

                        OpenYS_Link.GetAllStats();

                        //OpenYS_Link.OYS_Link_Response Response = OpenYS_Link.Get(YSFHQ_ID, "/stats_total_flight_seconds");
                        //MessageBox.Show(Response.Response, Response.Reason);

                        //^^ WORKING!
                        return;
                    }
                }
                catch (System.Net.WebException WebError)
                {
                    HttpStatusCode ErrorCode = ((HttpWebResponse)WebError.Response).StatusCode;

                    if (ErrorCode == HttpStatusCode.BadRequest) //400
                    {
                        //Missing Username / Password
                        Username_TextBox.Enabled             = true;
                        Password_TextBox.Enabled             = true;
                        ShowPassword_CheckBox.Enabled        = true;
                        Authentication_Button.Enabled        = true;
                        AuthenticationStatus_Label.Text      = "NO USER OR PASS?";
                        AuthenticationStatus_Label.ForeColor = Color.FromArgb(240, 0, 0);
                        AuthenticationStatus_Label.BackColor = Color.Transparent;
                        Application.DoEvents();
                        return;
                    }
                    if (ErrorCode == HttpStatusCode.Unauthorized) //401
                    {
                        //Bad API Key
                        MessageBox.Show("APIKey not accepted for this release of OYS!\n\nPlease confirm your API Key with YSFHQ Webmasters, then update OpenYS-Library/Utilities/APIKey.txt!", "API Key Rejected!");
                        Username_TextBox.Enabled             = false;
                        Password_TextBox.Enabled             = false;
                        ShowPassword_CheckBox.Enabled        = false;
                        Authentication_Button.Enabled        = false; //leave this false, unable to authenticate without reloading!
                        AuthenticationStatus_Label.Text      = "API KEY REJECTED";
                        AuthenticationStatus_Label.ForeColor = Color.FromArgb(128, 0, 0);
                        AuthenticationStatus_Label.BackColor = Color.FromArgb(240, 200, 0);
                        Application.DoEvents();
                        return;
                    }
                    if (ErrorCode == HttpStatusCode.Forbidden) //403
                    {
                        //Bad Username / Password
                        Username_TextBox.Enabled             = true;
                        Password_TextBox.Enabled             = true;
                        ShowPassword_CheckBox.Enabled        = true;
                        Authentication_Button.Enabled        = true;
                        AuthenticationStatus_Label.Text      = "AUTHENTICATION FAIL!";
                        AuthenticationStatus_Label.ForeColor = Color.FromArgb(240, 0, 0);
                        AuthenticationStatus_Label.BackColor = Color.Transparent;
                        Application.DoEvents();
                        return;
                    }
                    //Generic Error?
                    MessageBox.Show("Generic Error Occured:\n\n" + WebError.Message, "Genereric Error!");
                    Username_TextBox.Enabled             = true;
                    Password_TextBox.Enabled             = true;
                    ShowPassword_CheckBox.Enabled        = true;
                    Authentication_Button.Enabled        = true;
                    AuthenticationStatus_Label.Text      = "GENERIC ERROR!";
                    AuthenticationStatus_Label.ForeColor = Color.FromArgb(240, 0, 0);
                    AuthenticationStatus_Label.BackColor = Color.Transparent;
                    Application.DoEvents();
                    return;
                    //System.Console.WriteLine(WebError);
                }
            }
        }