diff --git a/repo/js/Auto全自动“枫丹”地脉花/AAA 地脉花注意事项.txt b/repo/js/Auto全自动“枫丹”地脉花/AAA 地脉花注意事项.txt index 43b6e468..b92bdb1f 100644 --- a/repo/js/Auto全自动“枫丹”地脉花/AAA 地脉花注意事项.txt +++ b/repo/js/Auto全自动“枫丹”地脉花/AAA 地脉花注意事项.txt @@ -59,4 +59,9 @@ v.2.2版本:20250524 1、参考D捣蛋和秋云佬的代码,加入异步检测战斗结束。 v.2.3版本:20250528 -1、优化寻找地脉花逻辑。 \ No newline at end of file +1、优化寻找地脉花逻辑。 + +v.2.4版本:20250613 +1、特殊处理第二线路第5朵花,避免传送到螃蟹。 +2、调整领取OCR范围,添加选择优先使用的树脂类型(适配3次地脉双倍)。 +3、调整按次数执行逻辑,解决次数大于单线路打不够次数的问题。 diff --git a/repo/js/Auto全自动“枫丹”地脉花/main.js b/repo/js/Auto全自动“枫丹”地脉花/main.js index 1d706c61..b39405f4 100644 --- a/repo/js/Auto全自动“枫丹”地脉花/main.js +++ b/repo/js/Auto全自动“枫丹”地脉花/main.js @@ -75,35 +75,44 @@ var position ={}; var Lastexecution = false;//线路执行标志,用于判断上一线路是否执行。 var Fightquick = settings.Fightquick ? settings.Fightquick : false; - var Fighttimeout = settings.timeout = settings.timeout * 1000 || 120000; + var Fighttimeout = settings.timeout = settings.timeout * 1000 || 240000; const ocrRegion2 = { x: 0, y: 200, width: 300, height: 300 }; // 追踪任务区域 const ocrRo2 = RecognitionObject.ocr(ocrRegion2.x, ocrRegion2.y, ocrRegion2.width, ocrRegion2.height); const ocrRegion1 = { x: 800, y: 200, width: 300, height: 100 }; // 中心区域 const ocrRo1 = RecognitionObject.ocr(ocrRegion1.x, ocrRegion1.y, ocrRegion1.width, ocrRegion1.height); - + var firstresin = settings.firstresin ? settings.firstresin : false; + var onerewards = firstresin ? "使用原粹树脂" : "使用浓缩树脂"; + var secendrewards = firstresin ? "使用浓缩树脂" : "使用原粹树脂"; + var doneCount = 0; filePath = "" // 读取原始次数配置 - var rawTimes = settings.times*2 ? settings.times : "12"; + var rawTimes = settings.times*2 ? settings.times : "6"; var color = settings.color ? settings.color : 1; var BIAOZZ = "assets/model/BIAOZ.bmp" + var timesValue = 12; // 设置默认值 + var num = parseFloat(rawTimes) * 2; // 直接计算乘以2后的值,并尝试转换为浮点数 + + // 如果输入是有效的数字,并且在合理范围内,则更新timesValue + if (/^-?\d+\.?\d*$/.test(rawTimes) && num >= 1 && num <= 198) { + timesValue = Math.max(1, Math.min(198, Math.floor(num))); // 确保timesValue为整数,并且不超过上限 + } + var timesConfig = { value: timesValue }; + 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("好感队已经设置,请填战斗队伍!")}} if (settings.n === undefined || settings.n === "") { log.warn("队伍名称未配置,不更换队伍!");SHUOVER=1;} - if (SHUV == 1) {log.warn("线路模式 :'单线路!'");}else{log.warn("线路模式 :'树脂耗尽模式,强制打完整体线路!'");rawTimes=12} - if (color == 1) {log.warn("地脉类型 :'蓝色-经验书花!'");}else{log.warn("地脉类型 :'黄色-摩拉花!'")} - let nowuidString = settings.nowuid ? settings.nowuid : ""; - - - - + if (SHUV == 1) {log.warn(`线路模式 :' 按次数刷取 ${timesConfig.value/2} 次' `);}else{log.warn("线路模式 :' 浓缩和原粹树脂耗尽模式(最多99次) '");timesConfig.value = 198;} + if (color == 1) {log.warn("地脉类型 :' 蓝色-经验书花!'");}else{log.warn("地脉类型 :' 黄色-摩拉花!'")} + let nowuidString = settings.nowuid ? settings.nowuid : ""; + + @@ -210,15 +219,8 @@ }; - var timesValue = 12; // 设置默认值 - var num = parseFloat(rawTimes) * 2; // 直接计算乘以2后的值,并尝试转换为浮点数 - - // 如果输入是有效的数字,并且在合理范围内,则更新timesValue - if (/^-?\d+\.?\d*$/.test(rawTimes) && num >= 1 && num <= 24) { - timesValue = Math.max(1, Math.min(12, Math.floor(num))); // 确保值在1到12之间,并向下取整 - } + - var timesConfig = { value: timesValue }; const allFlowerCoords = [ // 线路1 { line: 1, flower: 1, x: 773, y: 669 }, @@ -408,7 +410,13 @@ 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 }));await keyPress("F");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"); @@ -420,14 +428,15 @@ dispatcher.addTimer(new RealtimeTimer("AutoPick", { "forceInteraction": true })); await keyDown("W");await sleep(1500);await keyUp("W"); dispatcher.addTimer(new RealtimeTimer("AutoPick", { "forceInteraction": false })); - break;} + break; + } } } } //定义领取动作,好感队伍是否添加? async function claimRewards() { - log.info("尝试领取奖励,优先使用浓缩~"); + log.info(`尝试领取奖励,优先${onerewards}'`); let SHUN01 = await Textocr("接触地脉之花",1.5,2,0,1188,358,200,400); if (SHUN01.found) { log.info("找到地脉之花,开始领取奖励..."); @@ -447,17 +456,17 @@ } } await sleep(500); - let SHUN = await Textocr("使用浓缩树脂",1,1,0,672,726,191,53); - let SHUY = await Textocr("使用原粹树脂",1,1,0,877,726,193,53); - let SHUB = await Textocr("补充原粹树脂",1,0,0,877,726,193,53); - await sleep(1000); + let SHUN = await Textocr(onerewards,1,1,0,566,656,819,170); + let SHUY = await Textocr(secendrewards,1,1,0,566,656,819,170); + await sleep(1000); + let SHUB = await Textocr("补充原粹树脂",1,0,0,566,656,819,170); if (SHUB.found){log.warn("树脂消耗完毕,结束任务");await keyPress("VK_ESCAPE");FINDagin=0;await sleep(1000);SHUOVER=2;return false;} else if (SHUN.found || SHUY.found) { log.info("找到树脂,已经使用...");FINDagin=0;dispatcher.addTimer(new RealtimeTimer("AutoPick", { forceInteraction: true })); return true; }else{ log.warn("未找到树脂,尝试领取奖励..."); - let SHUN = await Textocr("使用浓缩树脂",0.5,1,0,672,726,191,53); - let SHUY = await Textocr("使用原粹树脂",0.5,1,0,877,726,193,53); + let SHUN = await Textocr(onerewards,0.5,1,0,566,656,819,170); + let SHUY = await Textocr(secendrewards,0.5,1,0,566,656,819,170); if (SHUN.found || SHUY.found) {FINDagin=0; return true;}else{log.warn("领取错误,退出!");if (FINDagin===1){SHUOVER=1;log.warn("模糊模式,地脉不在初始位置,继续寻找!");return true}else{SHUOVER=2;return false;}}//SHUOVER=2 } } @@ -589,43 +598,78 @@ // 定义路线常量 var selectedPath = pathingMap[`路线${position.line} ${['厄里那斯', '秋分山西侧锚点左下', '秋分山西侧锚点右', '柔灯港上锚点', '新枫丹科学院左锚点', '芒索斯山东麓'][position.line - 1]}`] var selectedFolder = folderMap[`路线${position.line} ${['厄里那斯', '秋分山西侧锚点左下', '秋分山西侧锚点右', '柔灯港上锚点', '新枫丹科学院左锚点', '芒索斯山东麓'][position.line - 1]}`] - var maxExecutions = Math.min(timesConfig.value, selectedPath.length); - var executedCount = (position.flower-1)*2+0; + var executedCount = (position.flower-1)*2+0; Lastexecution = false; log.info(`开始执行第 ${position.line} 线路的第 ${executedCount/2 + 1}/${selectedPath.length/2} 朵地脉花...`); for (let i = 0; i < selectedPath.length; i += 2){ - // log.info(`executedCount: ${executedCount} maxExecutions: ${maxExecutions}次`); - if (executedCount >= maxExecutions) { - log.info("本线路已达到执行次数,终止运行!"); - break;} + + if (executedCount/2 + 1 > selectedPath.length/2) { + log.info("本线路执行完毕..."); + break;} + + if (doneCount >= timesConfig.value/2){ + SHUOVER=2;log.info(`地脉花执行完成 ${timesConfig.value/2} 次,结束执行...`); + return true; + } const jsonFile1 = selectedPath[i+position.flower*2-2]; + if (jsonFile1 == undefined) { + log.info(`本线路完结,未达设定执行次数 ${timesConfig.value/2} ,继续执行...`); + return true; + } const jsonFile2 = selectedPath[i+position.flower*2-1]; // 执行单个到达地脉花路径文件1 + const choicePath = `${selectedFolder}${jsonFile1}` log.info(`开始执行前往都地脉花:${jsonFile1}`); if(SMODEL){ - if (!Lastexecution || (position.line==1 && (i+position.flower*2-2)==8)) { - - if(position.line==2 && (i+position.flower*2-2)==8){await pathingScript.runFile("assets/枫丹地脉花-路线2 秋分山西侧锚点左下/线路修复/枫丹地脉花-路线2 秋分山西侧锚点左下-5:秋分山左左下下1-线路修复.json");} - else{await pathingScript.runFile(`${selectedFolder}${jsonFile1}`);} - - }else{ - const choicePath = `${selectedFolder}${jsonFile1}` - //const pathingList = file.readPathSync(choicePath); + if (!Lastexecution || (position.line==1 && (i+position.flower*2-2)==8)) { + if(position.line==2 && (i+position.flower*2-2)==8 && Lastexecution){ + await pathingScript.runFile("assets/枫丹地脉花-路线2 秋分山西侧锚点左下/线路修复/枫丹地脉花-路线2 秋分山西侧锚点左下-5:秋分山左左下下1-线路修复.json");} + else + { + if(position.line==2 && (i+position.flower*2-2)==8)//特殊处理 + { + let pathDic = JSON.parse(file.readTextSync(choicePath)); + log.info(`第 2 线路第 5 朵花特殊处理...`); + await genshin.tp("4402.5048", "2295.4807", true); + await genshin.returnMainUi(); + pathDic["positions"].splice(0, 1); + await pathingScript.run(JSON.stringify(pathDic)); + }else{await pathingScript.runFile(`${selectedFolder}${jsonFile1}`);} + } + } + else + { let pathDic = JSON.parse(file.readTextSync(choicePath)); - if (pathDic["positions"].length > 3) { + if (pathDic["positions"].length > 3) + { pathDic["positions"] = pathDic["positions"].slice(-3); } await pathingScript.run(JSON.stringify(pathDic)); } }else{ - if(position.line==2 && (i+position.flower*2-2)==8){await pathingScript.runFile("assets/枫丹地脉花-路线2 秋分山西侧锚点左下/线路修复/枫丹地脉花-路线2 秋分山西侧锚点左下-5:秋分山左左下下1-线路修复.json");} - else{await pathingScript.runFile(`${selectedFolder}${jsonFile1}`);} + if(position.line==2 && (i+position.flower*2-2)==8 && Lastexecution) + { + await pathingScript.runFile("assets/枫丹地脉花-路线2 秋分山西侧锚点左下/线路修复/枫丹地脉花-路线2 秋分山西侧锚点左下-5:秋分山左左下下1-线路修复.json"); + } + else + { + if(position.line==2 && (i+position.flower*2-2)==8)//特殊处理 + { + let pathDic = JSON.parse(file.readTextSync(choicePath)); + log.info(`第 2 线路第 5 朵花特殊处理...`); + await genshin.tp("4402.5048", "2295.4807", true); + await genshin.returnMainUi(); + pathDic["positions"].splice(0, 1); + await pathingScript.run(JSON.stringify(pathDic)); + }else{await pathingScript.runFile(`${selectedFolder}${jsonFile1}`);} + + } } // 寻找地脉溢口,文字识别不到转圈寻找,不管有没找到都执行战斗,最后领取奖励判断是否继续执行 @@ -633,7 +677,8 @@ checkRewardPage();// 执行自动战斗并同步检测领奖页面 await VeinEntrance(); await sleep(1000); - dispatcher.addTimer(new RealtimeTimer("AutoPick", { "forceInteraction": false })); + await dispatcher.addTimer(new RealtimeTimer("AutoPick", { forceInteraction: false})); await keyPress("F"); + log.warn("开始战斗..."); if (!Fightquick){ await dispatcher.runTask(new SoloTask("AutoFight")); //固定执行两次战斗,执行自动战斗,配置器中的设置建议填你的队伍打一次大概得时间 @@ -648,10 +693,11 @@ //执行到地脉花地点的寻路脚本 log.info(`开始执行寻找地脉花奖励:${jsonFile2}`); + await dispatcher.addTimer(new RealtimeTimer("AutoPick", { forceInteraction: false})); await pathingScript.runFile(`${selectedFolder}${jsonFile2}`); await sleep(3000); - // 领取奖励,开始找地脉口 - log.info(`开始第 ${executedCount/2+1} 朵花的奖励领取`); + // 领取奖励,开始找地脉口 + log.info(`开始本线路第 ${executedCount/2+1} 朵花的奖励领取`); if (haoganq==1){log.info(`切换好感队伍:'${haogandui}'`);await genshin.returnMainUi(); await sleep(1000);await genshin.SwitchParty(haogandui);} shouldContinueChecking = false; await sleep(2000); @@ -666,7 +712,8 @@ dispatcher.addTimer(new RealtimeTimer("AutoPick", { forceInteraction: false })); // 冷却等待(可选) await sleep(1000); - executedCount=executedCount+2; + executedCount=executedCount+2; + doneCount++; } FINDagin = 0; //重置地脉花寻找标志。lv.1.2新增,用于判断是否找线路余下地脉花。 return true;// 线路完成 diff --git a/repo/js/Auto全自动“枫丹”地脉花/manifest.json b/repo/js/Auto全自动“枫丹”地脉花/manifest.json index 9b3f6d3d..54cbd222 100644 --- a/repo/js/Auto全自动“枫丹”地脉花/manifest.json +++ b/repo/js/Auto全自动“枫丹”地脉花/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 1, - "name": "地脉花-可禁UID/领每日/好感队切换", - "version": "2.3", + "name": "地脉花-可禁UID/领每日/优先树脂类型", + "version": "2.4", "bgi_version": "0.44.8", "description": "枫丹地脉花,蓝花金花通用。生存压力大,请带盾奶;避免纯水输出,请注意说明文件。如有BUG请联系作者QQ:119996800", "tags":["地脉花"], diff --git a/repo/js/Auto全自动“枫丹”地脉花/settings.json b/repo/js/Auto全自动“枫丹”地脉花/settings.json index 9f57491a..e4f8e006 100644 --- a/repo/js/Auto全自动“枫丹”地脉花/settings.json +++ b/repo/js/Auto全自动“枫丹”地脉花/settings.json @@ -12,12 +12,12 @@ { "name": "times", "type": "input-text", - "label": "选填,单路线刷取次数(可填1-6),默认6次,打完整条线" + "label": "选填,按刷取次数,默认6次,最多99次,树脂耗尽模式下无效" }, { "name": "shuv", "type": "select", - "label": "选填,默认:“1”为只打一条线路,选“2”为耗尽树脂模式", + "label": "默认:“1”为按上面的次数刷取,选“2”为耗尽树脂模式", "options": [ "1", "2" @@ -26,7 +26,7 @@ { "name": "color", "type": "select", - "label": "选填,默认:蓝花(经验花)选“1” / 黄花填(摩拉花)选“2”", + "label": "默认:蓝花(经验花)选“1” / 黄花(摩拉花)选“2”", "options": [ "1", "2" @@ -35,7 +35,12 @@ { "name": "nowuid", "type": "input-text", - "label": "慎用,禁止特定UID刷地脉花,用 / 隔开,如12345/99999" + "label": "禁止特定UID刷地脉花,用 / 隔开,如12345/99999" + }, + { + "name": "firstresin", + "type": "checkbox", + "label": "默认优先使用浓缩,勾选后优先使用原粹树脂" }, { "name": "Rewards", @@ -45,16 +50,16 @@ { "name": "SMODEL", "type": "checkbox", - "label": "直跑模式:如下个花近直跑过去,不传送,测试慎用,要求44.8版本!" + "label": "直跑模式:如下个花近,直跑过去,不传送,要求44.8版本!" }, { "name": "Fightquick", "type": "checkbox", - "label": "更快检测结束战斗,开启后下方的超时时间才有效" + "label": "地脉花长出后马上停止战斗,开启后下方的超时时间才有效" }, { "name": "timeout", "type": "input-text", - "label": "更快检测结束战斗的战斗超时时间,单位秒,默认120秒" + "label": "最长战斗超时时间,单位秒,默认240秒" } ] \ No newline at end of file