diff --git a/BetterGenshinImpact/GameTask/AutoPick/Assets/AutoPickAssets.cs b/BetterGenshinImpact/GameTask/AutoPick/Assets/AutoPickAssets.cs
index 78928191..04bbc0f2 100644
--- a/BetterGenshinImpact/GameTask/AutoPick/Assets/AutoPickAssets.cs
+++ b/BetterGenshinImpact/GameTask/AutoPick/Assets/AutoPickAssets.cs
@@ -12,6 +12,7 @@ namespace BetterGenshinImpact.GameTask.AutoPick.Assets
public class AutoPickAssets
{
public RecognitionObject FRo;
+ public RecognitionObject OptionButtonRo;
public AutoPickAssets()
{
@@ -27,6 +28,14 @@ namespace BetterGenshinImpact.GameTask.AutoPick.Assets
info.CaptureAreaRect.Height - info.CaptureAreaRect.Height / 3),
DrawOnWindow = false
}.InitTemplate();
+
+ OptionButtonRo = new RecognitionObject
+ {
+ Name = "OptionButton",
+ RecognitionType = RecognitionTypes.TemplateMatch,
+ TemplateImageMat = GameTaskManager.LoadAssertImage("AutoSkip", "option.png"),
+ DrawOnWindow = false
+ }.InitTemplate();
}
}
}
\ No newline at end of file
diff --git a/BetterGenshinImpact/GameTask/AutoPick/AutoPickConfig.cs b/BetterGenshinImpact/GameTask/AutoPick/AutoPickConfig.cs
index 91bd17ad..66a8ebe9 100644
--- a/BetterGenshinImpact/GameTask/AutoPick/AutoPickConfig.cs
+++ b/BetterGenshinImpact/GameTask/AutoPick/AutoPickConfig.cs
@@ -18,13 +18,17 @@ namespace BetterGenshinImpact.GameTask.AutoPick
///
[ObservableProperty] private bool _enabled = true;
+ ///
+ /// 1080p下拾取文字左边的起始偏移
+ ///
+ [ObservableProperty] private int _itemIconLeftOffset = 60;
///
/// 1080p下拾取文字的起始偏移
///
- [ObservableProperty] private int _fLeftOffset = 115;
+ [ObservableProperty] private int _itemTextLeftOffset = 115;
///
/// 1080p下拾取文字的终止偏移
///
- [ObservableProperty] private int _fRightOffset = 400;
+ [ObservableProperty] private int _itemTextRightOffset = 400;
}
}
\ No newline at end of file
diff --git a/BetterGenshinImpact/GameTask/AutoPick/AutoPickTrigger.cs b/BetterGenshinImpact/GameTask/AutoPick/AutoPickTrigger.cs
index 2fee0558..d241f121 100644
--- a/BetterGenshinImpact/GameTask/AutoPick/AutoPickTrigger.cs
+++ b/BetterGenshinImpact/GameTask/AutoPick/AutoPickTrigger.cs
@@ -5,6 +5,7 @@ using BetterGenshinImpact.Core.Config;
using BetterGenshinImpact.Core.Recognition.ONNX.SVTR;
using BetterGenshinImpact.Core.Recognition.OpenCv;
using BetterGenshinImpact.GameTask.AutoPick.Assets;
+using BetterGenshinImpact.GameTask.Model;
using Microsoft.Extensions.Logging;
using OpenCvSharp;
using WindowsInput;
@@ -60,13 +61,24 @@ public class AutoPickTrigger : ITaskTrigger
{
content.CaptureRectArea.Find(_autoPickAssets.FRo, foundRectArea =>
{
- // 这类文字识别比较特殊,都是针对某个场景的文字识别,所以暂时未抽象到识别对象中
var scale = TaskContext.Instance().SystemInfo.AssetScale;
var config = TaskContext.Instance().Config.AutoPickConfig;
+
+ // 识别到F键,开始识别物品图标
+ bool isChatIcon = false;
+ _autoPickAssets.OptionButtonRo.RegionOfInterest = new Rect(foundRectArea.X + (int)(config.ItemIconLeftOffset * scale), foundRectArea.Y, (int)((config.ItemTextLeftOffset - config.ItemIconLeftOffset) * scale), foundRectArea.Height);
+ var iconRa = content.CaptureRectArea.Find(_autoPickAssets.OptionButtonRo);
+ if (!iconRa.IsEmpty())
+ {
+ // 物品图标是聊天气泡,一般是NPC对话,文字不在白名单不拾取
+ isChatIcon = true;
+ }
+
+ // 这类文字识别比较特殊,都是针对某个场景的文字识别,所以暂时未抽象到识别对象中
// 计算出文字区域
- var textRect = new Rect(foundRectArea.X + (int)(config.FLeftOffset * scale), foundRectArea.Y,
- (int)((config.FRightOffset - config.FLeftOffset) * scale), foundRectArea.Height);
- if (textRect.X + textRect.Width > content.CaptureRectArea.SrcGreyMat.Width
+ var textRect = new Rect(foundRectArea.X + (int)(config.ItemTextLeftOffset * scale), foundRectArea.Y,
+ (int)((config.ItemTextRightOffset - config.ItemTextLeftOffset) * scale), foundRectArea.Height);
+ if (textRect.X + textRect.Width > content.CaptureRectArea.SrcGreyMat.Width
|| textRect.Y + textRect.Height > content.CaptureRectArea.SrcGreyMat.Height)
{
Debug.WriteLine("AutoPickTrigger: 文字区域 out of range");
@@ -86,6 +98,12 @@ public class AutoPickTrigger : ITaskTrigger
return;
}
+ if (isChatIcon)
+ {
+ //Debug.WriteLine("AutoPickTrigger: 物品图标是聊天气泡,一般是NPC对话,不拾取");
+ return;
+ }
+
if (_blackList.Contains(text))
{
return;
diff --git a/BetterGenshinImpact/GameTask/GameTaskManager.cs b/BetterGenshinImpact/GameTask/GameTaskManager.cs
index e898c5b8..99dd6842 100644
--- a/BetterGenshinImpact/GameTask/GameTaskManager.cs
+++ b/BetterGenshinImpact/GameTask/GameTaskManager.cs
@@ -38,6 +38,11 @@ namespace BetterGenshinImpact.GameTask
if (TriggerDictionary is { Count: > 0 })
{
TriggerDictionary["AutoPick"].IsEnabled = TaskContext.Instance().Config.AutoPickConfig.Enabled;
+ // 用于刷新AutoPick的黑白名单
+ if (TriggerDictionary["AutoPick"].IsEnabled == false)
+ {
+ TriggerDictionary["AutoPick"] = new AutoPick.AutoPickTrigger();
+ }
TriggerDictionary["AutoSkip"].IsEnabled = TaskContext.Instance().Config.AutoSkipConfig.Enabled;
TriggerDictionary["AutoFishing"].IsEnabled = TaskContext.Instance().Config.AutoFishingConfig.Enabled;
// 钓鱼有很多变量要初始化,直接重新new