mirror of
https://github.com/babalae/bettergi-scripts-list.git
synced 2026-03-29 05:39:51 +08:00
feat(domain): 添加多加载方式支持
- 添加 LoadType 枚举定义 uid 和 input 加载类型 - 添加 LoadMap 映射表关联加载方式名称和类型 - 修改配置结构将 load_uid_config 替换为 loads 数组 - 实现多加载方式切换逻辑支持 UID 加载和输入加载 - 更新 initDomainOrderList 函数支持异步 UID 识别 - 在设置界面添加 auto_load 多选框配置加载模式 - 实现基于配置的动态加载策略选择机制
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
// 检查是否已配置秘境
|
||||
|
||||
@@ -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加载"]
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user