diff --git a/BetterGenshinImpact/GameTask/Common/Job/CountInventoryItem.cs b/BetterGenshinImpact/GameTask/Common/Job/CountInventoryItem.cs index d0e83699..d66db5e4 100644 --- a/BetterGenshinImpact/GameTask/Common/Job/CountInventoryItem.cs +++ b/BetterGenshinImpact/GameTask/Common/Job/CountInventoryItem.cs @@ -16,6 +16,7 @@ using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; +using BetterGenshinImpact.Core.Script.Dependence; namespace BetterGenshinImpact.GameTask.Common.Job { @@ -81,6 +82,26 @@ namespace BetterGenshinImpact.GameTask.Common.Job return result; } + private async Task PreScrollToBottomForWeaponOre() + { + // 长按滑动栏底部,快速翻页到底部后,再继续滚动确保在最后一页 + GameCaptureRegion.GameRegion1080PPosMove(1289, 936); + try + { + GlobalMethod.LeftButtonDown(); + await TaskControl.Delay(2000, ct); + } + finally + { + GlobalMethod.LeftButtonUp(); + } + var gridScroller = new GridScroller(GridParams.Templates[gridScreenName], logger, input, ct); + while (await gridScroller.TryVerticalScollDown((src, columns) => GridScreen.GridEnumerator.GetGridItems(src, columns))) + { + await TaskControl.Delay(300, ct); + } + } + private async Task FindOne(InferenceSession session, Dictionary prototypes) { GridScreen gridScreen = new GridScreen(GridParams.Templates[this.gridScreenName], logger, ct); @@ -89,6 +110,13 @@ namespace BetterGenshinImpact.GameTask.Common.Job int? count = null; try { + //如果是武器页的武器经验道具,直接翻页到最底部 + if (gridScreenName == GridScreenName.Weapons && itemName!.StartsWith("精锻用")) + { + await PreScrollToBottomForWeaponOre(); + } + + //开始识别 await foreach ((ImageRegion pageRegion, Rect itemRect) in gridScreen) { using ImageRegion itemRegion = pageRegion.DeriveCrop(itemRect); @@ -138,6 +166,12 @@ namespace BetterGenshinImpact.GameTask.Common.Job gridScreen.OnBeforeScroll += () => VisionContext.Instance().DrawContent.ClearAll(); try { + //如果包含武器页的武器经验道具,直接翻页到最底部 + bool hasOre = itemNames!.Any(name => name.StartsWith("精锻用")); + if (gridScreenName == GridScreenName.Weapons && hasOre) + { + await PreScrollToBottomForWeaponOre(); + } await foreach ((ImageRegion pageRegion, Rect itemRect) in gridScreen) { using ImageRegion itemRegion = pageRegion.DeriveCrop(itemRect);