From ce529fc2de1ff4ea439b54d0460145d287464ff4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=89=E9=B8=AD=E8=9B=8B?= Date: Sun, 17 Aug 2025 13:45:44 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=90=83=E8=8D=AF=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E9=97=AE=E9=A2=98=E4=BF=AE=E6=AD=A3=EF=BC=8C=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Core/Config/PathingConditionConfig.cs | 2 +- .../GameTask/AutoDomain/AutoDomainTask.cs | 7 +++- .../GameTask/AutoEat/AutoEatConfig.cs | 4 +- .../GameTask/AutoEat/AutoEatTrigger.cs | 38 ++++++++++--------- BetterGenshinImpact/GameTask/TaskRunner.cs | 1 + .../View/Pages/TriggerSettingsPage.xaml | 33 ++++++++++++++-- 6 files changed, 60 insertions(+), 25 deletions(-) diff --git a/BetterGenshinImpact/Core/Config/PathingConditionConfig.cs b/BetterGenshinImpact/Core/Config/PathingConditionConfig.cs index 47a5d6ea..591c796d 100644 --- a/BetterGenshinImpact/Core/Config/PathingConditionConfig.cs +++ b/BetterGenshinImpact/Core/Config/PathingConditionConfig.cs @@ -32,7 +32,7 @@ public partial class PathingConditionConfig : ObservableObject // 启用自动吃药功能 [ObservableProperty] - private bool _autoEatEnabled = true; + private bool _autoEatEnabled = false; public static PathingConditionConfig Default => new() { diff --git a/BetterGenshinImpact/GameTask/AutoDomain/AutoDomainTask.cs b/BetterGenshinImpact/GameTask/AutoDomain/AutoDomainTask.cs index 9d0deeac..89e0bb0a 100644 --- a/BetterGenshinImpact/GameTask/AutoDomain/AutoDomainTask.cs +++ b/BetterGenshinImpact/GameTask/AutoDomain/AutoDomainTask.cs @@ -214,6 +214,11 @@ public class AutoDomainTask : ISoloTask private void Init() { LogScreenResolution(); + if (_config.AutoEat) + { + TaskTriggerDispatcher.Instance().AddTrigger("AutoEat", null); + } + if (_config.SpecifyResinUse) { Logger.LogInformation("→ {Text} 指定使用树脂", "自动秘境,"); @@ -749,7 +754,7 @@ public class AutoDomainTask : ISoloTask if (!IsTakeFood()) { - Logger.LogInformation("未装备 “{Tool}”,不启用红血自动吃药功能", "便携营养袋"); + Logger.LogInformation("未装备 “{Tool}”,不启用红血自动吃药功能", "便携营养袋"); return; } diff --git a/BetterGenshinImpact/GameTask/AutoEat/AutoEatConfig.cs b/BetterGenshinImpact/GameTask/AutoEat/AutoEatConfig.cs index 5fab8ad9..ae087ca4 100644 --- a/BetterGenshinImpact/GameTask/AutoEat/AutoEatConfig.cs +++ b/BetterGenshinImpact/GameTask/AutoEat/AutoEatConfig.cs @@ -25,14 +25,14 @@ public partial class AutoEatConfig : ObservableObject /// 检测间隔时间(毫秒) /// [ObservableProperty] - private int _checkInterval = 500; + private int _checkInterval = 150; /// /// 吃药间隔时间(毫秒) /// 防止频繁吃药 /// [ObservableProperty] - private int _eatInterval = 2000; + private int _eatInterval = 1000; /// /// 测试食物名称 diff --git a/BetterGenshinImpact/GameTask/AutoEat/AutoEatTrigger.cs b/BetterGenshinImpact/GameTask/AutoEat/AutoEatTrigger.cs index 9d1ed670..0cae5e42 100644 --- a/BetterGenshinImpact/GameTask/AutoEat/AutoEatTrigger.cs +++ b/BetterGenshinImpact/GameTask/AutoEat/AutoEatTrigger.cs @@ -31,6 +31,8 @@ public class AutoEatTrigger : ITaskTrigger private DateTime _lastResurrectionTime = DateTime.MinValue; private DateTime _lastEatTime = DateTime.MinValue; private bool _recoveryDetected = false; + + private DateTime _prevExecute = DateTime.MinValue; public AutoEatTrigger() { @@ -44,28 +46,17 @@ public class AutoEatTrigger : ITaskTrigger public void OnCapture(CaptureContent content) { - if (!IsEnabled) + if ((DateTime.Now - _prevExecute).TotalMilliseconds <= _config.CheckInterval) + { return; + } + _prevExecute = DateTime.Now; try { - using var ra = TaskControl.CaptureToRectArea(); + var ra = content.CaptureRectArea; var now = DateTime.Now; - // 优先检测复活图标,添加2秒CD - if (CheckResurrection(ra)) - { - // 检查复活CD(2秒) - if ((now - _lastResurrectionTime).TotalSeconds >= 2) - { - // 按z键复活 - Simulation.SendInput.Keyboard.KeyPress(VK.VK_Z); - _lastResurrectionTime = now; - _logger.LogInformation("检测到复活图标,自动复活"); - } - return; - } - // 检测角色是否红血 if (Bv.CurrentAvatarIsLowHp(ra)) { @@ -92,10 +83,23 @@ public class AutoEatTrigger : ITaskTrigger Simulation.SendInput.SimulateAction(GIActions.QuickUseGadget); _lastEatTime = now; - _logger.LogInformation("检测到红血且Recovery可用,自动吃药"); + _logger.LogInformation("检测到红血且不在CD,自动吃药"); } } } + + // 检测复活图标,添加2秒CD + if (CheckResurrection(ra)) + { + // 检查复活CD(2秒) + if ((now - _lastResurrectionTime).TotalSeconds >= 2) + { + // 按z键复活 + Simulation.SendInput.Keyboard.KeyPress(VK.VK_Z); + _lastResurrectionTime = now; + _logger.LogInformation("检测到复活图标,自动复活"); + } + } } catch (Exception e) { diff --git a/BetterGenshinImpact/GameTask/TaskRunner.cs b/BetterGenshinImpact/GameTask/TaskRunner.cs index 2a3519fe..80f0afed 100644 --- a/BetterGenshinImpact/GameTask/TaskRunner.cs +++ b/BetterGenshinImpact/GameTask/TaskRunner.cs @@ -147,6 +147,7 @@ public class TaskRunner } // 还原实时任务触发器 + TaskTriggerDispatcher.Instance().ClearTriggers(); TaskTriggerDispatcher.Instance().SetTriggers(GameTaskManager.LoadInitialTriggers()); VisionContext.Instance().DrawContent.ClearAll(); diff --git a/BetterGenshinImpact/View/Pages/TriggerSettingsPage.xaml b/BetterGenshinImpact/View/Pages/TriggerSettingsPage.xaml index a6565ea9..dfbf5408 100644 --- a/BetterGenshinImpact/View/Pages/TriggerSettingsPage.xaml +++ b/BetterGenshinImpact/View/Pages/TriggerSettingsPage.xaml @@ -689,18 +689,43 @@ - + + + + + + + + + + + + + + Text="{Binding Config.AutoEatConfig.EatInterval, Mode=TwoWay}" />