feat(domain): 添加多加载方式支持

- 添加 LoadType 枚举定义 uid 和 input 加载类型
- 添加 LoadMap 映射表关联加载方式名称和类型
- 修改配置结构将 load_uid_config 替换为 loads 数组
- 实现多加载方式切换逻辑支持 UID 加载和输入加载
- 更新 initDomainOrderList 函数支持异步 UID 识别
- 在设置界面添加 auto_load 多选框配置加载模式
- 实现基于配置的动态加载策略选择机制
This commit is contained in:
yan
2026-02-08 15:12:15 +08:00
parent 9272220361
commit c8294148bc
3 changed files with 102 additions and 72 deletions

View File

@@ -4,7 +4,8 @@ const config = {
//setting设置放在这个json
domain: {
config: '',
load_uid_config: false
// load_uid_config: false,
loads: [],//加载方式list
},
info: {
key: undefined,//密钥
@@ -34,6 +35,18 @@ const config = {
domainItemsMap: new Map(),
}
const LoadType = Object.freeze({
uid: 'uid',//uid加载
input: 'input',//input加载
fromValue(value) {
return Object.keys(this).find(key => this[key] === value);
}
})
const LoadMap = new Map([
['UID加载', LoadType.uid],
['输入加载', LoadType.input],
])
/**
* 初始化设置函数
* 从配置文件中读取设置信息并返回
@@ -414,14 +427,14 @@ async function initConfig() {
if (config.domainList.length <= 0) {
throw new Error("配置文件缺失或读取异常!")
}
config.domain.load_uid_config = settings.load_uid_config || config.domain.load_uid_config
if (config.domain.load_uid_config){
config.user.uid = await ocrUid()
}
let loadList = await getValueByMultiCheckboxName('auto_load')|| []
const loads= loadList.map(item => LoadMap.get(item))
config.domain.loads = loads
config.user.uid = await ocrUid()
}
export {
config,
config, LoadType, LoadMap,
checkKey,
initSettings,
getMultiCheckboxMap,

View File

@@ -1,4 +1,5 @@
import {config, initConfig, initSettings} from './config/config';
import {config, initConfig, initSettings, LoadType} from './config/config';
import {ocrUid} from './utils/uid';
/**
* 自动执行秘境任务的异步函数
@@ -35,7 +36,7 @@ async function autoDomainList(autoDomainOrderList) {
* @param {string} domainConfig - 输入的字符串,包含秘境顺序信息
* @returns {Array} 返回处理后的秘境顺序列表
*/
function initDomainOrderList(domainConfig) {
async function initDomainOrderList(domainConfig) {
const autoFightOrderSet = new Set() // 存储秘境顺序列表的数组
/* let te = {
order: 1, // 顺序值
@@ -46,75 +47,84 @@ function initDomainOrderList(domainConfig) {
DomainRoundNum: undefined,//副本轮数
} // 秘境信息对象
}*/
const uid = config.user.uid
if (uid) {
const configAutoFightOrderMap = JSON.parse(file.readTextSync(config.path.domainConfig)) || new Map()
const uidConfigList = configAutoFightOrderMap.get(uid) || [];
if (uidConfigList?.length > 0) {
uidConfigList.forEach(item => {
// 将秘境顺序对象添加到列表中
autoFightOrderSet.add(item)
})
}
}
if (domainConfig) {
// 处理输入字符串:去除首尾空格,将中文逗号替换为英文逗号,然后按逗号分割
domainConfig.trim().replaceAll('', ',').split(",").forEach(
item => {
// 将当前项按"|"分割成数组
let arr = item.split("|")
// 创建秘境信息对象
let autoFight = {
domainName: undefined,//秘境名称
partyName: undefined,//队伍名称
sundaySelectedValue: undefined,//周日|限时选择的值
DomainRoundNum: undefined,//副本轮数
// let Load = LoadType.uid
for (const Load of config.domain.loads) {
switch (Load) {
case LoadType.uid:
const uid = config.user.uid || (await ocrUid())
const configAutoFightOrderMap = JSON.parse(file.readTextSync(config.path.domainConfig)) || new Map()
const uidConfigList = configAutoFightOrderMap.get(uid) || [];
if (uidConfigList?.length > 0) {
uidConfigList.forEach(item => {
// 将秘境顺序对象添加到列表中
autoFightOrderSet.add(item)
})
}
let partyName = arr[0];
let domainName = arr[1];
let domainRoundNum = arr[2];
let sundaySelectedValue = arr[3];
let order = (() => {
const rawOrder = arr[4]; // 获取原始值
if (rawOrder == null || String(rawOrder).trim() === "") {
return 0; // 若为空或无效值,默认返回 0
}
const parsedOrder = parseInt(String(rawOrder).trim(), 10); // 转换为整数
return isNaN(parsedOrder) ? 0 : parsedOrder; // 若转换失败,返回默认值 0
})();
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 order = (() => {
const rawOrder = arr[4]; // 获取原始值
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} 输入错误`);
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, // 顺序值
autoFight: autoFight // 秘境信息对象
}
// 将秘境顺序对象添加到列表中
autoFightOrderSet.add(autoFightOrder)
// autoFightOrderSet.push(autoFightOrder)
}
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, // 顺序值
autoFight: autoFight // 秘境信息对象
}
// 将秘境顺序对象添加到列表中
autoFightOrderSet.add(autoFightOrder)
// autoFightOrderSet.push(autoFightOrder)
}
)
break
default:
throw new Error("请先配置加载方式");
break;
}
}
// 检查是否已配置秘境

View File

@@ -5,4 +5,11 @@
"label": "自动秘境计划配置\n语法:队伍名称|秘境名称/刷取物品名称|刷几轮|限时/周日(1-3和本体的一致)|执行顺序(越大越先执行),...\n(无配置可留空如||唯有秘境名称配置不可为空)\n如: 速刷|苍白的遗荣|1||9",
"default": ""
},
{
"name": "auto_load",
"type": "multi-checkbox",
"label": "加载模式\n全选时相同的配置输入加载会覆盖UID加载\n自动秘境计划配置(属于输入加载)\nconfig/domain_config.json(属于UID加载)",
"option": ["输入加载","UID加载"] ,
"default": ["输入加载","UID加载"]
}
]