From 77875cfc22560aee511ed026cb0296f54b57e19b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=9F=E7=B4=AB=E7=83=9Fowo?= <1532270678@qq.com> Date: Thu, 9 Oct 2025 23:53:05 +0800 Subject: [PATCH] =?UTF-8?q?AutoMonday-V1.3.1=E7=89=88=E6=9C=AC=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=20(#2108)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * AutoMonday-V1.3.1版本更新 1. 完善了法器角色充能模式的相关逻辑 2. 修复了部分描述不符的地方 3. 优化了部分不合逻辑的地方 * readme图片格式更改 修改为更合理的布局 * YNF-AutoEat-V1.4.3版本更新 修复了在特殊情况下找不到食物的问题 --- repo/js/AutoMonday/README.md | 21 ++++-- repo/js/AutoMonday/main.js | 108 +++++++++++++++++++++--------- repo/js/AutoMonday/manifest.json | 2 +- repo/js/AutoMonday/settings.json | 24 ++----- repo/js/YNF-AutoEat/README.md | 3 + repo/js/YNF-AutoEat/main.js | 85 +++++++++++++++-------- repo/js/YNF-AutoEat/manifest.json | 2 +- 7 files changed, 158 insertions(+), 87 deletions(-) diff --git a/repo/js/AutoMonday/README.md b/repo/js/AutoMonday/README.md index 5a5441d0e..a7a527da2 100644 --- a/repo/js/AutoMonday/README.md +++ b/repo/js/AutoMonday/README.md @@ -27,15 +27,24 @@ ## 注意事项 1. 脚本目前阶段以完成任务为主,某些任务例如做菜、锻造等的个性化程度较低。~~这不是压根没有吗~~ 以做菜和锻造等为目标的用户请移步仓库使用专项脚本(后续会逐渐完善) 2. cd记录文件有逻辑变动,之前使用过此脚本的用户请手动删除record文件夹,避免无用数据长期留存 ~~其实不删也没事,多一行少一行的,不过最好还是删了呗~~ -3. 爱可菲和质变仪由于逻辑的高度相似,二者写进了一个函数里,cd以质变仪为准。人话就是想运行爱可菲做菜就得用质变仪,质变仪没刷爱可菲也没办法用(历史遗留问题,后续会逐渐完善。 ~~是谁总喜欢动逻辑我不说~~ ) -4. 质变材料:默认使用薄荷,如果需要用列表外的其他材料请把assets里的图片替换掉。替换要注意要替换的材料在背包里和被替换的材料在一个目录并且名字要相同,例如拿铁块可以换白铁块、水晶块等,星蕈可以换苹果、泡泡桔等(嗯?你是说你的文件夹里有个叫星蕈的图片里是一只甜甜花酿鸡?不是哥们别搞) -5. 晶蝶诱捕装置:脚本会自动识别地图左上角是否有晶蝶诱捕完成的标识,如果有,才会收取晶核。需要注意的是诱捕装置需要放在枫丹合成台旁边的巷子口(详见[诱捕位置](./assets/诱捕.png)), 实在找不到位置的话可以把assets中名为“晶蝶诱捕装置”的js复制在路径追踪里跑一遍,路径的终点就是诱捕装置的放置点,或者对位置不满意的话也可以自己录制一个路径放进assets里,需要注意名字必须叫“晶蝶诱捕装置”。 -6. 首领和秘境任务需要配置战斗策略,首领是爆炎树急冻树,秘境是太山谷牛头人和讨债人 -7. 四方网和兑换券等任务请开图 -8. 部分周常任务一周只能完成一次,故优化、制作进度较慢,敬请谅解。遇到问题请反馈到频道并艾特作者,Ciallo~(∠・ω< )⌒☆ +3. 做菜任务需要制作的菜品要求熟练度达到自动烹饪 +4. 爱可菲和质变仪由于逻辑的高度相似,二者写进了一个功能里,cd以质变仪为准。人话就是想运行爱可菲做菜就得用质变仪,质变仪没刷爱可菲也没办法用(历史遗留问题,后续会逐渐完善。 ~~是谁总喜欢动逻辑我不说~~ )。 +5. 充能模式分为法器角色充能和电气水晶充能,电器水晶充能速度较快但是可能偶尔会受到周边怪物影响并且运行其他采集脚本过后可能会跑空。法器角色充能充能速度较慢但是较为稳定。 +6. 质变队伍:如果选择了法器角色充能,队伍名必填;如果选择了拥有爱可菲,队伍名必填。二者都选择的时候请将爱可菲和法器角色放进同一个队伍!!!(目前法器角色充能仅支持芭芭拉,后续会逐渐完善) +7. 质变材料:默认使用薄荷,如果需要用列表外的其他材料请把assets里的图片替换掉。替换要注意要替换的材料在背包里和被替换的材料在一个目录并且名字要相同,例如拿铁块可以换白铁块、水晶块等,星蕈可以换苹果、泡泡桔等(嗯?你是说你的文件夹里有个叫星蕈的图片里是一只甜甜花酿鸡?道理我都懂,但是甜甜鸡能放进质变仪吗!!!) +8. 晶蝶诱捕装置:脚本会自动识别地图左上角是否有晶蝶诱捕完成的标识,如果有,才会收取晶核。需要注意的是诱捕装置需要放在枫丹合成台旁边的巷子口(详见 +![诱捕位置](assets/诱捕.png)) +实在找不到位置的话可以把assets中名为“晶蝶诱捕装置”的js复制在路径追踪里跑一遍,路径的终点就是诱捕装置的放置点,或者对位置不满意的话也可以自己录制一个路径放进assets里,需要注意名字必须叫“晶蝶诱捕装置”。 +9. 首领和秘境任务需要配置战斗策略,首领是爆炎树急冻树,秘境是太山谷牛头人和讨债人 +10. 四方网和兑换券等任务请开图 +11. 部分周常任务一周只能完成一次,故优化、制作进度较慢,敬请谅解。遇到问题请反馈到频道并艾特作者,Ciallo~(∠・ω< )⌒☆ --------------------------------------------------------------------------------------------------------------------------------- ## 更新日志 +### 1.3.1(2025.10.09) +1. 完善了法器角色充能模式的相关逻辑 +2. 修复了部分描述不符的地方 +3. 优化了部分不合逻辑的地方 ### 1.3(2025.10.08) 1. 修复了record文件更新后丢失的问题 2. 修复了偶现的质变仪无法使用的问题 diff --git a/repo/js/AutoMonday/main.js b/repo/js/AutoMonday/main.js index 1f1c63aa8..1bacd30f1 100644 --- a/repo/js/AutoMonday/main.js +++ b/repo/js/AutoMonday/main.js @@ -205,7 +205,8 @@ // 质变仪判断逻辑 if (deployed) { if (chargingMethod == "法器角色充能") { - await includes("芭芭拉"); + const ifbblIn = await includes("芭芭拉"); + if (!ifbblIn) { throw new Error("队伍中未包含角色:芭芭拉"); } } while ((NowTime - startTime) < actiontime * 1000) { await textOCR("质变产生了以下物质", 0.7, 1, 0, 539, 251, 800, 425); @@ -228,7 +229,10 @@ if ((chargingMethod == "电气水晶充能")) { await AutoPath("全自动爱可菲");//厨艺机关的部署动作用路径追踪执行 } else if (chargingMethod == "法器角色充能") { - await includes("爱可菲"); + + const ifakfIn = await includes("爱可菲"); + if (!ifakfIn) { throw new Error("队伍中未包含角色:爱可菲"); } + keyDown("E"); await sleep(1000); keyUp("E"); @@ -260,7 +264,7 @@ } } await genshin.returnMainUi(); - throw new Error(`${actiontime}秒超时,结束流程!`); + log.error(`${actiontime}秒超时,结束流程!`); } //放置质变仪 @@ -399,7 +403,7 @@ // 背包过期物品识别 async function handleExpiredItems() { - const ifGuoqi = await textOCR("物品过期", 1, 0, 0, 870, 280, 170, 40); + const ifGuoqi = await textOCR("物品过期", 1.5, 0, 0, 870, 280, 170, 40); if (ifGuoqi.found) { log.info("检测到过期物品,正在处理..."); await sleep(500); @@ -736,7 +740,13 @@ await AutoPath("每周做菜"); await sleep(10); keyDown("VK_MENU"); - await textOCR("烹饪", 5, 1, 0, 1150, 460, 155, 155); + await sleep(500); + + const res1 = await textOCR("烹饪", 5, 0, 0, 1150, 460, 155, 155); + if (res1.found) { + click(res1.x + 15, res1.y + 15); + } + await sleep(800); keyUp("VK_MENU"); await sleep(1000); @@ -746,35 +756,64 @@ click(195, 1015);// 重置 await sleep(800); - await textOCR(Category, 5, 1, 0, 95, 235, 135, 55); - await sleep(800); + click(500, 1020);// 确认筛选 await sleep(800); - const res = await textOCR(food, 10, 1, 0, 116, 116, 1165, 880); - if (!res) { - log.error("未识别到料理!") + //滚轮预操作 + await moveMouseTo(1287, 131); + await sleep(100); + await leftButtonDown(); + await sleep(100); + await moveMouseTo(1287, 161); + + let YOffset = 0; // Y轴偏移量,根据需要调整 + const maxRetries = 20; // 最大重试次数 + let retries = 0; // 当前重试次数 + while (retries < maxRetries) { + const res2 = await textOCR(food, 1, 0, 3, 116, 116, 1165, 880); + if (res2.found) { + await leftButtonUp(); + await sleep(500); + await click(res2.x + 50, res2.y - 60); + await sleep(1000); + + await sleep(1000); + click(1700, 1020);// 制作 + await sleep(1000); + + await textOCR("自动烹饪", 5, 1, 0, 725, 1000, 130, 45); + await sleep(800); + click(960, 460); + await sleep(800); + inputText(cookCount); + await sleep(800); + click(1190, 755); + await sleep(2500); // 等待烹饪完成 + + await genshin.returnMainUi(); + log.info("本周烹饪任务已完成!"); + + // 更新CD记录 + updatedRecords[routeName] = getNextMonday4AMISO(); + await writeCDRecords(updatedRecords); + + return; + } + retries++; // 重试次数加1 + //滚轮操作 + YOffset += 50; + await sleep(500); + if (retries === maxRetries || 161 + YOffset > 1080) { + await leftButtonUp(); + await sleep(100); + await moveMouseTo(1287, 131); + await genshin.returnMainUi(); + log.error("料理未找到!"); + } + await moveMouseTo(1287, 161 + YOffset); + await sleep(300); } - - await sleep(1000); - click(1700, 1020);// 制作 - await sleep(1000); - - await textOCR("自动烹饪", 5, 1, 0, 725, 1000, 130, 45); - await sleep(800); - click(960, 460); - await sleep(800); - inputText(cookCount); - await sleep(800); - click(1190, 755); - await sleep(2500); // 等待烹饪完成 - - await genshin.returnMainUi(); - log.info("本周烹饪任务已完成!"); - - // 更新CD记录 - updatedRecords[routeName] = getNextMonday4AMISO(); - await writeCDRecords(updatedRecords); } // 每周锻造 @@ -1081,7 +1120,6 @@ const ifYB = settings.ifYB; const food = settings.food; // 要烹饪的食物 const cookCount = settings.cookCount;//烹饪数量 - const Category = settings.Category;// 食物种类 const mineral = settings.mineral;// 矿石种类 const mineralFile = `assets/RecognitionObject/${mineral}.png`// 矿石模板路径 const BossPartyName = settings.BossPartyName;// 战斗队伍 @@ -1101,14 +1139,18 @@ // 直接通过映射获取ITEM值(未匹配时默认0) ITEM = materialToItemMap[Material] || 0; + if (chargingMethod == "法器角色充能" && settings.TEAMname === undefined) { + log.error("您选择了法器角色充能,请在配置页面填写包含法器角色的队伍名称!!!"); + return;// 没选就报错后停止 + } //检查用户是否配置队伍 if (ifAkf && settings.TEAMname === undefined) { log.error("您选择了拥有爱可菲,请在配置页面填写包含爱可菲的队伍名称!!!"); return;// 没选就报错后停止 - } else { - TEAM = settings.TEAMname; } + TEAM = settings.TEAMname; + const username = await getCurrentUsername(); const cdRecordPath = `record/${username}_cd.txt`;// 修改CD记录文件路径,包含用户名 diff --git a/repo/js/AutoMonday/manifest.json b/repo/js/AutoMonday/manifest.json index 177077051..04f131229 100644 --- a/repo/js/AutoMonday/manifest.json +++ b/repo/js/AutoMonday/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 1, "name": "全自动周一", - "version": "1.3", + "version": "1.3.1", "tags": [ "周常", "纪行", diff --git a/repo/js/AutoMonday/settings.json b/repo/js/AutoMonday/settings.json index 5ff532507..3d4476bdb 100644 --- a/repo/js/AutoMonday/settings.json +++ b/repo/js/AutoMonday/settings.json @@ -14,15 +14,10 @@ "type": "checkbox", "label": "是否拥有爱可菲" }, - { - "name": "TEAMname", - "type": "input-text", - "label": "包含爱可菲的队伍(没有爱可菲可以不填)" - }, { "name": "Material", "type": "select", - "label": "要放入质变仪的材料(选填,默认薄荷)", + "label": "要放入质变仪的材料", "options": [ "牛角", "苹果", @@ -50,6 +45,11 @@ ], "default": "电气水晶充能" }, + { + "name": "TEAMname", + "type": "input-text", + "label": "质变队伍\n选择“拥有爱可菲”或“法器角色充能”时必填" + }, { "name": "ifYB", "type": "checkbox", @@ -66,18 +66,6 @@ "label": "要制作的食物", "default": "提瓦特煎蛋" }, - { - "name": "Category", - "type": "select", - "label": "食物的类别", - "options": [ - "恢复类料理", - "攻击类料理", - "冒险类料理", - "防御类料理" - ], - "default": "恢复类料理" - }, { "name": "cookCount", "type": "input-text", diff --git a/repo/js/YNF-AutoEat/README.md b/repo/js/YNF-AutoEat/README.md index 7f11f1cfc..227070442 100644 --- a/repo/js/YNF-AutoEat/README.md +++ b/repo/js/YNF-AutoEat/README.md @@ -14,6 +14,7 @@ ## 注意事项 1. 队伍名称有一定长度并且清晰,避免系统识别失败 2. 使用前确保食材充足 +3. 要使用的食材尽量在顶端,尽管js能够找到,但是在多次运行时会很浪费时间 ## 作者留言 @@ -29,6 +30,8 @@ 2. 感谢氨气老师和秋秋云老师,在审核时提供了宝贵的意见和建议。 --------------------------------------------------------------------------------------------------------------------------------- ## 更新日志 +### 1.4.3(2025.10.09) +1. 修复了在特殊情况下找不到食物的问题 ### 1.4.2(2025.10.02) 1. 修复了一些bug ### 1.4.1(2025.09.26) diff --git a/repo/js/YNF-AutoEat/main.js b/repo/js/YNF-AutoEat/main.js index 89ea7582c..85d8eb1b7 100644 --- a/repo/js/YNF-AutoEat/main.js +++ b/repo/js/YNF-AutoEat/main.js @@ -255,35 +255,64 @@ throw new Error("未打开'食物'页面,请确保背包已正确打开并切换到食物标签页"); }//确认在食物界面 - const ifpingguo = await imageRecognitionEnhanced(pingguo, 3, 1, 0, 115, 120, 1150, 155, true);//识别"苹果"图片 - if (!ifpingguo.found) { - await genshin.returnMainUi(); - throw new Error("没有找到指定的食物:" + food + ",请检查背包中该食材数量是否足够!"); + //滚轮预操作 + await moveMouseTo(1287, 131); + await sleep(100); + await leftButtonDown(); + await sleep(100); + await moveMouseTo(1287, 161); + + let YOffset = 0; // Y轴偏移量,根据需要调整 + const maxRetries = 20; // 最大重试次数 + let retries = 0; // 当前重试次数 + while (retries < maxRetries) { + const ifpingguo = await imageRecognitionEnhanced(pingguo, 1, 0, 0, 115, 120, 1150, 880);//识别"苹果"图片 + if (ifpingguo.found) { + await leftButtonUp(); + await sleep(500); + await click(ifpingguo.x + 45, ifpingguo.y + 50); + await sleep(1000); + + await click(1700, 1020);//点击使用 + + await imageRecognitionEnhanced(zjz, 3, 1, 0, 625, 290, 700, 360, true);//点击伊涅芙证件照,确保吃食物的是伊涅芙 + await sleep(500); + + for (let i = 0; i < foodCount; i++) { + click(1251, 630); + await sleep(150); + } + + await click(1180, 770);//点击确认 + await sleep(500); + + log.info("看我一口气吃掉" + settings.foodNumber + "个" + food + "!"); + + await sleep(1000); + await keyPress("ESCAPE"); + await sleep(1000); + await keyPress("ESCAPE"); + + await sleep(1000); + + return; + } + retries++; // 重试次数加1 + //滚轮操作 + YOffset += 50; + await sleep(500); + if (retries === maxRetries || 161 + YOffset > 1080) { + await leftButtonUp(); + await sleep(100); + await moveMouseTo(1287, 131); + await genshin.returnMainUi(); + throw new Error("没有找到指定的食物:" + food + ",请检查背包中该食材数量是否足够!"); + + } + await moveMouseTo(1287, 161 + YOffset); + await sleep(300); + } - await sleep(500); - - await click(1700, 1020);//点击使用 - - await imageRecognitionEnhanced(zjz, 3, 1, 0, 625, 290, 700, 360, true);//点击伊涅芙证件照,确保吃食物的是伊涅芙 - await sleep(500); - - for (let i = 0; i < foodCount; i++) { - click(1251, 630); - await sleep(150); - } - - await click(1180, 770);//点击确认 - await sleep(500); - - log.info("看我一口气吃掉" + settings.foodNumber + "个" + food + "!"); - - await sleep(1000); - await keyPress("ESCAPE"); - await sleep(1000); - await keyPress("ESCAPE"); - - await sleep(1000); - } // 背包过期物品识别,需要在背包界面,并且是1920x1080分辨率下使用 diff --git a/repo/js/YNF-AutoEat/manifest.json b/repo/js/YNF-AutoEat/manifest.json index 402c75260..901ce3097 100644 --- a/repo/js/YNF-AutoEat/manifest.json +++ b/repo/js/YNF-AutoEat/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 1, "name": "伊涅芙の自助餐", - "version": "1.4.2", + "version": "1.4.3", "tags": [ "伊涅芙", "调味品"