diff --git a/BetterGenshinImpact/GameTask/AutoFight/Assets/AutoFightAssets.cs b/BetterGenshinImpact/GameTask/AutoFight/Assets/AutoFightAssets.cs index 519c48e8..badcda76 100644 --- a/BetterGenshinImpact/GameTask/AutoFight/Assets/AutoFightAssets.cs +++ b/BetterGenshinImpact/GameTask/AutoFight/Assets/AutoFightAssets.cs @@ -22,6 +22,7 @@ public class AutoFightAssets : BaseAssets 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 (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 diff --git a/BetterGenshinImpact/GameTask/AutoFight/Model/Avatar.cs b/BetterGenshinImpact/GameTask/AutoFight/Model/Avatar.cs index 14a4bb35..6774c762 100644 --- a/BetterGenshinImpact/GameTask/AutoFight/Model/Avatar.cs +++ b/BetterGenshinImpact/GameTask/AutoFight/Model/Avatar.cs @@ -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; }