diff --git a/repo/js/AutoArtifactsSalvageOrDestroy(1-4star)/assets/RecognitionObject/ConfirmButton.png b/repo/js/AutoArtifactsSalvageOrDestroy(1-4star)/assets/RecognitionObject/ConfirmButton.png new file mode 100644 index 000000000..78d72f299 Binary files /dev/null and b/repo/js/AutoArtifactsSalvageOrDestroy(1-4star)/assets/RecognitionObject/ConfirmButton.png differ diff --git a/repo/js/AutoArtifactsSalvageOrDestroy(1-4star)/main.js b/repo/js/AutoArtifactsSalvageOrDestroy(1-4star)/main.js index 362198d26..90862090a 100644 --- a/repo/js/AutoArtifactsSalvageOrDestroy(1-4star)/main.js +++ b/repo/js/AutoArtifactsSalvageOrDestroy(1-4star)/main.js @@ -1,3 +1,5 @@ +const outDatedRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/ConfirmButton.png"), 760, 700, 100, 100); + (async function () { // 读取用户设置 let operationType = settings.operationType || "分解"; // 默认为分解 @@ -11,10 +13,36 @@ log.debug(`操作次数: ${times}`); log.debug(`包含一星: ${includeOneStar}, 包含二星: ${includeTwoStar}, 包含三星: ${includeThreeStar}, 包含四星: ${includeFourStar}`); + // 点击过期按钮 + async function findAndClick(target, maxAttempts = 20) { + for (let attempts = 0; attempts < maxAttempts; attempts++) { + const gameRegion = captureGameRegion(); + try { + const result = gameRegion.find(target); + if (result.isExist) { + result.click(); + return true; // 成功立刻返回 + } + log.warn(`识别失败,第 ${attempts + 1} 次重试`); + } catch (err) { + } finally { + gameRegion.dispose(); + } + if (attempts < maxAttempts - 1) { // 最后一次不再 sleep + await sleep(250); + } + } + return false; + } + // 分解圣遗物 async function salvage() { await genshin.returnMainUi(); keyPress("B"); await sleep(2000); // 打开背包 + if (await findAndClick(outDatedRo)) { + log.info("检测到过期物品弹窗,处理"); + await sleep(1000); + } click(670, 40); await sleep(1000); // 点击圣遗物 click(660, 1010); await sleep(1000); // 点击分解 click(300, 1020); await sleep(1000); // 点击快速选择 @@ -38,6 +66,10 @@ async function destroy() { await genshin.returnMainUi(); keyPress("B"); await sleep(2000); // 打开背包 + if (await findAndClick(outDatedRo)) { + log.info("检测到过期物品弹窗,处理"); + await sleep(1000); + } click(670, 40); await sleep(1000); // 点击圣遗物 for (let i = 0; i < times; i++) { diff --git a/repo/js/AutoArtifactsSalvageOrDestroy(1-4star)/settings.json b/repo/js/AutoArtifactsSalvageOrDestroy(1-4star)/settings.json index f70979ee9..223faf258 100644 --- a/repo/js/AutoArtifactsSalvageOrDestroy(1-4star)/settings.json +++ b/repo/js/AutoArtifactsSalvageOrDestroy(1-4star)/settings.json @@ -4,8 +4,8 @@ "type": "select", "label": "操作类型(默认:分解)", "options": [ - "分解", - "摧毁" + "分解(经验瓶)", + "摧毁(摩拉)" ] }, {