feat: 开始唤醒-账号切换新增手动切换,可单独执行开始唤醒流程 (#6433)

- close #6431
This commit is contained in:
uye
2023-09-22 22:55:08 +08:00
committed by GitHub
10 changed files with 176 additions and 73 deletions

View File

@@ -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服`张三`,可输入 `张三``张``三`
### 自动战斗

View File

@@ -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) 使用 & 分享作業檔案!

View File

@@ -281,6 +281,7 @@ Enter 「SSReopen-XX」to pass SS normal difficulty level at one time</system:St
<system:String x:Key="AutoDetectConnectionTip">This checkbox will be automatically unchecked after each detect is completed, and can be checked again if you need to re-detect</system:String>
<system:String x:Key="AlwaysAutoDetectConnection">Re-detect every times</system:String>
<system:String x:Key="AccountSwitch">Account Switch</system:String>
<system:String x:Key="AccountSwitchManualRun">Manual switch</system:String>
<system:String x:Key="AccountSwitchTip" xml:space="preserve">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

View File

@@ -281,6 +281,7 @@
<system:String x:Key="AutoDetectConnectionTip">このチェックボックスは、検出が完了するたびに自動的にチェックが外れますが、再検出が必要な場合は再度チェックを入れることができます</system:String>
<system:String x:Key="AlwaysAutoDetectConnection">毎回再検出する</system:String>
<system:String x:Key="AccountSwitch">アカウントの切り替え</system:String>
<system:String x:Key="AccountSwitchManualRun">手動スイッチ</system:String>
<system:String x:Key="AccountSwitchTip" xml:space="preserve">切り替える必要があるアカウントを入力し、空白のままにしてアカウントの切り替えを完了します
公式(CN): ログイン インターフェイスに表示される携帯電話番号を入力します (例: 123****4567)
Bilibili: ログイン インターフェイスに表示されるアカウント名 (Zhang San など) を入力します。

View File

@@ -281,6 +281,7 @@ OF-1을 해금하지 않았다면 선택하지 말아 주세요.</system:String>
<system:String x:Key="AutoDetectConnectionTip">이 체크박스는 감지가 끝나면 자동으로 체크가 해제됩니다. 다시 감지하려면 다시 체크해주세요</system:String>
<system:String x:Key="AlwaysAutoDetectConnection">매번 재감지</system:String>
<system:String x:Key="AccountSwitch">계정 전환</system:String>
<system:String x:Key="AccountSwitchManualRun">수동 스위치</system:String>
<system:String x:Key="AccountSwitchTip" xml:space="preserve">전환할 계좌를 입력하고, 계좌 전환을 종료하려면 공백으로 남겨두세요.
공식(CN): 로그인 인터페이스에 표시된 휴대폰 번호(예: 123****4567)를 입력하세요.
Bilibili: 로그인 인터페이스에 표시되는 계정 이름(예: Zhang San)을 입력하세요.

View File

@@ -281,9 +281,10 @@
<system:String x:Key="AutoDetectConnectionTip">每次检测完成后会自动取消勾选,若需要重新检测可再次勾选,若反复连接失败可勾选始终自动检测连接</system:String>
<system:String x:Key="AlwaysAutoDetectConnection">每次重新检测</system:String>
<system:String x:Key="AccountSwitch">账号切换</system:String>
<system:String x:Key="AccountSwitchTip" xml:space="preserve">填写需要切换至的账号,留空以关闭账号切换
官服输入登录界面显示的手机号,如 123****4567
B服输入登录界面显示的账号名,如 张三
<system:String x:Key="AccountSwitchManualRun">手动切换</system:String>
<system:String x:Key="AccountSwitchTip" xml:space="preserve">需要切换至的账号,留空以禁用
服输入登录界面显示的手机号如「123****4567」可输入「123****4567」或「4567」或「23****45」
B服输入登录界面显示的账号名如「张三」可输入「张」或「三」
暂不支持其他服</system:String>
<system:String x:Key="ADBPath">ADB 路径 (相对/绝对)</system:String>
<system:String x:Key="ConnectionAddress">连接地址</system:String>

View File

@@ -281,10 +281,11 @@
<system:String x:Key="AutoDetectConnectionTip">每次檢測完成後會自動取消勾選,若需要重新檢測可再次勾選</system:String>
<system:String x:Key="AlwaysAutoDetectConnection">每次重新檢測</system:String>
<system:String x:Key="AccountSwitch">賬號切換</system:String>
<system:String x:Key="AccountSwitchTip" xml:space="preserve">填寫需要切換至的賬號,留空以關閉賬號切換
官服輸入登錄界面顯示的手機號,如 123****4567
B服輸入登錄界面顯示的賬號名,如 張三
暫不支持其他類型</system:String>
<system:String x:Key="AccountSwitchManualRun">手動切换</system:String>
<system:String x:Key="AccountSwitchTip" xml:space="preserve">需要切換至的賬號,留空以禁用
服輸入登錄界面顯示的手機號如「123****4567」可輸入「123****4567」或「4567」或「23****45」
B服輸入登錄界面顯示的賬號名如「張三」可輸入「張」或「三」
暫不支持其他服</system:String>
<system:String x:Key="ADBPath">ADB 路徑(相對/絕對)</system:String>
<system:String x:Key="ConnectionAddress">連接地址</system:String>
<system:String x:Key="ConnectionAddressTip">若遇到問題可嘗試手動修改</system:String>

View File

@@ -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));
/// <summary>

View File

@@ -732,6 +732,70 @@ namespace MaaWpfGui.ViewModels.UI
}
}
private async Task<bool> 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;
}
/// <summary>
/// Starts.
/// </summary>
@@ -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;

View File

@@ -14,14 +14,29 @@
d:DesignWidth="220"
mc:Ignorable="d">
<StackPanel>
<TextBox
Margin="0,5"
hc:TitleElement.Title="{DynamicResource AccountSwitch}"
IsReadOnly="{c:Binding !Idle}"
Style="{StaticResource TextBoxExtend}"
Text="{Binding AccountName, UpdateSourceTrigger=PropertyChanged}"
ToolTip="{DynamicResource AccountSwitchTip}"
Visibility="{c:Binding '(ClientType == &quot;Official&quot;) or (ClientType == &quot;Bilibili&quot;) or (ClientType == &quot;&quot;)'}" />
<Grid Margin="0,5">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBox
hc:TitleElement.Title="{DynamicResource AccountSwitch}"
IsReadOnly="{c:Binding !Idle}"
Style="{StaticResource TextBoxExtend}"
Text="{Binding AccountName, UpdateSourceTrigger=PropertyChanged}"
ToolTip="{DynamicResource AccountSwitchTip}"
Visibility="{c:Binding '(ClientType == &quot;Official&quot;) or (ClientType == &quot;Bilibili&quot;) or (ClientType == &quot;&quot;)'}" />
<Button
Grid.Column="1"
Padding="12,1,12,1"
HorizontalAlignment="Center"
VerticalAlignment="Bottom"
hc:BorderElement.CornerRadius="0,4,4,0"
BorderThickness="0,1,1,1"
Command="{s:Action AccountSwitchMannualRun}"
Content="{DynamicResource AccountSwitchManualRun}" />
</Grid>
<CheckBox
Margin="0,10"