背包计数任务更快定位到武器经验材料 (#2793)

* 背包计数任务更快定位到武器经验材料

* 防止任务取消时鼠标按钮可能卡在按下状态
This commit is contained in:
DarkFlameMaster
2026-02-17 19:23:30 +08:00
committed by GitHub
parent 28c50211a7
commit b242d98208

View File

@@ -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<int> FindOne(InferenceSession session, Dictionary<string, float[]> 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);