mirror of
https://github.com/babalae/better-genshin-impact.git
synced 2026-05-21 09:45:48 +08:00
修复Q技能分类的问题
This commit is contained in:
@@ -22,6 +22,7 @@ public class AutoFightAssets : BaseAssets<AutoFightAssets>
|
||||
public Rect ERect;
|
||||
public Rect ECooldownRect;
|
||||
public Rect QRect;
|
||||
public Rect QRectForClassify;
|
||||
public Rect ZCooldownRect;
|
||||
public Rect EndTipsUpperRect; // 挑战达成提示
|
||||
public Rect EndTipsRect;
|
||||
@@ -78,6 +79,8 @@ public class AutoFightAssets : BaseAssets<AutoFightAssets>
|
||||
(int)(41 * AssetScale), (int)(18 * AssetScale));
|
||||
QRect = new Rect(CaptureRect.Width - (int)(157 * AssetScale), CaptureRect.Height - (int)(165 * AssetScale),
|
||||
(int)(110 * AssetScale), (int)(110 * AssetScale));
|
||||
QRectForClassify = new Rect(CaptureRect.Width - (int)(172 * AssetScale), CaptureRect.Height - (int)(166 * AssetScale),
|
||||
(int)(137 * AssetScale), (int)(137 * AssetScale));
|
||||
ZCooldownRect = new Rect(CaptureRect.Width - (int)(130 * AssetScale), (int)(814 * AssetScale),
|
||||
(int)(60 * AssetScale), (int)(24 * AssetScale));
|
||||
// 小道具位置 1920-133,800,60,50
|
||||
|
||||
@@ -25,6 +25,7 @@ using BetterGenshinImpact.GameTask.AutoPathing;
|
||||
using BetterGenshinImpact.GameTask.AutoPathing.Model;
|
||||
using BetterGenshinImpact.GameTask.AutoPathing.Model.Enum;
|
||||
using BetterGenshinImpact.Core.Recognition.ONNX;
|
||||
using BetterGenshinImpact.GameTask.Common;
|
||||
using Compunet.YoloSharp;
|
||||
using Compunet.YoloSharp.Data;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
@@ -600,8 +601,9 @@ public class Avatar
|
||||
{
|
||||
// CD 中立即返回,其余场景尝试释放
|
||||
using var region1 = CaptureToRectArea();
|
||||
if (IsBurstReadyByClassify(region1) == BurstReadyState.Cooldown)
|
||||
if (IsBurstReadyByClassify(region1) != BurstReadyState.Ready)
|
||||
{
|
||||
// Logger.LogInformation("Q在CD,跳过");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -612,6 +614,7 @@ public class Avatar
|
||||
return;
|
||||
}
|
||||
|
||||
// Logger.LogInformation("释放Q");
|
||||
Simulation.SendInput.SimulateAction(GIActions.ElementalBurst);
|
||||
Sleep(200, Ct);
|
||||
|
||||
@@ -627,8 +630,9 @@ public class Avatar
|
||||
else
|
||||
{
|
||||
// 找到编号块判断是否进入了CD,四星角色没有大招动画
|
||||
if (IsBurstReadyByClassify(region) == BurstReadyState.Cooldown)
|
||||
if (IsBurstReadyByClassify(region) != BurstReadyState.Ready)
|
||||
{
|
||||
// Logger.LogInformation("释放Q后检查到CD");
|
||||
Sleep(1500, Ct);
|
||||
return;
|
||||
}
|
||||
@@ -638,29 +642,29 @@ public class Avatar
|
||||
|
||||
private static BurstReadyState IsBurstReadyByClassify(ImageRegion imageRegion)
|
||||
{
|
||||
using var qRa = imageRegion.DeriveCrop(AutoFightAssets.Instance.QRect);
|
||||
using var qRa = imageRegion.DeriveCrop(AutoFightAssets.Instance.QRectForClassify);
|
||||
var result = QBurstClassifierLazy.Value.Predictor.Classify(qRa.CacheImage);
|
||||
var topClass = result.GetTopClass();
|
||||
var topClassName = topClass.Name.Name;
|
||||
|
||||
// Logger.LogInformation("Q技能冷却分类:{ClassName},置信度:{Confidence:F2}", topClassName, topClass.Confidence);
|
||||
|
||||
// 置信度不足时,直接返回未知,避免误判导致漏放/乱放
|
||||
if (topClass.Confidence <= 0.7)
|
||||
{
|
||||
Logger.LogDebug("Q技能冷却分类置信度不足:{Confidence:F2},类别:{ClassName}", topClass.Confidence, topClassName);
|
||||
// Logger.LogInformation("Q技能冷却分类置信度不足:{Confidence:F2},类别:{ClassName}", topClass.Confidence, topClassName);
|
||||
return BurstReadyState.Unknown;
|
||||
}
|
||||
|
||||
if (topClassName.Contains("cd_1", StringComparison.OrdinalIgnoreCase))
|
||||
if (topClassName.Contains("cd 1", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return BurstReadyState.Cooldown;
|
||||
}
|
||||
|
||||
if (topClassName.Contains("cd_0", StringComparison.OrdinalIgnoreCase))
|
||||
if (topClassName.Contains("energy 1 cd 0", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return BurstReadyState.Ready;
|
||||
}
|
||||
|
||||
Logger.LogDebug("Q技能冷却分类出现未知类别:{ClassName},置信度:{Confidence:F2}", topClassName, topClass.Confidence);
|
||||
return BurstReadyState.Unknown;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user