From ed61c9dfe7e40fffc67c8fa4c23213f00afd4e07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=89=E9=B8=AD=E8=9B=8B?= Date: Fri, 26 Dec 2025 01:16:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=87=AA=E5=8A=A8=E5=B9=BD?= =?UTF-8?q?=E5=A2=83=E5=8D=B1=E6=88=98=E7=9A=84=E6=88=98=E6=96=97=E7=BB=88?= =?UTF-8?q?=E6=AD=A2=E6=A3=80=E6=B5=8B=EF=BC=8C=E8=A7=A3=E5=86=B3=E5=8F=AF?= =?UTF-8?q?=E8=83=BD=E5=AD=98=E5=9C=A8=E7=9A=84=E8=AF=AF=E8=AF=86=E5=88=AB?= =?UTF-8?q?=E5=9C=BA=E6=99=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AutoStygianOnslaughtTask.cs | 33 +++++++++++++++++-- .../GameTask/Common/BgiVision/BvImage.cs | 4 +-- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/BetterGenshinImpact/GameTask/AutoStygianOnslaught/AutoStygianOnslaughtTask.cs b/BetterGenshinImpact/GameTask/AutoStygianOnslaught/AutoStygianOnslaughtTask.cs index 848e6ef6..730d9aa0 100644 --- a/BetterGenshinImpact/GameTask/AutoStygianOnslaught/AutoStygianOnslaughtTask.cs +++ b/BetterGenshinImpact/GameTask/AutoStygianOnslaught/AutoStygianOnslaughtTask.cs @@ -31,6 +31,7 @@ using BetterGenshinImpact.GameTask.AutoDomain; using static BetterGenshinImpact.GameTask.Common.TaskControl; using static Vanara.PInvoke.User32; using BetterGenshinImpact.GameTask.AutoFight; +using OpenCvSharp; namespace BetterGenshinImpact.GameTask.AutoStygianOnslaught; @@ -260,6 +261,7 @@ public class AutoStygianOnslaughtTask : ISoloTask // 重新执行从打开活动界面开始的流程 await TpToDomain(page, isRetry: true); } + return; } @@ -400,7 +402,33 @@ public class AutoStygianOnslaughtTask : ISoloTask { try { - await Bv.WaitUntilFound(ElementAssets.Instance.BtnWhiteCancel, cts.Token, 300, 1000); + var captureRect = TaskContext.Instance().SystemInfo.ScaleMax1080PCaptureRect; + var assetScale = TaskContext.Instance().SystemInfo.AssetScale; + RecognitionObject whiteCancelRo = new RecognitionObject + { + Name = "BtnWhiteCancel", + RecognitionType = RecognitionTypes.TemplateMatch, + TemplateImageMat = ElementAssets.Instance.BtnWhiteCancel.TemplateImageMat, + RegionOfInterest = new Rect(captureRect.Width / 3, captureRect.Height - (int)(captureRect.Height * 0.22), captureRect.Width / 3, (int)(captureRect.Height * 0.22)), + Use3Channels = true + }.InitTemplate(); + + await NewRetry.WaitForAction(() => + { + using var ra = CaptureToRectArea(); + using var ret = ra.Find(whiteCancelRo); + if (ret.IsExist()) + { + // OCR 保证识别不出错 + var list = ra.FindMulti(RecognitionObject.Ocr(ret.X + 40 * assetScale, ret.Y - 20 * assetScale, 270 * assetScale, ret.Height * 2)); + if (list.Any(o => o.Text.Contains("返回"))) + { + return true; + } + } + + return false; + }, cts.Token, 300, 1000); _logger.LogInformation("检测到战斗结束,结束战斗操作线程"); await cts.CancelAsync(); } @@ -721,10 +749,9 @@ public class AutoStygianOnslaughtTask : ISoloTask private async Task ExitDomain(BvPage page) { - var exitDoor = await NewRetry.WaitForElementAppear( ElementAssets.Instance.BtnExitDoor.Value, - () => Simulation.SendInput.Keyboard.KeyPress(VK.VK_ESCAPE),// 点击队伍选择按钮 + () => Simulation.SendInput.Keyboard.KeyPress(VK.VK_ESCAPE), // 点击队伍选择按钮 _ct, 4, 1000 diff --git a/BetterGenshinImpact/GameTask/Common/BgiVision/BvImage.cs b/BetterGenshinImpact/GameTask/Common/BgiVision/BvImage.cs index 5eba374a..cd65b226 100644 --- a/BetterGenshinImpact/GameTask/Common/BgiVision/BvImage.cs +++ b/BetterGenshinImpact/GameTask/Common/BgiVision/BvImage.cs @@ -20,7 +20,7 @@ public static partial class Bv /// public static async Task WaitUntilFound(RecognitionObject ro, CancellationToken ct, int retryTimes = 5, int delayMs = 1000) { - return await NewRetry.WaitForAction(() => TaskControl.CaptureToRectArea().Find(ro).IsExist(), ct, retryTimes); + return await NewRetry.WaitForAction(() => TaskControl.CaptureToRectArea().Find(ro).IsExist(), ct, retryTimes, delayMs); } /// @@ -44,7 +44,7 @@ public static partial class Bv } return false; - }, ct, retryTimes); + }, ct, retryTimes, delayMs); }