From 69b4be7a920a4e62415fa69acc78e709d1f06acf Mon Sep 17 00:00:00 2001 From: Linisdjxm <35957435+Linisdjxm@users.noreply.github.com> Date: Sun, 26 May 2024 23:01:29 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=9C=A8=E7=89=B9=E5=AE=9A=E7=8E=AF?= =?UTF-8?q?=E8=8A=82=E6=89=A7=E8=A1=8C=E5=90=AF=E5=8A=A8=E5=89=8D/?= =?UTF-8?q?=E5=90=8E=E8=84=9A=E6=9C=AC=20(#9153)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat:在特定环节执行启动前/后脚本 * fix:fix --- src/MaaWpfGui/Constants/ConfigurationKeys.cs | 2 + src/MaaWpfGui/Main/AsstProxy.cs | 12 ++++++ src/MaaWpfGui/Res/Localizations/zh-cn.xaml | 2 + .../ViewModels/UI/CopilotViewModel.cs | 19 ++++++++++ .../ViewModels/UI/SettingsViewModel.cs | 38 ++++++++++++++++++- .../ViewModels/UI/TaskQueueViewModel.cs | 4 ++ .../ConnectSettingsUserControl.xaml | 24 +++++++++++- 7 files changed, 97 insertions(+), 4 deletions(-) diff --git a/src/MaaWpfGui/Constants/ConfigurationKeys.cs b/src/MaaWpfGui/Constants/ConfigurationKeys.cs index d517c387cc..69a725c269 100644 --- a/src/MaaWpfGui/Constants/ConfigurationKeys.cs +++ b/src/MaaWpfGui/Constants/ConfigurationKeys.cs @@ -80,6 +80,8 @@ namespace MaaWpfGui.Constants public const string AutoRestartOnDrop = "Start.AutoRestartOnDrop"; public const string StartsWithScript = "Start.StartsWithScript"; public const string EndsWithScript = "Start.EndsWithScript"; + public const string CopilotWithScript = "Start.CopilotWithScript"; + public const string ManualStopWithScript = "Start.ManualStopWithScript"; public const string BlockSleep = "Start.BlockSleep"; public const string BlockSleepWithScreenOn = "Start.BlockSleepWithScreenOn"; diff --git a/src/MaaWpfGui/Main/AsstProxy.cs b/src/MaaWpfGui/Main/AsstProxy.cs index 135d22de71..b591ade296 100644 --- a/src/MaaWpfGui/Main/AsstProxy.cs +++ b/src/MaaWpfGui/Main/AsstProxy.cs @@ -702,6 +702,18 @@ namespace MaaWpfGui.Main isMainTaskQueueAllCompleted = taskList.All(i => !latestMinorTaskIds.Contains(i)); } + if (_latestTaskId.ContainsKey(TaskType.Copilot)) + { + if (Instances.SettingsViewModel.CopilotWithScript) + { + Task.Run(() => Instances.SettingsViewModel.RunScript("EndsWithScript", showLog: false)); + if (!string.IsNullOrWhiteSpace(Instances.SettingsViewModel.EndsWithScript)) + { + Instances.CopilotViewModel.AddLog(LocalizationHelper.GetString("EndsWithScript")); + } + } + } + bool buyWine = _latestTaskId.ContainsKey(TaskType.Mall) && Instances.SettingsViewModel.DidYouBuyWine(); _latestTaskId.Clear(); diff --git a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml index 82206774ab..209830c5d0 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml @@ -255,6 +255,8 @@ 附加命令 开始前脚本 结束后脚本 + 自动战斗时启用上述脚本 + 手动暂停时启用上述脚本 运行任务时阻止休眠 阻止休眠时保持屏幕常亮 截图耗时 min/avg/max(ms): {0:#,#} / {1:#,#} / {2:#,#} ({3}) diff --git a/src/MaaWpfGui/ViewModels/UI/CopilotViewModel.cs b/src/MaaWpfGui/ViewModels/UI/CopilotViewModel.cs index d25e4c55cd..f0d1fffdb6 100644 --- a/src/MaaWpfGui/ViewModels/UI/CopilotViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/CopilotViewModel.cs @@ -997,6 +997,15 @@ namespace MaaWpfGui.ViewModels.UI return; } + if (Instances.SettingsViewModel.CopilotWithScript) + { + await Task.Run(() => Instances.SettingsViewModel.RunScript("StartsWithScript", showLog: false)); + if (!string.IsNullOrWhiteSpace(Instances.SettingsViewModel.StartsWithScript)) + { + AddLog(LocalizationHelper.GetString("StartsWithScript")); + } + } + AddLog(LocalizationHelper.GetString("ConnectingToEmulator")); if (!Instances.SettingsViewModel.AdbReplaced && !Instances.SettingsViewModel.IsAdbTouchMode()) { @@ -1014,6 +1023,7 @@ namespace MaaWpfGui.ViewModels.UI if (errMsg.Length != 0) { AddLog(errMsg, UiLogColor.Error); + Stop(); } UserAdditional = UserAdditional.Replace(",", ",").Replace(";", ";").Trim(); @@ -1079,6 +1089,15 @@ namespace MaaWpfGui.ViewModels.UI // ReSharper disable once UnusedMember.Global public void Stop() { + if (Instances.SettingsViewModel.CopilotWithScript && Instances.SettingsViewModel.ManualStopWithScript) + { + Task.Run(() => Instances.SettingsViewModel.RunScript("EndsWithScript", showLog: false)); + if (!string.IsNullOrWhiteSpace(Instances.SettingsViewModel.EndsWithScript)) + { + Instances.CopilotViewModel.AddLog(LocalizationHelper.GetString("EndsWithScript")); + } + } + if (!Instances.AsstProxy.AsstStop()) { _logger.Warning("Failed to stop Asst"); diff --git a/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs b/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs index ccc40deda7..93f7e785c5 100644 --- a/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs @@ -771,6 +771,30 @@ namespace MaaWpfGui.ViewModels.UI } } + private bool _copilotWithScript = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.CopilotWithScript, bool.FalseString)); + + public bool CopilotWithScript + { + get => _copilotWithScript; + set + { + SetAndNotify(ref _copilotWithScript, value); + ConfigurationHelper.SetValue(ConfigurationKeys.CopilotWithScript, value.ToString()); + } + } + + private bool _manualStopWithScript = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.ManualStopWithScript, bool.FalseString)); + + public bool ManualStopWithScript + { + get => _manualStopWithScript; + set + { + SetAndNotify(ref _manualStopWithScript, value); + ConfigurationHelper.SetValue(ConfigurationKeys.ManualStopWithScript, value.ToString()); + } + } + private bool _blockSleep = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.BlockSleep, bool.FalseString)); public bool BlockSleep @@ -803,7 +827,7 @@ namespace MaaWpfGui.ViewModels.UI set => SetAndNotify(ref _screencapCost, value); } - public void RunScript(string str) + public void RunScript(string str, bool showLog = true) { bool enable = str switch { @@ -824,8 +848,18 @@ namespace MaaWpfGui.ViewModels.UI _ => () => false, }; + if (!showLog) + { + if (!func()) + { + _logger.Warning("Failed to execute the script."); + } + + return; + } + Execute.OnUIThread(() => Instances.TaskQueueViewModel.AddLog( - LocalizationHelper.GetString("StartTask") + LocalizationHelper.GetString(str))); + LocalizationHelper.GetString("StartTask") + LocalizationHelper.GetString(str))); if (func()) { Execute.OnUIThread(() => Instances.TaskQueueViewModel.AddLog( diff --git a/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs b/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs index 31c83b8f9e..b9c7d53e15 100644 --- a/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs @@ -1076,6 +1076,10 @@ namespace MaaWpfGui.ViewModels.UI public void SetStopped() { SleepManagement.AllowSleep(); + if (Instances.SettingsViewModel.ManualStopWithScript) + { + Task.Run(() => Instances.SettingsViewModel.RunScript("EndsWithScript")); + } if (!_runningState.GetIdle() || Stopping) { diff --git a/src/MaaWpfGui/Views/UserControl/ConnectSettingsUserControl.xaml b/src/MaaWpfGui/Views/UserControl/ConnectSettingsUserControl.xaml index 42ba2b7b47..49fb1e9f3e 100644 --- a/src/MaaWpfGui/Views/UserControl/ConnectSettingsUserControl.xaml +++ b/src/MaaWpfGui/Views/UserControl/ConnectSettingsUserControl.xaml @@ -30,6 +30,7 @@ + - + + + +