perf: 优化关卡选择为剿灭时的逻辑判断

fix #9327
This commit is contained in:
uye
2024-06-11 01:09:03 +08:00
parent 490786401c
commit 0fcda2167c
7 changed files with 25 additions and 9 deletions

View File

@@ -36,6 +36,7 @@ using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Serilog;
using Stylet;
using static System.Windows.Forms.AxHost;
using static MaaWpfGui.Helper.Instances.Data;
using AsstHandle = System.IntPtr;
using AsstInstanceOptionKey = System.Int32;
@@ -611,6 +612,20 @@ namespace MaaWpfGui.Main
case AsstMsg.TaskChainError:
{
// 对剿灭的特殊处理,如果刷完了剿灭还选了剿灭会因为找不到入口报错
if (taskChain == "Fight" && (Instances.TaskQueueViewModel.Stage == "Annihilation"))
{
if (new[]
{
Instances.TaskQueueViewModel.Stage1,
Instances.TaskQueueViewModel.Stage2,
Instances.TaskQueueViewModel.Stage3
}.Any(stage => Instances.TaskQueueViewModel.IsStageOpen(stage) && (stage != "Annihilation")))
{
Instances.TaskQueueViewModel.AddLog(LocalizationHelper.GetString("AnnihilationTaskFailed"), UiLogColor.Warning);
}
}
Instances.TaskQueueViewModel.AddLog(LocalizationHelper.GetString("TaskError") + taskChain, UiLogColor.Error);
using var toast = new ToastNotification(LocalizationHelper.GetString("TaskError") + taskChain);
toast.Show();
@@ -629,11 +644,6 @@ namespace MaaWpfGui.Main
Instances.CopilotViewModel.AddLog(LocalizationHelper.GetString("CombatError"), UiLogColor.Error);
}
if (taskChain == "Fight" && (Instances.TaskQueueViewModel.Stage == "Annihilation"))
{
Instances.TaskQueueViewModel.AddLog(LocalizationHelper.GetString("AnnihilationTaskFailed"), UiLogColor.Warning);
}
break;
}

View File

@@ -462,7 +462,8 @@ Only supports Official(CN) and Bilibili server. Login account is not supported.<
<system:String x:Key="ShutdownPrompt">Tip</system:String>
<system:String x:Key="HibernatePrompt">Task(s) completed, about to hibernate</system:String>
<system:String x:Key="UnknownActionAfterCompleted">Unknown ending action</system:String>
<system:String x:Key="AnnihilationTaskFailed">Annihilation task failed, will try to use alternate stage, some combat settings will not be effective</system:String>
<system:String x:Key="AnnihilationTaskTip">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.</system:String>
<system:String x:Key="AnnihilationTaskFailed">Annihilation task failed, will try to use alternate stage, some combat settings will not be effective.</system:String>
<!-- !Logs -->
<!-- !Farming -->
<system:String x:Key="Toolbox">Toolbox</system:String>

View File

@@ -463,6 +463,7 @@
<system:String x:Key="ShutdownPrompt">ヒント</system:String>
<system:String x:Key="HibernatePrompt">完了しました。休止状態にしようとしています</system:String>
<system:String x:Key="UnknownActionAfterCompleted">未知の終了動作</system:String>
<system:String x:Key="AnnihilationTaskTip">ステージ選択は殲滅任務です。任務終了後、残りの代替ステージが試されます。一部の戦闘設定は有効になりません。</system:String>
<system:String x:Key="AnnihilationTaskFailed">殲滅戦に失敗、代替ステージを使用しますが、一部の戦闘設定が有効ではありません</system:String>
<!-- !Logs -->
<!-- !動作不明 -->

View File

@@ -463,6 +463,7 @@ OF-1을 해금하지 않았다면 선택하지 말아 주세요.</system:String>
<system:String x:Key="ShutdownPrompt">알림</system:String>
<system:String x:Key="HibernatePrompt">작업을 완료했습니다. 곧 절전 모드에 진입합니다</system:String>
<system:String x:Key="UnknownActionAfterCompleted">알 수 없는 종료 동작</system:String>
<system:String x:Key="AnnihilationTaskTip">선택한 스테이지는 섬멸 임무입니다. 임무 완료 후 남은 대체 스테이지가 시도됩니다. 일부 전투 설정은 적용되지 않습니다.</system:String>
<system:String x:Key="AnnihilationTaskFailed">섬멸 작전에 실패하여 대체 스테이지를 진행합니다. 일부 전투 설정이 무시될 수 있습니다</system:String>
<!-- !로그 -->
<!-- !메인 화면 -->

View File

@@ -464,7 +464,8 @@
<system:String x:Key="ShutdownPrompt">提示</system:String>
<system:String x:Key="HibernatePrompt">已刷完,即将休眠</system:String>
<system:String x:Key="UnknownActionAfterCompleted">未知的结束动作</system:String>
<system:String x:Key="AnnihilationTaskFailed">剿灭任务失败,将尝试使用剩余备选关卡,部分战斗设置将不生效</system:String>
<system:String x:Key="AnnihilationTaskTip">关卡选择为剿灭任务,任务结束后将尝试使用剩余备选关卡,部分战斗设置将不生效</system:String>
<system:String x:Key="AnnihilationTaskFailed">剿灭任务失败,将尝试使用剩余备选关卡,部分战斗设置将不生效。</system:String>
<!-- !日志 -->
<!-- !一键长草 -->
<system:String x:Key="Toolbox">小工具</system:String>

View File

@@ -460,7 +460,8 @@
<system:String x:Key="ShutdownPrompt">提示</system:String>
<system:String x:Key="HibernatePrompt">已刷完,即將休眠</system:String>
<system:String x:Key="UnknownActionAfterCompleted">未知的結束動作</system:String>
<system:String x:Key="AnnihilationTaskFailed">剿滅任務失敗,將嘗試使用剩餘備選關卡,部分戰鬥設將不生效</system:String>
<system:String x:Key="AnnihilationTaskTip">關卡選擇為剿滅任務,任務結束後將嘗試使用剩餘備選關卡,部分戰鬥設將不生效</system:String>
<system:String x:Key="AnnihilationTaskFailed">剿滅任務失敗,將嘗試使用剩餘備選關卡,部分戰鬥設定將不生效。</system:String>
<!-- !設定失敗 -->
<!-- !一鍵長草 -->
<system:String x:Key="Toolbox">小工具</system:String>

View File

@@ -476,7 +476,7 @@ namespace MaaWpfGui.ViewModels.UI
/// </summary>
/// <param name="name">stage name</param>
/// <returns>Whether the specified stage is open</returns>
private bool IsStageOpen(string name)
public bool IsStageOpen(string name)
{
return _stageManager.IsStageOpen(name, _curDayOfWeek);
}
@@ -1222,6 +1222,7 @@ namespace MaaWpfGui.ViewModels.UI
continue;
}
AddLog(LocalizationHelper.GetString("AnnihilationTaskTip"), UiLogColor.Info);
mainFightRet = Instances.AsstProxy.AsstAppendFight(stage, medicine, 0, int.MaxValue, series, string.Empty, 0);
break;
}