Skip to content

AIPC珍贵宝箱无限刷无法正常使用的问题和解决方法 #3622

Description

@harrypan666

提交确认

  • 我已搜索现有 Issue
  • 我已确认当前脚本或仓库尚无等价能力
  • 该需求不仅是个人操作习惯
  • 我理解需求可能受兼容性和维护成本限制

涉及范围

JS 脚本

相关脚本名称与版本

AIPC珍贵宝箱无限刷/AutoInfinitePreciousChest

需求或建议

任务界面更新导致原脚本任务界面判断失效而无法实现功能,main.js现作以下改动:

  1. 新增一个通用函数(放在封装函数区域任意位置)
// 新UI:OCR 识别并点击指定文本按钮,返回是否成功
async function ClickButtonByText(text, x, y, w, h) {
    const ro = captureGameRegion();
    const resList = ro.findMulti(RecognitionObject.ocr(x, y, w, h));
    ro.dispose();
    for (let i = 0; i < resList.count; i++) {
        const res = resList[i];
        if (res.text.includes(text)) {
            log.info(`识别到"${text}"按钮`);
            res.click();
            await sleep(1500);
            return true;
        }
    }
    log.warn(`未识别到"${text}"按钮`);
    return false;
}
  1. 替换整个 CheckKeyBindlings 函数
async function CheckKeyBindlings() {
    let keyStatus = false;
    await TryOpenQuestMenu(0); // 按J

    // 新UI:按J后进入"进行中"视图,检测"任务总览"按钮即可确认菜单已开
    // (若上次停在任务总览界面,则检测右侧"传说任务"按钮)
    const ro1 = captureGameRegion();
    const list1 = ro1.findMulti(RecognitionObject.ocr(50, 920, 500, 160)); // 左下"任务总览"
    const list2 = ro1.findMulti(RecognitionObject.ocr(1000, 380, 700, 300)); // 右侧"传说任务"
    ro1.dispose();

    let menuOpened = false;
    for (let i = 0; i < list1.count; i++) if (list1[i].text.includes("任务总览")) menuOpened = true;
    for (let i = 0; i < list2.count; i++) if (list2[i].text.includes("传说任务")) menuOpened = true;

    if (menuOpened) {
        log.info("检测到任务菜单已开启,按键正常");
        await sleep(1000);
        keyStatus = true;
    } else {
        log.info("检测到任务菜单没有开启,推测快捷键不是默认值,尝试恢复");
        await KeyBindlings();
        await TryOpenQuestMenu(0);

        const ro2 = captureGameRegion();
        const list3 = ro2.findMulti(RecognitionObject.ocr(50, 920, 500, 160));
        const list4 = ro2.findMulti(RecognitionObject.ocr(1000, 380, 700, 300));
        ro2.dispose();

        for (let i = 0; i < list3.count; i++) if (list3[i].text.includes("任务总览")) keyStatus = true;
        for (let i = 0; i < list4.count; i++) if (list4[i].text.includes("传说任务")) keyStatus = true;

        if (keyStatus) {
            log.info("恢复后检测到任务菜单,按键正常");
            await sleep(1000);
        } else {
            log.warn("尝试恢复任务菜单快捷键默认值失败");
        }
    }
    await genshin.returnMainUi();
    await sleep(1000);
    return keyStatus;
}
  1. 修改 AbandonHangoutEvent 中放弃后的导航部分
    找到原来这段(点 Confirm 之后、点 StoryQuestsButton 之前):
const ro16 = captureGameRegion();
let StoryQuestsButton = ro16.find(StoryQuestsButtonRo);
ro16.dispose();
if (StoryQuestsButton.isExist()) {
    log.info("识别到传说任务按钮");
    StoryQuestsButton.click();
    await sleep(1500);
}

整段替换为:

// 新UI导航:任务总览 → 传说任务
await ClickButtonByText("任务总览", 50, 920, 500, 160);
await ClickButtonByText("传说任务", 1000, 380, 700, 300);

修改完成后为
main.js

使用场景

更新游戏后还需要此脚本的人

预期收益

脚本又可以继续使用了

影响与约束

补充信息

No response

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancement新功能建议或现有能力改进。

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions