From eb3e6f879dfc7ebb47f53ee084dc22bfc65d2741 Mon Sep 17 00:00:00 2001 From: mno <718135749@qq.com> Date: Wed, 18 Feb 2026 22:33:37 +0800 Subject: [PATCH] =?UTF-8?q?js=EF=BC=9A=E9=87=87=E9=9B=86cd=E7=AE=A1?= =?UTF-8?q?=E7=90=86=20AAA=E7=8B=97=E7=B2=AE=E6=89=B9=E5=8F=91=20(#2894)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assets/targetItems/保留/禽肉.png | Bin 0 -> 1277 bytes repo/js/AAA-Artifacts-Bulk-Supply/main.js | 66 +++++++----------- .../AAA-Artifacts-Bulk-Supply/manifest.json | 8 ++- repo/js/采集cd管理/README.md | 18 ++++- .../assets/RecognitionObject/道具数量超过上限.png | Bin 0 -> 5793 bytes repo/js/采集cd管理/main.js | 36 +++++++++- repo/js/采集cd管理/manifest.json | 2 +- 7 files changed, 83 insertions(+), 47 deletions(-) create mode 100644 repo/js/AAA-Artifacts-Bulk-Supply/assets/targetItems/保留/禽肉.png create mode 100644 repo/js/采集cd管理/assets/RecognitionObject/道具数量超过上限.png diff --git a/repo/js/AAA-Artifacts-Bulk-Supply/assets/targetItems/保留/禽肉.png b/repo/js/AAA-Artifacts-Bulk-Supply/assets/targetItems/保留/禽肉.png new file mode 100644 index 0000000000000000000000000000000000000000..3be94c9ad27ca9bc1cefe868539b08ba37b2ddd3 GIT binary patch literal 1277 zcmV%ki~oTSnwa?D zgNYA@Cm|*VOeqQ)w1B15R-jzUrLf!kWoz5L&&=n;nc1$B%w*1-Z@$a#`+dJd9RR_; zxwPGdwNafwfJp)b5C{YiYmG#DT#~Z2Ka&6?04D1ewWsztICJf%1ObNf0V@K-^{xkt zpDTMJdyg3;tpx#abR6#}1I$3+!flgDSQ}Q7EZTfL$zTxFL;cCb5^TL|8;^FjN^{N( zR2^=-erZ~>G9WO6m>2}W)Kx@5LI5BJ0J1RAn)i1^yk>kJ6?dbXIB{p_uQ(AAWN#-J z08qN$f#e@n0{XR^ntCH5g^4S&r)^V}IW=&Z|`nAu%+vt;c=Zv+j<1+m&abD zCI>Av0Z4$#4@X16ascjD|5m@budK`iQRk0z$8KLu1Aq}r18}r}lQ9BlLjz!%0IN1Z z0&u@kyL>Nxs6te<0}xfc0FXWxZr!%|8UP@Dc7mXVKZZW|qX1;|JwSo0Qjq|!{=A$v z*0RYRUHa3}S(Yswp5YPy(8LvoD+K`1AKn-2>;m9felAFJTQ#wTyacdzF2Cz_%6}=N z?(&VlK|n@7`t53-s0bwxAeq3+rS;udT)i@}t#?;T z!tb8zAIgTSl7l&2aRsK~K6s+moZ*J9K)CO@S?qxca^0($%$K`FMX3v=UM^u+odp0H zIkY#ZkDjH2dqXwBKXdCY00PT`p=kWT@0-8%aI!Yi+!Oq+IAiCjnpXGZ^`;)v{CfY+ z&S0Xjqc|uFET4pD0|-vUbV9nHPP|mzZbsf(1$OLx3q0-D2~7&saz1? z=mcbSbr=BP*bU?Hm~EH6crg}V3is}ttrjH{@_7EeH;E}B#;3D8PXsY$4DY{IrP1l1h_w6+iXM#)0F z;DaSV(3)ShiuZ!t2doZK>dZu;aMAeI7S0%zFV+2iDQjV&IIl2af~x_>bAw#3zn~nncoN%LKb$e0i5PbvA!2(pDGh=VFpr1E|LGo0RjlKz`_)*>zkWy-eQEyebla zlFpOSQ2O%aVKd&{TX&>s-j*v?dLnIaxm%f@P;rnMes0l$@`W=iGY$bD30|35u}{g1MM6`b0X*1PEuKwWL$ywa2!gE*C~c zhI&YPV6HqMVru{u?RoNi_NI;%yB+$S4Vz1E&)=8@z;h2WHx~-0L;6Czy;daWZ_Eno zG+|O|Pwq-%AxC5%godcBbsMYG839nBCO^F>3Uf-Xh7FWY&EzzzKmyVKj!~68Ggy$Y n2?-`5TTfMN5(;J}2oU}QL-6YiY$3h~00000NkvXXu0mjf?}S-@ literal 0 HcmV?d00001 diff --git a/repo/js/AAA-Artifacts-Bulk-Supply/main.js b/repo/js/AAA-Artifacts-Bulk-Supply/main.js index 30f686160..e913b0d3e 100644 --- a/repo/js/AAA-Artifacts-Bulk-Supply/main.js +++ b/repo/js/AAA-Artifacts-Bulk-Supply/main.js @@ -665,55 +665,43 @@ async function switchPartyIfNeeded(partyName) { } } -// 定义 readFolder 函数 -async function readFolder(folderPath, onlyJson) { - // 新增一个堆栈,初始时包含 folderPath - const folderStack = [folderPath]; - // 新增一个数组,用于存储文件信息对象 +/** + * 递归读取目录下所有文件 + * @param {string} folderPath 起始目录 + * @param {string} [ext=''] 需要的文件后缀,空字符串表示不限制;例如 'json' 或 '.json' 均可 + * @returns {Array<{fullPath:string, fileName:string, folderPathArray:string[]}>} + */ +async function readFolder(folderPath, ext = '') { + // 统一后缀格式:确保前面有一个点,且全小写 + const targetExt = ext ? (ext.startsWith('.') ? ext : `.${ext}`).toLowerCase() : ''; + + const folderStack = [folderPath]; const files = []; - // 当堆栈不为空时,继续处理 while (folderStack.length > 0) { - // 从堆栈中弹出一个路径 const currentPath = folderStack.pop(); - - // 读取当前路径下的所有文件和子文件夹路径 - const filesInSubFolder = file.ReadPathSync(currentPath); - - // 临时数组,用于存储子文件夹路径 + const filesInSubFolder = file.ReadPathSync(currentPath); // 同步读取当前目录 const subFolders = []; + for (const filePath of filesInSubFolder) { if (file.IsFolder(filePath)) { - // 如果是文件夹,先存储到临时数组中 - subFolders.push(filePath); + subFolders.push(filePath); // 子目录稍后处理 } else { - // 如果是文件,根据 onlyJson 判断是否存储 - if (onlyJson) { - if (filePath.endsWith(".json")) { - const fileName = filePath.split('\\').pop(); // 提取文件名 - const folderPathArray = filePath.split('\\').slice(0, -1); // 提取文件夹路径数组 - files.push({ - fullPath: filePath, - fileName: fileName, - folderPathArray: folderPathArray - }); - //log.info(`找到 JSON 文件:${filePath}`); - } - } else { - const fileName = filePath.split('\\').pop(); // 提取文件名 - const folderPathArray = filePath.split('\\').slice(0, -1); // 提取文件夹路径数组 - files.push({ - fullPath: filePath, - fileName: fileName, - folderPathArray: folderPathArray - }); - //log.info(`找到文件:${filePath}`); + // 后缀过滤 + if (targetExt) { + const fileExt = filePath.toLowerCase().slice(filePath.lastIndexOf('.')); + if (fileExt !== targetExt) continue; } + + const fileName = filePath.split('\\').pop(); + const folderPathArray = filePath.split('\\').slice(0, -1); + files.push({ fullPath: filePath, fileName, folderPathArray }); } } - // 将临时数组中的子文件夹路径按原顺序压入堆栈 - folderStack.push(...subFolders.reverse()); // 反转子文件夹路径 + + // 保持同层顺序,reverse 后仍按原顺序入栈 + folderStack.push(...subFolders.reverse()); } return files; @@ -884,7 +872,7 @@ async function runPaths(folderFilePath, PartyName, doStop, furinaRequirement = " if (folderFilePath === "") { return; } - let Paths = await readFolder(folderFilePath, true); + let Paths = await readFolder(folderFilePath, "json"); let furinaChecked = false; for (let i = 0; i < Paths.length; i++) { let skiprecord = false; @@ -1183,7 +1171,7 @@ async function runPath(fullPath, targetItemPath = null) { //加载拾取物图片 async function loadTargetItems() { const targetItemPath = 'assets/targetItems'; // 固定目录 - const items = await readFolder(targetItemPath, false); + const items = await readFolder(targetItemPath, "png"); // 统一预加载模板 for (const it of items) { it.template = file.ReadImageMatSync(it.fullPath); diff --git a/repo/js/AAA-Artifacts-Bulk-Supply/manifest.json b/repo/js/AAA-Artifacts-Bulk-Supply/manifest.json index c99239c08..ca3ab20ea 100644 --- a/repo/js/AAA-Artifacts-Bulk-Supply/manifest.json +++ b/repo/js/AAA-Artifacts-Bulk-Supply/manifest.json @@ -1,13 +1,17 @@ { "manifest_version": 1, "name": "AAA狗粮批发", - "version": "2.1.2", + "version": "2.1.3", "tags": [ "狗粮" ], "description": "直接利用“富98个上限点”1号/2号路线交替运行(路线不重复),来给收尾和额外路线卡时间,花最少的时间拿最多的狗粮", "saved_files": [ - "records/*.txt" + "records/*.txt", + "assets/targetItems/保留/*.png", + "assets/targetItems/保留/*/*.png", + "assets/targetItems/保留/*/*/*.png", + "assets/targetItems/保留/*/*/*/*.png" ], "authors": [ { diff --git a/repo/js/采集cd管理/README.md b/repo/js/采集cd管理/README.md index 7772c75c6..05095e0d1 100644 --- a/repo/js/采集cd管理/README.md +++ b/repo/js/采集cd管理/README.md @@ -53,7 +53,7 @@ - blacklists/ 文件夹:保存各个账户名的黑名单物品信息,可以在这里手动编辑,注意需要符合json格式 - record/ 文件夹:保存各个账户名的运行记录与cd信息 -### 三、**⚙️ 其他说明** +### 四、**⚙️ 其他说明** 1. 伪造日志(不影响游戏) - 生成的日志可以被日志分析识别,方便查看路线运行情况。 @@ -79,4 +79,18 @@ - 妙妙小工具 - 性能测试:测测你的电脑性能 - 食材加工极速版:与采集cd管理中相同的食材加工 - - 更多妙妙小工具可以加群获取 \ No newline at end of file + - 更多妙妙小工具可以加群获取 + +### 五、**⚙️ 更新日志** +
+📋 点击查看历史更新 + +### 2026/2/18 +1. 对食材加工过程中可能出现的道具数量超过上限进行处理 + +### 2026/2/17 +1. 增加通知优先采集阶段和路径组切换 +2. 优化部分日志和展示的自定义配置 +3. 更新日志回归 + +
diff --git a/repo/js/采集cd管理/assets/RecognitionObject/道具数量超过上限.png b/repo/js/采集cd管理/assets/RecognitionObject/道具数量超过上限.png new file mode 100644 index 0000000000000000000000000000000000000000..629faf964d585ea778115131031f4bf0849a89ff GIT binary patch literal 5793 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 b-&;y>%9g?~e03OTJwMP=(^Z8lTZjJ-%GSBN literal 0 HcmV?d00001 diff --git a/repo/js/采集cd管理/main.js b/repo/js/采集cd管理/main.js index 456f698b4..c017993f3 100644 --- a/repo/js/采集cd管理/main.js +++ b/repo/js/采集cd管理/main.js @@ -181,7 +181,7 @@ let checkInterval = +settings.checkInterval || 50; { "name": "priorityItemsPartyName", "type": "input-text", - "label": "优先采集材料使用的配队名称" + "label": "优先采集材料使用的备用配队名称\n在指定路线不存在对应文件夹指定的配队时使用" }, { "name": "disableJsons", @@ -512,6 +512,7 @@ let checkInterval = +settings.checkInterval || 50; if (priorityList.length === 0) { log.info("今日优先材料已达标,跳过优先采集阶段"); + notification.send("今日优先材料已达标,跳过优先采集阶段"); } /* ================================= */ @@ -761,8 +762,9 @@ let checkInterval = +settings.checkInterval || 50; !runOnce.includes(f.fileName); // 本轮没跑过 }) .sort((a, b) => b._priorityEff - a._priorityEff); - if (candidateRoutes.length === 0) { - log.info('已无可用优先路线(可能全部在CD或已达标),退出优先采集阶段'); + if (candidateRoutes.length === 0 && priorityList.length > 0) { + log.info('已无可用优先路线(可能全部在CD),退出优先采集阶段'); + notification.send('已无可用优先路线(可能全部在CD),退出优先采集阶段'); break; } const bestRoute = candidateRoutes[0]; @@ -966,7 +968,12 @@ let checkInterval = +settings.checkInterval || 50; await appendDailyPickup(state.runPickupLog); state.runPickupLog = []; } + if (priorityList.length <= 0) { + log.info('每日优先材料已达标,退出优先采集阶段'); + notification.send('每日优先材料已达标,退出优先采集阶段'); + } } + await sleep(1000); } let loopattempts = 0; // ==================== 路径组循环 ==================== @@ -981,6 +988,9 @@ let checkInterval = +settings.checkInterval || 50; const folder = folderNames[i - 1] || `路径组${i}`; const targetFolder = `pathing/${folder} `; + log.info(`开始执行路径组${i} 文件夹:${folder}`); + notification.send(`开始执行路径组${i} 文件夹:${folder}`); + /* 运行期同样用 Map 只改 cdTime */ const rawRecord = await file.readText(recordFilePath); let recordArray = JSON.parse(rawRecord); @@ -1956,6 +1966,16 @@ async function ingredientProcessing() { await sleep(200); /* 正常完成:仅领取,不移除 */ if (await clickPNG("全部领取", 3)) { + let dowait = false; + await sleep(4 * checkInterval); + while (await findPNG("道具数量超过上限")) { + await sleep(checkInterval * 4); + log.info("识别到道具数量超过上限,等待消失"); + dowait = true; + } + if (dowait) { + await sleep(10 * checkInterval) + } await clickPNG("点击空白区域继续"); await findPNG("食材加工2"); await sleep(100); @@ -1965,6 +1985,16 @@ async function ingredientProcessing() { /* ===== 2. 两轮扫描 ===== */ // 进入界面先领取一次 if (await clickPNG("全部领取", 3)) { + let dowait = false; + await sleep(4 * checkInterval); + while (await findPNG("道具数量超过上限")) { + await sleep(checkInterval * 4); + log.info("识别到道具数量超过上限,等待消失"); + dowait = true; + } + if (dowait) { + await sleep(10 * checkInterval) + } await clickPNG("点击空白区域继续"); await findPNG("食材加工2"); await sleep(100); diff --git a/repo/js/采集cd管理/manifest.json b/repo/js/采集cd管理/manifest.json index 65eaefa6e..758015709 100644 --- a/repo/js/采集cd管理/manifest.json +++ b/repo/js/采集cd管理/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 1, "name": "采集cd管理", - "version": "2.10.1", + "version": "2.10.4", "bgi_version": "0.44.8", "description": "仅面对会操作文件和读readme的用户,基于文件夹操作自动管理采集路线的cd,会按照路径组的顺序依次运行,直到指定的时间,并会按照给定的cd类型,自动跳过未刷新的路线", "saved_files": [