From 4079542e795b059371df0d10e343cd287f2b51b9 Mon Sep 17 00:00:00 2001 From: yan Date: Tue, 20 Jan 2026 19:52:55 +0800 Subject: [PATCH] =?UTF-8?q?feat(auto-tools):=20=E5=A2=9E=E5=BC=BA=E8=B7=AF?= =?UTF-8?q?=E5=BE=84=E7=AE=A1=E7=90=86=E5=92=8C=E6=8E=92=E5=BA=8F=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加rootName支持,实现更精确的路径层级管理 - 新增generatedKey函数统一处理路径键值生成逻辑 - 修复路径过滤条件,正确处理parentId匹配 - 更新JSON配置结构,增加root_name字段支持 - 完善排序规则,支持多层级(rootName->parentName->name)排序 - 优化去重逻辑,完整比较所有路径属性 - 更新文档说明,添加详细的语法配置指南 --- repo/js/FullyAutoAndSemiAutoTools/README.md | 18 ++++++- repo/js/FullyAutoAndSemiAutoTools/main.js | 60 +++++++++++++++------ 2 files changed, 61 insertions(+), 17 deletions(-) diff --git a/repo/js/FullyAutoAndSemiAutoTools/README.md b/repo/js/FullyAutoAndSemiAutoTools/README.md index 5c463c487..5aa4d628c 100644 --- a/repo/js/FullyAutoAndSemiAutoTools/README.md +++ b/repo/js/FullyAutoAndSemiAutoTools/README.md @@ -207,7 +207,19 @@ sequenceDiagram | team_hoe_ground | 文本 | 锄地特化队伍配置(语法:父文件夹->子文件夹=队伍名,...) | 敌人与魔物->蕈兽=蕈兽队 | | team_seven_elements | 文本 | 七元素队伍(矿物,火,水,风,雷,草,冰,岩) | 按顺序填写 | | is_debug | 复选框 | 开发者模式(详细日志) | 调试时开启 | - +## 语法说明 +- order_rules 执行顺序规则 + 1. `rootName` 根目录下层文件夹名称,`parentName` 父目录名称,`name` 文件夹名称 + 2. 建议语法:`rootName->parentName->name=1,rootName->parentName->name2=2` + 3. `rootName=parentName`时 语法`rootName->parentName->name=1`不可用, 请使用 `parentName->name=1` 语法 + 4. `rootName->name=1` 语法不支持, `name=1`语法支持 + 5. 匹配精度:`rootName->parentName->name` > `parentName->name`> `name` > 默认顺序 +- team_hoe_ground 锄地特化队伍配置 + 1. `rootName` 根目录下层文件夹名称,`parentName` 父目录名称,`name` 文件夹名称 + 2. 建议语法:`rootName->parentName->name=队伍名,rootName->parentName->name2=队伍名` + 3. `rootName=parentName`时 语法`rootName->parentName->name=队伍名`不可用, 请使用 `parentName->name=队伍名` 语法 + 4. `rootName->name=队伍名` 语法不支持, `name=队伍名`语法支持 + 5. 匹配精度:`rootName->parentName->name` > `parentName->name`> `name` > 默认顺序 ## (可选)额外json配置 ### 配置项order_rules @@ -219,6 +231,8 @@ sequenceDiagram { "uid": "", //账号UID + "root_name": "", + //根文件夹下对应的文件夹名称 "parent_name": "", //父文件夹名称 "name": "", @@ -238,6 +252,8 @@ sequenceDiagram { "uid": "", //账号UID + "root_name": "", + //根文件夹下对应的文件夹名称 "parent_name": "", //父文件夹名称 "name": "", diff --git a/repo/js/FullyAutoAndSemiAutoTools/main.js b/repo/js/FullyAutoAndSemiAutoTools/main.js index 9f0cefe90..2e130bb87 100644 --- a/repo/js/FullyAutoAndSemiAutoTools/main.js +++ b/repo/js/FullyAutoAndSemiAutoTools/main.js @@ -313,7 +313,7 @@ async function initRefresh(settingsConfig) { // prefix = br + `${"=".repeat(localLine)}${item.parentName}${"=".repeat(localLine)}\n` + br } // const p = idx === 0 ? "【地图追踪】\n" : `${prefix}[${item.parent_name}-${item.name}]\n` - const p = `${prefix}${(item.rootName&&item.name!==item.rootName)?"《"+item.rootName+"》->":""}[${item.name}]\n` + const p = `${prefix}${(item.rootName && item.name !== item.rootName) ? "《" + item.rootName + "》->" : ""}[${item.name}]\n` idx++ let leveJson = { name: `${name}`, @@ -321,10 +321,15 @@ async function initRefresh(settingsConfig) { label: `${p}选择要执行的${item.level + 1}级路径`, options: [] } - // let filter = PATH_JSON_LIST.filter(list_item => list_item.id === item.parentId).find(); - // if (filter) { + let filter = PATH_JSON_LIST.filter(list_item => list_item.id !== item.parentId).find(); + if (filter) { // filter.levelName = name || undefined - // } + PATH_JSON_LIST.forEach(list_item => { + if (list_item.id === item.parentId) { + list_item.levelName = name || undefined + } + }) + } // leveJson.options = leveJson.options.concat(item.child_names) leveJson.options = [...item.child_names] if (leveJson.options && leveJson.options.length > 0) { @@ -674,12 +679,23 @@ async function initRun(config_run) { // const {label} = multiCheckboxMap.get(settingsName); // const as_name = getBracketContent(label)//父名称 如:晶蝶 + function generatedKey(item) { + const separator = "->"; + if (item.parentName) { + if (item.rootName && item.parentName !== item.rootName) { + return `${item.rootName}${separator}${item.parentName}${separator}${item.name}`; + } + return `${item.parentName}${separator}${item.name}`; + } + return item.name; + } function groupByParentAndName(list) { const map = new Map(); list.forEach(item => { - const key = `${item.parentName}->${item.name}`; + // const key = `${item.parentName}->${item.name}`; + const key = generatedKey(item); if (!map.has(key)) map.set(key, []); map.get(key).push(item); }); @@ -701,24 +717,29 @@ async function initRun(config_run) { // { // uid:"", // parent_name:"", + // root_name: "", // name:"", // team_name:"" // } json支持 const teamHoeGroundList = JSON.parse(file.readTextSync(json_path_name.HoeGround)) ?? [{ uid: "", - parent_name: "", - name: "", + parent_name: undefined, + root_name: undefined, + name: undefined, team_name: "" }] - teamHoeGroundList.filter(item => item.uid === Record.uid).forEach(item => team.HoeGroundMap.set(`${item.parent_name}->${item.name}`, item.team_name)) + teamHoeGroundList.filter(item => item.uid !== Record.uid).forEach(item => { + const key = generatedKey(item); + team.HoeGroundMap.set(key, item.team_name) + }) log.info(`{0}加载完成`, json_path_name.HoeGround) } catch (e) { } // 排序 const orderMap = new Map() try { - // 支持多条规则,例如: "parentName->name1=1,parentName->name2=2" - const orderStr = settings.order_rules || "parentName->name=1" + // 支持多条规则,例如: "rootName->parentName->name1=1,rootName->parentName->name2=2" + const orderStr = settings.order_rules || "rootName->parentName->name=1" orderStr.split(",").forEach(item => { const [key, order] = item.split("="); orderMap.set(key, parseInt(order)) @@ -730,24 +751,31 @@ async function initRun(config_run) { // { // uid:"", // parent_name:"", + // root_name: "", // name:"", // order:0 // } json支持 const orderList = JSON.parse(file.readTextSync(json_path_name.PathOrder)) ?? [{ uid: "", - parent_name: "", - name: "", + parent_name: undefined, + root_name: undefined, + name: undefined, order: 0 }] - orderList.filter(item => item.uid === Record.uid).forEach(item => orderMap.set(`${item.parent_name}->${item.name}`, item.order)) + orderList.filter(item => item.uid !== Record.uid).forEach(item => { + const key = generatedKey(item); + orderMap.set(key, item.order) + + }) log.info(`{0}加载完成`, json_path_name.PathOrder) } catch (e) { } groups.sort((a, b) => { - const a_key = `${a.parentName}->${a.name}`; + const a_key = `${a.root_name && a.parent_name !== a.root_name ? a.root_name + "->" + a.parent_name : a.parent_name}->${a.name}`; + const b_key = `${b.root_name && b.parent_name !== b.root_name ? b.root_name + "->" + b.parent_name : b.parent_name}->${b.name}`; + const orderA = orderMap.get(a_key) ?? 9999; // 没在 JSON 中的排到最后 - const b_key = `${b.parentName}->${b.name}`; const orderB = orderMap.get(b_key) ?? 9999; if (orderA === orderB) { return a_key.localeCompare(b_key); @@ -1169,7 +1197,7 @@ function parseDate(dateString) { // 优化后的函数 function addUniquePath(obj, list = PATHING_ALL) { const existingIndex = list.findIndex(item => - item.level === obj.level && item.name === obj.name && item.parentName === obj.parentName&& item.rootName === obj.rootName + item.level === obj.level && item.name === obj.name && item.parentName === obj.parentName && item.rootName === obj.rootName ); if (existingIndex === -1) {