From 76856522f265490579070e177dda768703ef5443 Mon Sep 17 00:00:00 2001 From: kaedelcb <57870068+kaedelcb@users.noreply.github.com> Date: Wed, 28 May 2025 15:35:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=9C=B0=E8=84=89=E8=8A=B1?= =?UTF-8?q?=E5=AF=BB=E6=89=BE=E9=80=BB=E8=BE=91=20(#942)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优化地脉花寻找逻辑 --- .../AAA 地脉花注意事项.txt | 5 +- repo/js/Auto全自动“枫丹”地脉花/main.js | 113 ++++++++++++++---- repo/js/Auto全自动“枫丹”地脉花/manifest.json | 2 +- 3 files changed, 93 insertions(+), 27 deletions(-) diff --git a/repo/js/Auto全自动“枫丹”地脉花/AAA 地脉花注意事项.txt b/repo/js/Auto全自动“枫丹”地脉花/AAA 地脉花注意事项.txt index 3c9e83f6..43b6e468 100644 --- a/repo/js/Auto全自动“枫丹”地脉花/AAA 地脉花注意事项.txt +++ b/repo/js/Auto全自动“枫丹”地脉花/AAA 地脉花注意事项.txt @@ -56,4 +56,7 @@ v.2.1版本:20250512 1、更改UID识别方法。(适配原神UI改变) v.2.2版本:20250524 -1、参考D捣蛋和秋云佬的代码,加入异步检测战斗结束。 \ No newline at end of file +1、参考D捣蛋和秋云佬的代码,加入异步检测战斗结束。 + +v.2.3版本:20250528 +1、优化寻找地脉花逻辑。 \ No newline at end of file diff --git a/repo/js/Auto全自动“枫丹”地脉花/main.js b/repo/js/Auto全自动“枫丹”地脉花/main.js index 30c5660c..1d706c61 100644 --- a/repo/js/Auto全自动“枫丹”地脉花/main.js +++ b/repo/js/Auto全自动“枫丹”地脉花/main.js @@ -71,7 +71,7 @@ var Rewards = settings.Rewards ? settings.Rewards : false; // ture 领取冒险点奖励,false 不领取冒险点奖励 var Fligtin = false; //领取冒险点奖励标志。 var FINDagin = 0; //地脉花寻找标志。lv.1.2新增,用于判断是否找线路余下地脉花。 - var tolerance = 25; + var tolerance = 30; var position ={}; var Lastexecution = false;//线路执行标志,用于判断上一线路是否执行。 var Fightquick = settings.Fightquick ? settings.Fightquick : false; @@ -81,6 +81,18 @@ const ocrRegion1 = { x: 800, y: 200, width: 300, height: 100 }; // 中心区域 const ocrRo1 = RecognitionObject.ocr(ocrRegion1.x, ocrRegion1.y, ocrRegion1.width, ocrRegion1.height); + + filePath = "" + // 读取原始次数配置 + var rawTimes = settings.times*2 ? settings.times : "12"; + var color = settings.color ? settings.color : 1; + var BIAOZZ = "assets/model/BIAOZ.bmp" + + if (color == 2){ var DIMAIHUA = "assets/model/DIMAIHUA-huank.bmp";} + else if (color == 1){var DIMAIHUA = "assets/model/DIMAIHUA-lank.bmp";} + else{var DIMAIHUA = "assets/model/DIMAIHUA-lank.bmp";} + + log.debug(`DEBUG:${SHUV}.${color}.${rawTimes}`);//调试LOG if (Rewards){log.warn("结束后领励练点和提交每日!");if(settings.nh === undefined || settings.nh === "") {log.warn("好感队未配置,领奖励时不切换队伍")}} if (settings.nh === undefined || settings.nh === "") { log.warn("好感队禁用!");haoganq=0}else{var haogandui = settings.nh;haoganq=1;if(settings.n === undefined ) {throw new Error("好感队已经设置,请填战斗队伍!")}} @@ -89,16 +101,9 @@ if (color == 1) {log.warn("地脉类型 :'蓝色-经验书花!'");}else{log.warn("地脉类型 :'黄色-摩拉花!'")} let nowuidString = settings.nowuid ? settings.nowuid : ""; - filePath = "" - // 读取原始次数配置 - var rawTimes = settings.times*2 ? settings.times : "12"; - var color = settings.color ? settings.color : 1; - var BIAOZZ = "assets/model/BIAOZ.bmp" + - if (color == 2){var DIMAIHUA = "assets/model/DIMAIHUA-huank.bmp";} - else if (color == 1){var DIMAIHUA = "assets/model/DIMAIHUA-lank.bmp";} - else{var DIMAIHUA = "assets/model/DIMAIHUA-lank.bmp";} @@ -228,14 +233,14 @@ { line: 2, flower: 3, x: 1117, y: 801 }, { line: 2, flower: 4, x: 1082, y: 896 }, { line: 2, flower: 5, x: 1013, y: 883 }, - // 线路3 + // 线路3√ { line: 3, flower: 1, x: 1216, y: 661 }, { line: 3, flower: 2, x: 1239, y: 685 }, { line: 3, flower: 3, x: 1282, y: 642 }, { line: 3, flower: 4, x: 1335, y: 639 }, // 线路4 - { line: 4, flower: 1, x: 983, y: 672 }, - { line: 4, flower: 2, x: 932, y: 660 }, + { line: 4, flower: 1, x: 965, y: 672 }, + { line: 4, flower: 2, x: 921, y: 660 }, { line: 4, flower: 3, x: 886, y: 660 }, { line: 4, flower: 4, x: 876, y: 625 }, // 线路5 @@ -274,6 +279,7 @@ await click(1844,1021); await sleep(500); await click(1446,350); + await sleep(500); let XIAN6 = await imageRecognition(DIMAIHUA,1,0,0,387,0,700,200);if (XIAN6.found){ log.info("地脉花位置: X:"+XIAN6.x+" Y:"+XIAN6.y); position = {line:6,flower:1}; @@ -293,15 +299,16 @@ log.info("地脉花位置: X:"+XIAN123.x+" Y:"+XIAN123.y); const recognizedCoord = { x: XIAN123.x, y: XIAN123.y }; position = findFlowerPositionWithTolerance(recognizedCoord, tolerance); - if (position.line==3){position = findFlowerPositionWithTolerance(recognizedCoord, 20);} + if (position.line==3){position = findFlowerPositionWithTolerance(recognizedCoord, tolerance);} if (position) { return true; } else { log.info(`无法找到花朵位置(在容错范围内)。`);return false; } } - await moveMouseTo(132,783); await sleep(500); + await moveMouseTo(132,783); + await sleep(800); let XIAN4 = await imageRecognition(DIMAIHUA,1,0,0); if (XIAN4.found){ log.info("地脉花位置: X:"+XIAN4.x+" Y:"+XIAN4.y); @@ -313,6 +320,7 @@ log.info(`无法找到花朵位置(在容错范围内)。`);return false; } } + await sleep(500); await moveMouseTo(1064,1079); await sleep(200); let XIAN66 = await imageRecognition(DIMAIHUA,1,0,0); @@ -328,22 +336,79 @@ }else{throw new Error("线路出错,退出!")} } - // 函数:根据坐标查找花朵位置 function findFlowerPositionWithTolerance(coord, tolerance) { + let closestFlower = null; // 用于记录最近的花朵 + let closestDistance = Infinity; // 初始化最近距离为无穷大 + let matches = []; // 用于存储所有匹配的花朵 + + // 遍历所有花朵坐标,检查是否在容错范围内 for (let i = 0; i < allFlowerCoords.length; i++) { - const flower = allFlowerCoords[i]; - if (Math.abs(flower.x - coord.x) <= tolerance && Math.abs(flower.y - coord.y) <= tolerance) { - return { line: flower.line, flower: flower.flower }; + const flower = allFlowerCoords[i]; + const distance = Math.sqrt(Math.pow(flower.x - coord.x, 2) + Math.pow(flower.y - coord.y, 2)); + + if (distance <= tolerance) { + matches.push(flower); // 在容错范围内,添加到匹配列表 + } else { + // 如果不在容错范围内,则检查是否是当前最近的花朵 + if (distance < closestDistance) { + closestFlower = flower; + closestDistance = distance; + } + } } + + // 根据匹配情况返回结果 + if (matches.length === 1) { + // 找到一个符合项,返回这个项 + log.warn("找到了一个匹配的花朵!", matches[0].line,matches[0].flower); + return { line: matches[0].line, flower: matches[0].flower,x: matches[0].x, y: matches[0].y }; + } else if (matches.length > 1) { + // 找到多个符合项,处理逻辑 + let minXDiff = Infinity; + let minYDiff = Infinity; + let minXFlower = null; + let minYFlower = null; + + for (let i = 0; i < matches.length; i++) { + const diffX = Math.abs(matches[i].x - coord.x); + const diffY = Math.abs(matches[i].y - coord.y); + + if (diffX < minXDiff) { + minXDiff = diffX; + minXFlower = matches[i]; + } + + if (diffY < minYDiff) { + minYDiff = diffY; + minYFlower = matches[i]; + } + } + + // 比对X轴和Y轴的最小差距,返回对应的花朵 + if (minXDiff < minYDiff) { + log.warn("找到了多个匹配的花朵,选择X轴差距最小的花朵!", minXFlower.line,minXFlower.flower); + return { line: minXFlower.line, flower: minXFlower.flower,x: minXFlower.x, y: minXFlower.y }; + } else { + log.warn("找到了多个匹配的花朵,选择Y轴差距最小的花朵!", minYFlower.line,minYFlower.flower); + return { line: minYFlower.line, flower: minYFlower.flower,x: minYFlower.x, y: minYFlower.y }; + } + } else { + // 没有找到符合项,返回全局最近的花朵 + if (closestFlower) { + log.warn("没有找到地脉花,返回最近地脉花!", closestFlower.line,closestFlower.flower); + return { line: closestFlower.line, flower: closestFlower.flower,x: closestFlower.x, y: closestFlower.y }; + } else { + // 如果没有找到任何花朵,返回一个默认值或抛出错误(根据实际需求决定) + throw new Error("未找到任何花朵"); + } } - return null; // 如果没有找到匹配的坐标,返回null } //寻找地脉溢口,文字识别不到转圈寻找,不管有没找到都执行战斗,最后领取奖励判断是否继续执行 async function VeinEntrance() { for (let i = 0;i < 2;i++) { let JIECHU = await Textocr("接触地脉溢口",3,2,0,1188,358,200,400); - if (JIECHU.found){await keyPress("F");await dispatcher.addTimer(new RealtimeTimer("AutoPick", { "forceInteraction": true }));break;}else{if(i = 1){ + if (JIECHU.found){await keyPress("F");await dispatcher.addTimer(new RealtimeTimer("AutoPick", { "forceInteraction": true }));await keyPress("F");break;}else{if(i == 1){ log.warn("没找到地脉花,尝试强制转圈寻找,不管有没找到都执行战斗..."); dispatcher.addTimer(new RealtimeTimer("AutoPick", { "forceInteraction": true })); await keyDown("W");await sleep(500);await keyUp("W"); @@ -575,12 +640,10 @@ await sleep(2000); await dispatcher.runTask(new SoloTask("AutoFight")); }else - { - shouldContinueChecking = false; + { if(!await autoFight(Fighttimeout)){ - log.warn("战斗失败,测试寻找地脉花入口"); - } - shouldContinueChecking = true; + log.warn("战斗失败,尝试寻找地脉花入口"); + } } //执行到地脉花地点的寻路脚本 diff --git a/repo/js/Auto全自动“枫丹”地脉花/manifest.json b/repo/js/Auto全自动“枫丹”地脉花/manifest.json index 67c4ca14..9b3f6d3d 100644 --- a/repo/js/Auto全自动“枫丹”地脉花/manifest.json +++ b/repo/js/Auto全自动“枫丹”地脉花/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 1, "name": "地脉花-可禁UID/领每日/好感队切换", - "version": "2.1", + "version": "2.3", "bgi_version": "0.44.8", "description": "枫丹地脉花,蓝花金花通用。生存压力大,请带盾奶;避免纯水输出,请注意说明文件。如有BUG请联系作者QQ:119996800", "tags":["地脉花"],