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 @@ + - + + + +