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;
}