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" />
-
-
-