diff --git a/src/MaaWpfGui/Models/PostActionSetting.cs b/src/MaaWpfGui/Models/PostActionSetting.cs index df1e170865..41d6d44bef 100644 --- a/src/MaaWpfGui/Models/PostActionSetting.cs +++ b/src/MaaWpfGui/Models/PostActionSetting.cs @@ -66,6 +66,11 @@ public class PostActionSetting : PropertyChangedBase /// 关机 /// Shutdown = 64, + + /// + /// 睡眠 + /// + Sleep = 128, } private PostActions _postActions; @@ -218,8 +223,9 @@ public class PostActionSetting : PropertyChangedBase if (value) { Shutdown = false; + Sleep = false; } - else if (!Shutdown) + else if (!Shutdown && !Sleep) { IfNoOtherMaa = false; } @@ -242,11 +248,11 @@ public class PostActionSetting : PropertyChangedBase if (value) { - ExitArknights = false; - BackToAndroidHome = false; + ExitEmulator = true; Hibernate = false; + Sleep = false; } - else if (!Hibernate) + else if (!Hibernate && !Sleep) { IfNoOtherMaa = false; } @@ -255,6 +261,32 @@ public class PostActionSetting : PropertyChangedBase } } + private bool _sleep; + + public bool Sleep + { + get => _sleep; + set + { + if (!SetAndNotify(ref _sleep, value)) + { + return; + } + + if (value) + { + Hibernate = false; + Shutdown = false; + } + else if (!Hibernate && !Shutdown) + { + IfNoOtherMaa = false; + } + + UpdatePostAction(PostActions.Sleep, value); + } + } + public static PostActionSetting Current { get; } = new(); private string _actionTitle = LocalizationHelper.GetString("PostActions"); @@ -332,6 +364,11 @@ public class PostActionSetting : PropertyChangedBase actions.Add(prefix + LocalizationHelper.GetString("Shutdown")); } + if (Sleep) + { + actions.Add(LocalizationHelper.GetString("Sleep")); + } + ActionDescription = actions.Count == 0 ? LocalizationHelper.GetString("DoNothing") : string.Join(" -> ", actions); @@ -370,6 +407,7 @@ public class PostActionSetting : PropertyChangedBase IfNoOtherMaa = _postActions.HasFlag(PostActions.IfNoOtherMaa); Hibernate = _postActions.HasFlag(PostActions.Hibernate); Shutdown = _postActions.HasFlag(PostActions.Shutdown); + Sleep = _postActions.HasFlag(PostActions.Sleep); Once = false; } diff --git a/src/MaaWpfGui/Res/Localizations/en-us.xaml b/src/MaaWpfGui/Res/Localizations/en-us.xaml index 97ec3ef9eb..bdd5d91b24 100644 --- a/src/MaaWpfGui/Res/Localizations/en-us.xaml +++ b/src/MaaWpfGui/Res/Localizations/en-us.xaml @@ -435,6 +435,7 @@ Only supports Official(CN) and Bilibili server. Login account is not supported.< Exit MAA Exit Emulator Hibernate + Sleep Shutdown Only once* If active, changes will NOT be saved until next run. @@ -509,6 +510,7 @@ Only supports Official(CN) and Bilibili server. Login account is not supported.< All tasks have been completed: shutting down. Do you want to cancel? Tip Task(s) completed, about to hibernate + Completed, about to sleep Unknown ending action The stage selected is an annihilation task. After the task is completed, the remaining alternative stages will be attempted. Some battle settings will not take effect. Annihilation task failed, will try to use alternate stage, some combat settings will not be effective. diff --git a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml index b6cf39bbf8..f15a09398e 100644 --- a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml +++ b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml @@ -435,6 +435,7 @@ MAAを終了する エミュレータを終了する 休止状態にする + スリープ シャットダウン 1回のみ* 1回のみ実行するには、まず1回のみチェックしてください @@ -511,6 +512,7 @@ 完了しました。シャットダウンしようとしています。キャンセルしますか? ヒント 完了しました。休止状態にしようとしています + 完了しました、スリープ状態に入ります 未知の終了動作 ステージ選択が殲滅任務になっています。任務終了後、残りの代替ステージが試されます。一部の戦闘設定は有効になりません。 殲滅戦に失敗、代替ステージを使用しますが、一部の戦闘設定が有効ではありません diff --git a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml index 061eab04c4..ed8183be77 100644 --- a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml +++ b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml @@ -436,6 +436,7 @@ OF-1을 해금하지 않았다면 선택하지 말아 주세요. MAA를 종료 에뮬레이터를 종료 절전 모드 + 절전 시스템 종료 한 번만* 한 번만 실행하려면 먼저 Only once를 체크하세요. @@ -512,6 +513,7 @@ Only once가 체크되면 실행 후 Only once가 체크되기 전 상태로 작 작업을 완료했습니다. 시스템이 곧 종료됩니다. 취소하시겠습니까? 알림 작업을 완료했습니다. 곧 절전 모드에 진입합니다 + 완료되었습니다, 절전 모드로 전환합니다 알 수 없는 종료 동작 선택한 스테이지는 섬멸 임무입니다. 임무 완료 후 남은 대체 스테이지가 시도됩니다. 일부 전투 설정은 적용되지 않습니다. 섬멸 작전에 실패하여 대체 스테이지를 진행합니다. 일부 전투 설정이 무시될 수 있습니다 diff --git a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml index 6d3c5efc7a..65a0544976 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml @@ -435,6 +435,7 @@ 退出 MAA 退出 模拟器 休眠 + 睡眠 关机 仅一次* 如想只执行一次,请先勾选仅一次 @@ -511,6 +512,7 @@ 已刷完,即将关机,是否取消? 提示 已刷完,即将休眠 + 已刷完,即将睡眠 未知的结束动作 关卡选择为剿灭任务,任务结束后将尝试使用剩余备选关卡,部分战斗设置将不生效。 剿灭任务失败,将尝试使用剩余备选关卡,部分战斗设置将不生效。 diff --git a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml index abe132b265..df7101492b 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml @@ -435,6 +435,7 @@ 退出 MAA 退出 模擬器 休眠 + 睡眠 關機 僅一次* 如想只執行一次,請先勾選僅一次 @@ -511,6 +512,7 @@ 已刷完,即將關機,是否取消? 提示 已刷完,即將休眠 + 已刷完,即將睡眠 未知的結束動作 關卡選擇為剿滅任務,任務結束後將嘗試使用剩餘備選關卡,部分戰鬥設置將不生效。 剿滅任務失敗,將嘗試使用剩餘備選關卡,部分戰鬥設定將不生效。 diff --git a/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs b/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs index 035cfe5d88..02b331c14b 100644 --- a/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs @@ -119,10 +119,10 @@ namespace MaaWpfGui.ViewModels.UI if (actions.BackToAndroidHome) { Instances.AsstProxy.AsstBackToHome(); - await Task.Delay(1000); } - else if (actions.ExitArknights) + + if (actions.ExitArknights) { var mode = Instances.SettingsViewModel.ClientType; if (!Instances.AsstProxy.AsstStartCloseDown(mode)) @@ -136,11 +136,10 @@ namespace MaaWpfGui.ViewModels.UI if (actions.ExitEmulator) { DoKillEmulator(); - await Task.Delay(1000); } - if (actions.ExitSelf && !(actions.Hibernate || actions.Shutdown)) + if (actions.ExitSelf && !(actions.Hibernate || actions.Shutdown || actions.Sleep)) { Bootstrapper.Shutdown(); } @@ -153,12 +152,7 @@ namespace MaaWpfGui.ViewModels.UI } else { - DoHibernate(); - } - - if (actions.ExitSelf) - { - Bootstrapper.Shutdown(); + await DoHibernate(); } } @@ -170,16 +164,35 @@ namespace MaaWpfGui.ViewModels.UI } else { - DoShutDown(); + await DoShutDown(); } } + if (actions.Sleep) + { + if (actions.IfNoOtherMaa && HasOtherMaa()) + { + Bootstrapper.Shutdown(); + } + else + { + await DoSleep(); + } + } + + if (actions.ExitSelf) + { + Bootstrapper.Shutdown(); + } + actions.LoadPostActions(); return; bool HasOtherMaa() { - return Process.GetProcessesByName("MAA").Length > 1; + var processesCount = Process.GetProcessesByName("MAA").Length; + _logger.Information($"MAA processes count: {processesCount}"); + return processesCount > 1; } void DoKillEmulator() @@ -190,45 +203,42 @@ namespace MaaWpfGui.ViewModels.UI } } - void DoHibernate() + async Task DoHibernate() { actions.LoadPostActions(); // 休眠提示 AddLog(LocalizationHelper.GetString("HibernatePrompt"), UiLogColor.Error); - - /* - // 休眠不能加时间参数,https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/1133 - Process.Start("shutdown.exe", "-h"); - */ + await Task.Delay(10000); PowerManagement.Hibernate(); } - async void DoShutDown() + async Task DoShutDown() { - /* - Process.Start("shutdown.exe", "-s -t 60"); + Process.Start("shutdown.exe", "-s -t 70"); - // 关机询问 - var shutdownResult = MessageBoxHelper.Show(LocalizationHelper.GetString("AboutToShutdown"), LocalizationHelper.GetString("ShutdownPrompt"), MessageBoxButton.OK, MessageBoxImage.Question, ok: LocalizationHelper.GetString("Cancel")); - if (shutdownResult == MessageBoxResult.OK) - { - Process.Start("shutdown.exe", "-a"); - } - */ if (await TimerCanceledAsync( LocalizationHelper.GetString("Shutdown"), LocalizationHelper.GetString("AboutToShutdown"), LocalizationHelper.GetString("Cancel"), 60)) { + Process.Start("shutdown.exe", "-a"); return; } - Bootstrapper.Release(); - PowerManagement.Shutdown(); Bootstrapper.Shutdown(); } + + async Task DoSleep() + { + actions.LoadPostActions(); + + // 休眠提示 + AddLog(LocalizationHelper.GetString("SleepPrompt"), UiLogColor.Error); + await Task.Delay(10000); + PowerManagement.Sleep(); + } } #endregion diff --git a/src/MaaWpfGui/Views/UserControl/AfterActionUserControl.xaml b/src/MaaWpfGui/Views/UserControl/AfterActionUserControl.xaml index e37b65f7e7..d8874cd731 100644 --- a/src/MaaWpfGui/Views/UserControl/AfterActionUserControl.xaml +++ b/src/MaaWpfGui/Views/UserControl/AfterActionUserControl.xaml @@ -21,7 +21,7 @@ + + +