Files
better-genshin-impact/BetterGenshinImpact/GameTask/AutoFight/AutoFightConfig.cs
mfkvfhpdx d2092a6c32 路径追踪增加拾取战斗人次阈值 (#1726)
* 修改调度器任务和部分独立任务失去焦点时,强制切换回游戏窗口,如果用常规的方式无法激活窗口,则第10次会尝试最小化所有窗口后激活游戏。

* 去除未引入的类引用

* 修正战斗结束后,大概率打开队伍界面的问题

* 修复有些电脑上因未知原因,战斗0秒打断

* 把失焦激活放入了设置-通用设置-其他设置中,默认关闭。暂停恢复时,重置移动的起始时间,防止因暂停而导致超时放弃任务。

* 在调度器里面的任务之前,增加月卡处理,解决4点如果未进入任务会卡住的问题。增加了日志分析小怪详细。解决日志分析兜底结束日期不生效的问题。

* 在设置=》其他设置中 增加调度器任务传送过程中自动领取探索奖励功能配置。

* 调整自动派遣后恢复原任务的逻辑

* 自动领取派遣奖励时,跳过异常,防止整个配置组任务被打断。

* 把打开大地图方法从TpTask中抽出为公共方法,自动领取派遣代码调整到了调度器中。

* 去除了未使用的引用

* 暂停恢复逻辑增加恢复中条件和非空判断

* 增加了临时暂停自动拾取的逻辑(RunnerContext.AutoPickTriggerStopCount 为0时不限制,大于0时停止,多次暂停会累加该值,每次恢复-1),支持嵌套情况的暂停,在自动派遣(和结束后5秒)或暂停调度器任务时,同时暂停自动拾取功能。

* 调整暂停拾取方法

* 调整个日志输出

* 路径追踪复苏时,暂停拾取

* 增加根据点位配置,支持能在点位未识别情况下,使用大地图中心点的方式来定位,从而支持像铜锁小岛处这种小地图无法识别的点位。调整了对未识别点位的默认逻辑,未配置点位配置情况下,未识别点位,会取上一个识别的点位,从而支持在某些地方断续小地图能识别情况下的脚本。

* Changes

* 修复暂停后,距离过远,小地图无法识别时,无限取当前一个坐标,导致无法正常恢复的问题。调度器管理增加了按天为单位的周期配置,适用于批量执行时,无需人工判断当天执行哪个任务。

* 调度器配置增加,或开启万叶拾取,并且不存在万叶,但配置了万叶队伍情况下,会切换队伍进行拾取。

* 调度器配置,增加了  只拾取精英掉落模式 ,根据编辑器点位配置,可设定非标记精英或传奇的点位跳过拾取。

* 解决卡换成复活形式的任务卡死

* 判断主界面时,复活界面返回false

* 完全跳过的配置组,不发送通知。给周期配置增加说明。

* 启动参数增加 --no-single ,允许多开,实现特殊需求(重启需要)。增加了一个重启bgi的方法。增加了任务进度的功能,执行调度器任务时,会记录当前任务执行位置,当关闭后(比如F11),下次可以通过继续菜单,选择记录,从上次关闭任务处执行。

* 调整继续执行,最后一次成功的下一个任务执行

* 设置,其他设置,增加了调度器任务,遇到异常时,连续累计一定次数时,重启BGI,和可配置的重启游戏。

* 连续任务支持循环,右键支持从连续的某一个任务开始执行。修改了一些配置变量的写法,使之不会保存到json文件中。

* 修正一条龙,下一个从此执行失效的问题

* 路径追踪增加拾取战斗人次阈值 ,用于配置,战斗次数小于一定次数,会跳过拾取配置,默认不生效。
2025-06-21 11:07:42 +08:00

125 lines
4.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using CommunityToolkit.Mvvm.ComponentModel;
using System;
namespace BetterGenshinImpact.GameTask.AutoFight;
/// <summary>
/// 自动战斗配置
/// </summary>
[Serializable]
public partial class AutoFightConfig : ObservableObject
{
[ObservableProperty] private string _strategyName = "";
/// <summary>
/// 英文逗号分割 强制指定队伍角色
/// </summary>
[ObservableProperty] private string _teamNames = "";
/// <summary>
/// 检测战斗结束
/// </summary>
[ObservableProperty]
private bool _fightFinishDetectEnabled = true;
/// <summary>
/// 根据技能CD优化出招人员
/// 根据填入人或人和cd来决定当此人元素战技cd未结束时跳过此人出招来优化战斗流程可填入人名或人名数字用逗号分隔
/// 多种用分号分隔,例如:白术;钟离,12;如果人名则用内置cd检查如果是人名和数字则把数字当做出招cd(秒)。
/// </summary>
[ObservableProperty] private string _actionSchedulerByCd = "";
/// <summary>
/// 只拾取精英掉落
/// Closed :关闭功能
/// AllowAutoPickupForNonElite: 非精英允许自动拾取:战斗过程中掉落脚下的可以自动拾取,但不会执行万叶拾取和拾取配置逻辑。
/// DisableAutoPickupForNonElite: 非精英关闭拾取:战斗过程中掉落到脚下的也不会自动拾取。
/// </summary>
[ObservableProperty] private string _onlyPickEliteDropsMode = "Closed";
[Serializable]
public partial class FightFinishDetectConfig : ObservableObject
{
/// <summary>
/// 判断战斗结束读条颜色不同帧率可能下会有些不同默认为95,235,255
/// </summary>
[ObservableProperty]
private string _battleEndProgressBarColor = "";
/// <summary>
/// 对于上方颜色地偏差值,即±某个值,例如 6或6,6,6前者表示所有偏差值都一样后者则可以分别设置
/// </summary>
[ObservableProperty]
private string _battleEndProgressBarColorTolerance = "";
/// <summary>
/// 快速检查战斗结束在一轮脚本中可以每隔一定秒数默认为5或指定角色操作后去检查在每个角色完成该轮脚本时
/// </summary>
[ObservableProperty]
private bool _fastCheckEnabled = false;
/// <summary>
/// 快速检查战斗结束的参数,可填入数字和人名,多种用分号分隔,例如:15,白术;钟离;如果是数字小于等于0则不会根据时间去检查则指定检查间隔如果是人名则该角色执行一轮操作后进行检查。同时每轮结束后检查不变。
/// </summary>
[ObservableProperty]
private string _fastCheckParams = "";
/// <summary>
/// 检查战斗结束的延时即角色默认为1.5秒。也可以指定特定角色之后延时多少时间检查。格式如2.5;白术,1.5;钟离,1.0;
/// </summary>
[ObservableProperty]
private string _checkEndDelay = "";
/// <summary>
/// 按下切换队伍后去检查屏幕色块的延迟默认为0.45秒。若频繁误判可以适当提高这个值。确保这个延迟不会真的把队伍配置界面切出来。
/// </summary>
[ObservableProperty]
private string _beforeDetectDelay = "";
}
/// <summary>
/// 战斗结束相关配置
/// </summary>
[ObservableProperty]
private FightFinishDetectConfig _finishDetectConfig = new();
/// <summary>
/// 检测战斗结束,默认为每轮脚本后检查
/// </summary>
[ObservableProperty]
private bool _pickDropsAfterFightEnabled = false;
/// <summary>
/// 检测战斗结束,默认为每轮脚本后检查
/// </summary>
[ObservableProperty]
private int _pickDropsAfterFightSeconds = 15;
/// <summary>
/// 拾取战斗人次阈值,当战斗人次小于一定次数就结束战斗情况下不触发拾取掉落物和万叶拾取后拾取只有不小于2时才生效。
/// </summary>
[ObservableProperty]
private int? _battleThresholdForLoot;
/// <summary>
/// 战斗结束后,如果存在枫原万叶,则使用该角色捡材料
/// </summary>
[ObservableProperty]
private bool _kazuhaPickupEnabled = true;
/// <summary>
/// 战斗结束后,如果不存在万叶,则切换至存在万叶的队伍(基于开启万叶拾取情况下)
/// </summary>
[ObservableProperty]
private string _kazuhaPartyName = "";
/// <summary>
/// 战斗超时,单位秒
/// </summary>
[ObservableProperty]
private int _timeout = 120;
}