mirror of
https://github.com/babalae/bettergi-scripts-list.git
synced 2026-03-19 03:59:51 +08:00
* feat(AutoPlanDomain): 添加自动秘境计划功能 - 新增domain.json配置文件,包含天赋、武器、圣遗物三大类秘境数据 - 创建main.js核心逻辑文件,实现秘境数据映射和排序功能 - 添加manifest.json插件配置文件,定义插件基本信息和依赖 - 创建settings.json空配置文件用于后续设置界面 - 实现领域名称到物品列表的映射关系 - 支持按顺序排列的秘境配置功能 * feat(domain): 添加原神秘境自动规划功能 - 新增配置文件config.js用于管理秘境数据结构 - 实现秘境配置初始化和数据映射功能 - 添加domain.json配置文件包含所有秘境信息 - 实现秘境自动执行核心逻辑 - 添加秘境顺序列表初始化和排序功能 - 实现秘境批量执行处理机制 - 添加错误处理和配置验证机制 * feat(config): 添加设置初始化和多复选框配置管理功能 - 新增info对象用于存储manifest和settings信息 - 添加manifest.json路径配置 - 实现initSettings函数用于读取和解析设置文件 - 实现getMultiCheckboxMap函数用于获取多复选框映射表 - 实现getValueByMultiCheckboxName函数用于获取复选框组对应值 - 在main.js中引入并调用initSettings进行设置初始化 - 扩展导出接口包含新的设置管理函数 * fix(AutoPlanDomain): 解决秘境任务执行中的字符串转数字问题 - 修复了order变量解析时缺少空字符串转换的问题 - 添加了物品名称到秘境名称的映射查询功能 - 实现了域名临时变量获取和周日选择值更新逻辑 - 增加了输入错误时的异常处理机制 - 优化了秘境名称不存在时的错误提示信息 * feat(AutoPlanDomain): 添加自动秘境计划配置功能 - 在配置文件中添加manifest对象结构 - 为domainList添加默认空数组配置避免解析错误 - 重构order解析逻辑增加空值和类型验证保护 - 添加自动秘境计划配置设置项支持文本输入 - 实现配置初始化异步加载功能 - 增加多复选框映射表获取函数注释文档 * feat(AutoPlanDomain): 添加域配置文件支持并优化初始化逻辑 - 新增 domainConfig 配置项用于加载 ./config/domain_config.json 文件 - 在 initDomainOrderList 函数中添加对 domainConfig 的空值检查 - 修复变量名错误:将 DomainRoundNum 统一改为 domainRoundNum - 添加秘境配置为空时的错误检查和提示 - 移除重复的秘境配置空值检查代码 - 优化代码结构和错误处理机制 * feat(config): 添加用户UID配置并优化秘境顺序列表初始化逻辑 - 在配置文件中添加用户UID字段用于个性化配置 - 将秘境顺序列表从数组改为Set以避免重复数据 - 实现基于UID的配置读取功能 - 添加配置文件解析逻辑支持多用户配置 - 修改返回逻辑将Set转换为数组确保兼容性 - 更新错误检查条件适配新的数据结构 * feat(config): 添加密钥验证功能 - 在配置中新增 key 字段用于存储密钥 - 实现 checkKey 函数用于验证密钥正确性 - 添加密钥错误时的异常处理机制 - 将 checkKey 函数导出供外部使用 - 添加初始化秘境配置的相关注释文档 * feat(config): 添加OCR识别UID功能 - 在配置文件中导入ocrUid工具函数 - 修复checkKey函数中参数赋值的格式问题 - 在initConfig函数中集成OCR识别获取用户UID - 将识别到的UID存储到配置对象中 - 在主程序中使用配置中的UID替代未定义变量 - 新增tool.js工具模块实现区域OCR识别功能 - 新增uid.js模块专门处理UID识别逻辑 - 实现了屏幕指定区域的文字识别功能 * feat(config): 添加UID配置加载开关功能 - 在配置域中新增load_uid_config开关字段 - 实现基于配置开关的OCR UID加载条件判断 - 确保配置缺失时的错误处理机制正常运行 - 保持原有配置验证逻辑完整性 - 添加对settings.load_uid_config的优先级支持 * feat(domain): 添加多加载方式支持 - 添加 LoadType 枚举定义 uid 和 input 加载类型 - 添加 LoadMap 映射表关联加载方式名称和类型 - 修改配置结构将 load_uid_config 替换为 loads 数组 - 实现多加载方式切换逻辑支持 UID 加载和输入加载 - 更新 initDomainOrderList 函数支持异步 UID 识别 - 在设置界面添加 auto_load 多选框配置加载模式 - 实现基于配置的动态加载策略选择机制 * fix(config): 解决配置密钥验证和加载列表处理问题 - 添加了配置密钥验证逻辑,确保密钥匹配 - 实现了密钥不匹配时的错误抛出机制 - 修复了自动加载列表的获取和映射处理 - 统一了代码格式和空格规范 * refactor(AutoPlanDomain): 重构秘境配置加载逻辑 - 将原来的初始化函数拆分为独立的加载模式处理函数 - 提取loadMode函数专门处理不同加载方式的配置 - 保留initDomainOrderList函数作为入口点调用加载模式 - 优化代码结构提高可读性和维护性 - 为关键变量和逻辑添加更详细的注释说明 * feat(AutoPlanDomain): 更新插件配置和密钥设置 - 在 manifest.json 中添加了新的 key 字段用于标识插件 - 重构 settings.json 配置项,将 domain_config 重命名为 key - 更新了配置项的标签说明,改为密钥配置提示 - 恢复了 domain_config 配置项到设置列表末尾 - 为新旧配置项提供了清晰的用户指引说明 * feat(bgi_tools): 添加BGI工具HTTP配置拉取推送功能 - 实现pullJsonConfig函数用于拉取指定uid的JSON配置数据 - 实现pushAllJsonConfig函数用于推送全部JSON配置数据 - 在配置中添加bgi_tools相关API接口地址配置项 - 新增bgi_tools加载类型支持并添加到加载映射表中 - 更新加载模式界面选项增加bgi_tools加载选项 - 修改加载顺序逻辑支持按优先级排序 - 修复自动域参数初始化时副本轮数传递问题 - 更新多选框组件标签文本增加http获取配置说明 - 添加OCR区域资源释放后的空行格式化调整 * feat(AutoPlanDomain): 添加bgi_tools配置同步功能 - 在bgi_tools.js中导出pullJsonConfig和pushAllJsonConfig方法 - 在main.js中导入并集成bgi_tools配置加载逻辑 - 新增LoadType.bgi_tools分支处理远程配置拉取 - 添加settings.json配置项用于设置bgi_tools的HTTP接口地址 - 实现从远程JSON配置文件读取自动战斗计划功能 * feat(bgi_tools): 添加配置推送开关和API配置功能 - 在配置文件中添加open对象用于控制推送功能 - 实现bgi_tools相关API配置的动态设置 - 将uid配置移动到合适位置避免重复执行 - 修复pullJsonConfig调用时的参数类型转换问题 - 在设置界面添加推送开关复选框和推送API输入框 - 集成OCR获取UID功能到配置初始化流程 * feat(AutoPlanDomain): 添加bgi_tools配置推送功能 - 在bgi_tools方式加载配置时添加开始拉取日志记录 - 添加bgi_tools配置推送功能,在main函数中根据开关判断是否推送配置 - 实现pushAllJsonConfig调用以推送本地域配置文件内容 * feat(AutoPlanDomain): 添加秘境配置按日期执行功能 - 新增 parseDay 辅助函数用于安全解析 day 字段 - 在配置加载过程中对 day 字段进行解析和验证 - 解析输入数据时新增 day 字段支持并调整索引位置 - 在秘境顺序对象中添加 day 执行日期字段 - 更新配置字符串格式说明文档 - 新增 getDayOfWeek 工具函数获取当前星期信息 - 添加星期几执行的逻辑判断功能 * feat(AutoPlanDomain): 添加按星期几过滤秘境功能 - 引入 getDayOfWeek 工具函数 - 在秘境顺序列表中添加按当前星期几过滤的逻辑 - 只有当配置了 day 字段且匹配当前星期几时才执行该秘境 - 未配置 day 字段的秘境仍会正常执行 * feat(AutoPlanDomain): 添加执行日期字段支持 - 在autoFight对象中新增day属性用于存储执行日期 - 为秘境战斗配置添加日期维度的规划能力 * docs(AutoPlanDomain): 添加自动秘境计划JS项目文档 - 创建项目README文件 - 添加版本密钥表格 - 记录版本历史信息 - 注明作者信息 * docs(AutoPlanDomain): 更新 README 文档添加 BetterGI 集成说明 - 添加了关于通过 BetterGI 本体实现体力计划的描述 - 补充了脚本功能说明,解释了与 BetterGI 的集成关系 * refactor(bgi_tools): 重构BGI工具配置管理功能 - 修改pullJsonConfig函数参数结构,移除默认值并优化HTTP请求处理逻辑 - 更新pushAllJsonConfig函数参数结构,修改数据传输格式为json对象包装 - 简化配置文件路径定义,移除冗余的相对路径前缀 - 移除配置文件中的大量硬编码领域数据,改为动态读取配置文件 - 在main.js中更新函数调用参数,传递正确的API端点地址 - 修复settings.json中的选项字段名从option改为options - 移除配置文件中的重复分隔注释行 - 添加getConfig导出函数用于外部获取配置对象 - 增加调试日志输出以支持配置加载过程追踪 * docs(AutoPlanDomain): 更新README文档完善功能说明和配置指南 - 添加功能说明章节,详细介绍脚本的核心能力 - 新增配置项说明表格,清晰展示各项参数含义 - 补充计划配置语法详细说明和字段详解 - 添加配置示例和使用建议 - 完善常见问题解答 - 优化版本历史记录格式 - 更新版本密钥表格样式 * docs(AutoPlanDomain): 更新 README 文档中的表格格式和配置语法说明 - 调整表格对齐格式,统一使用居中对齐样式 - 修正周几执行说明,移除多余描述 - 删除表格底部多余的示例注释 - 新增计划配置语法章节,添加 config/domain_config.json 配置示例 - 补充配置对象的字段说明文档 * docs(AutoPlanDomain): 更新 README 中的配置示例注释 - 修改了速刷任务的时间安排描述,从周一~周六改为每天 - 更新了注释说明以更准确反映配置的实际行为 * feat(AutoPlanDomain): 支持多日期执行配置 - 将单日期执行配置改为多日期数组配置,支持多个执行日期 - 修改数据结构从 day 字段改为 days 数组字段存储执行日期 - 更新日期解析逻辑,支持通过 "/" 分割符配置多个执行日期 - 调整过滤条件以匹配新的多日期数组格式 - 更新 README 文档说明多日期配置的使用方法 - 修改示例配置展示多日期功能的使用场景 * refactor(bgi_tools): 优化pullJsonConfig函数的参数传递方式 - 将uid参数从请求体改为URL查询参数 - 简化HTTP请求调用方式 - 移除不必要的JSON序列化操作 - 保留调试日志功能 * fix(AutoPlanDomain): 修复日期过滤逻辑并添加默认配置 - 修复了日期过滤条件,将 undefined 检查改为布尔值检查 - 添加了对空任务列表的检查,避免执行空任务 - 更新了主函数调用方式为立即执行的异步函数 - 添加了新的测试函数 test1 用于配置拉取测试 - 简化了日志输出中的对象字符串化处理 - 为 API 配置字段添加了默认本地地址值 * docs(config): 更新配置项标签描述 - 简化加载模式选项的说明文字 - 简化自动秘境计划配置的语法说明 - 统一配置项标签为更简洁的文档引用格式 * feat(game): 添加原粹树脂识别功能 - 新增 physical.js 工具模块,实现原粹树脂识别逻辑 - 在配置文件中添加用户体力相关配置项 - 集成体力识别流程到初始化过程 - 添加图像模板匹配资源管理 - 实现主界面导航和返回功能 - 增加错误处理和异常捕获机制 * fix(config): 修复配置密钥验证逻辑 - 更新 checkKey 函数以安全访问嵌套的 manifest.key 属性 - 移除重复的密钥匹配检查逻辑 - 添加对 config.info.manifest.key 的空值检查 - 统一使用 checkKey 函数进行密钥验证 - 简化 initConfig 函数中的密钥处理流程 * ``` fix(domain): 解决体力检测逻辑错误问题 - 移除了配置初始化中的体力OCR检测代码 - 在主执行函数中重新实现体力检测逻辑 - 添加体力不足时的错误提示功能 - 确保体力检测在每次执行前进行验证 ``` * chore(logging): 将bgi_tools配置日志级别从info调整为debug - 修改config.js中的日志级别设置 - 将bgi_tools配置信息的日志输出从info级别降级为debug级别 - 减少生产环境中的冗余日志输出 * docs(readme): 更新文档添加工具部署说明和配置界面截图 - 添加了 bettergi-scripts-tools 部署要求说明 - 新增登录界面截图展示 - 添加初始化配置界面截图 - 补充完整配置界面多张截图 - 更新文档结构优化用户体验说明 * feat(config): 添加 bgi_tools 授权 token 配置项 - 在配置表格中新增 bgi_tools_token 字段 - 支持 tokenName=tokenValue 语法格式 - 用于 bgi_tools 推送功能的身份验证 * fix(domain): 更新哲学和武器配置列表 - 将「纷争」的哲学替换为「诗文」的哲学 - 调整武器列表顺序,将神合秘烟的启示与贡祭炽心的荣膺位置互换 - 更新配置文件中的哲学和武器数据结构 * fix(AutoPlanDomain): 修复秘境自动战斗配置过滤逻辑 - 修复了pushAllJsonConfig函数调用中的参数格式问题 - 添加了对autoFight.DomainRoundNum大于0的条件过滤 - 确保只有设置了有效刷取轮数的配置才会参与排序和执行 - 避免无效配置导致的自动战斗异常执行 * fix(AutoPlanDomain): 修复体力检查逻辑并优化异步处理 - 修正体力不足判断条件,从 current >= min 改为 current < min - 添加throwError函数导入以支持错误抛出功能 - 修复initDomainOrderList调用缺少await导致的异步问题 - 添加日志输出显示处理后的秘境顺序列表 - 修复physical.js中工具函数导入路径错误 - 添加原神分辨率配置常量定义 * fix(AutoPlanDomain): 修复秘境任务执行中的代码错误和日志输出问题 - 修复了导入语句中的多余空格问题 - 添加了秘境任务开始执行的日志输出 - 为秘境参数的各个属性添加了详细的日志记录 - 在设置副本轮数时添加了异常处理和类型转换 - 修复了日志输出中的格式化字符串语法错误 - 修复了异步函数调用中的语法错误 * feat(auto-plan): 添加秘境退出界面处理功能 - 新增 outDomainUI 函数用于处理秘境退出界面 - 添加 isInOutDomainUI 函数检测是否在秘境退出界面 - 实现 findTextAndClick 通用文本查找点击功能 - 在 main.js 中关闭自动分解和原粹树脂榨干功能 - 修复代码格式化问题和拼写错误 - 添加退出秘境相关的图片资源映射配置 * feat(AutoPlanDomain): 添加体力类型优先级配置功能 - 实现物理体力类型的排序和优先级列表配置 - 添加原粹树脂和其他类型树脂的数量统计逻辑 - 修改体力不足判断条件以支持多种体力类型组合 - 配置秘境参数中的树脂使用优先级列表 - 注释掉当前暂不启用的优先级功能代码 * ``` refactor(AutoPlanDomain): 更新领域配置逻辑以支持开关控制 - 将物理领域配置从数量控制改为开关控制 - 添加open字段来控制领域是否启用 - 修改求和逻辑从count字段改为基于open状态计算 - 修复注释中的错别字和描述准确性 ``` * feat(AutoPlanDomain): 添加树脂类型配置和使用优先级功能 - 在配置文件中新增树脂类型名称数组,支持原粹树脂、浓缩树脂、须臾树脂、脆弱树脂 - 实现动态初始化物理树脂配置,从配置中读取树脂类型并生成默认配置 - 修改秘境执行逻辑,只对启用的树脂类型进行优先级排序 - 更新树脂使用优先级判断条件,启用树脂优先级配置功能 - 更新 README 文档,添加树脂使用顺序配置说明和示例 - 在计划配置语法中添加 physical 配置项说明 * fix(physical): 修复物理域过滤逻辑和求和计算问题 - 修改了物理域为空或无开启项目时的判断条件 - 优化了非原粹树脂项目的求和计算方式 - 修正了原粹树脂项目的求和计算方法 - 移除了冗余的 map 和 reduce 操作,改用 filter.length 计算 * fix(utils): 修正日期获取逻辑以适配4点刷新需求 - 在获取当前日期后减去4小时以适配4点刷新机制 - 确保日期计算准确性避免跨日问题 * feat(utils): 添加游戏刷新时间校准参数到getDayOfWeek函数 - 在getDayOfWeek函数中添加calibrationGameRefreshTime参数,默认值为true - 当calibrationGameRefreshTime为true时执行4小时时间校准逻辑 - 添加函数参数说明注释 - 保留原有的星期信息获取功能 * fix(AutoPlanDomain): 修复原粹树脂数量计算逻辑 - 将 find 方法改为 filter 方法以正确计算原粹树脂项目数量 - 确保只统计开启状态的原粹树脂项目 - 修复了因方法使用错误导致的数量统计不准确问题 * refactor(physical): 更新工具函数导入并调整操作延迟时间 - 从 ./tool 模块导入 throwError 函数 - 将原粹树脂识别操作的延迟时间从 1000ms 增加到 2000ms * fix(AutoPlanDomain): 解决原粹树脂识别和按钮点击问题 - 在物理值OCR识别前添加1秒延迟以提高准确性 - 将操作延迟时间从2000毫秒调整为1000毫秒 - 修正增加按钮的坐标和尺寸参数以匹配当前界面布局 - 注释掉衍生裁剪区域的释放操作避免潜在错误 * fix(AutoPlanDomain): 修复物理域过滤和周日选择值处理逻辑 - 修复了原粹树脂过滤条件中的多余空格问题 - 统一了过滤器链中的空格格式 - 添加了周日选择值的空值检查,避免未定义值的赋值 - 将周日选择值转换为字符串类型以确保数据一致性 - 优化了条件赋值逻辑,提高代码健壮性 * refactor(AutoPlanDomain): 更新树脂优先级列表设置方法 - 将直接赋值方式改为调用 SetResinPriorityList 方法 - 使用展开运算符合并树脂优先级列表参数 * refactor(AutoPlanDomain): 优化秘境顺序处理逻辑 - 将 getDayOfWeek 函数调用改为异步方式 - 修改日志级别从 info 到 debug,并添加调试信息 - 为日期过滤逻辑添加详细的日志输出 - 移除重复的排序操作并统一在数据处理最后进行排序 - 修正代码执行顺序以提高性能和可读性 * refactor(AutoPlanDomain): 移除不必要的过滤操作 - 移除 item.days 数组中 parseDay 映射后的空值过滤 - 简化数据处理逻辑,保持原始数组长度不变 - 提升代码简洁性,移除冗余的 filter 操作 * refactor(AutoPlanDomain): 更新执行顺序列表初始化函数命名 - 将 initDomainOrderList 函数重命名为 initRunOrderList - 更新相关注释描述,从"秘境顺序"改为"执行顺序" - 修改函数调用处的函数名引用 * refactor(AutoPlanDomain): 更新变量命名以匹配功能实际用途 - 将 autoFightOrderList 重命名为 autoRunOrderList 以准确反映其功能 - 相应更新过滤操作中的变量引用 - 保持原有业务逻辑不变 * refactor(AutoPlanDomain): 重命名自动执行函数名称 - 将 autoDomainList 函数重命名为 autoRunList - 更新函数调用以使用新的函数名称 - 保持原有功能逻辑不变 * refactor(AutoPlanDomain): 优化配置变量命名 - 将 domainConfig 重命名为 runConfig 以提高代码可读性 - 更新注释内容以准确描述配置获取功能 - 保持原有逻辑不变,仅调整变量命名规范 * refactor(AutoPlanDomain): 将域配置参数重命名为运行配置 - 将 config.js 中的 domainConfig 属性重命名为 runConfig - 将 main.js 中的函数参数 domainConfig 重命名为 runConfig - 更新函数内部对配置路径的引用,从 domainConfig 改为 runConfig - 修改注释中参数名称的描述,保持文档一致性 * refactor(config): 将配置对象中的domain属性重命名为run - 将config.js中的domain对象重命名为run对象 - 更新所有引用config.domain为config.run的地方 - 修改main.js中对配置对象的访问路径 - 确保配置加载逻辑保持一致性 * rename(config): 将 domain_config 重命名为 run_config - 修改配置文件路径从 config/domain_config.json 到 config/run_config.json - 更新代码中引用的配置项名称从 domain_config 到 run_config - 更新 README.md 文档中的配置项说明 - 更新 settings.json 中的配置字段名称 * feat(AutoPlanDomain): 添加计划配置类型字段支持 - 在表格中新增类型字段作为必填项,支持秘境/地脉类型选择 - 更新配置示例格式,在开头添加类型标识符 - 在JSON配置中添加runType字段,默认为秘境类型 - 调整表格结构并优化字段说明文档 - 为后续地脉功能扩展预留字段支持 * feat(AutoPlanDomain): 添加运行类型配置支持秘境和地脉 - 在配置中新增runTypes数组,支持'秘境'和'地脉'两种运行类型 - 修改解析逻辑以支持运行类型参数作为第一个参数 - 添加运行类型验证检查,确保输入类型在允许范围内 - 更新数组索引解析,调整各参数对应的数组位置 - 过滤条件中添加运行类型为'秘境'的条件限制 * fix(AutoPlanDomain): 修复自动运行配置中的队伍类型判断逻辑 - 将硬编码的"秘境"字符串替换为配置项config.user.runTypes[0] - 提高代码的可配置性和灵活性 - 避免因固定值导致的潜在错误 * docs(AutoPlan): 更新项目名称和功能描述 - 将项目名称从 AutoPlanDomain 重命名为 AutoPlan - 更新功能描述从"自动秘境计划JS"为"自动体力计划JS" - 移除关于BetterGI自动秘境的冗余说明 * fix(AutoPlan): 修正错误提示信息 - 将秘境配置错误提示修改为体力配置错误提示 - 确保错误信息与实际功能配置相匹配 * feat(AutoPlan): 添加运行类型判断逻辑 - 实现了根据runType字段控制autoDomain执行的功能 - 当runType为config.user.runTypes[0]时执行autoDomain - 当runType为config.user.runTypes[1]时预留地脉花功能 - 保持了原有的自动域名执行列表循环结构 * refactor(AutoPlan): 优化自动执行列表处理函数命名 - 将函数参数名从 autoDomainOrderList 更改为 autoRunOrderList - 更新函数注释描述以匹配新的通用功能 - 修改循环变量引用以使用新的参数名称 - 调整函数逻辑以支持更广泛的自动配置类型 * feat(AutoPlan): 添加复活重试机制和地脉花功能支持 - 实现复活重试逻辑,最多重试5次 - 只对秘境复活场景进行重试处理 - 添加地脉花任务的异步函数框架 - 完善自动执行列表中的地脉花调用 - 修复代码中的空格格式问题 * todo * fix(AutoPlan): 修复树脂耗尽模式和开放模式计数配置 - 将 isResinExhaustionMode 配置项从 false 修改为 true - 将 openModeCountMin 配置项从 false 修改为 true - 更新自动运行列表过滤条件以支持多个运行类型 - 添加对 autoLeyLineOutcrop.count 的可选链检查 - 扩展运行配置以同时处理 DomainRoundNum 和 LeyLineOutcrop 计数 * ``` feat(AutoPlan): 添加地脉异常处理和参数配置功能 - 注释掉树脂耗尽模式和开放模式计数最小值配置项 - 添加地脉暂不支持的日志提示并返回 - 创建AutoLeyLineOutcropParam对象并设置各项参数 - 重新启用树脂耗尽模式和开放模式计数最小值 - 实现复活重试机制,最多重试5次 - 仅在包含复活错误信息时进行重试 - 移除其他场景的重试逻辑 ``` * feat(AutoPlan): 添加秘境执行类型过滤功能 - 在自动战斗计划中添加配置过滤器,只执行指定类型的秘境 - 保留原有的日期过滤逻辑作为备用选项 - 通过配置项控制不同秘境类型的执行策略 * refactor(AutoPlan): 统一副本轮数参数命名规范 - 将 DomainRoundNum 属性名统一改为 domainRoundNum - 更新 main.js 中的参数引用以保持一致性 - 修改 README.md 文档中的参数名称说明 - 确保所有相关代码使用相同的参数命名风格 * refactor(AutoPlan): 重命名解析函数以提高语义清晰度 - 将 parseDay 函数重命名为 parseInteger 以更准确反映其功能 - 更新所有调用点以使用新的函数名称 - 保持原有解析逻辑不变,仅改进函数命名的准确性 * refactor(AutoPlan): 重构秘境配置解析逻辑并更新文档 - 重命名 autoFightOrderSet 为 autoOrderSet 以统一变量命名 - 重构 loadMode 函数中的参数解析逻辑,调整数组索引对应关系 - 重新组织秘境顺序对象的数据结构,支持地脉功能扩展 - 更新 README.md 中的配置参数表格和示例格式 - 调整配置参数的顺序映射关系,统一索引计算逻辑 - 修复 UID 配置加载的变量引用错误 - 优化代码缩进格式保持一致性 * refactor(AutoPlan): 优化自动规划配置解析逻辑 - 使用索引变量替代硬编码数组下标提高代码可读性 - 重构运行类型配置解析,支持更灵活的参数结构 - 完善地脉开采功能配置项,增加更多可配置参数 - 添加详细的注释说明各类配置参数的作用和格式 - 优化数组遍历逻辑,避免直接使用固定下标访问元素 * fix(auto-plan): 修复地脉功能布尔值解析和配置文档 - 修复 useFragileResin、useTransientResin、isGoToSynthesizer、useAdventurerHandbook、isNotification 字段的布尔值解析逻辑 - 修改 timeout 字段解析使用 parseInteger 函数 - 更新 README.md 中的地脉功能配置说明和参数详解表格 - 添加地脉类型的详细参数说明和配置示例 - 修复版本密钥表格格式问题 - 补充 JSON 配置格式示例和地脉功能相关配置项说明 * fix(AutoPlan): 解决地脉数据解析中的数组越界问题 - 在访问friendshipTeam字段前添加数组长度检查 - 在访问useFragileResin字段前添加数组长度检查 - 在访问useTransientResin字段前添加数组长度检查 - 在访问isGoToSynthesizer字段前添加数组长度检查 - 在访问useAdventurerHandbook字段前添加数组长度检查 - 在访问isNotification字段前添加数组长度检查 - 在访问timeout字段前添加数组长度检查 - 防止因数组索引超出范围导致的解析错误 * fix(AutoPlan): 修复副本配置解析中的数组越界问题 - 添加数组长度检查以防止访问超出边界的索引 - 为sundaySelectedValue设置默认值避免未定义错误 - 在解析域选择值前验证数组索引范围 - 保持原有逻辑功能的同时增强代码健壮性 * fix(AutoPlan): 修复队伍名称为空时的设置问题 - 添加了队伍名称非空判断条件 - 防止空字符串被设置为队伍名称 - 确保只有有效名称才会被赋值给autoFight.partyName * Revert "fix(AutoPlan): 修复队伍名称为空时的设置问题" This reverts commit2dc019f4cc. * refactor(AutoPlan): 优化秘境战斗配置对象初始化逻辑 - 将秘境信息对象autoFight的创建位置从错误处理分支后移至条件判断前 - 统一了对象属性的初始化值,sundaySelectedValue默认值设为1 - 删除了重复的对象声明代码,提高了代码可读性 - 保持了原有的功能逻辑不变,仅调整代码结构 * ``` refactor(AutoPlan): 注释地脉花功能配置对象 - 将 autoLeyLineOutcrop 配置对象注释掉以禁用该功能 - 保留原始配置代码便于后续功能启用 - 添加功能暂不支持的日志提示信息 ``` * fix(auto-plan): 修复UID配置读取问题 - 确保UID作为字符串类型进行配置映射查找 - 更新文档中UID字段的数据类型说明 * feat(auto-plan): 添加运行类型支持并优化名称和资源管理 - 在自动计划配置中添加runType字段用于指定运行类型 - 将插件名称从"自动秘境计划"更改为"自动体力计划" - 为图像识别添加调试日志输出功能 - 使用try-finally块确保图像捕获区域资源正确释放 - 优化退出界面逻辑,增加主界面检测和确认按钮点击处理 - 添加循环跳出条件避免无限重试 * feat(config): 添加复活重试次数配置选项 - 在配置文件中添加 retry_count 参数,默认值为 3 - 从设置界面读取重试次数并转换为整数值 - 将硬编码的重试次数 5 替换为配置值 - 在设置界面添加下拉选择框供用户自定义重试次数 - 添加复活重试功能的 UI 输出调用 * feat(bgi_tools): 添加全部国家配置推送功能 - 新增 pushAllCountryConfig 函数用于推送国家配置数据 - 配置文件中添加 httpPushAllCountryConfig API 地址配置项 - 添加 countryList.json 文件存储国家列表数据 - 在 main.js 中集成国家配置推送逻辑 - 设置文件中添加国家配置推送API设置选项 - 完善相关依赖注入和配置初始化流程 * fix(config): 更新 BGI 工具推送国家配置 API 默认地址 - 修改默认 API 地址从 /country/all 到 /country/json/all - 保持其他配置项不变 * docs(AutoPlan): 更新 README 中限时/周日参数说明 - 将限时/周日参数说明从具体的可用时间描述改为与本体一致的数值说明 - 保持参数选项 1 / 2 / 3 不变 - 简化了参数含义的表述方式 * docs(AutoPlan): 更新战斗超时配置说明 - 将战斗超时选项的默认值从"启用随便填个值"更正为"可选,默认 120" - 修正README文档中的配置参数描述准确性 * feat(AutoPlan): 实现自动运行列表的循环执行机制 - 添加while循环结构支持重复执行autoRunList - 集成体力检测逻辑防止体力耗尽时继续运行 - 添加循环控制条件避免无限执行 - 实现体力不足时的自动中断机制 - 优化运行流程确保按需执行和停止 * refactor(AutoPlan): 优化秘境自动化任务执行逻辑 - 将复活重试逻辑包装在try-finally块中确保退出秘境操作始终执行 - 修复多处代码格式问题包括空格和缩进统一 - 优化条件判断语句的格式和可读性 - 统一变量赋值语句的空格格式 - 改进字符串拼接和条件表达式的写法 - 优化while循环中的退出条件判断逻辑 * fix(AutoPlan): 移除体力检查逻辑 - 删除了配置中的体力值下限判断条件 - 移除了当用户当前体力低于最低要求时的中断逻辑 - 简化了循环执行的条件判断流程 * Revert "fix(AutoPlan): 移除体力检查逻辑" This reverts commit71126e94dc. * fix(AutoPlan): 修复数组越界检查逻辑 - 将条件判断从 index < arr.length 修改为 index <= arr.length-1 - 防止在解析配置数组时发生索引越界错误 - 确保所有可选配置项都能正确解析而不会抛出异常 * fix(AutoPlan): 修复自动运行循环的条件判断逻辑 - 修改了循环终止条件,将硬编码的 true 改为 false - 添加了体力值检查条件 config.user.physical.current < config.user.physical.min - 调整了体力不足时的 break 逻辑位置 - 移除了冗余的 else if 分支,简化代码结构 * fix(AutoPlan): 修复自动计划循环逻辑 - 修改了循环条件判断逻辑 - 更新了体力不足时的循环行为 - 添加了正确的循环控制注释 * refactor(AutoPlan): 调整体力检查逻辑结构 - 重构了循环中的条件判断结构 - 将体力检查逻辑嵌套到新的条件分支中 - 添加了体力耗尽的注释说明 - 优化了代码执行流程的控制逻辑 * chore(AutoPlan): 添加循环注释 - 在自动运行列表循环中添加了循环注释标记 * feat(plan): 添加循环体力计划功能 - 在配置文件中添加 loop_plan 选项,默认为 false - 将设置项 loop_plan 与配置项进行绑定 - 修改主循环逻辑,根据 loop_plan 配置决定是否启用循环体力计划 - 在设置界面添加循环体力计划的复选框选项 * feat(AutoPlan): 添加循环体力计划和复活重试功能 - 新增 loop_plan 配置项支持循环体力计划 - 新增 retry_count 配置项控制复活重试次数 - 更新战斗超时默认值显示格式 - 扩展自动加载模式的功能选项 * feat(settings): 更新循环体力计划配置项标签 - 在循环体力计划标签中添加体力耗尽自动终止说明 * 等本体地脉花 先上个草稿 (#2883) * feat(bettergi): 添加自动地脉花任务参数类型定义 - 定义 AutoLeyLineOutcropParam 类型 - 添加刷取次数、国家地区、地脉花类型等基本属性 - 实现树脂耗尽模式、好感队、战斗队伍等相关配置 - 添加自动合成浓缩树脂和使用各类树脂的功能选项 - 包含超时设置和通知功能配置 - 生成自动生成的别名声明 * feat(dispatcher): 添加自动地脉花任务功能 - 添加 runAutoLeyLineOutcropTask 方法用于运行自动地脉花任务 - 添加 RunAutoLeyLineOutcropTask 别名用于兼容性支持 - 提供自定义取消令牌参数支持 - 完善类型定义文件中的相关接口声明 (cherry picked from commitca0eb532c4) * refactor(AutoPlan): 移除地脉功能的调试代码 - 注释掉地脉暂不支持的日志输出逻辑 - 保留AutoLeyLineOutcropParam参数初始化代码 - 清理相关调试标记以优化代码结构 * fix(config): 修复配置文件中的数组格式问题 - 移除了 options 数组中多余的逗号,修正了 JSON 格式错误 - 确保配置文件符合标准 JSON 语法规范 * feat(AutoPlan): 更新秘境退出检测逻辑 - 将 isInOutDomainUI 函数改为异步函数,使用 OCR 文本识别替代模板匹配 - 添加 findText 函数用于在指定区域内查找文本内容,支持多次尝试和重试机制 - 修改 outDomainUI 函数逻辑,优化退出秘境流程和错误处理 - 增加最大尝试次数限制,避免无限循环等待 - 添加详细的 JSDoc 注释文档说明 findText 函数参数和返回值 * style(utils): 格式化代码并添加测试功能 - 修复 tool.js 中的代码格式问题,包括括号位置和空格调整 - 将 main.js 中的日志级别从 info 调整为 debug 以减少冗余输出 - 在 main.js 中添加 test2 测试函数用于初始化和退出秘境界面测试 - 在 outDomainUI 函数中添加主界面状态检测逻辑 - 优化退出秘境流程的条件判断,增加 inMainUI 状态变量 - 修复代码中的语法格式问题,统一代码风格 * ``` feat(AutoPlan): 添加退出秘境的UI处理功能 - 实现了退出秘境界面处理函数 - 添加了点击确认按钮的交互逻辑 - 集成了界面状态检测机制 - 完善了相关操作的日志记录 ``` * ``` fix(AutoPlan): 优化自动秘境执行流程并修复索引逻辑错误 - 添加秘境任务开始和完成的日志记录 - 将地脉功能的info日志改为warn日志并更新开始执行日志 - 在执行列表循环中添加1秒延迟避免过快执行 - 修复索引递增逻辑错误,移除重复的index++操作 - 统一数组长度比较中的空格式 - 优化循环计划的条件判断格式 - 添加测试函数的空行分隔 ``` * perf(AutoPlan): 优化秘境任务执行逻辑 - 在秘境任务开始时添加警告日志提示等待时间可能较长 - 保留体力消耗相关配置参数以支持后续功能扩展 * chore(version): 更新版本号到 0.57.1 - 将 bgi_version 从 0.55.0 更新到 0.57.1 * chore(version): 降级版本号从 0.57.1 到 0.57.0 - 将 manifest.json 中的 bgi_version 从 0.57.1 修改为 0.57.0 * fix(AutoPlan): 修复地脉异常处理逻辑中的无限循环问题 - 调整了 ESCAPE 键按压和睡眠操作的位置以避免重复执行 - 确保在主界面检测成功时能够正确跳出循环 - 保持原有的重试机制和错误处理逻辑不变 * docs(readme): 更新AutoPlan文档标题和描述 - 将标题从"AutoPlan"更改为"AutoPlan自动体力计划" - 更新脚本描述为中文说明 - 保留原有的功能介绍内容 * fix(AutoPlan): 修正地脉刷取配置格式 - 修正了地脉刷取配置的字段格式 - 统一了配置文件的语法结构 - 修正了注释格式以匹配新的配置规范 * fix(AutoPlan): 调整自动化脚本执行间隔和界面切换逻辑 - 将计划执行间隔从 1 秒增加到 3 秒 - 在界面切换后添加延迟以确保操作稳定 - 在地图打开操作前添加延迟等待 * fix(AutoPlan): 解决地脉任务参数解析问题 - 移除地脉任务的临时禁用代码 - 修复参数传递中的类型转换问题,使用 parseInteger 处理计数参数 - 更新 BGI 版本号从 0.57.0 到 0.57.2 - 添加参数对象的构造注释代码作为备选实现方案 * fix(AutoPlan): 添加延迟等待解决复活重试问题 - 在复活重试逻辑前添加1秒延迟 - 防止重试过程中的时间冲突问题 * chore(AutoPlan): 移除多余调试日志并添加关键参数输出 - 注释掉秘境名称、队伍名称、周日选择值和副本轮数的详细调试日志 - 添加秘境参数的JSON字符串化输出便于调试 - 添加地脉参数的JSON字符串化输出便于调试 * fix(AutoPlan): 修复冒险手册使用逻辑错误 - 和本体保持一致,反转 useAdventurerHandbook 参数值 - 修正了自动规划功能中的布尔参数取反逻辑 * Revert "chore(AutoPlan): 移除多余调试日志并添加关键参数输出" This reverts commita348a2cdbc. * fix(config): 更新bgi_tools拉取配置api默认地址 - 修正了bgi_tools拉取配置api的默认路径从/domain/json改为/json * fix(config): 修复配置项默认值处理逻辑 - 修改 loop_plan 配置项的默认值处理,避免 undefined 值覆盖原有配置 - 优化物理识别模块中的按钮匹配逻辑,增加空值检查防止程序崩溃 * fix(AutoPlan): 修复自动规划模块中的空指针和配置读取问题 - 修复了地脉任务参数构造中的字符串拼接问题 - 将配置文件读取的数据结构从Map改为Object以避免兼容性问题 - 添加了对配置列表长度和大小的双重检查以防止空指针异常 - 为数字解析函数添加了异常处理和默认值参数 - 修复了日志输出格式中的空格问题 * fix(AutoPlan): 修复计划解析中的空值处理问题 - 添加了对null和undefined值的安全检查 - 使用String()确保类型转换的一致性 - 在parseInt中指定基数参数以避免潜在问题 - 注释掉旧代码以便后续清理 - 提高了日期解析的健壮性 * fix(AutoPlan): 解决物理域数据访问中的空值错误 - 添加可选链操作符以防止访问未定义对象属性 - 修复过滤器中对空值的处理逻辑 - 确保数组映射操作的安全性避免运行时错误 * fix(AutoPlan): 修复数组元素空值检查逻辑 - 添加 null 检查以避免对空值进行 trim 操作 - 确保 useFragileResin 属性正确处理空值情况 - 确保 useTransientResin 属性正确处理空值情况 - 确保 isGoToSynthesizer 属性正确处理空值情况 - 确保 useAdventurerHandbook 属性正确处理空值情况 - 确保 isNotification 属性正确处理空值情况 - 在条件判断前添加额外的换行符以提高代码可读性 * refactor(utils): 优化代码逻辑和资源管理 - 修改 bgi_tools.js 中注释掉不必要的返回语句 - 格式化 config.js 中数组和条件判断的代码风格 - 重构 token 解析逻辑,使用更安全的分割方法 - 修复 physical.js 中方法名大小写错误 (Dispose -> dispose) - 优化 main.js 中循环逻辑,添加体力值重新获取功能 - 完善 uid.js 中数字提取逻辑,增加边界情况处理 * fix(autoPlan): 解决无效加载方式导致的错误处理问题 - 添加对无效加载方式的检查和错误抛出 - 防止当LoadMap中不存在对应项时程序崩溃 - 提供更清晰的错误信息帮助调试 * refactor(config): 优化重试次数配置解析逻辑 - 使用更安全的 Number.parseInt 和 Number.isFinite 替代 parseInt - 添加空值检查和默认值回退机制 - 移除旧的配置解析代码 - 更新工具函数文档注释类型定义 * refactor(AutoPlan): 更新体力识别函数返回值字段命名 - 将返回对象中的remainder字段重命名为current,提高语义清晰度 - 保持其他功能逻辑不变,仅调整字段名称以更好地反映其含义 * fix(config): 修正配置文件中的文本错误 - 修正了 domain.json 中 "长夜火的烈辉" 为正确的 "长夜燧火的烈辉" - 确保配置项的一致性和准确性
544 lines
24 KiB
JavaScript
544 lines
24 KiB
JavaScript
import {config, initConfig, initSettings, LoadType} from './config/config';
|
||
import {ocrUid} from './utils/uid';
|
||
import {getDayOfWeek, outDomainUI, throwError} from './utils/tool';
|
||
import {pullJsonConfig, pushAllCountryConfig, pushAllJsonConfig} from './utils/bgi_tools';
|
||
import {ocrPhysical} from "./utils/physical";
|
||
|
||
/**
|
||
* 自动执行秘境任务的异步函数
|
||
* @param {Object} autoFight - 包含秘境自动配置参数的对象
|
||
* @returns {Promise<void>} - 执行完成后返回的Promise
|
||
*/
|
||
async function autoDomain(autoFight) {
|
||
log.info(`{0}`, "开始执行秘境任务")
|
||
log.warn(`{0}`, "非体力耗尽情况下(受本体限制),等待退出秘境时间较长")
|
||
//定死做预留冗余 先不实现 不能指定次数 只能指定启用
|
||
let physical_domain = autoFight?.physical
|
||
// || [
|
||
// {order: 0, name: "原粹树脂", count: 1, open: true},
|
||
// {order: 1, name: "浓缩树脂", count: 0, open: false},
|
||
// {order: 2, name: "须臾树脂", count: 0, open: false},
|
||
// {order: 3, name: "脆弱树脂", count: 0, open: false},
|
||
// ]
|
||
|
||
if ((!physical_domain) || physical_domain.filter(item => item?.open).length === 0) {
|
||
const names = config.user.physical.names;
|
||
physical_domain = []
|
||
names.forEach((name, index) => {
|
||
physical_domain.push({order: index, name: name, open: index === 0})
|
||
})
|
||
}
|
||
|
||
physical_domain.sort((a, b) => a.order - b.order)
|
||
// 不包含原粹树脂的和
|
||
const noOriginalSum = physical_domain.filter(item => item?.name.trim() !== "原粹树脂")
|
||
.filter(item => item?.open).length;//求和
|
||
// 只包含原粹树脂的和
|
||
const originalSum = physical_domain.filter(item => item?.name?.trim() === "原粹树脂")
|
||
.filter(item => item?.open).length;
|
||
const resinPriorityList = physical_domain.filter(item => item?.open).map(item => item?.name?.trim())
|
||
// /** 树脂使用优先级列表 */
|
||
// resinPriorityList: string[];
|
||
// /** 使用原粹树脂次数 */
|
||
// originalResinUseCount: number;
|
||
// /** 使用浓缩树脂次数 */
|
||
// condensedResinUseCount: number;
|
||
// /** 使用须臾树脂次数 */
|
||
// transientResinUseCount: number;
|
||
// /** 使用脆弱树脂次数 */
|
||
// fragileResinUseCount: number;
|
||
await sleep(1000)
|
||
//流程->返回主页 打开地图 返回主页
|
||
const physicalOcr = await ocrPhysical(true, true)
|
||
config.user.physical.current = physicalOcr.current
|
||
config.user.physical.min = physicalOcr.min
|
||
const physical = config.user.physical
|
||
if (physical.current < physical.min && noOriginalSum <= 0 && originalSum > 0) {
|
||
throwError(`体力不足,当前体力${physical.current},最低体力${physical.min},请手动补充体力后重试`)
|
||
}
|
||
// 创建秘境参数对象,初始化值为0
|
||
let domainParam = new AutoDomainParam();
|
||
//关闭分解
|
||
domainParam.autoArtifactSalvage = false
|
||
//关闭榨干原粹树脂
|
||
domainParam.specifyResinUse = true
|
||
//配置树脂使用优先级
|
||
if (resinPriorityList.length > 0) {
|
||
domainParam.SetResinPriorityList(...resinPriorityList)
|
||
}
|
||
// log.debug(`开始执行秘境任务`)
|
||
//秘境名称
|
||
domainParam.DomainName = autoFight.domainName || domainParam.DomainName;
|
||
log.debug(`秘境名称:${domainParam.DomainName}`)
|
||
|
||
//队伍名称
|
||
domainParam.PartyName = autoFight.partyName || domainParam.PartyName;
|
||
log.debug(`队伍名称:${domainParam.PartyName}`)
|
||
|
||
if (autoFight.sundaySelectedValue) {
|
||
//周日|限时选择的值
|
||
domainParam.SundaySelectedValue = "" + (autoFight.sundaySelectedValue || domainParam.SundaySelectedValue);
|
||
}
|
||
log.debug(`周日|限时选择的值:${domainParam.SundaySelectedValue}`)
|
||
//副本轮数
|
||
try {
|
||
domainParam.DomainRoundNum = parseInt((autoFight.domainRoundNum || domainParam.DomainRoundNum) + "");
|
||
} catch (e) {
|
||
log.debug(`副本轮数:${autoFight.domainRoundNum}`)
|
||
throwError(e.message)
|
||
}
|
||
log.debug(`副本轮数:${domainParam.DomainRoundNum}`)
|
||
try {
|
||
// 复活重试
|
||
for (let i = 0; i < config.run.retry_count; i++) {
|
||
try {
|
||
await dispatcher.RunAutoDomainTask(domainParam);
|
||
// 其他场景不重试
|
||
break;
|
||
} catch (e) {
|
||
const errorMessage = e.message
|
||
// 只有选择了秘境的时候才会重试
|
||
if (errorMessage.includes("复活") && domainParam.DomainName) {
|
||
continue;
|
||
}
|
||
throw e;
|
||
}
|
||
}
|
||
} finally {
|
||
log.info(`{0}`, "执行完成")
|
||
// 退出秘境
|
||
await outDomainUI()
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 自动执行地脉花任务的异步函数
|
||
* @param autoLeyLineOutcrop
|
||
* @returns {Promise<void>}
|
||
*/
|
||
async function autoLeyLineOutcrop(autoLeyLineOutcrop) {
|
||
//todo :地脉花
|
||
// autoLeyLineOutcrop = {
|
||
// "count": 0,
|
||
// "country": "country_cb3d792be8db",
|
||
// "leyLineOutcropType": "leyLineOutcropType_f259b77fabcb",
|
||
// // "isResinExhaustionMode": true,
|
||
// // "openModeCountMin": true,
|
||
// "useAdventurerHandbook": false,
|
||
// "friendshipTeam": "friendshipTeam_7122cab56b16",
|
||
// "team": "team_d0798ca3aa27",
|
||
// "timeout": 0,
|
||
// "isGoToSynthesizer": false,
|
||
// "useFragileResin": false,
|
||
// "useTransientResin": false,
|
||
// "isNotification": false
|
||
// }
|
||
|
||
|
||
log.info(`{0}`, "开始执行地脉任务")
|
||
// if (true) {
|
||
// log.warn("地脉 暂不支持")
|
||
// return
|
||
// }
|
||
let param = new AutoLeyLineOutcropParam(parseInteger(autoLeyLineOutcrop.count + ""), autoLeyLineOutcrop.country, autoLeyLineOutcrop.leyLineOutcropType);
|
||
// let param = new AutoLeyLineOutcropParam();
|
||
// param.count = parseInteger(autoLeyLineOutcrop.count+"");
|
||
// param.country = autoLeyLineOutcrop.country;
|
||
// param.leyLineOutcropType = autoLeyLineOutcrop.leyLineOutcropType;
|
||
//和本体保持一致
|
||
param.useAdventurerHandbook = !autoLeyLineOutcrop.useAdventurerHandbook;
|
||
param.friendshipTeam = autoLeyLineOutcrop.friendshipTeam;
|
||
param.team = autoLeyLineOutcrop.team;
|
||
param.timeout = autoLeyLineOutcrop.timeout;
|
||
param.isGoToSynthesizer = autoLeyLineOutcrop.isGoToSynthesizer;
|
||
param.useFragileResin = autoLeyLineOutcrop.useFragileResin;
|
||
param.useTransientResin = autoLeyLineOutcrop.useTransientResin;
|
||
param.isNotification = autoLeyLineOutcrop.isNotification;
|
||
|
||
param.isResinExhaustionMode = true;
|
||
param.openModeCountMin = true;
|
||
await sleep(1000)
|
||
// 复活重试
|
||
for (let i = 0; i < config.run.retry_count; i++) {
|
||
try {
|
||
await dispatcher.RunAutoLeyLineOutcropTask(param);
|
||
// 其他场景不重试
|
||
break;
|
||
} catch (e) {
|
||
const errorMessage = e.message
|
||
// 只有选择了秘境的时候才会重试
|
||
if (errorMessage.includes("复活")) {
|
||
continue;
|
||
}
|
||
throw e;
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 自动执行列表处理函数
|
||
* @param {Array} autoRunOrderList - 包含自动配置的数组
|
||
*/
|
||
async function autoRunList(autoRunOrderList) {
|
||
//计划执行
|
||
for (const item of autoRunOrderList) {
|
||
await sleep(3000)
|
||
if (item.runType === config.user.runTypes[0]) {
|
||
await autoDomain(item.autoFight);
|
||
} else if (item.runType === config.user.runTypes[1]) {
|
||
await autoLeyLineOutcrop(item.autoLeyLineOutcrop);
|
||
}
|
||
}
|
||
}
|
||
|
||
// 辅助函数:安全地解析 day 字段
|
||
function parseInteger(day) {
|
||
if (day == null || String(day).trim() === "") {
|
||
return undefined; // 空值或无效值返回 undefined
|
||
}
|
||
const parsedDay = parseInt(String(day).trim(), 10);
|
||
return isNaN(parsedDay) ? undefined : parsedDay; // 非法数字返回 undefined
|
||
}
|
||
|
||
/**
|
||
* 根据不同的加载方式加载秘境配置
|
||
* @param {string} Load - 加载方式类型,如uid或input
|
||
* @param {Set} autoOrderSet - 用于存储秘境顺序的Set集合
|
||
* @param {string} runConfig - 输入的配置字符串,仅在Load为input时使用
|
||
*/
|
||
async function loadMode(Load, autoOrderSet, runConfig) {
|
||
switch (Load) {
|
||
case LoadType.input:
|
||
// 通过输入字符串方式加载配置
|
||
if (runConfig) {
|
||
// 处理输入字符串:去除首尾空格,将中文逗号替换为英文逗号,然后按逗号分割
|
||
runConfig.trim().replaceAll(',', ',').split(",").forEach(
|
||
item => {
|
||
// 将当前项按"|"分割成数组
|
||
let arr = item.split("|")
|
||
// 类型|执行日期|执行顺序
|
||
let index = 0
|
||
let runType = arr[index]; // 解析运行类型
|
||
index++
|
||
const rawDays = arr[index];
|
||
let days = (rawDays != null && String(rawDays).trim() !== "")
|
||
? String(rawDays).split('/').map(d => parseInt(d.trim(), 10)).filter(d => !isNaN(d))
|
||
: [];
|
||
// let days = arr[index].trim() !== ""
|
||
// ? arr[index].split('/').map(d => parseInt(d.trim())).filter(d => !isNaN(d))
|
||
// : [];
|
||
index++
|
||
// 解析顺序值,处理可能的无效值
|
||
let order = (() => {
|
||
const rawOrder = arr[index]; // 获取原始值
|
||
if (rawOrder == null || String(rawOrder).trim() === "") {
|
||
return 0; // 若为空或无效值,默认返回 0
|
||
}
|
||
const parsedOrder = parseInt(String(rawOrder).trim(), 10); // 转换为整数
|
||
return isNaN(parsedOrder) ? 0 : parsedOrder; // 若转换失败,返回默认值 0
|
||
})();
|
||
index++
|
||
|
||
// 创建秘境顺序对象
|
||
let autoOrder = {
|
||
order: order, // 顺序值
|
||
// day: day,// 执行日期
|
||
runType: runType, // 运行类型
|
||
days: days, // 执行日期(数组)
|
||
autoFight: undefined, // 秘境信息对象
|
||
autoLeyLineOutcrop: undefined // 地脉信息对象
|
||
}
|
||
|
||
|
||
if (!config.user.runTypes.includes(runType)) {
|
||
throwError(`运行类型${runType}输入错误`)
|
||
} else if (config.user.runTypes[0] === runType) {
|
||
// 创建秘境信息对象
|
||
let autoFight = {
|
||
domainName: undefined,//秘境名称
|
||
partyName: undefined,//队伍名称
|
||
sundaySelectedValue: 1,//周日|限时选择的值
|
||
domainRoundNum: 0,//副本轮数
|
||
}
|
||
|
||
//"|队伍名称|秘境名称/刷取物品名称|刷几轮|限时/周日,..."
|
||
let partyName = arr[index]; // 解析队伍名称
|
||
index++
|
||
let domainName = arr[index]; // 解析秘境名称
|
||
index++
|
||
let domainRoundNum = arr[index]; // 解析副本轮数
|
||
index++
|
||
let sundaySelectedValue = "1"
|
||
if (index <= arr.length - 1)
|
||
sundaySelectedValue = arr[index]; // 解析周日|限时选择的值
|
||
|
||
// 检查秘境名称是否有效
|
||
if (!config.domainNames.has(domainName)) {
|
||
//秘境名称没有记录 查询是否是物品名称
|
||
if (config.itemNames.has(domainName)) {
|
||
const domainNameTemp = config.domainItemsMap.get(domainName);
|
||
if (!domainNameTemp) {
|
||
throw new Error(`${domainName} 输入错误`);
|
||
}
|
||
if (index <= arr.length - 1) {
|
||
const domainSelectedValue = parseInt(config.domainOrderMap.get(domainName) + "");
|
||
sundaySelectedValue = domainSelectedValue
|
||
}
|
||
domainName = domainNameTemp
|
||
} else {
|
||
throw new Error(`${domainName} 输入错误`);
|
||
}
|
||
}
|
||
|
||
// 设置秘境信息的各个属性
|
||
autoFight.partyName = partyName // 队伍名称
|
||
autoFight.domainName = domainName // 秘境名称
|
||
autoFight.domainRoundNum = domainRoundNum // 副本轮数
|
||
autoFight.sundaySelectedValue = sundaySelectedValue // 周日|限时选择的值
|
||
|
||
autoOrder.autoFight = autoFight // 将秘境信息对象添加到秘境顺序对象中
|
||
} else if (config.user.runTypes[1] === runType) {
|
||
//"|队伍名称|国家|刷几轮|花类型|好感队|是否使用脆弱树脂|是否使用须臾树脂|是否前往合成台合成浓缩树脂|是否使用冒险之证|发送详细通知|战斗超时时间,..."
|
||
let autoLeyLineOutcrop = {
|
||
count: 0, // 刷几次(0=自动/无限)
|
||
country: undefined, // 国家地区
|
||
leyLineOutcropType: undefined, // 需映射为经验/摩拉
|
||
useAdventurerHandbook: false, // 是否使用冒险之证
|
||
friendshipTeam: "", // 好感队伍ID
|
||
team: "", // 主队伍ID
|
||
timeout: 120, // 超时时间(秒)
|
||
isGoToSynthesizer: false, // 是否前往合成台
|
||
useFragileResin: false, // 使用脆弱树脂
|
||
useTransientResin: false, // 使用须臾树脂(须臾=Transient)
|
||
isNotification: false // 是否通知
|
||
}
|
||
autoLeyLineOutcrop.team = arr[index]
|
||
index++
|
||
autoLeyLineOutcrop.country = arr[index]
|
||
index++
|
||
autoLeyLineOutcrop.count = arr[index]
|
||
index++
|
||
autoLeyLineOutcrop.leyLineOutcropType = arr[index]
|
||
index++
|
||
if (index <= arr.length - 1)
|
||
autoLeyLineOutcrop.friendshipTeam = arr[index]
|
||
index++
|
||
|
||
if (index <= arr.length - 1)
|
||
autoLeyLineOutcrop.useFragileResin = (arr[index] != null && arr[index].trim() !== "")
|
||
index++
|
||
if (index <= arr.length - 1)
|
||
autoLeyLineOutcrop.useTransientResin = (arr[index] != null && arr[index].trim() !== "")
|
||
index++
|
||
if (index <= arr.length - 1)
|
||
autoLeyLineOutcrop.isGoToSynthesizer = (arr[index] != null && arr[index].trim() !== "")
|
||
index++
|
||
if (index <= arr.length - 1)
|
||
autoLeyLineOutcrop.useAdventurerHandbook = (arr[index] != null && arr[index].trim() !== "")
|
||
index++
|
||
if (index <= arr.length - 1)
|
||
autoLeyLineOutcrop.isNotification = (arr[index] != null && arr[index].trim() !== "")
|
||
|
||
index++
|
||
if (index <= arr.length - 1)
|
||
autoLeyLineOutcrop.timeout = parseInteger(arr[index])
|
||
|
||
autoOrder.autoLeyLineOutcrop = autoLeyLineOutcrop // 将地脉信息对象添加到顺序对象中
|
||
}
|
||
|
||
// 将秘境顺序对象添加到列表中
|
||
autoOrderSet.add(autoOrder)
|
||
}
|
||
)
|
||
}
|
||
break
|
||
|
||
case LoadType.uid:
|
||
|
||
// 通过UID方式加载配置
|
||
const uid = config.user.uid || (await ocrUid()) // 获取用户UID,如果未配置则通过OCR识别获取
|
||
// const configAutoFightOrderMap = JSON.parse(file.readTextSync(config.path.runConfig)) || new Map() // 读取本地配置文件并转换为Map对象
|
||
// const uidConfigList = configAutoFightOrderMap.get(uid + "") || []; // 获取当前UID对应的配置列表
|
||
|
||
const configAutoFightOrderMap = JSON.parse(file.readTextSync(config.path.runConfig)) || {} // 读取本地配置文件
|
||
const uidConfigList = configAutoFightOrderMap[uid + ""] || []; // 获取当前UID对应的配置列表
|
||
if (uidConfigList?.length > 0) {
|
||
// 如果配置列表不为空,遍历并添加到结果集合中
|
||
uidConfigList.forEach(item => {
|
||
// 将秘境顺序对象添加到列表中
|
||
// 主逻辑优化
|
||
// if (item.day !== undefined) {
|
||
// item.day = parseInteger(item.day);
|
||
// }
|
||
if (item.days && item.days.length > 0) {
|
||
item.days = item.days.map(day => parseInteger(day))
|
||
// item.day = parseInteger(item.day);
|
||
}
|
||
autoOrderSet.add(item)
|
||
})
|
||
}
|
||
break
|
||
case LoadType.bgi_tools:
|
||
// 通过bgi_tools方式加载配置
|
||
log.info(`开始拉取bgi_tools配置`)
|
||
const uidConfigListBgiTools = await pullJsonConfig(config.user.uid + '', config.bgi_tools.api.httpPullJsonConfig) || []
|
||
if (uidConfigListBgiTools?.length > 0) {
|
||
// 如果配置列表不为空,遍历并添加到结果集合中
|
||
uidConfigListBgiTools.forEach(item => {
|
||
// 将秘境顺序对象添加到列表中
|
||
// 主逻辑优化
|
||
if (item.days && item.days.length > 0) {
|
||
item.days = item.days.map(day => parseInteger(day))
|
||
// item.day = parseInteger(item.day);
|
||
}
|
||
autoOrderSet.add(item)
|
||
})
|
||
}
|
||
break
|
||
default:
|
||
throw new Error("请先配置加载方式");
|
||
// break;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 初始化执行顺序列表
|
||
* @param {string} domainConfig - 输入的字符串,包含秘境顺序信息
|
||
* @returns {Array} 返回处理后的秘境顺序列表
|
||
*/
|
||
async function initRunOrderList(domainConfig) {
|
||
const autoFightOrderSet = new Set() // 存储秘境顺序列表的数组
|
||
/* let te = {
|
||
order: 1, // 顺序值
|
||
day: 0,// 执行日期
|
||
autoFight: {
|
||
domainName: undefined,//秘境名称
|
||
partyName: undefined,//队伍名称
|
||
sundaySelectedValue: undefined,//周日|限时选择的值
|
||
domainRoundNum: undefined,//副本轮数
|
||
} // 秘境信息对象
|
||
}*/
|
||
// let Load = LoadType.uid
|
||
|
||
for (const Load of config.run.loads) {
|
||
await loadMode(Load.load, autoFightOrderSet, domainConfig);
|
||
}
|
||
|
||
// 检查是否已配置秘境
|
||
if (!autoFightOrderSet || autoFightOrderSet.size <= 0) {
|
||
throw new Error("请先配置体力配置");
|
||
}
|
||
// 返回处理后的秘境顺序列表
|
||
let from = Array.from(autoFightOrderSet);
|
||
let dayOfWeek = await getDayOfWeek();
|
||
log.debug(`old-from:{0}`, JSON.stringify(from))
|
||
from = from
|
||
//过滤掉不执行的秘境
|
||
.filter(item => config.user.runTypes.includes(item.runType))
|
||
.filter(item => {
|
||
// if (item.day) {
|
||
// return item.day === dayOfWeek.day
|
||
// }
|
||
log.debug(`[{1}]item.days.length:{0}`, dayOfWeek.day, item?.days?.length || 0)
|
||
if (item.days && item.days.length > 0) {
|
||
const includes = item.days.includes(dayOfWeek.day);
|
||
log.debug(`[{1}]item.days:{0}`, dayOfWeek.day, JSON.stringify(item.days))
|
||
return includes;
|
||
}
|
||
return true
|
||
})
|
||
from.sort((a, b) => b.order - a.order)
|
||
log.debug(`from:{0}`, JSON.stringify(from))
|
||
return from;
|
||
}
|
||
|
||
/**
|
||
* 初始化函数
|
||
* 该函数用于执行初始化操作,使用async/await处理异步操作
|
||
*/
|
||
async function init() {
|
||
// 调用initConfig函数并等待其完成
|
||
// 这是一个异步初始化配置的步骤
|
||
await initSettings()
|
||
await initConfig();
|
||
}
|
||
|
||
/**
|
||
* 主函数,用于执行秘境自动刷取任务
|
||
* @async
|
||
*/
|
||
async function main() {
|
||
// 初始化配置
|
||
await init();
|
||
if (config.bgi_tools.open.open_push) {
|
||
log.info(`开始推送bgi_tools配置`)
|
||
await pushAllJsonConfig(JSON.parse(file.readTextSync(config.path.domain)), config.bgi_tools.api.httpPushAllJsonConfig, config.bgi_tools.token)
|
||
await pushAllCountryConfig(JSON.parse(file.readTextSync(config.path.countryList)), config.bgi_tools.api.httpPushAllCountryConfig, config.bgi_tools.token)
|
||
}
|
||
// 获取配置
|
||
let runConfig = config.run.config;
|
||
//"队伍名称|秘境名称/刷取物品名称|刷几轮|限时/周日|周几执行(0-6)不填默认执行|执行顺序,..."
|
||
const autoRunOrderList = await initRunOrderList(runConfig);
|
||
const list = autoRunOrderList.filter(item =>
|
||
(item.runType === config.user.runTypes[0] && item?.autoFight.domainRoundNum > 0)
|
||
|| (item.runType === config.user.runTypes[1] && item?.autoLeyLineOutcrop.count > 0)
|
||
)
|
||
if (list?.length > 0) {
|
||
//循环跑
|
||
while (true) {
|
||
await autoRunList(list);
|
||
if (config.run.loop_plan) {
|
||
// 重新获取当前体力值
|
||
const physicalOcr = await ocrPhysical(true, true);
|
||
config.user.physical.current = physicalOcr.current;
|
||
//循环
|
||
if (config.user.physical.current < config.user.physical.min) {
|
||
//体力耗尽
|
||
break
|
||
}
|
||
} else {
|
||
//不循环
|
||
break
|
||
}
|
||
|
||
}
|
||
} else {
|
||
log.info(`本日无计划`)
|
||
}
|
||
|
||
}
|
||
|
||
(async function () {
|
||
// await test()
|
||
// await test1()
|
||
// await test2()
|
||
await main()
|
||
})()
|
||
|
||
async function test() {
|
||
await init();
|
||
const text = file.readTextSync(config.path.domain);
|
||
// log.info("settings:{1}",config.info.settings)
|
||
// log.info("text:{1}",text)
|
||
const list = JSON.parse(text);
|
||
// log.info("list:{1}",list)
|
||
log.info("httpPullJsonConfig:{1}", config.bgi_tools.api.httpPushAllJsonConfig)
|
||
log.info("|test==>config.bgi_tools:{1}", JSON.stringify(config.bgi_tools))
|
||
await pushAllJsonConfig(list, config.bgi_tools.api.httpPushAllJsonConfig)
|
||
}
|
||
|
||
|
||
async function test1() {
|
||
await init();
|
||
// log.info("text:{1}",text)
|
||
// log.info("list:{1}",list)
|
||
log.info("httpPullJsonConfig:{1}", config.bgi_tools.api.httpPullJsonConfig)
|
||
log.info("|test==>config.bgi_tools:{1}", JSON.stringify(config.bgi_tools))
|
||
const list = await pullJsonConfig(config.user.uid, config.bgi_tools.api.httpPullJsonConfig)
|
||
log.info("list:{1}", JSON.stringify(list))
|
||
}
|
||
|
||
async function test2() {
|
||
await init();
|
||
await outDomainUI();
|
||
} |