From 7d59eae42d9648d570195e06e6bbc62d9c71c920 Mon Sep 17 00:00:00 2001 From: 5117600049 <511760049@qq.com> Date: Tue, 22 Jul 2025 10:28:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=A4=E4=B8=AA=E6=89=93=E7=89=8C=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E6=9B=B4=E6=96=B0=20(#1378)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assets/talkSymbol.png | Bin 0 -> 1332 bytes repo/js/七圣召唤七日历练全自动/main.js | 44 ++--- repo/js/七圣召唤七日历练全自动/manifest.json | 2 +- .../assets/talkSymbol.png | Bin 0 -> 1332 bytes .../七圣召唤角色邀约全自动/assets/tavern.png | Bin 0 -> 2200 bytes repo/js/七圣召唤角色邀约全自动/main.js | 163 +++++++++--------- repo/js/七圣召唤角色邀约全自动/manifest.json | 6 +- 7 files changed, 106 insertions(+), 109 deletions(-) create mode 100644 repo/js/七圣召唤七日历练全自动/assets/talkSymbol.png create mode 100644 repo/js/七圣召唤角色邀约全自动/assets/talkSymbol.png create mode 100644 repo/js/七圣召唤角色邀约全自动/assets/tavern.png diff --git a/repo/js/七圣召唤七日历练全自动/assets/talkSymbol.png b/repo/js/七圣召唤七日历练全自动/assets/talkSymbol.png new file mode 100644 index 0000000000000000000000000000000000000000..2e725fc53ae5ee8845419d8f3fbc22dbd7a90957 GIT binary patch literal 1332 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 ami`H)>!KX(5zf>A0000= 0 ? ~~settings.letterNumber : 0; let challengeNumber = settings.challengeNumber != undefined && ~~settings.challengeNumber > 0 ? ~~settings.challengeNumber : 1; +//检测传送结束 +async function tpEndDetection() { + const region = RecognitionObject.ocr(1690, 230, 75, 350); // 队伍名称区域 + let tpTime = 0; + await sleep(500); //点击传送后等待一段时间避免误判 + //最多30秒传送时间 + while (tpTime < 300) { + let capture = captureGameRegion(); + let res = capture.find(region); + if (!res.isEmpty()) { + log.info("传送完成"); + await sleep(1200); //传送结束后有僵直 + return; + } + tpTime++; + await sleep(100); + } + throw new Error("传送时间超时"); +} + //函数:找小王子买邀请函 async function BuyLetter(){ await sleep(700); @@ -25,6 +45,8 @@ click(160, 245);//选择邀请函 await sleep(1000); click(610, 360);//点击邀请函 await sleep(1000); +click(747,628 );//只买一个 +await sleep(1000); click(1185,755 );//点击购买 await sleep(1000); click(1185,755 );//点击空白处 @@ -52,72 +74,71 @@ await sleep(1000); //函数:对话和打牌 async function Playcards() { -click(900, 1000);//对话 -await sleep(500); -click(900, 1000);//对话 +await autoConversation(); await sleep(1000); -click(900, 1000);//对话 -await sleep(500); -click(900, 1000);//对话 -await sleep(1000); -click(900, 1000);//对话 -await sleep(500); -click(900, 1000);//对话 -await sleep(1000); -click(900, 1000);//对话 -await sleep(500); -click(900, 1000);//对话 -await sleep(1000); -click(900, 1000);//对话 -await sleep(500); -click(900, 1000);//对话 -await sleep(1000); -click(900, 1000);//对话 -await sleep(500); -click(900, 1000);//对话 -await sleep(1000); -keyPress("F"); -await sleep(8000); await dispatcher.runTask(new SoloTask("AutoGeniusInvokation")); await sleep(3000); click(754,915 );//退出挑战 -await sleep(10000); -click(900, 1000);//对话 -await sleep(1500); -click(900, 1000);//对话 -await sleep(1500); -click(900, 1000);//对话 -await sleep(1500); -click(900, 1000);//对话 -await sleep(1500); +await sleep(1000); +await autoConversation(); } -//函数:打开地图前往猫尾酒馆 - async function gotoTavern() { -await sleep(1000); -keyPress("M"); -await sleep(1500); -click(1841, 1015);//地图选择 -await sleep(1000); -click(1460, 140);//蒙德 -await sleep(1000); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(1000, 645);//猫尾酒馆 -await sleep(500); -click(1345, 690);//猫尾酒馆 -await sleep(500); -click(1707, 1010);//猫尾酒馆 -await sleep(8000); +//通过f和空格自动对话,对话标志消失时停止await autoConversation(); +async function autoConversation() { + await sleep(2500); //点击后等待一段时间避免误判 + const talkRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/talkSymbol.png")); + let talkTime = 0; + let talkTimes = 0; + log.info("开始对话"); + //最多10次对话 + while (talkTime < 30) { + let talk = captureGameRegion().find(talkRo); + if (talk.isExist()) { + await sleep(300); + keyPress("VK_SPACE"); + await sleep(300); + keyPress("F"); + talkTimes++; + await sleep(1500); } + else if(talkTimes){ + log.info("对话结束"); + return ; + } + talkTime++; + await sleep(1500); +} + throw new Error("对话时间超时"); +} + +//函数:打开地图前往猫尾酒馆 +async function gotoTavern() { + const tavernRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/tavern.png")); + await genshin.returnMainUi(); + await sleep(1000); + keyPress("m"); + await sleep(1500); + click(1841, 1015); //地图选择 + await sleep(1000); + click(1460, 140); //蒙德 + await sleep(1200); + //放大地图 + await genshin.setBigMapZoomLevel(1.0); + await sleep(400); + + click(1000, 645); //猫尾酒馆 + await sleep(600); + let tavern = captureGameRegion().find(tavernRo); + if (tavern.isExist()) { + tavern.click(); + await sleep(500); + } else { + throw new Error("未能找到猫尾酒馆"); + } + click(1707, 1010); //确认传送 + await sleep(1000); + await tpEndDetection(); +} //函数:前往邀请版(酒馆内) async function gotoBoard1() { @@ -147,31 +168,13 @@ keyUp("s"); await sleep(1000); } -//函数:打开自动剧情 - async function autoPlot() { -await sleep(1000); -keyPress("ESCAPE"); -await sleep(1500); -click(45, 820); -await sleep(1500); -click(175, 710); -await sleep(1500); -click(1628, 275); -await sleep(1500); -click(1628, 330); -await sleep(1500); -keyPress("ESCAPE"); -await sleep(1000); -keyPress("ESCAPE"); -await sleep(1000); - } + //主流程 -//await pathingScript.runFile(`assets/1.json`);用不来从其他界面强制回到大世界,只能用这个 -log.info(`开始执行。`); +await genshin.returnMainUi(); +log.info(`开始执行角色邀约挑战`); for (let i = 0; i < challengeNumber; i++) { await gotoTavern(); - await sleep(2000); if (challengeNumber-letterNumber > 0) { log.info(`购买第${i+1}次`); await BuyLetter(); diff --git a/repo/js/七圣召唤角色邀约全自动/manifest.json b/repo/js/七圣召唤角色邀约全自动/manifest.json index 11267490..6d426d8b 100644 --- a/repo/js/七圣召唤角色邀约全自动/manifest.json +++ b/repo/js/七圣召唤角色邀约全自动/manifest.json @@ -1,8 +1,8 @@ { "manifest_version": 1, "name": "七圣召唤角色邀请全自动", - "version": "1.0", - "description": "挑战前请选好卡组并设好js脚本参数,最少持有一张邀请函或1000牌币!!!", + "version": "1.1", + "description": "挑战前请选好卡组并设好js脚本参数,最少持有一张邀请函或1000牌币!!!建议先手动买,避免一些Bug", "authors": [ { "name": "柒叶子", @@ -11,4 +11,4 @@ ], "settings_ui": "settings.json", "main": "main.js" -} \ No newline at end of file +}