From 3500ba2e39bf73be3276a487c83e9f8051fa9c17 Mon Sep 17 00:00:00 2001 From: mno <718135749@qq.com> Date: Sun, 31 Aug 2025 13:36:37 +0800 Subject: [PATCH] =?UTF-8?q?js=EF=BC=9A=E8=BF=9B=E5=85=A5=E8=81=94=E6=9C=BA?= =?UTF-8?q?=E7=8A=B6=E6=80=810.0.2=20(#1779)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assets/RecognitionObject/kickButton.png | Bin 0 -> 4518 bytes repo/js/AutoEnter/main.js | 209 ++++++++++-------- repo/js/AutoEnter/manifest.json | 2 +- 3 files changed, 121 insertions(+), 90 deletions(-) create mode 100644 repo/js/AutoEnter/assets/RecognitionObject/kickButton.png diff --git a/repo/js/AutoEnter/assets/RecognitionObject/kickButton.png b/repo/js/AutoEnter/assets/RecognitionObject/kickButton.png new file mode 100644 index 0000000000000000000000000000000000000000..b57bc0db2ccae37ad2635e2c205e91cec148da94 GIT binary patch literal 4518 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 Eg6>s*nE(I) literal 0 HcmV?d00001 diff --git a/repo/js/AutoEnter/main.js b/repo/js/AutoEnter/main.js index 13b75edcf..2b687062a 100644 --- a/repo/js/AutoEnter/main.js +++ b/repo/js/AutoEnter/main.js @@ -12,14 +12,16 @@ const maxEnterCount = +settings.maxEnterCount || 3; const enterUIDRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/enterUID.png")); const searchRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/search.png")); const requestEnterRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/requestEnter.png")); -const requestEnter2Ro = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/requestEnter.png"), 1480, 300, 280, 100); +const requestEnter2Ro = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/requestEnter.png"), 1480, 300, 280, 600); const yUIRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/yUI.png")); const allowEnterRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/allowEnter.png"), 1250, 300, 150, 130); const targetsPath = "targets"; let enterCount = 0; let targetsRo; +let checkToEnd = false; // 先初始化空数组 let targetList = []; +let enteredPlayers = []; (async function () { setGameMetrics(1920, 1080, 1); @@ -51,11 +53,20 @@ let targetList = []; while (new Date() - start < timeOut * 60 * 1000) { if (enterMode === "进入他人世界") { + //检验队伍编号 + const playerSign = await getPlayerSign(); + await sleep(500); + if (playerSign != 0) { + log.info(`加入世界成功,在队伍中的编号为${playerSign}`); + break; + } else { + log.error(`不处于多人世界,开始尝试加入`); + await genshin.returnMainUi(); + await sleep(500); + } //反复敲门进入他人世界 //我要cia进来llo if (enteringUID) { - await genshin.returnMainUi(); - await sleep(500); await keyPress("F2"); //点击输入uid await sleep(500); @@ -63,6 +74,7 @@ let targetList = []; await genshin.returnMainUi(); continue; } + await sleep(500); inputText(enteringUID); //点击搜索 await sleep(500); @@ -83,64 +95,83 @@ let targetList = []; continue; } //等待加入完成 - await waitForMainUI(true, 5 * 1000); - - //检验新的队伍编号 - const playerSign2 = await getPlayerSign(); - await sleep(500); - if (playerSign2 != 0) { - log.info(`加入世界成功,在队伍中的编号为${playerSign2}`); - break; - } else { - log.error(`加入世界失败,开始重试`); - await genshin.returnMainUi(); - await sleep(500); - continue; - } + await waitForMainUI(true, 20 * 1000); } else { log.error("未填写有效的uid,请检查后重试"); break; } } else { //等待他人进入世界 - if (await isYUI()) { - keyPress("VK_ESCAPE"); - } - await genshin.returnMainUi(); - keyPress("Y"); - await sleep(250); - if (await isYUI()) { - log.info("处于y界面开始识别"); - let attempts = 0; - while (attempts < 20) { - attempts++; - if (permissionMode === "无条件通过") { - //无需筛选,全部通过 - if (await findAndClick(allowEnterRo)) { - enterCount++; - break; - } - } else { - //需要筛选,开始识别第一行申请 - const result = await recognizeRequest(); - if (result) { - await findAndClick(allowEnterRo); - log.info(`允许${result}加入世界`); - enterCount++; - break; + if (enterCount < maxEnterCount) { + if (await isYUI()) { + keyPress("VK_ESCAPE"); + } + await genshin.returnMainUi(); + keyPress("Y"); + await sleep(250); + if (await isYUI()) { + log.info("处于y界面开始识别"); + let attempts = 0; + while (attempts < 5) { + attempts++; + if (permissionMode === "无条件通过") { + //无需筛选,全部通过 + if (await findAndClick(allowEnterRo)) { + //等待加入完成 + await waitForMainUI(true, 20 * 1000); + enterCount++; + break; + } + } else { + //需要筛选,开始识别第一行申请 + const result = await recognizeRequest(); + if (result) { + if (await findAndClick(allowEnterRo)) { + //等待加入完成 + await waitForMainUI(true, 20 * 1000); + enterCount++; + log.info(`允许${result}加入世界`); + // 把 result 加入 enteredPlayers,并立即去重 + enteredPlayers = [...new Set([...enteredPlayers, result])]; + await sleep(1000); + if (await isYUI()) { + keyPress("VK_ESCAPE"); + await genshin.returnMainUi(); + } + break; + } else { + if (await isYUI()) { + keyPress("VK_ESCAPE"); + await genshin.returnMainUi(); + } + } + + } } + await sleep(500); } - await sleep(500); + } + if (await isYUI()) { + keyPress("VK_ESCAPE"); + await genshin.returnMainUi(); } } - if (await isYUI()) { - keyPress("VK_ESCAPE"); + if (enterCount >= maxEnterCount || checkToEnd) { + log.info("准备结束js"); + checkToEnd = true; + if (await isYUI()) { + keyPress("VK_ESCAPE"); + await genshin.returnMainUi(); + } + await sleep(20000); + if (await findTotalNumber() === maxEnterCount + 1) { + break; + } else { + enterCount--; + } } } - if (enterCount >= maxEnterCount) { - log.info("已达到预定人数,结束js"); - break; - } + } } @@ -233,46 +264,6 @@ async function getPlayerSign() { return 0; } -async function findTotalNumber() { - await genshin.returnMainUi(); - await keyPress("F2"); - await sleep(2000); - - // 定义模板 - const kick2pRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/kickButton.png"), 1520, 277, 230, 120); - const kick3pRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/kickButton.png"), 1520, 400, 230, 120); - const kick4pRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/kickButton.png"), 1520, 527, 230, 120); - - moveMouseTo(1555, 860); // 防止鼠标干扰 - const gameRegion = captureGameRegion(); - await sleep(200); - - let count = 1; // 先算上自己 - - // 依次匹配 2P - if (gameRegion.Find(kick2pRo).isExist()) { - log.info("发现 2P"); - count++; - } - - // 依次匹配 3P - if (gameRegion.Find(kick3pRo).isExist()) { - log.info("发现 3P"); - count++; - } - - // 依次匹配 4P - if (gameRegion.Find(kick4pRo).isExist()) { - log.info("发现 4P"); - count++; - } - - gameRegion.dispose(); - - log.info(`当前联机世界玩家总数(含自己):${count}`); - return count; -} - async function confirmSearchResult() { maxAttempts = 3; for (let attempts = 0; attempts < maxAttempts; attempts++) { @@ -444,4 +435,44 @@ async function readFolder(folderPath, onlyJson) { } return files; +} + +async function findTotalNumber() { + await genshin.returnMainUi(); + await keyPress("F2"); + await sleep(2000); + + // 定义模板 + const kick2pRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/kickButton.png"), 1520, 277, 230, 120); + const kick3pRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/kickButton.png"), 1520, 400, 230, 120); + const kick4pRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/kickButton.png"), 1520, 527, 230, 120); + + moveMouseTo(1555, 860); // 防止鼠标干扰 + const gameRegion = captureGameRegion(); + await sleep(200); + + let count = 1; // 先算上自己 + + // 依次匹配 2P + if (gameRegion.Find(kick2pRo).isExist()) { + log.info("发现 2P"); + count++; + } + + // 依次匹配 3P + if (gameRegion.Find(kick3pRo).isExist()) { + log.info("发现 3P"); + count++; + } + + // 依次匹配 4P + if (gameRegion.Find(kick4pRo).isExist()) { + log.info("发现 4P"); + count++; + } + + gameRegion.dispose(); + + log.info(`当前联机世界玩家总数(含自己):${count}`); + return count; } \ No newline at end of file diff --git a/repo/js/AutoEnter/manifest.json b/repo/js/AutoEnter/manifest.json index f3f0f71cc..c041fad03 100644 --- a/repo/js/AutoEnter/manifest.json +++ b/repo/js/AutoEnter/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 1, "name": "进入联机状态", - "version": "0.0.1", + "version": "0.0.2", "tags": [ "狗粮" ],