From 78e85c2dddfd01859f22badeb2f6954807dbaee8 Mon Sep 17 00:00:00 2001 From: mno <718135749@qq.com> Date: Fri, 24 Oct 2025 17:23:36 +0800 Subject: [PATCH] =?UTF-8?q?js=EF=BC=9A=E7=8B=97=E7=B2=AE=E5=92=8C=E9=94=84?= =?UTF-8?q?=E5=9C=B0=E4=BF=AE=E4=BF=AEbug=EF=BC=8C=E5=8A=A0=E7=82=B9?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=20(#2234)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * js:锄地一条龙1.9.7 新增异常处理,检测到被冻结时连点空格挣脱 * js:联机狗粮1.5.9 1.自动进入时将房主强制指定为1号,队员强制指定为0号(不指定) 2.禁用房主名称检测 --- repo/js/ArtifactsGroupPurchasing/main.js | 63 +++++++++++++----- .../js/ArtifactsGroupPurchasing/manifest.json | 2 +- .../js/ArtifactsGroupPurchasing/settings.json | 12 ++-- .../{其他 => 00狗粮(0.8)}/月萤虫.png | Bin .../{其他 => 00狗粮(0.8)}/某晶蝶.png | Bin .../{其他 => 00狗粮(0.8)}/镇压沙暴.png | Bin .../AutoHoeingOneDragon/assets/解除冰冻.png | Bin 0 -> 3590 bytes repo/js/AutoHoeingOneDragon/main.js | 33 ++++++++- repo/js/AutoHoeingOneDragon/manifest.json | 2 +- 9 files changed, 86 insertions(+), 26 deletions(-) rename repo/js/AutoHoeingOneDragon/assets/targetItems/{其他 => 00狗粮(0.8)}/月萤虫.png (100%) rename repo/js/AutoHoeingOneDragon/assets/targetItems/{其他 => 00狗粮(0.8)}/某晶蝶.png (100%) rename repo/js/AutoHoeingOneDragon/assets/targetItems/{其他 => 00狗粮(0.8)}/镇压沙暴.png (100%) create mode 100644 repo/js/AutoHoeingOneDragon/assets/解除冰冻.png diff --git a/repo/js/ArtifactsGroupPurchasing/main.js b/repo/js/ArtifactsGroupPurchasing/main.js index 0ba1000b2..dbc89d9e6 100644 --- a/repo/js/ArtifactsGroupPurchasing/main.js +++ b/repo/js/ArtifactsGroupPurchasing/main.js @@ -12,6 +12,7 @@ let TMthreshold = +settings.TMthreshold || 0.9; (async function () { setGameMetrics(1920, 1080, 1); + if (settings.logName) { await processArtifacts(); } @@ -48,6 +49,7 @@ let TMthreshold = +settings.TMthreshold || 0.9; //构造加入idx号世界的autoEnter的settings let autoEnterSettings; if (idx === yourIndex) { + settings.forceGroupNumber = 1;//将房主强制指定为房主 // 1. 先收集真实存在的白名单 const permits = {}; let permitIndex = 1; @@ -73,6 +75,7 @@ let TMthreshold = +settings.TMthreshold || 0.9; log.info(`等待他人进入自己世界,目标人数:${autoEnterSettings.maxEnterCount}`); notification.send(`等待他人进入自己世界,目标人数:${autoEnterSettings.maxEnterCount}`); } else { + settings.forceGroupNumber = 0;//取消强制指定 // 构造队员配置 autoEnterSettings = { enterMode: "进入他人世界", @@ -113,6 +116,7 @@ let TMthreshold = +settings.TMthreshold || 0.9; } //执行对应的联机狗粮 await runGroupPurchasing(false); + settings.forceGroupNumber = 0;//解除强制指定 } //如果勾选了额外,在结束后再执行一次额外路线 if (settings.runExtra) { @@ -130,27 +134,52 @@ let TMthreshold = +settings.TMthreshold || 0.9; )(); async function checkP1Name(p1Name) { - await genshin.returnMainUi(); - await keyPress("F2"); - await sleep(2000); - const gameRegion = captureGameRegion(); - const resList = gameRegion.findMulti(RecognitionObject.ocr(400, 170, 300, 55)); - gameRegion.dispose(); - let hit = null; - let txt; - for (const res of resList) { - txt = res.text.trim(); - if (txt === p1Name) { hit = txt; break; } - } - if (hit) { - log.info(`识别到房主为${hit},与预期相符`); + if (true) { + //log.info("禁用了房主名称校验,直接视为通过"); + //强制禁用房主检测 return true; - } else { - log.warn(`识别结果为${txt},与预期的${p1Name}不符,重试`); - return false; } + try { + // 加载目标 PNG + const targetPngs = await readFolder(targetsPath, false); + for (const f of targetPngs) { + if (!f.fullPath.endsWith('.png')) continue; + const mat = file.ReadImageMatSync(f.fullPath); + const ro = RecognitionObject.TemplateMatch(mat, 395, 158, 588, 65); + const baseName = f.fileName.replace(/\.png$/i, ''); + targetsRo.push({ ro, baseName }); + } + log.info(`加载完成共 ${targetsRo.length} 个目标`); + await genshin.returnMainUi(); + await keyPress("F2"); + await sleep(2000); + const gameRegion = captureGameRegion(); + for (const { ro, baseName } of targetsRo) { + if (gameRegion.find(ro).isExist()) { gameRegion.dispose(); log.info(`找到房主为${baseName}`); return true; } + } + gameRegion.dispose(); + } catch { } + try { + const gameRegion = captureGameRegion(); + const resList = gameRegion.findMulti(RecognitionObject.ocr(400, 170, 300, 55)); + gameRegion.dispose(); + let hit = null; + let txt; + for (const res of resList) { + txt = res.text.trim(); + if (txt === p1Name) { hit = txt; break; } + } + if (hit) { + log.info(`识别到房主为${hit},与预期相符`); + return true; + } else { + log.warn(`识别结果为${txt},与预期的${p1Name}不符,重试`); + return false; + } + } catch { return false; } } + /** * 群收尾 / 额外路线统一入口 * diff --git a/repo/js/ArtifactsGroupPurchasing/manifest.json b/repo/js/ArtifactsGroupPurchasing/manifest.json index c6014729b..28886bcf8 100644 --- a/repo/js/ArtifactsGroupPurchasing/manifest.json +++ b/repo/js/ArtifactsGroupPurchasing/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 1, "name": "AAA狗粮联机团购", - "version": "1.5.6", + "version": "1.5.9", "tags": [ "狗粮" ], diff --git a/repo/js/ArtifactsGroupPurchasing/settings.json b/repo/js/ArtifactsGroupPurchasing/settings.json index 58219ae3b..45810b942 100644 --- a/repo/js/ArtifactsGroupPurchasing/settings.json +++ b/repo/js/ArtifactsGroupPurchasing/settings.json @@ -96,6 +96,12 @@ "type": "input-text", "label": "运行时使用角色的序号\n将在进入联机模式前尝试切换到对应序号的角色" }, + { + "name": "TMthreshold", + "type": "input-text", + "label": "拾取使用的匹配阈值\n观察到误捡可适当调高\n观察到漏捡可适当调低", + "default": "0.9" + }, { "name": "p1EndingRoute", "type": "select", @@ -143,11 +149,5 @@ "踏鞴砂" ], "default": "踏鞴砂" - }, - { - "name": "TMthreshold", - "type": "input-text", - "label": "拾取使用的匹配阈值\n观察到误捡可适当调高\n观察到漏捡可适当调低", - "default": "0.9" } ] \ No newline at end of file diff --git a/repo/js/AutoHoeingOneDragon/assets/targetItems/其他/月萤虫.png b/repo/js/AutoHoeingOneDragon/assets/targetItems/00狗粮(0.8)/月萤虫.png similarity index 100% rename from repo/js/AutoHoeingOneDragon/assets/targetItems/其他/月萤虫.png rename to repo/js/AutoHoeingOneDragon/assets/targetItems/00狗粮(0.8)/月萤虫.png diff --git a/repo/js/AutoHoeingOneDragon/assets/targetItems/其他/某晶蝶.png b/repo/js/AutoHoeingOneDragon/assets/targetItems/00狗粮(0.8)/某晶蝶.png similarity index 100% rename from repo/js/AutoHoeingOneDragon/assets/targetItems/其他/某晶蝶.png rename to repo/js/AutoHoeingOneDragon/assets/targetItems/00狗粮(0.8)/某晶蝶.png diff --git a/repo/js/AutoHoeingOneDragon/assets/targetItems/其他/镇压沙暴.png b/repo/js/AutoHoeingOneDragon/assets/targetItems/00狗粮(0.8)/镇压沙暴.png similarity index 100% rename from repo/js/AutoHoeingOneDragon/assets/targetItems/其他/镇压沙暴.png rename to repo/js/AutoHoeingOneDragon/assets/targetItems/00狗粮(0.8)/镇压沙暴.png diff --git a/repo/js/AutoHoeingOneDragon/assets/解除冰冻.png b/repo/js/AutoHoeingOneDragon/assets/解除冰冻.png new file mode 100644 index 0000000000000000000000000000000000000000..8be24306a206290be5c63a7c272373edaae32b35 GIT binary patch literal 3590 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 M07*qoM6N<$f|6F~h5!Hn literal 0 HcmV?d00001 diff --git a/repo/js/AutoHoeingOneDragon/main.js b/repo/js/AutoHoeingOneDragon/main.js index d2d712f50..e6952be4c 100644 --- a/repo/js/AutoHoeingOneDragon/main.js +++ b/repo/js/AutoHoeingOneDragon/main.js @@ -13,6 +13,7 @@ let gameRegion; let targetItemPath = "assets/targetItems"; let mainUITemplate = file.ReadImageMatSync("assets/MainUI.png"); let itemFullTemplate = file.ReadImageMatSync("assets/itemFull.png"); +let frozenTemplate = file.ReadImageMatSync("assets/解除冰冻.png"); let targetItems; let rollingDelay = (+settings.rollingDelay || 25); @@ -559,8 +560,38 @@ async function runPath(fullPath, map_name) { })(); const errorProcessTask = (async () => { + async function checkFrozen() { + const maxAttempts = 1; + let attempts = 0; + let frozenGameRegion; + while (attempts < maxAttempts && state.running) { + try { + const recognitionObject = RecognitionObject.TemplateMatch(frozenTemplate, 1379, 574, 1463 - 1379, 613 - 574); + frozenGameRegion = captureGameRegion(); + const result = frozenGameRegion.find(recognitionObject); + frozenGameRegion.dispose(); + if (result.isExist()) { + return true; + } + } catch (error) { + log.error(`识别图像时发生异常: ${error.message}`); + if (!state.running) break; + return false; + } + attempts++; + } + return false; + } while (state.running) { - await sleep(1000); + if (await checkFrozen()) { + log.info("检测到冻结,尝试挣脱"); + for (let m = 0; m < 3; m++) { + keyPress("VK_SPACE"); + await sleep(30); + } + } else { + await sleep(500); + } } })(); diff --git a/repo/js/AutoHoeingOneDragon/manifest.json b/repo/js/AutoHoeingOneDragon/manifest.json index 835d7f6e4..05459e377 100644 --- a/repo/js/AutoHoeingOneDragon/manifest.json +++ b/repo/js/AutoHoeingOneDragon/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 1, "name": "锄地一条龙", - "version": "1.9.6", + "version": "1.9.7", "description": "一站式解决自动化锄地,支持只拾取狗粮,请仔细阅读README.md后使用", "authors": [ {