改进GetGridItemIconText获得全角数字字符时的处理 (#2581)

This commit is contained in:
Patrick-Ze
2025-12-25 16:30:00 +08:00
committed by GitHub
parent 6eca5dfc7b
commit 947752f17b
3 changed files with 26 additions and 3 deletions

View File

@@ -9,6 +9,7 @@ using BetterGenshinImpact.GameTask.GetGridIcons;
using BetterGenshinImpact.GameTask.Model;
using BetterGenshinImpact.GameTask.Model.Area;
using BetterGenshinImpact.GameTask.Model.GameUI;
using BetterGenshinImpact.Helpers;
using BetterGenshinImpact.View.Drawable;
using Fischless.WindowsInput;
using Microsoft.Extensions.Logging;
@@ -104,7 +105,8 @@ public class AutoEatTask : BaseIndependentTask, ISoloTask<int?>
itemRegion.Click();
#region
string numStr = itemRegion.SrcMat.GetGridItemIconText(OcrFactory.Paddle);
string ocrText = itemRegion.SrcMat.GetGridItemIconText(OcrFactory.Paddle);
string numStr = StringUtils.ConvertFullWidthNumToHalfWidth(ocrText);
if (int.TryParse(numStr, out int num))
{
count = num - 1; // 算上吃掉的1个

View File

@@ -5,6 +5,7 @@ using BetterGenshinImpact.GameTask.GetGridIcons;
using BetterGenshinImpact.GameTask.Model.Area;
using BetterGenshinImpact.GameTask.Model.GameUI;
using BetterGenshinImpact.View.Drawable;
using BetterGenshinImpact.Helpers;
using Fischless.WindowsInput;
using Microsoft.Extensions.Logging;
using Microsoft.ML.OnnxRuntime;
@@ -100,7 +101,8 @@ namespace BetterGenshinImpact.GameTask.Common.Job
string predName = result.Item1;
if (predName == this.itemName!)
{
string numStr = itemRegion.SrcMat.GetGridItemIconText(OcrFactory.Paddle);
string ocrText = itemRegion.SrcMat.GetGridItemIconText(OcrFactory.Paddle);
string numStr = StringUtils.ConvertFullWidthNumToHalfWidth(ocrText);
if (int.TryParse(numStr, out int num))
{
count = num;
@@ -149,7 +151,8 @@ namespace BetterGenshinImpact.GameTask.Common.Job
if (this.itemNames!.Contains(predName) && !itemsCountDic!.ContainsKey(predName))
{
int count;
string numStr = itemRegion.SrcMat.GetGridItemIconText(OcrFactory.Paddle);
string ocrText = itemRegion.SrcMat.GetGridItemIconText(OcrFactory.Paddle);
string numStr = StringUtils.ConvertFullWidthNumToHalfWidth(ocrText);
if (int.TryParse(numStr, out int num))
{
count = num;

View File

@@ -71,6 +71,24 @@ public partial class StringUtils
return chineseString;
}
/// <summary>
/// 将全角数字转换为半角数字
/// </summary>
/// <param name="text">需要转换的文本</param>
/// <returns>转换后的文本,全角数字被替换为半角数字</returns>
public static string ConvertFullWidthNumToHalfWidth(string text)
{
StringBuilder sb = new StringBuilder(text.Length);
foreach (char c in text)
{
if (c >= 0xFF10 && c <= 0xFF19) // 全角数字 -
sb.Append((char)(c - 0xFF10 + '0'));
else
sb.Append(c);
}
return sb.ToString();
}
public static double TryParseDouble(string text)
{
_ = double.TryParse(text, out double result);