/// <summary> /// Event fired when the Launch Battlefield 2 button is pushed on the Launcher Tab /// </summary> private async void LaunchButton_Click(object sender, EventArgs args) { // Lock button to prevent spam LaunchButton.Enabled = false; // Close the app if (BF2Client.IsRunning) { BF2Client.Stop(); return; } // Show overlay first, which provides the smokey (Modal) background using (ModalOverlay overlay = new ModalOverlay(this, 0.3)) { // Show overlay overlay.Show(this); // Make sure a mod is selected if (ModComboBox.SelectedIndex < 1) { MetroMessageBox.Show(overlay, "Please select a Bf2 Mod before attempting to start the game!", "No Mod Selected", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, 150 ); overlay.Close(); // Reset button BF2Client_Exited(); // Focus the mod select ModComboBox.Focus(); return; } // Grab our mod and provider BF2Mod Mod = ModComboBox.SelectedItem as BF2Mod; ServiceProvider Provider = ProviderComboBox.SelectedItem as ServiceProvider; Server Server = ServerComboBox.SelectedItem as Server; // Remove old redirects Redirector.RemoveRedirects(); // If we arent using a provider, skip to just launching the game if (Provider == null) { goto StartClient; } // Apply redirects in a new thread SyncProgress <TaskStep> MyProgress = new SyncProgress <TaskStep>(RedirectStatusUpdate); bool Success = await Redirector.ApplyRedirectsAsync(Provider, MyProgress); if (!Success) { // Show error MetroMessageBox.Show(overlay, ErrorStep.Description, "Redirect Error", MessageBoxButtons.OK, MessageBoxIcon.Error, 180); overlay.Close(); // Reset button BF2Client_Exited(); return; } // Show the Task Form TaskForm.Show(this, "Launching Battlefield 2", $"Starting Battlefield 2 with mod \"{Mod.Title}\"", false, ProgressBarStyle.Marquee, 0); // Our goto to start the game StartClient: { try { // === // ALWAYS Remove all temporary keys before this next point // === Params.Reload(LaunchParamsTextBox.Text); Params.ClearTempParams(); // If we are auto joining a server, we must login! if (Provider != null && (Server != null || CredentialsCheckBox.Checked)) { // Prompt user to login! using (LoginForm f = new LoginForm(Provider)) { DialogResult Res = f.ShowDialog(overlay); if (Res == DialogResult.Cancel) { // Reset button TaskForm.CloseForm(); BF2Client_Exited(); return; } // Set server params if (Server != null) { Params.AddOrSet("joinServer", Server.Address); Params.AddOrSet("port", Server.Port.ToString()); } // Set login params Params.AddOrSet("playerName", f.UsernameTextBox.Text); Params.AddOrSet("playerPassword", f.PasswordTextBox.Text); } } // Start the client executable BF2Client.Start(Mod, Params.BuildString(true)); } catch (Exception e) { // Show error MetroMessageBox.Show(overlay, e.Message, "Failure to Launch", MessageBoxButtons.OK, MessageBoxIcon.Error, 180); BF2Client_Exited(); } } // Close the task form TaskForm.CloseForm(); // Close Task form and overlay using (RunningOverlay = new GameRunningForm(this)) { RunningOverlay.ShowDialog(overlay); } // Close Overlay overlay.Close(); LaunchButton.Focus(); } }
private void SaveButton_Click(object sender, EventArgs e) { // Window Mode Params.AddOrSet("fullscreen", WindowedMode.Checked ? "0" : "1"); // Custom Resolution if (CustomRes.Checked) { Params.AddOrSet("szx", WidthText.Text); Params.AddOrSet("szy", HeightText.Text); } else { Params.Remove("szx"); Params.Remove("syx"); } // Skip Intro Movies if (Restart.Checked) { Params.AddOrSet("restart", Restart.Checked ? "1" : "0"); } else { Params.Remove("restart"); } // Swiff Player if (DisableSwiff.Checked) { Params.AddOrSet("disableSwiff", DisableSwiff.Checked ? "1" : "0"); } else { Params.Remove("disableSwiff"); } // No sound mode if (NoSound.Checked) { Params.AddOrSet("noSound", NoSound.Checked ? "1" : "0"); } else { Params.Remove("noSound"); } // Low Priority if (LowPriority.Checked) { Params.AddOrSet("lowPriority", LowPriority.Checked ? "1" : "0"); } else { Params.Remove("lowPriority"); } // Save Config Program.Config.LaunchParams = Params.BuildString(false); Program.Config.Save(); this.DialogResult = DialogResult.OK; }
public MainForm() { // Create form controls InitializeComponent(); // Set instance Instance = this; // Make sure the basic configuration settings are setup by the user, // and load the BF2 server and installed mods if (!SetupManager.Run()) { this.Load += (s, e) => this.Close(); return; } // Load Bf2 mods LoadModList(); // Load client settings ClientSettings.Load(); ReloadProviders(); ReloadServers(); // Setup theme metroStyleManager1.Theme = MetroThemeStyle.Light; metroStyleManager1.Style = MetroColorStyle.Blue; // Set default texts InstallDirTextbox.Text = Program.Config.Bf2InstallDir; // Load Redirector bool AllSystemsGo = Redirector.Initialize(); // Select provider if we have redirects detected if (Redirector.RedirectsEnabled) { ServiceProvider Provider; if (String.IsNullOrEmpty(Program.Config.LastUsedProvider)) { Provider = ClientSettings.ServiceProviders .Where(x => x.StatsAddress == Redirector.StatsServerAddress.ToString() && x.GamespyAddress == Redirector.GamespyServerAddress.ToString()) .FirstOrDefault(); } else { Provider = ClientSettings.ServiceProviders .Where(x => x.Name == Program.Config.LastUsedProvider) .FirstOrDefault(); } // Set the last used provider if we have one if (Provider != null) { ProviderComboBox.SelectedItem = Provider; } } // Set redirect mode IcsRadioButton.Checked = false; switch (Program.Config.RedirectMode) { case RedirectMode.HostsIcsFile: IcsRadioButton.Checked = true; break; case RedirectMode.HostsFile: HostsRadioButton.Checked = true; break; case RedirectMode.DnsServer: DnsRadioButton.Checked = true; break; } // Set redirect removal switch (Program.Config.RedirectRemoveMethod) { case RedirectRemoveMethod.Never: NeverRadioButton.Checked = true; break; case RedirectRemoveMethod.OnAppClose: AppExitsRadioButton.Checked = true; break; case RedirectRemoveMethod.OnGameClose: break; } // Auto Login Settings CredentialsCheckBox.Checked = Program.Config.PromptCredentials; ProgramUpdateCheckBox.Checked = Program.Config.CheckForUpdates; // Load our params Params = new ParamsCollection(Program.Config.LaunchParams); LaunchParamsTextBox.Text = Params.BuildString(false); // Register for events BF2Client.PathChanged += LoadModList; BF2Client.Started += BF2Client_Started; BF2Client.Exited += BF2Client_Exited; // Focus the mod select first on the Launcher tab! MainTabControl.SelectedIndex = 0; // Start updater if (Program.Config.CheckForUpdates) { ProgramUpdater.CheckCompleted += ProgramUpdater_CheckCompleted; ProgramUpdater.CheckForUpdateAsync(); } // Once the form is shown, asynchronously load the redirect service this.Shown += (s, e) => { // Focus the mod select combobox ModComboBox.Focus(); // Since we werent registered for Bf2Client events before, do this here if (BF2Client.IsRunning) { BF2Client_Started(); } }; }