From e4e7b37fd266d88fd1a8f6e5db84e95beb47cd0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=89=E9=B8=AD=E8=9B=8B?= Date: Sat, 26 Oct 2024 00:21:51 +0800 Subject: [PATCH] the whole team is defeated MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在 `PathExecutor.cs` 中,`RecoverWhenLowHp` 方法进行了修改: - 使用 `using` 语句来捕获区域。 - 如果当前角色血量过低,调用新的 `TpStatueOfTheSeven` 方法进行传送和恢复。 - 增加了一个新的分支,如果检测到复苏提示,点击复苏并等待主界面加载完成,然后再调用 `TpStatueOfTheSeven` 方法。 - 新增了 `TpStatueOfTheSeven` 方法,用于处理传送到七天神像并恢复血量的逻辑。 在 `BvStatus.cs` 中: - 增加了 `System.Threading.Tasks` 和 `System.Threading` 的引用。 - 在 `Bv` 类中新增了 `WaitForMainUi` 方法,用于等待主界面加载完成。 - 在 `Bv` 类中新增了 `ClickIfInReviveModal` 方法,用于检测并点击复苏提示。 --- .../GameTask/AutoPathing/PathExecutor.cs | 25 ++++++++--- .../GameTask/Common/BgiVision/BvStatus.cs | 45 +++++++++++++++++++ 2 files changed, 64 insertions(+), 6 deletions(-) diff --git a/BetterGenshinImpact/GameTask/AutoPathing/PathExecutor.cs b/BetterGenshinImpact/GameTask/AutoPathing/PathExecutor.cs index 669b9bbe..2880df14 100644 --- a/BetterGenshinImpact/GameTask/AutoPathing/PathExecutor.cs +++ b/BetterGenshinImpact/GameTask/AutoPathing/PathExecutor.cs @@ -145,16 +145,29 @@ public class PathExecutor(CancellationToken ct) private async Task RecoverWhenLowHp() { - var region = CaptureToRectArea(); + using var region = CaptureToRectArea(); if (Bv.CurrentAvatarIsLowHp(region)) { Logger.LogInformation("当前角色血量过低,去须弥七天神像恢复"); - // tp 到七天神像回血 - var tpTask = new TpTask(ct); - await tpTask.Tp(TpTask.ReviveStatueOfTheSevenPointX, TpTask.ReviveStatueOfTheSevenPointY, true); - await Delay(2000, ct); - Logger.LogInformation("HP恢复完成"); + await TpStatueOfTheSeven(); } + else if (Bv.ClickIfInReviveModal(region)) + { + await Bv.WaitForMainUi(ct); // 等待主界面加载完成 + Logger.LogInformation("复苏完成"); + await Delay(3000, ct); + // 血量肯定不满,直接去七天神像回血 + await TpStatueOfTheSeven(); + } + } + + private async Task TpStatueOfTheSeven() + { + // tp 到七天神像回血 + var tpTask = new TpTask(ct); + await tpTask.Tp(TpTask.ReviveStatueOfTheSevenPointX, TpTask.ReviveStatueOfTheSevenPointY, true); + await Delay(3000, ct); + Logger.LogInformation("HP恢复完成"); } private async Task HandleTeleportWaypoint(WaypointForTrack waypoint) diff --git a/BetterGenshinImpact/GameTask/Common/BgiVision/BvStatus.cs b/BetterGenshinImpact/GameTask/Common/BgiVision/BvStatus.cs index fa146cb7..d6e4f03b 100644 --- a/BetterGenshinImpact/GameTask/Common/BgiVision/BvStatus.cs +++ b/BetterGenshinImpact/GameTask/Common/BgiVision/BvStatus.cs @@ -4,10 +4,12 @@ using BetterGenshinImpact.GameTask.QuickTeleport.Assets; using OpenCvSharp; using System; using System.Linq; +using System.Threading.Tasks; using BetterGenshinImpact.Core.Recognition; using BetterGenshinImpact.Core.Simulator; using BetterGenshinImpact.GameTask.AutoFight; using Vanara.PInvoke; +using System.Threading; namespace BetterGenshinImpact.GameTask.Common.BgiVision; @@ -34,6 +36,26 @@ public static partial class Bv return captureRa.Find(ElementAssets.Instance.PaimonMenuRo).IsExist(); } + /// + /// 等待主界面加载完成 + /// + /// + /// + /// + public static async Task WaitForMainUi(CancellationToken ct, int retryTimes = 25) + { + for (var i = 0; i < retryTimes; i++) + { + await TaskControl.Delay(1000, ct); + using var ra3 = TaskControl.CaptureToRectArea(); + if (IsInMainUi(ra3)) + { + return true; + } + } + return false; + } + /// /// 是否在大地图界面 /// @@ -89,6 +111,29 @@ public static partial class Bv return true; } } + + return false; + } + + /// + /// 是否出现全队死亡和复苏提示 + /// + /// + /// + public static bool ClickIfInReviveModal(ImageRegion region) + { + var list = region.FindMulti(new RecognitionObject + { + RecognitionType = RecognitionTypes.Ocr, + RegionOfInterest = new Rect(0, region.Height / 4 * 3, region.Width, region.Height / 4) + }); + var r = list.FirstOrDefault(r => r.Text.Contains("复苏")); + if (r != null) + { + r.Click(); + return true; + } + return false; }