mirror of
https://github.com/babalae/bettergi-scripts-list.git
synced 2026-03-30 05:49:51 +08:00
refactor(AutoPlan): 重构秘境配置解析逻辑并更新文档
- 重命名 autoFightOrderSet 为 autoOrderSet 以统一变量命名 - 重构 loadMode 函数中的参数解析逻辑,调整数组索引对应关系 - 重新组织秘境顺序对象的数据结构,支持地脉功能扩展 - 更新 README.md 中的配置参数表格和示例格式 - 调整配置参数的顺序映射关系,统一索引计算逻辑 - 修复 UID 配置加载的变量引用错误 - 优化代码缩进格式保持一致性
This commit is contained in:
@@ -45,21 +45,21 @@
|
||||
| 位置 | 字段 | 是否必填 | 说明 | 示例 |
|
||||
|:--:|:-----------:|:---:|:--------------------------------------:|:-----------------------:|
|
||||
| 1 | 类型 | **必填** | 秘境/地脉(后期支持地脉冗余字段) | 秘境/地脉 |
|
||||
| |||***`秘境类型后几位参数说明`***
|
||||
| 2 | 队伍名称 | 可选 | BetterGI 中已保存的队伍名称(用于切换队伍) | 速刷 / 雷国 / 国家队 |
|
||||
| 3 | 秘境名称/刷取物品名称 | **必填** | 与 BetterGI 自动秘境识别的名称保持一致 | 苍白的遗荣 / 炽烈的炎之魔女 / 辰砂往生录 |
|
||||
| 4 | 刷几轮 | 可选 | 整数,执行几轮(每轮 = 1次完整秘境) | 3 / 5 / 10 |
|
||||
| 5 | 限时/周日 | 可选 | 1=周一~周六可用、2=周日可用、3=仅周日、留空=不限制 | 1 / 2 / 3 |
|
||||
| 6 | 周几执行(0-6) | 可选 | 0=周日,1=周一,...,6=周六;可多选按`/`分割,不填=每天都可执行 | 0/3,3 |
|
||||
| 7 | 树脂使用顺序 | 可选 | 原粹树脂,浓缩树脂,须臾树脂,脆弱树脂`/`分割,不填=默认执行 原粹树脂 | 原粹树脂/浓缩树脂,须臾树脂 |
|
||||
| 8 | 执行顺序 | 可选 | 数字越大越优先执行(同时间点先跑优先级高的) | 9 / 5 / 1 |
|
||||
| 2 | 周几执行(0-6) | 可选 | 0=周日,1=周一,...,6=周六;可多选按`/`分割,不填=每天都可执行 | 0/3,3 |
|
||||
| 3 | 执行顺序 | 可选 | 数字越大越优先执行(同时间点先跑优先级高的) | 9 / 5 / 1 |
|
||||
| |||***`秘境类型后几位参数说明`***
|
||||
| 4 | 队伍名称 | 可选 | BetterGI 中已保存的队伍名称(用于切换队伍) | 速刷 / 雷国 / 国家队 |
|
||||
| 5 | 秘境名称/刷取物品名称 | **必填** | 与 BetterGI 自动秘境识别的名称保持一致 | 苍白的遗荣 / 炽烈的炎之魔女 / 辰砂往生录 |
|
||||
| 6 | 刷几轮 | 可选 | 整数,执行几轮(每轮 = 1次完整秘境) | 3 / 5 / 10 |
|
||||
| 7 | 限时/周日 | 可选 | 1=周一~周六可用、2=周日可用、3=仅周日、留空=不限制 | 1 / 2 / 3 |
|
||||
| 8 | 树脂使用顺序 | 可选 | 原粹树脂,浓缩树脂,须臾树脂,脆弱树脂`/`分割,不填=默认执行 原粹树脂 | 原粹树脂/浓缩树脂,须臾树脂 |
|
||||
|
||||
**配置示例**
|
||||
|
||||
```
|
||||
秘境|速刷|苍白的遗荣|3|1|0/3||9, # 优先级最高,周日,周三刷3轮遗荣
|
||||
秘境|国家队|炽烈的炎之魔女|5||||5, # 优先级次之,每天刷5轮魔女
|
||||
秘境|雷国|无想之刃狭间|2|2|0|浓缩树脂/原粹树脂|2 # 只在周日刷,优先使用浓缩树脂后使用原粹树脂,优先级较低
|
||||
秘境|0/3|9|速刷|苍白的遗荣|3|1, # 优先级最高,周日,周三刷3轮遗荣
|
||||
秘境||5|国家队|炽烈的炎之魔女|5||, # 优先级次之,每天刷5轮魔女
|
||||
秘境|0|2|雷国|无想之刃狭间|2|2|浓缩树脂/原粹树脂 # 只在周日刷,优先使用浓缩树脂后使用原粹树脂,优先级较低
|
||||
```
|
||||
(注意:最后一条也可以不带逗号)
|
||||
### 计划配置语法(config/run_config.json 配置)
|
||||
|
||||
@@ -111,23 +111,23 @@ async function autoDomain(autoFight) {
|
||||
*/
|
||||
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
|
||||
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
|
||||
}
|
||||
|
||||
if (true){
|
||||
if (true) {
|
||||
log.info("地脉 暂不支持")
|
||||
return
|
||||
}
|
||||
@@ -188,11 +188,98 @@ function parseInteger(day) {
|
||||
/**
|
||||
* 根据不同的加载方式加载秘境配置
|
||||
* @param {string} Load - 加载方式类型,如uid或input
|
||||
* @param {Set} autoFightOrderSet - 用于存储秘境顺序的Set集合
|
||||
* @param {Set} autoOrderSet - 用于存储秘境顺序的Set集合
|
||||
* @param {string} runConfig - 输入的配置字符串,仅在Load为input时使用
|
||||
*/
|
||||
async function loadMode(Load, autoFightOrderSet, runConfig) {
|
||||
async function loadMode(Load, autoOrderSet, runConfig) {
|
||||
switch (Load) {
|
||||
case LoadType.input:
|
||||
// 通过输入字符串方式加载配置
|
||||
if (runConfig) {
|
||||
// 处理输入字符串:去除首尾空格,将中文逗号替换为英文逗号,然后按逗号分割
|
||||
runConfig.trim().replaceAll(',', ',').split(",").forEach(
|
||||
item => {
|
||||
// 将当前项按"|"分割成数组
|
||||
let arr = item.split("|")
|
||||
|
||||
let runType = arr[0]; // 解析运行类型
|
||||
let days = arr[1].trim() !== ""
|
||||
? arr[1].split('/').map(d => parseInt(d.trim())).filter(d => !isNaN(d))
|
||||
: [];
|
||||
// 解析顺序值,处理可能的无效值
|
||||
let order = (() => {
|
||||
const rawOrder = arr[2]; // 获取原始值
|
||||
if (rawOrder == null || String(rawOrder).trim() === "") {
|
||||
return 0; // 若为空或无效值,默认返回 0
|
||||
}
|
||||
const parsedOrder = parseInt(String(rawOrder).trim(), 10); // 转换为整数
|
||||
return isNaN(parsedOrder) ? 0 : parsedOrder; // 若转换失败,返回默认值 0
|
||||
})();
|
||||
|
||||
// 创建秘境顺序对象
|
||||
let autoOrder = {
|
||||
order: order, // 顺序值
|
||||
// day: day,// 执行日期
|
||||
days: days, // 执行日期(数组)
|
||||
autoFight: undefined, // 秘境信息对象
|
||||
autoLeyLineOutcrop: undefined // 地脉信息对象
|
||||
}
|
||||
|
||||
if (!config.user.runTypes.includes(runType)) {
|
||||
throwError(`运行类型${runType}输入错误`)
|
||||
} else if (config.user.runTypes[0] === runType) {
|
||||
let partyName = arr[3]; // 解析队伍名称
|
||||
let domainName = arr[4]; // 解析秘境名称
|
||||
let domainRoundNum = arr[5]; // 解析副本轮数
|
||||
let sundaySelectedValue = arr[6]; // 解析周日|限时选择的值
|
||||
|
||||
// 检查秘境名称是否有效
|
||||
if (!config.domainNames.has(domainName)) {
|
||||
//秘境名称没有记录 查询是否是物品名称
|
||||
if (config.itemNames.has(domainName)) {
|
||||
const domainNameTemp = config.domainItemsMap.get(domainName);
|
||||
if (!domainNameTemp) {
|
||||
throw new Error(`${domainName} 输入错误`);
|
||||
}
|
||||
const domainSelectedValue = parseInt(config.domainOrderMap.get(domainName) + "");
|
||||
sundaySelectedValue = domainSelectedValue
|
||||
domainName = domainNameTemp
|
||||
} else {
|
||||
throw new Error(`${domainName} 输入错误`);
|
||||
}
|
||||
}
|
||||
// 创建秘境信息对象
|
||||
let autoFight = {
|
||||
domainName: undefined,//秘境名称
|
||||
partyName: undefined,//队伍名称
|
||||
sundaySelectedValue: undefined,//周日|限时选择的值
|
||||
domainRoundNum: undefined,//副本轮数
|
||||
}
|
||||
// 设置秘境信息的各个属性
|
||||
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,
|
||||
country: undefined,
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 将秘境顺序对象添加到列表中
|
||||
autoOrderSet.add(autoOrder)
|
||||
}
|
||||
)
|
||||
}
|
||||
break
|
||||
|
||||
case LoadType.uid:
|
||||
|
||||
// 通过UID方式加载配置
|
||||
@@ -211,83 +298,10 @@ async function loadMode(Load, autoFightOrderSet, runConfig) {
|
||||
item.days = item.days.map(day => parseInteger(day))
|
||||
// item.day = parseInteger(item.day);
|
||||
}
|
||||
autoFightOrderSet.add(item)
|
||||
autoOrderSet.add(item)
|
||||
})
|
||||
}
|
||||
break
|
||||
case LoadType.input:
|
||||
// 通过输入字符串方式加载配置
|
||||
if (runConfig) {
|
||||
// 处理输入字符串:去除首尾空格,将中文逗号替换为英文逗号,然后按逗号分割
|
||||
runConfig.trim().replaceAll(',', ',').split(",").forEach(
|
||||
item => {
|
||||
// 将当前项按"|"分割成数组
|
||||
let arr = item.split("|")
|
||||
// 创建秘境信息对象
|
||||
let autoFight = {
|
||||
domainName: undefined,//秘境名称
|
||||
partyName: undefined,//队伍名称
|
||||
sundaySelectedValue: undefined,//周日|限时选择的值
|
||||
domainRoundNum: undefined,//副本轮数
|
||||
}
|
||||
let runType = arr[0]; // 解析运行类型
|
||||
if (!config.user.runTypes.includes(runType)) {
|
||||
throwError(`运行类型${runType}输入错误`)
|
||||
}
|
||||
let partyName = arr[1]; // 解析队伍名称
|
||||
let domainName = arr[2]; // 解析秘境名称
|
||||
let domainRoundNum = arr[3]; // 解析副本轮数
|
||||
let sundaySelectedValue = arr[4]; // 解析周日|限时选择的值
|
||||
// let day = arr[4].trim() != "" ? parseInt(arr[4]) : undefined;
|
||||
let days = arr[5].trim() !== ""
|
||||
? arr[4].split('/').map(d => parseInt(d.trim())).filter(d => !isNaN(d))
|
||||
: [];
|
||||
// 解析顺序值,处理可能的无效值
|
||||
let order = (() => {
|
||||
const rawOrder = arr[6]; // 获取原始值
|
||||
if (rawOrder == null || String(rawOrder).trim() === "") {
|
||||
return 0; // 若为空或无效值,默认返回 0
|
||||
}
|
||||
const parsedOrder = parseInt(String(rawOrder).trim(), 10); // 转换为整数
|
||||
return isNaN(parsedOrder) ? 0 : parsedOrder; // 若转换失败,返回默认值 0
|
||||
})();
|
||||
|
||||
|
||||
// 检查秘境名称是否有效
|
||||
if (!config.domainNames.has(domainName)) {
|
||||
//秘境名称没有记录 查询是否是物品名称
|
||||
if (config.itemNames.has(domainName)) {
|
||||
const domainNameTemp = config.domainItemsMap.get(domainName);
|
||||
if (!domainNameTemp) {
|
||||
throw new Error(`${domainName} 输入错误`);
|
||||
}
|
||||
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 // 周日|限时选择的值
|
||||
// 创建秘境顺序对象
|
||||
let autoFightOrder = {
|
||||
order: order, // 顺序值
|
||||
// day: day,// 执行日期
|
||||
days: days, // 执行日期(数组)
|
||||
autoFight: autoFight // 秘境信息对象
|
||||
}
|
||||
// 将秘境顺序对象添加到列表中
|
||||
autoFightOrderSet.add(autoFightOrder)
|
||||
// autoFightOrderSet.push(autoFightOrder)
|
||||
}
|
||||
)
|
||||
}
|
||||
break
|
||||
case LoadType.bgi_tools:
|
||||
// 通过bgi_tools方式加载配置
|
||||
log.info(`开始拉取bgi_tools配置`)
|
||||
@@ -301,7 +315,7 @@ async function loadMode(Load, autoFightOrderSet, runConfig) {
|
||||
item.days = item.days.map(day => parseInteger(day))
|
||||
// item.day = parseInteger(item.day);
|
||||
}
|
||||
autoFightOrderSet.add(item)
|
||||
autoOrderSet.add(item)
|
||||
})
|
||||
}
|
||||
break
|
||||
@@ -346,16 +360,16 @@ async function initRunOrderList(domainConfig) {
|
||||
//过滤掉不执行的秘境
|
||||
.filter(item => config.user.runTypes.includes(item.runType))
|
||||
.filter(item => {
|
||||
// if (item.day) {
|
||||
// return item.day === dayOfWeek.day
|
||||
// }
|
||||
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
|
||||
})
|
||||
// if (item.day) {
|
||||
// return item.day === dayOfWeek.day
|
||||
// }
|
||||
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;
|
||||
@@ -389,7 +403,7 @@ async function main() {
|
||||
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)
|
||||
|| (item.runType === config.user.runTypes[1] && item?.autoLeyLineOutcrop.count > 0)
|
||||
)
|
||||
if (list?.length > 0) {
|
||||
await autoRunList(list);
|
||||
|
||||
Reference in New Issue
Block a user