配置的加载
// Hearthbuddy.Windows.ConfigurationWindow // Token: 0x060001DB RID: 475 RVA: 0x00088A3C File Offset: 0x00086C3C public ConfigurationWindow() { this.InitializeComponent(); if (!CommandLine.Arguments.Exists("config")) { Configuration.Instance.Name = "Default"; return; } string text = CommandLine.Arguments.Single("config"); if (new Regex("^[a-zA-Z0-9_]*$").IsMatch(text)) { Configuration.Instance.Name = text; this.bool_0 = true; return; } Configuration.Instance.Name = "Default"; }
// Hearthbuddy.Windows.ConfigurationWindow // Token: 0x060001DD RID: 477 RVA: 0x00088B90 File Offset: 0x00086D90 private void button_0_Click(object sender, RoutedEventArgs e) { string text = this.comboBox_0.Text; if (string.IsNullOrEmpty(text)) { MessageBox.Show("Please select or enter a valid configuration to use.", "Hearthbuddy", MessageBoxButton.OK, MessageBoxImage.Hand); return; } if (!new Regex("^[a-zA-Z0-9_\-]*$").IsMatch(text)) { MessageBox.Show("The configuration name is invalid. Please use only alphanumeric, the underscore, or a dash characters (a-z, A-Z, 0-9, _, -).", "Hearthbuddy", MessageBoxButton.OK, MessageBoxImage.Hand); return; } this.method_0(text); }
string_0是"Default"
// Hearthbuddy.Windows.ConfigurationWindow // Token: 0x060001DC RID: 476 RVA: 0x00088ABC File Offset: 0x00086CBC private void method_0(string string_0) { if (!GlobalSettings.Instance.Configurations.Contains(string_0)) { GlobalSettings.Instance.Configurations.Add(string_0); } GlobalSettings.Instance.LastUsedConfiguration = string_0; Configuration.Instance.Name = string_0; try { base.Visibility = Visibility.Hidden; LoginWindow loginWindow = new LoginWindow(); int num = 0; while (loginWindow.NeedsToShow) { Application.Current.MainWindow = loginWindow; loginWindow.ShowDialog(); if (Application.Current.MainWindow == null || num > 5) { if (num > 5) { MessageBox.Show("Hearthbuddy has tried to login too many times. Please wait a short while and try again. Hearthbuddy will now close.", "Hearthbuddy", MessageBoxButton.OK, MessageBoxImage.Hand); } Environment.Exit(0); } num++; } base.Close(); } catch (Exception ex) { MessageBox.Show(ex.ToString(), "Hearthbuddy", MessageBoxButton.OK, MessageBoxImage.Hand); Environment.Exit(0); } }
// Hearthbuddy.Windows.MainWindow // Token: 0x060001FF RID: 511 RVA: 0x00089530 File Offset: 0x00087730 private void method_1(object sender, RoutedEventArgs e) { try { base.Title = "Hearthbuddy-20190818-005(https://github.com/ChuckHearthBuddy/SilverFish)"; base.SetBinding(Window.LeftProperty, new Binding("WindowX") { Source = MainSettings.Instance, Mode = BindingMode.TwoWay }); base.SetBinding(Window.TopProperty, new Binding("WindowY") { Source = MainSettings.Instance, Mode = BindingMode.TwoWay }); base.SetBinding(FrameworkElement.WidthProperty, new Binding("WindowWidth") { Source = MainSettings.Instance, Mode = BindingMode.TwoWay }); base.SetBinding(FrameworkElement.HeightProperty, new Binding("WindowHeight") { Source = MainSettings.Instance, Mode = BindingMode.TwoWay }); MainSettings.Instance.LoadRowDefinitions(this.rowDefinition_0, this.rowDefinition_1, this.rowDefinition_2); this.method_3(); this.textBox_0.Text = Logger.FileName; this.method_17(); this.method_18(); this.method_19(); this.method_20(); } catch (Exception exception) { MainWindow.ilog_0.Error("[Ui] An exception occurred.", exception); } }
// Hearthbuddy.Windows.MainWindow // Token: 0x06000201 RID: 513 RVA: 0x00003C51 File Offset: 0x00001E51 private void method_3() { ThreadPool.QueueUserWorkItem(new WaitCallback(this.method_21)); }
// Hearthbuddy.Windows.MainWindow // Token: 0x06000231 RID: 561 RVA: 0x0008AC34 File Offset: 0x00088E34 [CompilerGenerated] private void method_21(object object_0) { try { base.Dispatcher.Invoke(new Action(this.method_22)); string text; if (this.process_0 == null) { base.Dispatcher.BeginInvoke(new Action(base.Close), Array.Empty<object>()); } else if (!TritonHs.smethod_0(this.process_0, new TritonHs.Delegate6(Class12.smethod_4), out text)) { MainWindow.ilog_0.Error(text); System.Windows.MessageBox.Show(text, "Error", MessageBoxButton.OK, MessageBoxImage.Hand); base.Dispatcher.BeginInvoke(new Action(base.Close), Array.Empty<object>()); } else { TritonHs.Memory.ProcessExited += MainWindow.Class25.ChuckInstance9.method_1; TritonHs.Memory.Executor.FrameDropWaitTime = 15000u; TritonHs.Memory.Executor.ExecuteWaitTime = 15000; TritonHs.Memory.DisableCache(); TritonHs.Memory.ClearCache(); int version; int clientChangelist; using (TritonHs.AcquireFrame()) { version = Triton.Game.Mapping.Version.version; clientChangelist = Triton.Game.Mapping.Version.clientChangelist; } if ((long)version != (long)((ulong)Class247.UInt32_1) && (long)clientChangelist != (long)((ulong)Class247.UInt32_2)) { MainWindow.ilog_0.InfoFormat("Hearthstone client version ({0}, {1})", version, clientChangelist); new Coroutine(new Func<Task>(MainWindow.Class25.ChuckInstance9.method_2)); Configuration.Instance.AddSettings(MainSettings.Instance); Configuration.Instance.AddSettings(DevSettings.Instance); Configuration.Instance.SaveAll(); base.Dispatcher.Invoke(new Action(this.method_23)); BotManager.PreStart += this.method_11; BotManager.PostStop += this.method_10; BotManager.Load(); base.Dispatcher.Invoke(new Action(this.method_24)); this.comboBox_0.Dispatcher.BeginInvoke(new Action(this.method_25), Array.Empty<object>()); BotManager.OnBotChanged += this.method_6; RoutineManager.Load(); base.Dispatcher.Invoke(new Action(this.method_26)); this.comboBox_1.Dispatcher.BeginInvoke(new Action(this.method_27), Array.Empty<object>()); RoutineManager.OnRoutineChanged += this.method_7; PluginManager.Load(); foreach (IPlugin plugin in PluginManager.Plugins) { if (MainSettings.Instance.EnabledPlugins.Contains(plugin.Name)) { using (TritonHs.AcquireFrame()) { PluginManager.Enable(plugin); } Thread.Sleep(20); } else { using (TritonHs.AcquireFrame()) { PluginManager.Disable(plugin); } Thread.Sleep(20); } } this.listBox_0.Dispatcher.Invoke<IEnumerable>(new Func<IEnumerable>(this.method_28), DispatcherPriority.Normal); base.Dispatcher.Invoke(new Action(this.method_29)); PluginManager.PluginEnabled += this.method_5; PluginManager.PluginDisabled += this.method_4; MainWindow.ilog_0.ErrorFormat("{0}Please read the following guide before using this program:{0}https://github.com/ChuckHearthBuddy/SilverFish/blob/master/ReadMe.md", Environment.NewLine); base.Dispatcher.Invoke(new Action(this.method_30)); base.Dispatcher.Invoke(new Action(this.method_31)); this.stopwatch_0.Restart(); RoutineManager.OnRoutineChanged += this.method_7; BotManager.OnBotChanged += this.method_6; TritonHs.IsBotFullyLoaded = true; Hotkeys.Register("BotManager.StartStop", Keys.S, ModifierKeys.Alt | ModifierKeys.Shift, new Action<Hotkey>(MainWindow.Class25.ChuckInstance9.method_3)); if (CommandLine.Arguments.Exists("autostart")) { BotManager.Start(); } } else { text = string.Format("This client version ({0}, {1}) is unsupported. Hearthbuddy currently supports client version ({2}, {3}). Please check the forums for more information: https://www.thebuddyforum.com/hearthbuddy-forum/", new object[] { version, clientChangelist, Class247.UInt32_1, Class247.UInt32_2 }); MainWindow.ilog_0.ErrorFormat(text, Array.Empty<object>()); System.Windows.MessageBox.Show(text, "Error", MessageBoxButton.OK, MessageBoxImage.Hand); base.Dispatcher.BeginInvoke(new Action(base.Close), Array.Empty<object>()); } } } catch (Exception exception) { MainWindow.ilog_0.Error("[OnStartup] A top-level exception has been caught.", exception); } }
// Hearthbuddy.Windows.MainWindow // Token: 0x06000232 RID: 562 RVA: 0x0008B13C File Offset: 0x0008933C [CompilerGenerated] private void method_22() { if (!Class9.smethod_4(out this.mutex_0, out this.process_0)) { MainWindow.ilog_0.Error("Could not attach to a Hearthstone process. Please make sure an available Hearthstone process is running."); MessageBox.Show(string.Format("Could not attach to a Hearthstone process. Please make sure an available Hearthstone process is running.{0}{0}Hearthbuddy will now close.", Environment.NewLine), "Hearthbuddy", MessageBoxButton.OK, MessageBoxImage.Hand); return; } this.dispatcherTimer_0 = new DispatcherTimer(TimeSpan.FromSeconds(1.0), DispatcherPriority.Normal, new EventHandler(this.method_9), base.Dispatcher); this.dispatcherTimer_0.Start(); }
// ns3.Class9 // Token: 0x06000116 RID: 278 RVA: 0x00003359 File Offset: 0x00001559 internal static bool smethod_4(out Mutex mutex_0, out Process process_0) { if (!Class9.smethod_5(out mutex_0, out process_0)) { return false; } Path.Combine(Path.GetDirectoryName(process_0.MainModule.FileName), "Hearthstone_Data", "Mono"); return true; }
// ns3.Class9 // Token: 0x06000117 RID: 279 RVA: 0x00086200 File Offset: 0x00084400 internal static bool smethod_5(out Mutex mutex_0, out Process process_0) { mutex_0 = null; process_0 = null; Arguments arguments = CommandLine.Arguments; if (arguments.Exists("pid")) { try { int num = int.Parse(arguments.Single("pid")); process_0 = Process.GetProcessById(num); if (!Class9.smethod_6(process_0)) { Class9.ilog_0.Error("Invalid PID specifier passed to the command line: " + arguments.Single("pid") + ". This process is not a Hearthstone client."); return false; } bool flag; mutex_0 = Class9.smethod_1(num, out flag); if (!flag) { mutex_0 = null; process_0 = null; Class9.ilog_0.Error("Invalid PID specifier passed to the command line: " + arguments.Single("pid") + ". This process has already been attached to."); return false; } return true; } catch { Class9.ilog_0.Error("Invalid PID specifier passed to the command line: " + arguments.Single("pid")); return false; } } bool result; if (arguments.Exists("pname")) { try { string processName = arguments.Single("pname"); process_0 = Process.GetProcessesByName(processName).FirstOrDefault<Process>(); if (process_0 != null && Class9.smethod_6(process_0)) { bool flag2; mutex_0 = Class9.smethod_1(process_0.Id, out flag2); if (!flag2) { mutex_0 = null; process_0 = null; Class9.ilog_0.Error("Invalid PNAME specifier passed to the command line: " + arguments.Single("pname") + ". This process has already been attached to."); result = false; } else { result = true; } } else { Class9.ilog_0.Error("Invalid PNAME specifier passed to the command line: " + arguments.Single("pname") + ". This process is not a Hearthstone client."); result = false; } } catch { Class9.ilog_0.Error("Invalid PNAME specifier passed to the command line: " + arguments.Single("pname")); result = false; } } else { List<Process> list = Class9.smethod_7().ToList<Process>(); if (list.Count == 0) { return false; } if (!arguments.Exists("noautoattach") && list.Count == 1) { bool flag3; mutex_0 = Class9.smethod_1(list[0].Id, out flag3); if (flag3) { process_0 = list[0]; return true; } mutex_0.Dispose(); } Dictionary<Process, string> dictionary = new Dictionary<Process, string>(); foreach (Process process in list) { bool flag4; mutex_0 = Class9.smethod_1(process.Id, out flag4); if (flag4 && mutex_0 != null) { using (ExternalProcessMemory externalProcessMemory = new ExternalProcessMemory(process, false, false, false)) { dictionary.Add(process, Class9.smethod_0(externalProcessMemory)); mutex_0.ReleaseMutex(); mutex_0.Dispose(); } } } ProcessSelectorWindow processSelectorWindow = new ProcessSelectorWindow(dictionary) { Topmost = true }; if (processSelectorWindow.ShowDialog() == true) { process_0 = processSelectorWindow.Selected; bool flag5; mutex_0 = Class9.smethod_1(process_0.Id, out flag5); return true; } return false; } return result; }
// ns3.Class9 // Token: 0x06000112 RID: 274 RVA: 0x00003352 File Offset: 0x00001552 private static string smethod_0(ExternalProcessMemory externalProcessMemory_0) { return "(Hearthstone)"; }
// ns3.Class9 // Token: 0x06000113 RID: 275 RVA: 0x0008608C File Offset: 0x0008428C private static Mutex smethod_1(int int_0, out bool bool_0) { return new Mutex(true, "Local\" + (Environment.MachineName.GetHashCode() ^ int_0.GetHashCode() ^ TimeZone.CurrentTimeZone.StandardName.GetHashCode() ^ "Blizz_HS_BuddyTeam".GetHashCode() + 25), ref bool_0); }