Files
bettergi-scripts-list/repo/js/AutoPlanDomain/main.js
yan e023eb52b1 fix(AutoPlanDomain): 修复秘境自动战斗配置过滤逻辑
- 修复了pushAllJsonConfig函数调用中的参数格式问题
- 添加了对autoFight.DomainRoundNum大于0的条件过滤
- 确保只有设置了有效刷取轮数的配置才会参与排序和执行
- 避免无效配置导致的自动战斗异常执行
2026-02-11 23:12:22 +08:00

282 lines
12 KiB
JavaScript
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.
import {config, initConfig, initSettings, LoadType} from './config/config';
import {ocrUid} from './utils/uid';
import {getDayOfWeek} from './utils/tool';
import {pullJsonConfig, pushAllJsonConfig} from './utils/bgi_tools';
import {ocrPhysical} from "./utils/physical";
/**
* 自动执行秘境任务的异步函数
* @param {Object} autoFight - 包含秘境自动配置参数的对象
* @returns {Promise<void>} - 执行完成后返回的Promise
*/
async function autoDomain(autoFight) {
//流程->返回主页 打开地图 返回主页
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) {
throwError(`体力不足,当前体力${physical.current},最低体力${physical.min},请手动补充体力后重试`)
}
// 创建秘境参数对象初始化值为0
let domainParam = new AutoDomainParam(autoFight.DomainRoundNum);
//秘境名称
domainParam.DomainName = autoFight.domainName || domainParam.DomainName;
//队伍名称
domainParam.PartyName = autoFight.partyName || domainParam.PartyName;
//周日|限时选择的值
domainParam.SundaySelectedValue = autoFight.sundaySelectedValue || domainParam.SundaySelectedValue;
//副本轮数
// domainParam.domainRoundNum = autoFight.DomainRoundNum || domainParam.DomainRoundNum;
await dispatcher.RunAutoDomainTask(domainParam);
}
/**
* 自动执行秘境任务列表处理函数
* @param {Array} autoDomainOrderList - 包含秘境自动配置的数组
*/
async function autoDomainList(autoDomainOrderList) {
//计划执行
for (const item of autoDomainOrderList) {
await autoDomain(item.autoFight);
}
}
// 辅助函数:安全地解析 day 字段
function parseDay(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} autoFightOrderSet - 用于存储秘境顺序的Set集合
* @param {string} domainConfig - 输入的配置字符串仅在Load为input时使用
*/
async function loadMode(Load, autoFightOrderSet, domainConfig) {
switch (Load) {
case LoadType.uid:
// 通过UID方式加载配置
const uid = config.user.uid || (await ocrUid()) // 获取用户UID如果未配置则通过OCR识别获取
const configAutoFightOrderMap = JSON.parse(file.readTextSync(config.path.domainConfig)) || new Map() // 读取本地配置文件并转换为Map对象
const uidConfigList = configAutoFightOrderMap.get(uid) || []; // 获取当前UID对应的配置列表
if (uidConfigList?.length > 0) {
// 如果配置列表不为空,遍历并添加到结果集合中
uidConfigList.forEach(item => {
// 将秘境顺序对象添加到列表中
// 主逻辑优化
// if (item.day !== undefined) {
// item.day = parseDay(item.day);
// }
if (item.days && item.days.length > 0) {
item.days = item.days.map(day => parseDay(day)).filter(day => day)
// item.day = parseDay(item.day);
}
autoFightOrderSet.add(item)
})
}
break
case LoadType.input:
// 通过输入字符串方式加载配置
if (domainConfig) {
// 处理输入字符串:去除首尾空格,将中文逗号替换为英文逗号,然后按逗号分割
domainConfig.trim().replaceAll('', ',').split(",").forEach(
item => {
// 将当前项按"|"分割成数组
let arr = item.split("|")
// 创建秘境信息对象
let autoFight = {
domainName: undefined,//秘境名称
partyName: undefined,//队伍名称
sundaySelectedValue: undefined,//周日|限时选择的值
DomainRoundNum: undefined,//副本轮数
}
let partyName = arr[0]; // 解析队伍名称
let domainName = arr[1]; // 解析秘境名称
let domainRoundNum = arr[2]; // 解析副本轮数
let sundaySelectedValue = arr[3]; // 解析周日|限时选择的值
// let day = arr[4].trim() != "" ? parseInt(arr[4]) : undefined;
let days = arr[4].trim() !== ""
? arr[4].split('/').map(d => parseInt(d.trim())).filter(d => !isNaN(d))
: [];
// 解析顺序值,处理可能的无效值
let order = (() => {
const rawOrder = arr[5]; // 获取原始值
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配置`)
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 => parseDay(day)).filter(day => day)
// item.day = parseDay(item.day);
}
autoFightOrderSet.add(item)
})
}
break
default:
throw new Error("请先配置加载方式");
break;
}
}
/**
* 初始化秘境顺序列表
* @param {string} domainConfig - 输入的字符串,包含秘境顺序信息
* @returns {Array} 返回处理后的秘境顺序列表
*/
async function initDomainOrderList(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.domain.loads) {
await loadMode(Load.load, autoFightOrderSet, domainConfig);
}
// 检查是否已配置秘境
if (autoFightOrderSet.length <= 0) {
throw new Error("请先配置秘境配置");
}
// 返回处理后的秘境顺序列表
let from = Array.from(autoFightOrderSet);
let dayOfWeek = getDayOfWeek();
from = from.filter(item => {
// if (item.day) {
// return item.day === dayOfWeek.day
// }
if (item.days && item.days.length > 0) {
return item.days.includes(dayOfWeek.day);
}
return true
})
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)
}
// 获取秘境配置
let domainConfig = config.domain.config;
//"队伍名称|秘境名称/刷取物品名称|刷几轮|限时/周日|周几执行(0-6)不填默认执行|执行顺序,..."
const autoFightOrderList = initDomainOrderList(domainConfig);
const list = autoFightOrderList.filter(item => item.autoFight.DomainRoundNum > 0)
if (list?.length > 0) {
list.sort((a, b) => b.order - a.order)
await autoDomainList(list);
} else {
log.info(`本日无计划`)
}
}
(async function () {
// await test()
// await test1()
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))
}