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