diff --git a/docs/1.1-详细介绍.md b/docs/1.1-详细介绍.md
index 7043c90f3c..5f0255c64d 100644
--- a/docs/1.1-详细介绍.md
+++ b/docs/1.1-详细介绍.md
@@ -111,9 +111,9 @@ icon: ic:baseline-article
### 切换账号
-- 仅支持切换至已登录的账号,使用登录名进行匹配,保证输入内容在所有已登录账号唯一即可
- - 官服:123****4567,可输入 123****4567、4567、123、3****4567
- - B服:张三,可输入 张三、张、三
+- 仅支持切换至已登录的账号,使用登录名进行查找,保证输入内容在所有已登录账号唯一即可
+ - 官服:`123****4567`,可输入 `123****4567`、`4567`、`123`、`3****4567`
+ - B服:`张三`,可输入 `张三`、`张`、`三`
### 自动战斗
diff --git a/docs/zh-tw/1.1-詳細介紹.md b/docs/zh-tw/1.1-詳細介紹.md
index 021abb1205..83554d9d96 100644
--- a/docs/zh-tw/1.1-詳細介紹.md
+++ b/docs/zh-tw/1.1-詳細介紹.md
@@ -98,6 +98,12 @@ icon: ic:baseline-article
- 戰鬥過程中如果刮痧了一直打不完,超過 5 分鐘會自動撤退所有地面單位;超過 6 分鐘會自動放棄當局戰鬥,不會卡住。
- 如果任務出現問題卡住了,會自動放棄當次探索並重試。但如果經常在某個地方卡住然後放棄、嚴重影響效率的,歡迎提個 issue 反饋一下~
+### 切換賬號
+
+- 僅支持切換至已登錄的賬號,使用登錄名進行查找,保證輸入內容在所有已登錄賬號唯一即可
+ - 官服:`123****4567`,可輸入 `123****4567`、`4567`、`123`、`3****4567`
+ - B服:`張三`,可輸入 `張三`、`張`、`三`
+
### 自動戰鬥
- 歡迎使用作業分享站 [prts.plus](https://prts.plus),[抄作業.com](https://抄作业.com) 使用 & 分享作業檔案!
diff --git a/src/MaaWpfGui/Res/Localizations/en-us.xaml b/src/MaaWpfGui/Res/Localizations/en-us.xaml
index d394a30a29..94bad86ce4 100644
--- a/src/MaaWpfGui/Res/Localizations/en-us.xaml
+++ b/src/MaaWpfGui/Res/Localizations/en-us.xaml
@@ -281,6 +281,7 @@ Enter 「SSReopen-XX」to pass SS normal difficulty level at one timeThis checkbox will be automatically unchecked after each detect is completed, and can be checked again if you need to re-detect
Re-detect every times
Account Switch
+ Manual switch
Fill in the account that needs to be switched to, leave blank to close the account switching
Official(CN): Enter the mobile phone number displayed on the login interface, such as 123****4567
Bilibili: Enter the account name displayed on the login interface, such as Zhang San
diff --git a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml
index 18f1dfaf03..cd8bb50d46 100644
--- a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml
+++ b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml
@@ -281,6 +281,7 @@
このチェックボックスは、検出が完了するたびに自動的にチェックが外れますが、再検出が必要な場合は再度チェックを入れることができます
毎回再検出する
アカウントの切り替え
+ 手動スイッチ
切り替える必要があるアカウントを入力し、空白のままにしてアカウントの切り替えを完了します
公式(CN): ログイン インターフェイスに表示される携帯電話番号を入力します (例: 123****4567)
Bilibili: ログイン インターフェイスに表示されるアカウント名 (Zhang San など) を入力します。
diff --git a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml
index 1af088791a..e3db57aa9e 100644
--- a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml
+++ b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml
@@ -281,6 +281,7 @@ OF-1을 해금하지 않았다면 선택하지 말아 주세요.
이 체크박스는 감지가 끝나면 자동으로 체크가 해제됩니다. 다시 감지하려면 다시 체크해주세요
매번 재감지
계정 전환
+ 수동 스위치
전환할 계좌를 입력하고, 계좌 전환을 종료하려면 공백으로 남겨두세요.
공식(CN): 로그인 인터페이스에 표시된 휴대폰 번호(예: 123****4567)를 입력하세요.
Bilibili: 로그인 인터페이스에 표시되는 계정 이름(예: Zhang San)을 입력하세요.
diff --git a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml
index 68f113a8ec..0b592aca4c 100644
--- a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml
+++ b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml
@@ -281,9 +281,10 @@
每次检测完成后会自动取消勾选,若需要重新检测可再次勾选,若反复连接失败可勾选始终自动检测连接
每次重新检测
账号切换
- 填写需要切换至的账号,留空以关闭账号切换
-官服输入登录界面显示的手机号,如 123****4567
- B服输入登录界面显示的账号名,如 张三
+ 手动切换
+ 需要切换至的账号,留空以禁用
+官服输入登录界面显示的手机号,如「123****4567」,可输入「123****4567」或「4567」或「23****45」
+ B服输入登录界面显示的账号名,如「张三」,可输入「张」或「三」
暂不支持其他服
ADB 路径 (相对/绝对)
连接地址
diff --git a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml
index 5b3b080515..01e3b01e65 100644
--- a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml
+++ b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml
@@ -281,10 +281,11 @@
每次檢測完成後會自動取消勾選,若需要重新檢測可再次勾選
每次重新檢測
賬號切換
- 填寫需要切換至的賬號,留空以關閉賬號切換
-官服輸入登錄界面顯示的手機號,如 123****4567
- B服輸入登錄界面顯示的賬號名,如 張三
-暫不支持其他類型
+ 手動切换
+ 需要切換至的賬號,留空以禁用
+官服輸入登錄界面顯示的手機號,如「123****4567」,可輸入「123****4567」或「4567」或「23****45」
+ B服輸入登錄界面顯示的賬號名,如「張三」,可輸入「張」或「三」
+暫不支持其他服
ADB 路徑(相對/絕對)
連接地址
若遇到問題可嘗試手動修改
diff --git a/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs b/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs
index 40c54c1212..7aa9d6ea39 100644
--- a/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs
+++ b/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs
@@ -560,6 +560,11 @@ namespace MaaWpfGui.ViewModels.UI
}
}
+ public void AccountSwitchMannualRun()
+ {
+ Instances.TaskQueueViewModel.QuickSwitchAccount();
+ }
+
private bool _minimizingStartup = Convert.ToBoolean(ConfigurationHelper.GetValue(ConfigurationKeys.MinimizingStartup, bool.FalseString));
///
diff --git a/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs b/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs
index 37ea6b808b..551ba5b32d 100644
--- a/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs
+++ b/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs
@@ -732,6 +732,70 @@ namespace MaaWpfGui.ViewModels.UI
}
}
+ private async Task ConnectToEmulator()
+ {
+ string errMsg = string.Empty;
+ bool connected = await Task.Run(() => Instances.AsstProxy.AsstConnect(ref errMsg));
+
+ // 尝试启动模拟器
+ if (!connected && Instances.SettingsViewModel.RetryOnDisconnected)
+ {
+ AddLog(LocalizationHelper.GetString("ConnectFailed") + "\n" + LocalizationHelper.GetString("TryToStartEmulator"));
+
+ await Task.Run(() => Instances.SettingsViewModel.TryToStartEmulator(true));
+
+ if (Stopping)
+ {
+ SetStopped();
+ return false;
+ }
+
+ connected = await Task.Run(() => Instances.AsstProxy.AsstConnect(ref errMsg));
+ }
+
+ // 尝试重启adb
+ if (!connected && Instances.SettingsViewModel.AllowADBRestart)
+ {
+ AddLog(LocalizationHelper.GetString("ConnectFailed") + "\n" + LocalizationHelper.GetString("RestartADB"));
+
+ await Task.Run(() => Instances.SettingsViewModel.RestartADB());
+
+ if (Stopping)
+ {
+ SetStopped();
+ return false;
+ }
+
+ connected = await Task.Run(() => Instances.AsstProxy.AsstConnect(ref errMsg));
+ }
+
+ // 尝试杀掉adb进程
+ if (!connected && Instances.SettingsViewModel.AllowADBHardRestart)
+ {
+ AddLog(LocalizationHelper.GetString("ConnectFailed") + "\n" + LocalizationHelper.GetString("HardRestartADB"));
+
+ await Task.Run(() => Instances.SettingsViewModel.HardRestartADB());
+
+ if (Stopping)
+ {
+ SetStopped();
+ return false;
+ }
+
+ connected = await Task.Run(() => Instances.AsstProxy.AsstConnect(ref errMsg));
+ }
+
+ if (!connected)
+ {
+ AddLog(errMsg, UiLogColor.Error);
+ _runningState.SetIdle(true);
+ SetStopped();
+ return false;
+ }
+
+ return true;
+ }
+
///
/// Starts.
///
@@ -758,9 +822,6 @@ namespace MaaWpfGui.ViewModels.UI
AddLog(LocalizationHelper.GetString("AdbReplacementTips"), UiLogColor.Info);
}
- string errMsg = string.Empty;
- bool connected = await Task.Run(() => Instances.AsstProxy.AsstConnect(ref errMsg));
-
// 一般是点了“停止”按钮了
if (Stopping)
{
@@ -768,59 +829,8 @@ namespace MaaWpfGui.ViewModels.UI
return;
}
- // 尝试启动模拟器
- if (!connected && Instances.SettingsViewModel.RetryOnDisconnected)
+ if (!await ConnectToEmulator())
{
- AddLog(LocalizationHelper.GetString("ConnectFailed") + "\n" + LocalizationHelper.GetString("TryToStartEmulator"));
-
- await Task.Run(() => Instances.SettingsViewModel.TryToStartEmulator(true));
-
- if (Stopping)
- {
- SetStopped();
- return;
- }
-
- connected = await Task.Run(() => Instances.AsstProxy.AsstConnect(ref errMsg));
- }
-
- // 尝试重启adb
- if (!connected && Instances.SettingsViewModel.AllowADBRestart)
- {
- AddLog(LocalizationHelper.GetString("ConnectFailed") + "\n" + LocalizationHelper.GetString("RestartADB"));
-
- await Task.Run(() => Instances.SettingsViewModel.RestartADB());
-
- if (Stopping)
- {
- SetStopped();
- return;
- }
-
- connected = await Task.Run(() => Instances.AsstProxy.AsstConnect(ref errMsg));
- }
-
- // 尝试杀掉adb进程
- if (!connected && Instances.SettingsViewModel.AllowADBHardRestart)
- {
- AddLog(LocalizationHelper.GetString("ConnectFailed") + "\n" + LocalizationHelper.GetString("HardRestartADB"));
-
- await Task.Run(() => Instances.SettingsViewModel.HardRestartADB());
-
- if (Stopping)
- {
- SetStopped();
- return;
- }
-
- connected = await Task.Run(() => Instances.AsstProxy.AsstConnect(ref errMsg));
- }
-
- if (!connected)
- {
- AddLog(errMsg, UiLogColor.Error);
- _runningState.SetIdle(true);
- SetStopped();
return;
}
@@ -944,6 +954,68 @@ namespace MaaWpfGui.ViewModels.UI
_runningState.SetIdle(true);
}
+ public async void QuickSwitchAccount()
+ {
+ if (!_runningState.GetIdle())
+ {
+ return;
+ }
+
+ _runningState.SetIdle(false);
+
+ // 虽然更改时已经保存过了,不过保险起见还是在点击开始之后再保存一次任务及基建列表
+ TaskItemSelectionChanged();
+ Instances.SettingsViewModel.InfrastOrderSelectionChanged();
+
+ ClearLog();
+
+ await Task.Run(() => Instances.SettingsViewModel.RunScript("StartsWithScript"));
+
+ AddLog(LocalizationHelper.GetString("ConnectingToEmulator"));
+ if (!Instances.SettingsViewModel.AdbReplaced && !Instances.SettingsViewModel.IsAdbTouchMode())
+ {
+ AddLog(LocalizationHelper.GetString("AdbReplacementTips"), UiLogColor.Info);
+ }
+
+ string errMsg = string.Empty;
+ bool connected = await Task.Run(() => Instances.AsstProxy.AsstConnect(ref errMsg));
+
+ // 一般是点了“停止”按钮了
+ if (Stopping)
+ {
+ SetStopped();
+ return;
+ }
+
+ if (!await ConnectToEmulator())
+ {
+ return;
+ }
+
+ // 一般是点了“停止”按钮了
+ if (Stopping)
+ {
+ SetStopped();
+ return;
+ }
+
+ bool taskRet = true;
+ taskRet &= AppendStart();
+
+ taskRet &= Instances.AsstProxy.AsstStart();
+
+ if (taskRet)
+ {
+ AddLog(LocalizationHelper.GetString("Running"));
+ }
+ else
+ {
+ AddLog(LocalizationHelper.GetString("UnknownErrorOccurs"));
+ await Stop();
+ SetStopped();
+ }
+ }
+
private static bool AppendStart()
{
var mode = Instances.SettingsViewModel.ClientType;
diff --git a/src/MaaWpfGui/Views/UserControl/ConnectSettingsOnWakeUpUserControl.xaml b/src/MaaWpfGui/Views/UserControl/ConnectSettingsOnWakeUpUserControl.xaml
index 2491d95eda..83e382604b 100644
--- a/src/MaaWpfGui/Views/UserControl/ConnectSettingsOnWakeUpUserControl.xaml
+++ b/src/MaaWpfGui/Views/UserControl/ConnectSettingsOnWakeUpUserControl.xaml
@@ -14,14 +14,29 @@
d:DesignWidth="220"
mc:Ignorable="d">
-
+
+
+
+
+
+
+
+
+