From 87514809dc48ff996bc648d225d8136f8bdd2bd1 Mon Sep 17 00:00:00 2001 From: status102 <102887808+status102@users.noreply.github.com> Date: Mon, 25 Nov 2024 20:10:46 +0800 Subject: [PATCH] =?UTF-8?q?rft:=20WpfGui`=E6=B8=B8=E6=88=8F=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE`=E4=BF=AE=E6=94=B9=E4=B8=BA`=E8=BF=90=E8=A1=8C?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE`=20(#11209)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * rft: 暂停下干员 * rft: 掉线自动重连 * rft: 执行脚本 * rft: 不睡眠 * rft: 肉鸽延迟停止 * i18n: 游戏设置->运行设置 * i18n: EN tweak --------- Co-authored-by: Constrat <56174894+Constrat@users.noreply.github.com> --- src/MaaWpfGui/Main/AsstProxy.cs | 12 +- src/MaaWpfGui/Res/Localizations/en-us.xaml | 2 +- src/MaaWpfGui/Res/Localizations/ja-jp.xaml | 4 +- src/MaaWpfGui/Res/Localizations/ko-kr.xaml | 4 +- src/MaaWpfGui/Res/Localizations/zh-cn.xaml | 4 +- src/MaaWpfGui/Res/Localizations/zh-tw.xaml | 4 +- .../ViewModels/UI/CopilotViewModel.cs | 12 +- .../ViewModels/UI/TaskQueueViewModel.cs | 14 +- .../ConnectSettingsUserControlModel.cs | 201 +--------------- .../Settings/GameSettingsUserControlModel.cs | 220 ++++++++++++++++++ .../RoguelikeSettingsUserControlModel.cs | 17 +- .../Settings/ConnectSettingsUserControl.xaml | 63 +---- .../ConnectSettingsUserControl.xaml.cs | 32 --- .../Settings/GameSettingsUserControl.xaml | 91 ++++++++ .../Settings/GameSettingsUserControl.xaml.cs | 32 +++ .../RoguelikeSettingsUserControl.xaml | 32 +-- 16 files changed, 385 insertions(+), 359 deletions(-) diff --git a/src/MaaWpfGui/Main/AsstProxy.cs b/src/MaaWpfGui/Main/AsstProxy.cs index 4bdd2ca669..c0a369e24f 100644 --- a/src/MaaWpfGui/Main/AsstProxy.cs +++ b/src/MaaWpfGui/Main/AsstProxy.cs @@ -321,7 +321,7 @@ namespace MaaWpfGui.Main Instances.TaskQueueViewModel.SetInited(); _runningState.SetIdle(true); AsstSetInstanceOption(InstanceOptionKey.TouchMode, SettingsViewModel.ConnectSettings.TouchMode); - AsstSetInstanceOption(InstanceOptionKey.DeploymentWithPause, SettingsViewModel.ConnectSettings.DeploymentWithPause ? "1" : "0"); + AsstSetInstanceOption(InstanceOptionKey.DeploymentWithPause, SettingsViewModel.GameSettings.DeploymentWithPause ? "1" : "0"); AsstSetInstanceOption(InstanceOptionKey.AdbLiteEnabled, SettingsViewModel.ConnectSettings.AdbLiteEnabled ? "1" : "0"); // TODO: 之后把这个 OnUIThread 拆出来 @@ -814,10 +814,10 @@ namespace MaaWpfGui.Main if (_latestTaskId.ContainsKey(TaskType.Copilot)) { - if (SettingsViewModel.ConnectSettings.CopilotWithScript) + if (SettingsViewModel.GameSettings.CopilotWithScript) { - Task.Run(() => SettingsViewModel.ConnectSettings.RunScript("EndsWithScript", showLog: false)); - if (!string.IsNullOrWhiteSpace(SettingsViewModel.ConnectSettings.EndsWithScript)) + Task.Run(() => SettingsViewModel.GameSettings.RunScript("EndsWithScript", showLog: false)); + if (!string.IsNullOrWhiteSpace(SettingsViewModel.GameSettings.EndsWithScript)) { Instances.CopilotViewModel.AddLog(LocalizationHelper.GetString("EndsWithScript")); } @@ -1174,7 +1174,7 @@ namespace MaaWpfGui.Main break; case "OfflineConfirm": - if (SettingsViewModel.ConnectSettings.AutoRestartOnDrop) + if (SettingsViewModel.GameSettings.AutoRestartOnDrop) { Instances.TaskQueueViewModel.AddLog(LocalizationHelper.GetString("GameDrop"), UiLogColor.Warning); } @@ -1446,7 +1446,7 @@ namespace MaaWpfGui.Main case "StageInfo": { Instances.TaskQueueViewModel.AddLog(LocalizationHelper.GetString("StartCombat") + subTaskDetails!["name"]); - if (SettingsViewModel.RoguelikeTask.RoguelikeDelayAbortUntilCombatComplete) + if (SettingsViewModel.GameSettings.RoguelikeDelayAbortUntilCombatComplete) { Instances.TaskQueueViewModel.RoguelikeInCombatAndShowWait = true; } diff --git a/src/MaaWpfGui/Res/Localizations/en-us.xaml b/src/MaaWpfGui/Res/Localizations/en-us.xaml index 94c4f6e0bf..200abdefb6 100644 --- a/src/MaaWpfGui/Res/Localizations/en-us.xaml +++ b/src/MaaWpfGui/Res/Localizations/en-us.xaml @@ -4,7 +4,7 @@ General Advanced Performance - Client + Game Settings Base Setting I.S. Auto Recruit diff --git a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml index a47cf7eefa..a8b326a7b1 100644 --- a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml +++ b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml @@ -4,7 +4,7 @@ 一般設定 高度な設定 パフォーマンス設定 - 対象クライアント + 実行設定 基地設定 統合戦略設定 公開求人設定 @@ -140,7 +140,7 @@ 英語のセミコロン「;」で区切る、空白のままにするとデフォルトリストが使用されます。 「最初のオペレーター」をサポートから選択 戦友以外のサポートの使用を許可 - 戦闘終了まえに「停止」を遅らせる + 自動ローグ 戦闘終了まえに「停止」を遅らせる 第5階層のボスの手前で一時停止する 統合戦略/保全駐在でポーズトリックを使用します(ベータ機能のため非推奨です) 軽量ADBを使用(実験機能) diff --git a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml index 6a3b279994..f4338c81f1 100644 --- a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml +++ b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml @@ -4,7 +4,7 @@ 일반 설정 고급 설정 성능 설정 - 클라이언트 + 실행 설정 기반시설 통합 전략 공개모집 @@ -140,7 +140,7 @@ 영어 세미콜론 「;」으로 구분, 비워 두면 기본 목록이 사용됩니다. 시작 오퍼레이터로 지원 유닛 사용 친구가 아니어도 지원 유닛 사용 - 중지 시 전투 클리어 후 작업 종료 + 통합전략 중지 시 전투 클리어 후 작업 종료 5스테이지 보스 앞에서 일시정지 일시정지 상태로 배치하기 - 통합전략, 자동 작전, 보안 파견에 적용 (비권장) ADB Lite 사용 (실험적) diff --git a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml index ae8bdd8b19..e752eacd35 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml @@ -4,7 +4,7 @@ 常规设置 高级设置 性能设置 - 游戏设置 + 运行设置 基建设置 肉鸽设置 自动公招 @@ -140,7 +140,7 @@ 用英文分号「;」隔开,留空将使用默认列表。 「开局干员」使用助战 可以使用非好友助战 - 在战斗结束前延迟「停止」动作 + 自动肉鸽在战斗结束前延迟「停止」动作 在第五层 BOSS 前暂停 划火柴模式(自动战斗) 使用 ADB Lite(实验性功能) diff --git a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml index 84a06809be..ee68f7a01b 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml @@ -4,7 +4,7 @@ 常規設定 高級設定 性能設定 - 遊戲設定 + 運行設定 基建設定 肉鴿設定 自動公招 @@ -140,7 +140,7 @@ 用英文分号「;」隔开,留空将使用默认列表。 「開局幹員」使用助戰 可以使用非好友助戰 - 在戰鬥結束前延遲「停止」動作 + 肉鴿在戰鬥結束前延遲「停止」動作 在第五層 BOSS 前暫停 暫停下幹員(同時影響肉鴿、自動戰鬥、保全)(不穩定,暫不推薦開啟) 使用 ADB Lite(實驗性功能) diff --git a/src/MaaWpfGui/ViewModels/UI/CopilotViewModel.cs b/src/MaaWpfGui/ViewModels/UI/CopilotViewModel.cs index 9f23d49dcb..370d9ae886 100644 --- a/src/MaaWpfGui/ViewModels/UI/CopilotViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/CopilotViewModel.cs @@ -1024,10 +1024,10 @@ namespace MaaWpfGui.ViewModels.UI return; } - if (SettingsViewModel.ConnectSettings.CopilotWithScript) + if (SettingsViewModel.GameSettings.CopilotWithScript) { - await Task.Run(() => SettingsViewModel.ConnectSettings.RunScript("StartsWithScript", showLog: false)); - if (!string.IsNullOrWhiteSpace(SettingsViewModel.ConnectSettings.StartsWithScript)) + await Task.Run(() => SettingsViewModel.GameSettings.RunScript("StartsWithScript", showLog: false)); + if (!string.IsNullOrWhiteSpace(SettingsViewModel.GameSettings.StartsWithScript)) { AddLog(LocalizationHelper.GetString("StartsWithScript")); } @@ -1112,10 +1112,10 @@ namespace MaaWpfGui.ViewModels.UI // ReSharper disable once UnusedMember.Global public void Stop() { - if (SettingsViewModel.ConnectSettings.CopilotWithScript && SettingsViewModel.ConnectSettings.ManualStopWithScript) + if (SettingsViewModel.GameSettings.CopilotWithScript && SettingsViewModel.GameSettings.ManualStopWithScript) { - Task.Run(() => SettingsViewModel.ConnectSettings.RunScript("EndsWithScript", showLog: false)); - if (!string.IsNullOrWhiteSpace(SettingsViewModel.ConnectSettings.EndsWithScript)) + Task.Run(() => SettingsViewModel.GameSettings.RunScript("EndsWithScript", showLog: false)); + if (!string.IsNullOrWhiteSpace(SettingsViewModel.GameSettings.EndsWithScript)) { Instances.CopilotViewModel.AddLog(LocalizationHelper.GetString("EndsWithScript")); } diff --git a/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs b/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs index 35ebabc77f..afee546655 100644 --- a/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs @@ -116,7 +116,7 @@ namespace MaaWpfGui.ViewModels.UI /// public async void CheckAfterCompleted() { - await Task.Run(() => SettingsViewModel.ConnectSettings.RunScript("EndsWithScript")); + await Task.Run(() => SettingsViewModel.GameSettings.RunScript("EndsWithScript")); var actions = TaskSettingDataContext.PostActionSetting; _logger.Information("Post actions: " + actions.ActionDescription); @@ -1219,7 +1219,7 @@ namespace MaaWpfGui.ViewModels.UI InfrastTaskRunning = true; - await Task.Run(() => SettingsViewModel.ConnectSettings.RunScript("StartsWithScript")); + await Task.Run(() => SettingsViewModel.GameSettings.RunScript("StartsWithScript")); AddLog(LocalizationHelper.GetString("ConnectingToEmulator")); @@ -1373,7 +1373,7 @@ namespace MaaWpfGui.ViewModels.UI { Waiting = true; AddLog(LocalizationHelper.GetString("Waiting")); - if (SettingsViewModel.RoguelikeTask.RoguelikeDelayAbortUntilCombatComplete) + if (SettingsViewModel.GameSettings.RoguelikeDelayAbortUntilCombatComplete) { await WaitUntilRoguelikeCombatComplete(); @@ -1390,7 +1390,7 @@ namespace MaaWpfGui.ViewModels.UI private async Task WaitUntilRoguelikeCombatComplete() { int time = 0; - while (SettingsViewModel.RoguelikeTask.RoguelikeDelayAbortUntilCombatComplete && RoguelikeInCombatAndShowWait && time < 600 && !Stopping) + while (SettingsViewModel.GameSettings.RoguelikeDelayAbortUntilCombatComplete && RoguelikeInCombatAndShowWait && time < 600 && !Stopping) { await Task.Delay(1000); ++time; @@ -1408,9 +1408,9 @@ namespace MaaWpfGui.ViewModels.UI public void SetStopped() { SleepManagement.AllowSleep(); - if (SettingsViewModel.ConnectSettings.ManualStopWithScript) + if (SettingsViewModel.GameSettings.ManualStopWithScript) { - Task.Run(() => SettingsViewModel.ConnectSettings.RunScript("EndsWithScript")); + Task.Run(() => SettingsViewModel.GameSettings.RunScript("EndsWithScript")); } if (!_runningState.GetIdle() || Stopping) @@ -1438,7 +1438,7 @@ namespace MaaWpfGui.ViewModels.UI ClearLog(); - await Task.Run(() => SettingsViewModel.ConnectSettings.RunScript("StartsWithScript")); + await Task.Run(() => SettingsViewModel.GameSettings.RunScript("StartsWithScript")); AddLog(LocalizationHelper.GetString("ConnectingToEmulator")); diff --git a/src/MaaWpfGui/ViewModels/UserControl/Settings/ConnectSettingsUserControlModel.cs b/src/MaaWpfGui/ViewModels/UserControl/Settings/ConnectSettingsUserControlModel.cs index 29a04af33a..7dd75c0f26 100644 --- a/src/MaaWpfGui/ViewModels/UserControl/Settings/ConnectSettingsUserControlModel.cs +++ b/src/MaaWpfGui/ViewModels/UserControl/Settings/ConnectSettingsUserControlModel.cs @@ -608,19 +608,6 @@ public class ConnectSettingsUserControlModel : PropertyChangedBase } } - private bool _deploymentWithPause = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.RoguelikeDeploymentWithPause, bool.FalseString)); - - public bool DeploymentWithPause - { - get => _deploymentWithPause; - set - { - SetAndNotify(ref _deploymentWithPause, value); - ConfigurationHelper.SetValue(ConfigurationKeys.RoguelikeDeploymentWithPause, value.ToString()); - UpdateInstanceSettings(); - } - } - private bool _adbLiteEnabled = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.AdbLiteEnabled, bool.FalseString)); public bool AdbLiteEnabled @@ -912,7 +899,7 @@ public class ConnectSettingsUserControlModel : PropertyChangedBase public void UpdateInstanceSettings() { Instances.AsstProxy.AsstSetInstanceOption(InstanceOptionKey.TouchMode, TouchMode); - Instances.AsstProxy.AsstSetInstanceOption(InstanceOptionKey.DeploymentWithPause, DeploymentWithPause ? "1" : "0"); + Instances.AsstProxy.AsstSetInstanceOption(InstanceOptionKey.DeploymentWithPause, SettingsViewModel.GameSettings.DeploymentWithPause ? "1" : "0"); Instances.AsstProxy.AsstSetInstanceOption(InstanceOptionKey.AdbLiteEnabled, AdbLiteEnabled ? "1" : "0"); Instances.AsstProxy.AsstSetInstanceOption(InstanceOptionKey.KillAdbOnExit, KillAdbOnExit ? "1" : "0"); } @@ -1017,190 +1004,4 @@ public class ConnectSettingsUserControlModel : PropertyChangedBase } public bool AdbReplaced { get; set; } = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.AdbReplaced, bool.FalseString)); - - private bool _autoRestartOnDrop = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.AutoRestartOnDrop, "True")); - - public bool AutoRestartOnDrop - { - get => _autoRestartOnDrop; - set - { - SetAndNotify(ref _autoRestartOnDrop, value); - ConfigurationHelper.SetValue(ConfigurationKeys.AutoRestartOnDrop, value.ToString()); - } - } - - private string _startsWithScript = ConfigurationHelper.GetValue(ConfigurationKeys.StartsWithScript, string.Empty); - - public string StartsWithScript - { - get => _startsWithScript; - set - { - SetAndNotify(ref _startsWithScript, value); - ConfigurationHelper.SetValue(ConfigurationKeys.StartsWithScript, value); - } - } - - private string _endsWithScript = ConfigurationHelper.GetValue(ConfigurationKeys.EndsWithScript, string.Empty); - - public string EndsWithScript - { - get => _endsWithScript; - set - { - SetAndNotify(ref _endsWithScript, value); - ConfigurationHelper.SetValue(ConfigurationKeys.EndsWithScript, value); - } - } - - 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 - { - get => _blockSleep; - set - { - SetAndNotify(ref _blockSleep, value); - SleepManagement.SetBlockSleep(value); - ConfigurationHelper.SetValue(ConfigurationKeys.BlockSleep, value.ToString()); - } - } - - private bool _blockSleepWithScreenOn = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.BlockSleepWithScreenOn, bool.TrueString)); - - public bool BlockSleepWithScreenOn - { - get => _blockSleepWithScreenOn; - set - { - SetAndNotify(ref _blockSleepWithScreenOn, value); - SleepManagement.SetBlockSleepWithScreenOn(value); - ConfigurationHelper.SetValue(ConfigurationKeys.BlockSleepWithScreenOn, value.ToString()); - } - } - - public void RunScript(string str, bool showLog = true) - { - bool enable = str switch - { - "StartsWithScript" => !string.IsNullOrWhiteSpace(StartsWithScript), - "EndsWithScript" => !string.IsNullOrWhiteSpace(EndsWithScript), - _ => false, - }; - - if (!enable) - { - return; - } - - Func func = str switch - { - "StartsWithScript" => () => ExecuteScript(StartsWithScript), - "EndsWithScript" => () => ExecuteScript(EndsWithScript), - _ => () => false, - }; - - if (!showLog) - { - if (!func()) - { - _logger.Warning("Failed to execute the script."); - } - - return; - } - - Instances.TaskQueueViewModel.AddLog(LocalizationHelper.GetString("StartTask") + LocalizationHelper.GetString(str)); - if (func()) - { - Instances.TaskQueueViewModel.AddLog(LocalizationHelper.GetString("CompleteTask") + LocalizationHelper.GetString(str)); - } - else - { - Instances.TaskQueueViewModel.AddLog(LocalizationHelper.GetString("TaskError") + LocalizationHelper.GetString(str), UiLogColor.Warning); - } - } - - private static bool ExecuteScript(string scriptPath) - { - try - { - if (string.IsNullOrWhiteSpace(scriptPath)) - { - return false; - } - - string fileName; - string arguments; - - if (scriptPath.StartsWith('\"')) - { - var parts = scriptPath.Split("\"", 3); - fileName = parts[1]; - arguments = parts.Length > 2 ? parts[2] : string.Empty; - } - else - { - fileName = scriptPath; - arguments = string.Empty; - } - - bool createNoWindow = arguments.Contains("-noWindow"); - bool minimized = arguments.Contains("-minimized"); - - if (createNoWindow) - { - arguments = arguments.Replace("-noWindow", string.Empty).Trim(); - } - - if (minimized) - { - arguments = arguments.Replace("-minimized", string.Empty).Trim(); - } - - var process = new Process - { - StartInfo = new ProcessStartInfo - { - FileName = fileName, - Arguments = arguments, - WindowStyle = minimized ? ProcessWindowStyle.Minimized : ProcessWindowStyle.Normal, - CreateNoWindow = createNoWindow, - UseShellExecute = !createNoWindow, - }, - }; - process.Start(); - process.WaitForExit(); - return true; - } - catch (Exception) - { - return false; - } - } } diff --git a/src/MaaWpfGui/ViewModels/UserControl/Settings/GameSettingsUserControlModel.cs b/src/MaaWpfGui/ViewModels/UserControl/Settings/GameSettingsUserControlModel.cs index 1ddb7b067e..cdf9a2d504 100644 --- a/src/MaaWpfGui/ViewModels/UserControl/Settings/GameSettingsUserControlModel.cs +++ b/src/MaaWpfGui/ViewModels/UserControl/Settings/GameSettingsUserControlModel.cs @@ -12,17 +12,23 @@ // #nullable enable +using System; using System.Collections.Generic; +using System.Diagnostics; using MaaWpfGui.Constants; using MaaWpfGui.Helper; +using MaaWpfGui.Utilities; using MaaWpfGui.Utilities.ValueType; using MaaWpfGui.ViewModels.UI; +using Serilog; using Stylet; namespace MaaWpfGui.ViewModels.UserControl.Settings; public class GameSettingsUserControlModel : PropertyChangedBase { + private static readonly ILogger _logger = Log.ForContext(); + private static VersionUpdateSettingsUserControlModel VersionUpdateSettings => SettingsViewModel.VersionUpdateSettings; /// @@ -61,4 +67,218 @@ public class GameSettingsUserControlModel : PropertyChangedBase SettingsViewModel.AskRestartToApplySettings(_clientType is "YoStarEN"); } } + + private bool _deploymentWithPause = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.RoguelikeDeploymentWithPause, bool.FalseString)); + + public bool DeploymentWithPause + { + get => _deploymentWithPause; + set + { + SetAndNotify(ref _deploymentWithPause, value); + ConfigurationHelper.SetValue(ConfigurationKeys.RoguelikeDeploymentWithPause, value.ToString()); + SettingsViewModel.ConnectSettings.UpdateInstanceSettings(); + } + } + + private bool _autoRestartOnDrop = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.AutoRestartOnDrop, bool.TrueString)); + + public bool AutoRestartOnDrop + { + get => _autoRestartOnDrop; + set + { + SetAndNotify(ref _autoRestartOnDrop, value); + ConfigurationHelper.SetValue(ConfigurationKeys.AutoRestartOnDrop, value.ToString()); + } + } + + private bool _roguelikeDelayAbortUntilCombatComplete = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.RoguelikeDelayAbortUntilCombatComplete, bool.FalseString)); + + /// + /// Gets or sets a value indicating whether delay abort until battle complete + /// + public bool RoguelikeDelayAbortUntilCombatComplete + { + get => _roguelikeDelayAbortUntilCombatComplete; + set + { + SetAndNotify(ref _roguelikeDelayAbortUntilCombatComplete, value); + ConfigurationHelper.SetValue(ConfigurationKeys.RoguelikeDelayAbortUntilCombatComplete, value.ToString()); + } + } + + private string _startsWithScript = ConfigurationHelper.GetValue(ConfigurationKeys.StartsWithScript, string.Empty); + + public string StartsWithScript + { + get => _startsWithScript; + set + { + SetAndNotify(ref _startsWithScript, value); + ConfigurationHelper.SetValue(ConfigurationKeys.StartsWithScript, value); + } + } + + private string _endsWithScript = ConfigurationHelper.GetValue(ConfigurationKeys.EndsWithScript, string.Empty); + + public string EndsWithScript + { + get => _endsWithScript; + set + { + SetAndNotify(ref _endsWithScript, value); + ConfigurationHelper.SetValue(ConfigurationKeys.EndsWithScript, value); + } + } + + 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()); + } + } + + public void RunScript(string str, bool showLog = true) + { + bool enable = str switch + { + "StartsWithScript" => !string.IsNullOrWhiteSpace(StartsWithScript), + "EndsWithScript" => !string.IsNullOrWhiteSpace(EndsWithScript), + _ => false, + }; + + if (!enable) + { + return; + } + + Func func = str switch + { + "StartsWithScript" => () => ExecuteScript(StartsWithScript), + "EndsWithScript" => () => ExecuteScript(EndsWithScript), + _ => () => false, + }; + + if (!showLog) + { + if (!func()) + { + _logger.Warning("Failed to execute the script."); + } + + return; + } + + Instances.TaskQueueViewModel.AddLog(LocalizationHelper.GetString("StartTask") + LocalizationHelper.GetString(str)); + if (func()) + { + Instances.TaskQueueViewModel.AddLog(LocalizationHelper.GetString("CompleteTask") + LocalizationHelper.GetString(str)); + } + else + { + Instances.TaskQueueViewModel.AddLog(LocalizationHelper.GetString("TaskError") + LocalizationHelper.GetString(str), UiLogColor.Warning); + } + } + + private static bool ExecuteScript(string scriptPath) + { + try + { + if (string.IsNullOrWhiteSpace(scriptPath)) + { + return false; + } + + string fileName; + string arguments; + + if (scriptPath.StartsWith('\"')) + { + var parts = scriptPath.Split("\"", 3); + fileName = parts[1]; + arguments = parts.Length > 2 ? parts[2] : string.Empty; + } + else + { + fileName = scriptPath; + arguments = string.Empty; + } + + bool createNoWindow = arguments.Contains("-noWindow"); + bool minimized = arguments.Contains("-minimized"); + + if (createNoWindow) + { + arguments = arguments.Replace("-noWindow", string.Empty).Trim(); + } + + if (minimized) + { + arguments = arguments.Replace("-minimized", string.Empty).Trim(); + } + + var process = new Process + { + StartInfo = new ProcessStartInfo + { + FileName = fileName, + Arguments = arguments, + WindowStyle = minimized ? ProcessWindowStyle.Minimized : ProcessWindowStyle.Normal, + CreateNoWindow = createNoWindow, + UseShellExecute = !createNoWindow, + }, + }; + process.Start(); + process.WaitForExit(); + return true; + } + catch (Exception) + { + return false; + } + } + + private bool _blockSleep = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.BlockSleep, bool.FalseString)); + + public bool BlockSleep + { + get => _blockSleep; + set + { + SetAndNotify(ref _blockSleep, value); + SleepManagement.SetBlockSleep(value); + ConfigurationHelper.SetValue(ConfigurationKeys.BlockSleep, value.ToString()); + } + } + + private bool _blockSleepWithScreenOn = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.BlockSleepWithScreenOn, bool.TrueString)); + + public bool BlockSleepWithScreenOn + { + get => _blockSleepWithScreenOn; + set + { + SetAndNotify(ref _blockSleepWithScreenOn, value); + SleepManagement.SetBlockSleepWithScreenOn(value); + ConfigurationHelper.SetValue(ConfigurationKeys.BlockSleepWithScreenOn, value.ToString()); + } + } } diff --git a/src/MaaWpfGui/ViewModels/UserControl/TaskQueue/RoguelikeSettingsUserControlModel.cs b/src/MaaWpfGui/ViewModels/UserControl/TaskQueue/RoguelikeSettingsUserControlModel.cs index 4a56d2d329..9742abdf02 100644 --- a/src/MaaWpfGui/ViewModels/UserControl/TaskQueue/RoguelikeSettingsUserControlModel.cs +++ b/src/MaaWpfGui/ViewModels/UserControl/TaskQueue/RoguelikeSettingsUserControlModel.cs @@ -568,22 +568,7 @@ public class RoguelikeSettingsUserControlModel : PropertyChangedBase } } - private bool _roguelikeDelayAbortUntilCombatComplete = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.RoguelikeDelayAbortUntilCombatComplete, bool.FalseString)); - - /// - /// Gets or sets a value indicating whether delay abort until battle complete - /// - public bool RoguelikeDelayAbortUntilCombatComplete - { - get => _roguelikeDelayAbortUntilCombatComplete; - set - { - SetAndNotify(ref _roguelikeDelayAbortUntilCombatComplete, value); - ConfigurationHelper.SetValue(ConfigurationKeys.RoguelikeDelayAbortUntilCombatComplete, value.ToString()); - } - } - - private string _roguelikeStartsCount = ConfigurationHelper.GetValue(ConfigurationKeys.RoguelikeStartsCount, "9999999"); + private string _roguelikeStartsCount = ConfigurationHelper.GetValue(ConfigurationKeys.RoguelikeStartsCount, "99999"); /// /// Gets or sets the start count of roguelike. diff --git a/src/MaaWpfGui/Views/UserControl/Settings/ConnectSettingsUserControl.xaml b/src/MaaWpfGui/Views/UserControl/Settings/ConnectSettingsUserControl.xaml index ec87bc2a9c..e6a8bfbdb8 100644 --- a/src/MaaWpfGui/Views/UserControl/Settings/ConnectSettingsUserControl.xaml +++ b/src/MaaWpfGui/Views/UserControl/Settings/ConnectSettingsUserControl.xaml @@ -6,8 +6,8 @@ xmlns:controls="clr-namespace:MaaWpfGui.Styles.Controls" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:dd="urn:gong-wpf-dragdrop" - xmlns:helper="clr-namespace:MaaWpfGui.Helper" xmlns:hc="https://handyorg.github.io/handycontrol" + xmlns:helper="clr-namespace:MaaWpfGui.Helper" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:s="https://github.com/canton7/Stylet" xmlns:viewModels="clr-namespace:MaaWpfGui.ViewModels.UserControl.Settings" @@ -26,10 +26,6 @@ - - - - - - - - - - - - - - diff --git a/src/MaaWpfGui/Views/UserControl/Settings/ConnectSettingsUserControl.xaml.cs b/src/MaaWpfGui/Views/UserControl/Settings/ConnectSettingsUserControl.xaml.cs index 6ba7adc912..e46bbd7609 100644 --- a/src/MaaWpfGui/Views/UserControl/Settings/ConnectSettingsUserControl.xaml.cs +++ b/src/MaaWpfGui/Views/UserControl/Settings/ConnectSettingsUserControl.xaml.cs @@ -11,9 +11,6 @@ // but WITHOUT ANY WARRANTY // -using System.Windows; -using MaaWpfGui.ViewModels.UI; - namespace MaaWpfGui.Views.UserControl.Settings { /// @@ -28,34 +25,5 @@ namespace MaaWpfGui.Views.UserControl.Settings { InitializeComponent(); } - - private void StartsWithScript_Drop(object sender, DragEventArgs e) - { - if (!e.Data.GetDataPresent(DataFormats.FileDrop)) - { - return; - } - - // Note that you can have more than one file. - var files = (string[])e.Data.GetData(DataFormats.FileDrop); - SettingsViewModel.ConnectSettings.StartsWithScript = files?[0] ?? string.Empty; - } - - private void EndsWithScript_Drop(object sender, DragEventArgs e) - { - if (!e.Data.GetDataPresent(DataFormats.FileDrop)) - { - return; - } - - // Note that you can have more than one file. - var files = (string[])e.Data.GetData(DataFormats.FileDrop); - SettingsViewModel.ConnectSettings.EndsWithScript = files?[0] ?? string.Empty; - } - - private void TextBox_PreviewDragOver(object sender, DragEventArgs e) - { - e.Handled = true; - } } } diff --git a/src/MaaWpfGui/Views/UserControl/Settings/GameSettingsUserControl.xaml b/src/MaaWpfGui/Views/UserControl/Settings/GameSettingsUserControl.xaml index 64eeef1d94..50c891512f 100644 --- a/src/MaaWpfGui/Views/UserControl/Settings/GameSettingsUserControl.xaml +++ b/src/MaaWpfGui/Views/UserControl/Settings/GameSettingsUserControl.xaml @@ -7,6 +7,7 @@ xmlns:controls="clr-namespace:MaaWpfGui.Styles.Controls" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:dd="urn:gong-wpf-dragdrop" + xmlns:hc="https://handyorg.github.io/handycontrol" xmlns:helper="clr-namespace:MaaWpfGui.Helper" xmlns:local="clr-namespace:MaaWpfGui" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" @@ -57,5 +58,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/MaaWpfGui/Views/UserControl/Settings/GameSettingsUserControl.xaml.cs b/src/MaaWpfGui/Views/UserControl/Settings/GameSettingsUserControl.xaml.cs index 2284763598..b7d3de35c8 100644 --- a/src/MaaWpfGui/Views/UserControl/Settings/GameSettingsUserControl.xaml.cs +++ b/src/MaaWpfGui/Views/UserControl/Settings/GameSettingsUserControl.xaml.cs @@ -11,6 +11,9 @@ // but WITHOUT ANY WARRANTY // +using System.Windows; +using MaaWpfGui.ViewModels.UI; + namespace MaaWpfGui.Views.UserControl.Settings { /// @@ -25,5 +28,34 @@ namespace MaaWpfGui.Views.UserControl.Settings { InitializeComponent(); } + + private void StartsWithScript_Drop(object sender, DragEventArgs e) + { + if (!e.Data.GetDataPresent(DataFormats.FileDrop)) + { + return; + } + + // Note that you can have more than one file. + var files = (string[])e.Data.GetData(DataFormats.FileDrop); + SettingsViewModel.GameSettings.StartsWithScript = files?[0] ?? string.Empty; + } + + private void EndsWithScript_Drop(object sender, DragEventArgs e) + { + if (!e.Data.GetDataPresent(DataFormats.FileDrop)) + { + return; + } + + // Note that you can have more than one file. + var files = (string[])e.Data.GetData(DataFormats.FileDrop); + SettingsViewModel.GameSettings.EndsWithScript = files?[0] ?? string.Empty; + } + + private void TextBox_PreviewDragOver(object sender, DragEventArgs e) + { + e.Handled = true; + } } } diff --git a/src/MaaWpfGui/Views/UserControl/TaskQueue/RoguelikeSettingsUserControl.xaml b/src/MaaWpfGui/Views/UserControl/TaskQueue/RoguelikeSettingsUserControl.xaml index 693b0b70f4..471e71e72e 100644 --- a/src/MaaWpfGui/Views/UserControl/TaskQueue/RoguelikeSettingsUserControl.xaml +++ b/src/MaaWpfGui/Views/UserControl/TaskQueue/RoguelikeSettingsUserControl.xaml @@ -19,15 +19,14 @@ mc:Ignorable="d"> - - + - - + - + + SelectedValuePath="Value" /> @@ -178,7 +174,6 @@ @@ -186,7 +181,6 @@ hc:InfoElement.Title="{DynamicResource RoguelikeCollapseList}" IsReadOnly="{c:Binding !Idle, Source={x:Static setting:TaskQueueViewModel.TaskSettingDataContext}}" - Style="{StaticResource TextBoxExtend}" Text="{Binding RoguelikeExpectedCollapsalParadigms, UpdateSourceTrigger=LostFocus}" ToolTip="{DynamicResource RoguelikeCollapseListTip}" Visibility="{c:Binding 'RoguelikeMode == "5"'}" /> @@ -205,12 +199,6 @@ Text="{DynamicResource RoguelikeUseNonFriendSupport}" TextWrapping="Wrap" /> - - -