private void btnSave_Click(object sender, EventArgs e) { if (!Int32.TryParse(this.txtWinInjectionTiming.Text, out this._windowDelay) || !Int32.TryParse(this.txtLoginInjectionTiming.Text, out this._loginDelay) || this._windowDelay < 0 || this._windowDelay > 5000 || this._loginDelay < 0 || this._loginDelay > 5000) { MessageBox.Show("The Window and Login injection timing must be a number between 0 and 5000!", "Invalid Injection Timing", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } var settings = new Settings { Resize = this.chkResize.Checked, ClientBin = this.cmbBin.Text, DisableDark = this.chkDisableDark.Checked, EnableMobColours = this.chkMobColours.Checked, MusicType = this.cmbMusic.SelectedItem.ToString(), UseProxy = this.chkUseProxy.Checked, DisableServerUpdate = !this.chkSyncServers.Checked, WindowedDelay = this._windowDelay, LoginDelay = this._loginDelay, DisableUnderwater = this.chkDisableUnderwater.Checked }; settings.Resolution = this.chkResize.Checked ? (Resolution)this.cmbResolution.SelectedItem : null; settings.Windowed = this.chkWindowed.Checked; if (settings.ClientBin.Trim() == string.Empty || settings.ClientBin.Trim() == "No Client Directory Selected" || settings.ClientBin.Trim() == string.Empty) { MessageBox.Show(@"You must enter a client directory and select a bin to continue.", @"Invalid Settings", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } Helpers.SaveSettings(this._config.KeyName, settings, this._config.InstallDir, this._isWin8OrHigher); this.Close(); }
} //end LauncherForm_KeyDown private void updateChecker_DoWork(object sender, DoWorkEventArgs e) { try { var force = e.Argument != null && (bool)e.Argument; var versionInfo = Helpers.GetVersionInfo(this._config.VersionInfoUrl, this._config.PublicKey); var launcherKey = Registry.CurrentUser.OpenSubKey(@"Software\" + this._config.KeyName, true); var lastUpdatedCheck = launcherKey.GetValue("LastUpdated"); var updatesLastRun = (int?)lastUpdatedCheck ?? 0; if (versionInfo == null) { return; } var settings = Helpers.LoadSettings(this._config.KeyName); if (Helpers.UpdateConfig(versionInfo)) { MessageBox.Show("Configuration information was updated from the server.\n\nThe launcher will close. Please re-launch.", @"Configuration Updated", MessageBoxButtons.OK, MessageBoxIcon.Information); this.Close(); return; } var applicationPath = Application.ExecutablePath; var appDataPath = Directory.GetParent(Application.UserAppDataPath).ToString(); var updaterLocation = Path.Combine(appDataPath, "Updater.exe"); var updaterChecksum = Helpers.GetChecksum(updaterLocation); if (!File.Exists(updaterLocation) || updaterChecksum != versionInfo.FileChecksums["Updater.exe"]) { using (var client = new WebClient()) { client.DownloadProgressChanged += client_DownloadProgressChanged; client.DownloadFileAsyncSync(new Uri(this._config.UpdaterUrl.ToString()), updaterLocation); } this.updateChecker.ReportProgress(1); } //end if if (versionInfo.Version != Version) { var result = DialogResult.Cancel; // push to the UI thread to actually display the dialog... ugly hack var dialog = this.BeginInvoke(new MethodInvoker(delegate { result = new UpdateForm(versionInfo).ShowDialog(); })); this.EndInvoke(dialog); if (result == DialogResult.OK) { var info = new ProcessStartInfo(updaterLocation); info.Arguments = "\"" + applicationPath + "\""; if (Environment.OSVersion.Version.Major >= 6) { info.Verb = "runas"; } Process.Start(info); } //end if } //end if if (versionInfo.LastUpdated < updatesLastRun && !force) { return; } // checks for > 1 because the Updater.exe is always present. if (versionInfo.FileChecksums != null && versionInfo.FileChecksums.Count > 1) { Helpers.SetControlPropertyThreadSafe(this.prgUpdates, "Maximum", versionInfo.FileChecksums.Count); for (var i = 1; i < versionInfo.FileChecksums.Count; i++) { var file = versionInfo.FileChecksums.ElementAt(i).Key; var checksum = versionInfo.FileChecksums.ElementAt(i).Value; var filePath = Path.Combine(this._config.InstallDir, file); if (!File.Exists(filePath) || Helpers.GetChecksum(filePath) != checksum) { var extension = Path.GetExtension(file); using (var client = new WebClient()) { client.DownloadProgressChanged += client_DownloadProgressChanged; if (File.Exists(filePath) && extension != null && extension.Equals(".pak", StringComparison.CurrentCultureIgnoreCase) && !file.Contains("zelgo")) { var idxFile = filePath.Replace(".pak", ".idx"); var pakIndex = PakTools.RebuildPak(filePath, versionInfo.PakFiles[file], true); PakTools.RebuildIndex(idxFile, pakIndex, true); } else { client.DownloadFileAsyncSync( new Uri(this._config.UpdaterFilesRoot + file.Replace("\\", "/")), filePath); } } } this.updateChecker.ReportProgress(i); } //end for var currentTime = DateTime.UtcNow - new DateTime(1970, 1, 1); launcherKey.SetValue("LastUpdated", (int)currentTime.TotalSeconds, RegistryValueKind.DWord); string versionName; var isWin8OrHigher = Helpers.IsWin8OrHigher(out versionName); if (isWin8OrHigher && versionName == "Windows 10" && settings.ClientBin.ToLower() != "s3ep1u.bin") { settings.ClientBin = "S3EP1U.bin"; Helpers.SaveSettings(this._config.KeyName, settings, this._config.InstallDir, true); MessageBox.Show( "You're running Windows 10, but aren't using the S3EP1U.bin file. It has now been automatically set.\n\n" + @"If you want to use the normal S3EP1.bin file, you can update it under Settings -> Client Settings.", @"Windows 10 Detected", MessageBoxButtons.OK, MessageBoxIcon.Information); } //end if } //end if } finally { this.updateChecker.ReportProgress(this.prgUpdates.Maximum); } //end try/finally } //end updateChecker