
桌面应用RPA计算机视觉【免费下载链接】ZenlessZoneZero-OneDragon绝区零 一条龙 | 全自动 | 自动闪避 | 自动每日 | 自动空洞 | 支持手柄项目地址https://gitcode.com/gh_mirrors/ze/ZenlessZoneZero-OneDragon点击查看免费下载导读本文聚焦于「绝区零 一条龙ZenlessZoneZero-OneDragon」自动化框架中的「兑换码输入」画面深入剖析该模态弹窗的触发时机、状态流转、识别锚点与可交互元素并结合仓库源码展开兑换码自动兑换应用RedemptionCodeApp的完整执行链路。读完本文你将掌握该画面在 screen_info 体系中的收录现状、menu.yml中 area 的定义方式以及如何从配置层redemption_codes到运行层used_code_list记录实现兑换码的自动领取。一、画面定位模态弹窗的触发与状态流转「兑换码输入」是一个模态弹窗并非独立的游戏主画面其入口为「菜单-更多功能」页面中的「兑换码」按钮。其完整进入路径为游戏内打开菜单 → 底部点「更多」→ 在更多功能区域点「兑换码」→ 弹出「兑换码输入」模态框对应的识别文档位于 docs/game/screens/兑换码输入.md其中appears_in: [菜单-更多功能]明确记录了该弹窗的挂靠归属。该画面的状态流转可归纳为下表出口动作 → 下一态输入 兑换点输入框 →keyboard.type输入码 → 点兑换 → 兑换结果弹窗成功/失败未覆盖需有效兑换码app 的confirm_code节点当前不区分成功/失败 UI统一再次点击并记录used_code关闭 X→ 菜单-更多功能全部兑换完毕appback节点 →BackToNormalWorld→ 大世界其中「全部兑换完毕 → 返回大世界」由 redemption_code_app.py 中的back节点实现当input_code节点检测到已无未使用兑换码时返回全部兑换完毕状态随后创建BackToNormalWorld操作并执行将游戏拉回大世界。二、识别特征与稳定锚点该弹窗的识别主要依赖以下稳定锚点坐标为 1920×1080 分辨率下的像素位置标题「兑换码」位于屏幕约 (655, 357)作为画面存在的首要文本锚点输入框占位文本「请输入兑换码」位于约 (880, 555)含粘贴按钮兑换按钮位于约 (950, 697)亮色可点空输入状态下同样可点击关闭 X位于约 (1222, 336)右上角。值得注意的是该弹窗为半透明遮罩背后透出的是「菜单-更多功能」页面这一特性已通过 vision 确认。正因如此该画面在匹配逻辑上存在特殊性——它没有独立的精确匹配菜单 / 画面-通用 / 菜单-更多功能 三个候选画面在is_preciseFalse时均为模糊匹配。三、screen_info 缺口area 暂挂在 menu.yml 下这是本文档标注的最核心工程问题⚠️ screen_info 缺口「兑换码输入」画面目前无独立 screen 收录相关 area 全部定义在菜单画面的配置文件中。在 menu.yml 中可找到两个关键 area 定义area 名称pc_rect像素区域text说明兑换码输入框(718, 536) ~ (1198, 610)空输入框可点区域供round_by_click_area直接点击兑换码兑换(878, 690) ~ (1074, 738)「兑换」兑换按钮区域text 命中 conf 0.963此外「关闭 X」按钮复用「画面-通用」的 template 匹配conf 0.966位置 1222,336同样不归属本画面的独立 screen。文档给出的改进建议是可考虑新建独立 screen例如兑换码输入来提升识别精度并把输入框、标题等锚点一并收录。这对后续维护者是一个明确的待办方向。四、自动兑换应用的完整状态机「兑换码输入」画面是 RedemptionCodeAppAPP_ID redemption_code见 redemption_code_const.py的核心操作画面。该应用以装饰器定义状态机节点完整链路如下检测新兑换码start → 打开菜单 → 点击更多 → 点击兑换码 → 输入兑换码 → 兑换后确认 → 返回大世界4.1 检测新兑换码运行记录的过滤逻辑check_new_code节点调用运行记录获取未使用列表self.unused_code_list self.run_record.get_unused_code_list(self.run_record.get_current_dt())对应实现位于 redemption_code_run_record.py 的get_unused_code_list先按end_dt 当前日期过滤出未过期的有效码再从有效码中剔除used_code_list已使用记录中的码。若列表为空则返回无新的兑换码直接结束本次运行。4.2 菜单导航OCR 限定区域点击open_menu通过round_by_goto_screen(screen_name菜单)进入菜单画面click_more使用 OCR 在「底部列表」area见 menu.ymlpc_rect 为 (200,924)~(1728,1058)内查找文本「更多」并点击click_code则在「更多功能区域」(474,280)~(1440,904)内 OCR 查找「兑换码」并点击同时将code_idx重置为 0。这印证了文档备注中的描述打开菜单「更多」 点「兑换码」入口走 OCRround_by_ocr_and_clickget_area限定区域而点输入框走round_by_click_area直点 area非 OCR。4.3 输入兑换码keyboard.type 而非 MCP 输入input_code节点是本文档备注中特别强调的实现细节源码见 redemption_code_app.pyself.round_by_click_area(菜单, 兑换码输入框) time.sleep(1) self.ctx.controller.keyboard_controller.keyboard.type(self.unused_code_list[self.code_idx]) time.sleep(6) return self.round_by_find_and_click_area(self.last_screenshot, 菜单, 兑换码兑换, success_wait1, retry_wait1)要点拆解点击输入框直接使用 arearound_by_click_area(菜单, 兑换码输入框)不经过 OCR文本输入使用keyboard_controller.keyboard.type()模拟键盘逐字输入并非MCP 的input_text输入后sleep(6)等待界面响应游戏内弹窗输入通常有聚焦与渲染延迟随后round_by_find_and_click_area在「菜单 / 兑换码兑换」area 上查找并点击「兑换」按钮成功等待 1 秒失败重试等待 1 秒。4.4 兑换后确认统一二次点击并记账confirm_code节点在兑换后再次执行round_by_find_and_click_area点击「兑换码兑换」按钮用于消掉可能出现的兑换结果弹窗/重复点击。只要点击成功就将当前码写入used_code_list并推进code_idxself.run_record.add_used_code(self.unused_code_list[self.code_idx]) self.code_idx 1add_used_code实现见 redemption_code_run_record.py将码追加进used_code_list并持久化。这也解释了文档中「appconfirm_code当前不区分成功/失败 UI统一再次点 记used_code」的现状——兑换结果弹窗成功「兑换成功」/ 失败「兑换码无效」尚未覆盖需有效兑换码才能触发采集属于待补项。4.5 循环与收尾node_from装饰器将「输入兑换码」和「兑换后确认」连成循环第一次兑换从「点击兑换码」进入后续兑换从「兑换后确认」返回。当code_idx len(unused_code_list)时input_code返回全部兑换完毕状态机跳转至back节点执行BackToNormalWorld回到大世界一次自动兑换任务结束。五、配置层兑换码数据如何管理与合并自动兑换的数据来源是redemption_codes配置结构为codes: {兑换码: 过期时间(YYYYMMDD)}。仓库自带的示例见 config/redemption_codes.sample.ymlcodes: ZZZ888: 20990101 CLARET0909: 202608295.1 双配置合并用户配置优先RedemptionCodeConfig 管理两类 YamlConfiguser_config用户配置文件可读写redemption_codessample_config示例配置文件只读read_sample_onlyTrue始终读 sample 文件。读取时先加载 sample 配置再用用户配置覆盖实现「用户配置优先」保存时只写入用户配置文件。该合并逻辑在codes_dict属性中实现并同步应用于运行记录加载见 redemption_code_run_record.py。5.2 配置的 CRUD 能力RedemptionCodeConfig提供完整的管理接口add_code(code, end_dt20990101)新增兑换码end_dt默认 20990101即默认长期有效update_code(old_code, new_code, end_dt)修改码文本或过期日期改名时先删除旧码delete_code(code)删除指定码add_sample_code/delete_sample_code/clean_expired_sample_codes(today)操作 sample 配置供 CI 脚本使用——仓库的 tools/ci/update_redemption_code.py 与 .github/workflows/update-redemption-code.yml 即用于自动维护示例兑换码并清理过期项。5.3 图形化配置界面用户可在 GUI 中维护兑换码对应界面为 redemption_code_setting_interface.pyCodeCard每张卡片包含兑换码输入框、过期日期输入框QIntValidator 最大 8 位和删除按钮sample 配置中的码以只读卡片展示readonlyTrue不可删除用户自建码可编辑删除新增卡片默认过期日期为当前日期 30 天datetime.now() timedelta(days30)重复码会触发兑换码已存在的警告提示InfoBar.warning。该界面的挂载通过 redemption_code_app_setting.py 的RedemptionCodeAppSettingsetting_type SettingType.INTERFACE注册工厂类 redemption_code_factory.py 负责创建应用、运行记录与全局配置配置不依赖instance_idx与group_id。六、兑换结果弹窗已知缺口与待补说明文档在「识别快照」中明确标注了两个待补项兑换结果弹窗未覆盖需要有效兑换码触发成功「兑换成功」/ 失败「兑换码无效」当前未截图采集confirm_code采用不区分结果的二次点击策略作为临时方案独立 screen 缺失当前弹窗依赖菜单画面的 area 定义完成识别OCR 快照中「兑换码兑换」conf 0.963与「关闭」conf 0.966均为跨 screen 的模糊命中。这两项缺口的完整记录均保留在 docs/game/screens/兑换码输入.md 中是后续开发者补充画面收录时最直接的参考起点。七、画面识别实测快照2026-07-11 核对文档记录的输入态识别快照如下匹配画面无精准匹配菜单 / 画面-通用 / 菜单-更多功能 均is_preciseFalse模糊模糊命中 area跨 screenarea所属 screen类型conf位置兑换码兑换菜单menu.ymltext「兑换」0.963950,697关闭画面-通用template0.9661222,336OCR 结果兑换码 / 请输入兑换码 / 兑换。可见当前识别链路完全建立在「菜单画面 通用画面」的既有资源之上这也再次呼应了文档备注中「新建独立 screen 提升识别精度」的工程建议。结语「兑换码输入」虽只是一个模态弹窗却串联起了 OneDragon 中「画面识别 → 状态机编排 → OCR/area 点击 → 键盘输入 → 配置管理 → 运行记录持久化」的完整自动化链路。理解它的识别现状无独立 screen、area 借挂 menu.yml与RedemptionCodeApp的状态机实现是继续完善兑换码模块尤其是补全兑换结果弹窗与独立 screen 收录的前提。赞分享桌面应用RPA计算机视觉【免费下载链接】ZenlessZoneZero-OneDragon绝区零 一条龙 | 全自动 | 自动闪避 | 自动每日 | 自动空洞 | 支持手柄项目地址https://gitcode.com/gh_mirrors/ze/ZenlessZoneZero-OneDragon点击查看免费下载相关推荐Node.js v0.10.3 (Stable) 版本发布详解npm 1.2.17 升级与核心模块修复全解读Node.js v0.10.3 Stable 版本发布详解npm 1.2.17 升级与核心模块修复全解读 Node.js v0.10.3 是 2013 年 4桌面应用RPA计算机视觉3步完成AI数字人本地部署完整离线视频生成指南3步完成AI数字人本地部署完整离线视频生成指南 在数字内容创作日益普及的今天你是否曾梦想拥有一个专属的AI数字人Duix.Avatar作为真正开源的AI数人工智能AI 应用数字人媒体生成桌面应用Chat Nio兑换码体系礼品码与兑换码区别与应用Chat Nio兑换码体系礼品码与兑换码区别与应用 概述 Chat Nio作为一款强大的AI聚合聊天平台提供了完善的兑换码体系来支持用户激励、推广营销和配额后端前端人工智能大模型AI 应用LLM 网关API网关创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考