From 28249dff457e782303ae6dab20bd9de81dcbf3b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B7=E4=B8=AA=E5=90=8D=E5=AD=97=E5=A5=BD=E9=9A=BE?= =?UTF-8?q?=E7=9A=84=E5=96=B5?= <25520958+MisakaAldrich@users.noreply.github.com> Date: Mon, 3 Nov 2025 21:38:55 +0800 Subject: [PATCH] =?UTF-8?q?JS:=20=E9=93=81=E5=8C=A0=E9=93=BAdispose?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- repo/js/铁匠铺/main.js | 45 +++++++++++++++++++++--------------- repo/js/铁匠铺/manifest.json | 6 +++-- 2 files changed, 31 insertions(+), 20 deletions(-) diff --git a/repo/js/铁匠铺/main.js b/repo/js/铁匠铺/main.js index 0d7d4bd55..bb754b869 100644 --- a/repo/js/铁匠铺/main.js +++ b/repo/js/铁匠铺/main.js @@ -245,10 +245,6 @@ async function findAndInteract(target, options = {}) { } } - - - - // 图像识别函数 function recognizeImage(imagePath, x, y, searchWidth, searchHeight) { try { @@ -256,7 +252,9 @@ function recognizeImage(imagePath, x, y, searchWidth, searchHeight) { let recognitionObject = RecognitionObject.TemplateMatch(template, x, y, searchWidth, searchHeight); recognitionObject.threshold = 0.85; recognitionObject.Use3Channels = true; - let result = captureGameRegion().find(recognitionObject); + let ro = captureGameRegion(); + let result = ro.find(recognitionObject); + ro.dispose(); return result.isExist() ? result : null; } catch (error) { if (notice) { @@ -280,7 +278,6 @@ function determineOre(oreType) { return message; } - /*********************** 主逻辑函数 ***********************/ // 模式一:自动识别背包中数量最多的矿石 @@ -345,7 +342,9 @@ async function getMaxOreType() { if (!result || !result.success || !result.clickPosition) continue; let ocrX = result.clickPosition.x - 63; let ocrY = result.clickPosition.y + 60; - let resList = captureGameRegion().findMulti(RecognitionObject.ocr(ocrX, ocrY, 130, 55)); + let ro = captureGameRegion(); + let resList = ro.findMulti(RecognitionObject.ocr(ocrX, ocrY, 130, 55)); + ro.dispose(); let oreNum = 0; if (resList.count > 0) { let text = resList[0].text.replace(/[^\d]/g, ""); @@ -453,15 +452,19 @@ async function tryForgeOre(oreType, skipCheckOres = []) { let clickAttempts = 0; let forgingTriggered = false; while (clickAttempts < 4 && !forgingTriggered) { - let ConfirmButton = captureGameRegion().find(ConfirmDeployButtonRo); + let ro1 = captureGameRegion(); + let ConfirmButton = ro1.find(ConfirmDeployButtonRo); + ro1.dispose(); if (ConfirmButton.isExist()) { ConfirmButton.click(); clickAttempts++; } await sleep(200); - let ocrResults = captureGameRegion().find( + let ro2 = captureGameRegion(); + let ocrResults = ro2.find( RecognitionObject.ocr(ocrRegion.x, ocrRegion.y, ocrRegion.width, ocrRegion.height) ); + ro2.dispose(); if (ocrResults) { // log.info(`${ocrResults.text}`); if (ocrResults.text.includes("今日已无法锻造")) { @@ -532,7 +535,9 @@ async function forgeOre(smithyName, maxOre = null) { let dialogFound = false; for (let attempt = 0; attempt < maxAttempts; attempt++) { for (let i = 0; i < 3; i++) { - let Forge = captureGameRegion().find(ForgeRo); + let ro = captureGameRegion(); + let Forge = ro.find(ForgeRo); + ro.dispose(); if (Forge.isExist()) { log.info("已找到对话界面锻造图标"); await sleep(1000); @@ -552,13 +557,11 @@ async function forgeOre(smithyName, maxOre = null) { if (dialogFound) { let interFaceFound = false; for (let attempt = 0; attempt < maxAttempts; attempt++) { - const ocrRegion = { x: 185, y: 125, width: 670 - 185, height: 175 - 125 }; - let ocrResults = captureGameRegion().find( - RecognitionObject.ocr(ocrRegion.x, ocrRegion.y, ocrRegion.width, ocrRegion.height) - ); let innerFound = false; for (let i = 0; i < 3; i++) { - let ForgingInterFace = captureGameRegion().find(ForgingInterFaceRo); + let ro = captureGameRegion(); + let ForgingInterFace = ro.find(ForgingInterFaceRo); + ro.dispose(); if (ForgingInterFace.isExist()) { log.info("已进入锻造界面"); innerFound = true; @@ -572,11 +575,15 @@ async function forgeOre(smithyName, maxOre = null) { interFaceFound = true; // 领取操作:点击全部领取及确认领取 - let ClaimAll = captureGameRegion().find(ClaimAllRo); + let ro1 = captureGameRegion(); + let ClaimAll = ro1.find(ClaimAllRo); + ro1.dispose(); if (ClaimAll.isExist()) { ClaimAll.click(); await sleep(500); - let ConfirmButton = captureGameRegion().find(ConfirmDeployButtonRo); + let ro = captureGameRegion(); + let ConfirmButton = ro.find(ConfirmDeployButtonRo); + ro.dispose(); if (ConfirmButton.isExist()) { ConfirmButton.click(); await sleep(500); @@ -620,9 +627,11 @@ async function forgeOre(smithyName, maxOre = null) { // 退出锻造前判断配方,点击“锻造队列”,再次确认使用的矿物已经锻造结果 const ocrRegionAfter = { x: 185, y: 125, width: 670 - 185, height: 175 - 125 }; - let ocrResultsAfter = captureGameRegion().find( + let ro2 =captureGameRegion(); + let ocrResultsAfter = ro2.find( RecognitionObject.ocr(ocrRegionAfter.x, ocrRegionAfter.y, ocrRegionAfter.width, ocrRegionAfter.height) ); + ro2.dispose(); if (ocrResultsAfter.text.includes("锻造队列")) { await sleep(1000);//等待僵直 ocrResultsAfter.click(); diff --git a/repo/js/铁匠铺/manifest.json b/repo/js/铁匠铺/manifest.json index 481dc4523..d64a7b273 100644 --- a/repo/js/铁匠铺/manifest.json +++ b/repo/js/铁匠铺/manifest.json @@ -1,14 +1,16 @@ { "manifest_version": 1, "name": "自动锻造魔矿(识图版)", - "version": "2.3.1", + "version": "2.3.2", "bgi_version": "0.48.2", "description": "自动选择铁匠铺和使用矿物去锻造精锻矿。\n \n使用前请阅读“readme”文件以获取更多详细信息。 \n---更新说明--- \n- 请查阅readme", "tags": [ "铁匠铺", "锻造", "精锻用魔矿", - "模板匹配" + "图像识别", + "模板匹配", + "OCR" ], "authors": [ {