From bd8451a19005d1d0f7eea9bc91cec2988943fc03 Mon Sep 17 00:00:00 2001 From: ShadowLemoon <119576779+ShadowLemoon@users.noreply.github.com> Date: Wed, 15 Apr 2026 23:33:28 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E5=A2=9E=E5=BC=BA=E5=B9=BD=E5=A2=83?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E9=B2=81=E6=A3=92=E6=80=A7=20(#3050)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AutoStygianOnslaughtTask.cs | 36 ++++++++++++++----- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/BetterGenshinImpact/GameTask/AutoStygianOnslaught/AutoStygianOnslaughtTask.cs b/BetterGenshinImpact/GameTask/AutoStygianOnslaught/AutoStygianOnslaughtTask.cs index 757fb69a..9c6a007e 100644 --- a/BetterGenshinImpact/GameTask/AutoStygianOnslaught/AutoStygianOnslaughtTask.cs +++ b/BetterGenshinImpact/GameTask/AutoStygianOnslaught/AutoStygianOnslaughtTask.cs @@ -164,7 +164,7 @@ public class AutoStygianOnslaughtTask : StateMachineBase, (StygianState.EventMenu, [StygianState.StygianOnslaughtPage]), (StygianState.StygianOnslaughtPage, [StygianState.TeleportMap, StygianState.DomainEntrance]), (StygianState.TeleportMap, [StygianState.DomainEntrance]), - (StygianState.DomainEntrance, [StygianState.DifficultySelect]), + (StygianState.DomainEntrance, [StygianState.DomainEntrance, StygianState.DifficultySelect]), (StygianState.DifficultySelect, [StygianState.DomainLobby]), (StygianState.DomainLobby, [StygianState.BossSelect, StygianState.LeylineFlowerPrompt]), @@ -369,10 +369,10 @@ public class AutoStygianOnslaughtTask : StateMachineBase, await Delay(500, _ct); // 2. 在列表区域内查找"幽境危战"并点击 - var listItem = page.GetByText("幽境危战").WithRoi(listRegion); - if (listItem.IsExist()) + var target = page.GetByText("幽境危战").WithRoi(listRegion).FindAll().FirstOrDefault(); + if (target != null) { - listItem.FindAll().FirstOrDefault()?.Click(); + target.Click(); await Delay(300, _ct); return StateHandlerResult.Success; // 等待转换到 StygianOnslaughtPage } @@ -382,15 +382,20 @@ public class AutoStygianOnslaughtTask : StateMachineBase, // 如果两次都没找到,可能"幽境危战"已经被选中,直接尝试检测下一状态 Logger.LogWarning($"{Name}:未找到幽境危战,可能已被选中,尝试检测 StygianOnslaughtPage"); - page.GetByText("幽境危战").WithRoi(listRegion).FindAll().FirstOrDefault()?.Click(); - await Delay(300, _ct); - return StateHandlerResult.Success; // 等待转换到 StygianOnslaughtPage + return StateHandlerResult.Success; // 让状态机继续等待邻接状态出现 } private async Task HandleStygianOnslaughtPageState(BvPage page) { Logger.LogInformation($"{Name}:点击前往挑战"); - page.GetByText("前往挑战").WithRoi(r => r.CutRight(0.5)).FindAll().FirstOrDefault()?.Click(); + var challengeButton = page.GetByText("前往挑战").WithRoi(r => r.CutRight(0.5)).FindAll().FirstOrDefault(); + if (challengeButton == null) + { + Logger.LogWarning($"{Name}:未找到前往挑战按钮"); + return StateHandlerResult.Retry; + } + + challengeButton.Click(); await Delay(300, _ct); return StateHandlerResult.Success; // 等待转换到 TeleportMap 或 DomainEntrance } @@ -398,7 +403,14 @@ public class AutoStygianOnslaughtTask : StateMachineBase, private async Task HandleTeleportMapState(BvPage page) { Logger.LogInformation($"{Name}:点击传送"); - page.Locator(QuickTeleportAssets.Instance.TeleportButtonRo).FindAll().FirstOrDefault()?.Click(); + var teleportButton = page.Locator(QuickTeleportAssets.Instance.TeleportButtonRo).FindAll().FirstOrDefault(); + if (teleportButton == null) + { + Logger.LogWarning($"{Name}:未找到传送按钮"); + return StateHandlerResult.Retry; + } + + teleportButton.Click(); await Delay(300, _ct); return StateHandlerResult.Success; // 等待转换到 DomainEntrance } @@ -421,6 +433,12 @@ public class AutoStygianOnslaughtTask : StateMachineBase, // 点击确认进入 using var ra = CaptureToRectArea(); var btn = ra.Find(ElementAssets.Instance.BtnWhiteConfirm); + if (btn.IsEmpty()) + { + Logger.LogWarning($"{Name}:未找到进入确认按钮"); + return StateHandlerResult.Retry; + } + btn.Click(); await Delay(300, _ct); return StateHandlerResult.Success; // 等待转换到 DomainLobby