From 3ae874f4be12e54190b3daf36e910fba0b1c10b4 Mon Sep 17 00:00:00 2001 From: JJMdzh Date: Mon, 25 Aug 2025 19:37:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E8=A7=A3=E5=9C=A3=E9=81=97=E7=89=A9?= =?UTF-8?q?=20=E8=83=8C=E5=8C=85=E8=BF=87=E6=9C=9F=E5=BC=B9=E7=AA=97?= =?UTF-8?q?=E7=89=88=20(#1701)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 附带打开背包时,自动点击过期物品弹窗 --- .../assets/Picture/image1.png | Bin 0 -> 18029 bytes .../assets/icon/Comfirm.png | Bin 0 -> 1261 bytes .../分解圣遗物 带背包过期弹窗自动点击/main.js | 96 ++++++++++++++++++ .../manifest.json | 13 +++ .../settings.json | 20 ++++ 5 files changed, 129 insertions(+) create mode 100644 repo/js/分解圣遗物 带背包过期弹窗自动点击/assets/Picture/image1.png create mode 100644 repo/js/分解圣遗物 带背包过期弹窗自动点击/assets/icon/Comfirm.png create mode 100644 repo/js/分解圣遗物 带背包过期弹窗自动点击/main.js create mode 100644 repo/js/分解圣遗物 带背包过期弹窗自动点击/manifest.json create mode 100644 repo/js/分解圣遗物 带背包过期弹窗自动点击/settings.json diff --git a/repo/js/分解圣遗物 带背包过期弹窗自动点击/assets/Picture/image1.png b/repo/js/分解圣遗物 带背包过期弹窗自动点击/assets/Picture/image1.png new file mode 100644 index 0000000000000000000000000000000000000000..85ecefe45cacacc36e61fbc577b4d0cace1f8a13 GIT binary patch literal 18029 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 UWh?l9V*tSHFRMR`F1Y>uKlQz1lmGw# literal 0 HcmV?d00001 diff --git a/repo/js/分解圣遗物 带背包过期弹窗自动点击/assets/icon/Comfirm.png b/repo/js/分解圣遗物 带背包过期弹窗自动点击/assets/icon/Comfirm.png new file mode 100644 index 0000000000000000000000000000000000000000..201445d06f23e0044a5d944714f767c31d982b3a GIT binary patch literal 1261 zcmV3^RTPH5wa+>C_V%`gLJQPttC3JhTd;yrARt6R zUPD8}Tel7jhS1s!@4aHEr~wM_$#&TM6>L8Y zxj_g7vMI0$T)HOg?1a-7pf(M&=L(rLw9FC?o>Y2nK;Vr*YAp;z@b1gP>=uC#zTB;B z+5){dpf(GEFGw*%je%5Ps7k|y9yo9k=FNbnW?_02Xac*AK*}2~Cj+ih7-I+%VewpH z=>tGPIelJv|63TyDcQ85s#t4>?b=$4s#0B{T)nPr{1gUy6g=h81<>9kL{>1yphb}z z0MGMKRdOLb^)QeE64-tSx-LU?raT!&Lrn%c&pG+vL46G@Zi9T}9P>PHxTgSN0v&Sz z3tV3sLVgmY3WPB%o$qWU1vvkwlMDz{Y6#OPR9uh7F-K_e!1}4I-mf#e)wXK^LS*@FRQ)j0Je4t%UYo6Zl|@yEzWRnze}uq zG?ZYO3Ya+!UUp)mhm5Dm>Kgj8K4Mr(tg=oat5y z5!7U1cBAn4LZP`Cr_ET|_7klC(5b;Q<@qpr6IaL;pkX?!e@0l+2D9!0yrSWxw7NJZ zKm=#c!QNkCNqy{xTdp3qKrz z?++5*O~;YG}I`nr6b3tdjB}A3|SF=(+@*T`t)&fnvs~V&jsQypF9) zp2!YeMN3!Dl;^H4{ur0BTQQ+>F5<#9R>&p;qjr+T^*_SKAx0IfO~#-7KOjj$Oe)Ra X+5Fmk<6x2400000NkvXXu0mjfM`bz| literal 0 HcmV?d00001 diff --git a/repo/js/分解圣遗物 带背包过期弹窗自动点击/main.js b/repo/js/分解圣遗物 带背包过期弹窗自动点击/main.js new file mode 100644 index 000000000..156eed1ea --- /dev/null +++ b/repo/js/分解圣遗物 带背包过期弹窗自动点击/main.js @@ -0,0 +1,96 @@ +// 自定义 basename 函数 +function basename(filePath) { + const lastSlashIndex = filePath.lastIndexOf('\\'); // 或者使用 '/',取决于你的路径分隔符 + return filePath.substring(lastSlashIndex + 1); +} + +(async function () { + setGameMetrics(1920, 1080, 1); // 设置游戏分辨率 + await genshin.returnMainUi(); + keyPress("B"); await sleep(1000); + + // 定义图标文件夹路径 + const iconDir = "assets/icon"; + const pictureDir = "assets/Picture"; + + const iconFilePaths = file.ReadPathSync(iconDir); + const pictureFilePaths = file.ReadPathSync(pictureDir); + + const iconRecognitionObjects = []; + for (const filePath of iconFilePaths) { + const mat = file.readImageMatSync(filePath); + if (mat.empty()) { + log.error(`加载图标失败:${filePath}`); + continue; + } + const recognitionObject = RecognitionObject.TemplateMatch(mat, 0, 0, 1920, 1080); + iconRecognitionObjects.push({ name: basename(filePath), ro: recognitionObject }); + } + + const pictureRegions = []; + for (const filePath of pictureFilePaths) { + const mat = file.readImageMatSync(filePath); + if (mat.empty()) { + log.error(`加载图库失败:${filePath}`); + continue; + } + pictureRegions.push({ name: basename(filePath), region: new ImageRegion(mat, 0, 0) }); + } + + const foundRegions = []; + + for (const picture of pictureRegions) { + for (const icon of iconRecognitionObjects) { + // 在图库中查找图标信息 + const foundRegion = picture.region.find(icon.ro); + if (foundRegion.isExist()) { + foundRegions.push({ + pictureName: picture.name, + iconName: icon.name, + region: foundRegion + }); + } + } + } + + for (const foundRegion of foundRegions) { + + const ra = captureGameRegion(); + const tolerance = 1; // 容错区间 + const iconMat = file.ReadImageMatSync(`assets/icon/${foundRegion.iconName}`); + const recognitionObject = RecognitionObject.TemplateMatch(iconMat, foundRegion.region.x-tolerance, foundRegion.region.y-tolerance, foundRegion.region.width+2*tolerance, foundRegion.region.height+2*tolerance); + recognitionObject.threshold = 0.85; // 设置识别阈值为 0.9 + const result = ra.find(recognitionObject); + if (result.isExist() && result.x > 0 && result.y > 0) { + // 获取图标的中心坐标并取整 + const x = Math.round(foundRegion.region.x + foundRegion.region.width / 2); + const y = Math.round(foundRegion.region.y + foundRegion.region.height / 2); + + await click(x, y); + log.info(`点击 ${foundRegion.iconName}成功,位置: (${x}, ${y})`); + await sleep(500); // 等待一段时间 + } else { + // 如果未找到图标,打印警告信息 + log.info(`未发现背包弹窗:${foundRegion.iconName}`); + } + ra.dispose(); + } + + const coords = [ + [670, 40], [660, 1010], [300, 1020], + // [200, 150, 500], [200, 220, 500], + [200, 300, 500, settings.autoSalvage3 !== '是'], + [200, 380, 500, settings.autoSalvage4 !== '是'], + [340, 1000], [1720, 1015], [1320, 756], + [1840, 45, 1500], [1840, 45], [1840, 45] + ]; + + for (const coord of coords) { + const [x, y, delay = 1000, condition = true] = coord; // 默认值处理 + if (condition) { + click(x, y); + await sleep(delay); + } + } +})(); + diff --git a/repo/js/分解圣遗物 带背包过期弹窗自动点击/manifest.json b/repo/js/分解圣遗物 带背包过期弹窗自动点击/manifest.json new file mode 100644 index 000000000..41be3992c --- /dev/null +++ b/repo/js/分解圣遗物 带背包过期弹窗自动点击/manifest.json @@ -0,0 +1,13 @@ +{ + "manifest_version": 1, + "name": "选择级别 分解圣遗物 背包过期弹窗版", + "version": "1.0", + "description": "可选是否分解三四级圣遗物,附带打开背包时,自动点击过期物品弹窗", + "authors": [ + { + "name": "吉吉喵", + } + ], + "settings_ui": "settings.json", + "main": "main.js", +} \ No newline at end of file diff --git a/repo/js/分解圣遗物 带背包过期弹窗自动点击/settings.json b/repo/js/分解圣遗物 带背包过期弹窗自动点击/settings.json new file mode 100644 index 000000000..dc53c4470 --- /dev/null +++ b/repo/js/分解圣遗物 带背包过期弹窗自动点击/settings.json @@ -0,0 +1,20 @@ +[ + { + "name": "autoSalvage4", + "type": "select", + "label": "自动分解包括4星圣遗物(默认:是)", + "options": [ + "是", + "否" + ] + }, + { + "name": "autoSalvage3", + "type": "select", + "label": "自动分解包括3星圣遗物(默认:是)", + "options": [ + "是", + "否" + ] + }, +] \ No newline at end of file