the whole team is defeated

在 `PathExecutor.cs` 中,`RecoverWhenLowHp` 方法进行了修改:
- 使用 `using` 语句来捕获区域。
- 如果当前角色血量过低,调用新的 `TpStatueOfTheSeven` 方法进行传送和恢复。
- 增加了一个新的分支,如果检测到复苏提示,点击复苏并等待主界面加载完成,然后再调用 `TpStatueOfTheSeven` 方法。
- 新增了 `TpStatueOfTheSeven` 方法,用于处理传送到七天神像并恢复血量的逻辑。

在 `BvStatus.cs` 中:
- 增加了 `System.Threading.Tasks` 和 `System.Threading` 的引用。
- 在 `Bv` 类中新增了 `WaitForMainUi` 方法,用于等待主界面加载完成。
- 在 `Bv` 类中新增了 `ClickIfInReviveModal` 方法,用于检测并点击复苏提示。
This commit is contained in:
辉鸭蛋
2024-10-26 00:21:51 +08:00
parent 9f728fdf30
commit e4e7b37fd2
2 changed files with 64 additions and 6 deletions

View File

@@ -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)

View File

@@ -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();
}
/// <summary>
/// 等待主界面加载完成
/// </summary>
/// <param name="ct"></param>
/// <param name="retryTimes"></param>
/// <returns></returns>
public static async Task<bool> 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;
}
/// <summary>
/// 是否在大地图界面
/// </summary>
@@ -89,6 +111,29 @@ public static partial class Bv
return true;
}
}
return false;
}
/// <summary>
/// 是否出现全队死亡和复苏提示
/// </summary>
/// <param name="region"></param>
/// <returns></returns>
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;
}