尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

绝区零一条龙(ZenlessZoneZero-OneDragon)自动战斗补充说明:角色识别兜底与战斗按钮提示机制解析

发布时间:2026/9/29 7:25:45

资讯中心
01
ARTICLE

绝区零一条龙(ZenlessZoneZero-OneDragon)自动战斗补充说明:角色识别兜底与战斗按钮提示机制解析

绝区零一条龙(ZenlessZoneZero-OneDragon)自动战斗补充说明:角色识别兜底与战斗按钮提示机制解析
桌面应用RPA计算机视觉【免费下载链接】ZenlessZoneZero-OneDragon绝区零 一条龙 | 全自动 | 自动闪避 | 自动每日 | 自动空洞 | 支持手柄项目地址https://gitcode.com/gh_mirrors/ze/ZenlessZoneZero-OneDragon点击查看免费下载本篇技术指南以 docs/develop/zzz/auto_battle.md 为骨架深入剖析绝区零一条龙项目中自动战斗Auto Battle的两项关键机制队伍角色识别的「全量匹配 → 低成本识别」切换与兜底策略以及普通攻击、切换后援等战斗按钮的模板识别与状态写入。结合src/zzz_od/auto_battle/目录下的真实实现读者可以完整掌握自动战斗如何以最小模板匹配开销稳定识别角色、如何判断战斗画面以及如何通过状态与原子操作驱动「切换后援默认键盘键位 R」这一实战动作。一、背景为什么需要「补充说明」自动战斗是绝区零一条龙OneDragon项目面向《绝区零》游戏的全自动玩法模块代码集中在 src/zzz_od/auto_battle/ 目录。它的核心工作模式是截取战斗画面 → 通过模板匹配识别队伍角色、能量、特殊攻击/终结技就绪状态与各类按键 → 将识别结果写入状态记录 → 由条件操作Conditional Operation引擎按状态决策并执行原子操作如攻击、闪避、切换角色。原文档是开发者针对该模块两份「实现补充」的说明一是队伍角色识别在遇到游戏新战斗模式时的兜底策略二是战斗按钮提示状态的具体行为。本文在完整继承这两部分内容的基础上结合源码进一步还原其实现细节与调用链。二、队伍角色识别兜底全量匹配与低成本识别的切换机制2.1 两种识别模式自动战斗中的队伍角色识别有两种模式全量匹配遍历AgentEnum中所有代理人逐个进行模板匹配结果最可靠但模板匹配开销最高低成本识别当连续多次识别结果一致后停止全量匹配改为基于当前队伍信息的候选集匹配——只对已知候选角色做模板匹配大幅降低常规战斗中的匹配压力。从源码看候选集由 get_possible_agent_list() 决定def get_possible_agent_list(self) - Optional[List[Tuple[Agent, Optional[str]]]]: check_all: bool False if self.team_info.should_check_all_agents: check_all True elif self.team_info.agent_list is None or len(self.team_info.agent_list) 0: check_all True else: for i in self.team_info.agent_list: if i.agent is None: check_all True break if check_all: return [(agent_enum.value, None) for agent_enum in AgentEnum] else: return [(i.agent, i.matched_template_id) for i in self.team_info.agent_list if i.agent is not None]即当队伍信息缺失、队伍中存在未识别角色或被显式请求全量识别should_check_all_agents时候选集退化为全部代理人否则只使用当前队伍已知角色及其上次匹配到的模板 IDmatched_template_id实现低成本识别。2.2 新模式的触发场景游戏内出现同一队伍在战斗中循环切换的新模式时队伍成员在战斗中持续轮换此时旧的低成本识别会因候选角色被固定导致当前画面一个角色都识别不到画面中的角色不在固定的候选集内。2.3 兜底策略一帧识别不到仅强制下一次全量识别针对上述场景当前实现增加如下兜底逻辑原文档要点源码见 check_agent_related() 与 _should_force_check_all_agents()战斗画面判定普通攻击按钮可用模板匹配命中说明当前仍处于战斗画面识别结果为空若这一帧角色识别结果为「一个角色都识别不到」不立即常驻开启全量识别单次强制仅将下一次角色识别强制切回「全量匹配所有角色」并重置识别节流时间self._last_check_agent_time 0使下一帧立即执行识别避免长时间停在错误候选集上。源码中对应的判定函数def _should_force_check_all_agents(self, screen_agent_list): if self.team_info.should_check_all_agents: return False # 已处于全量模式无需再触发 for agent, _ in screen_agent_list: if agent is not None: return False # 能识别到角色不触发 return True # 战斗中但一个都识别不到强制下一次全量识别触发后通过request_check_all_agents()设置should_check_all_agents True并清零连续一致/不一致计数request_check_all_agents()。这样可以在兼容新模式的同时尽量减少常规战斗中的模板匹配压力——全量识别只在「识别真空」时出现一次之后随着队伍信息重新稳定又会回到低成本识别模式。2.4 识别节流与并发细节角色识别默认间隔为0.5秒auto_battle_agent_context.py 中self._check_agent_interval: float 0.5并可在加载自动战斗操作器时通过auto_op.check_agent_interval覆盖init_auto_op()头像识别区域来自战斗画面配置中的「头像-3-1 / 头像-3-2 / 头像-3-3 / 头像-2-2」四个区域init_screen_area()识别采用线程池并发提交_check_agent_in_parallel()并根据队伍人数决定识别哪些头像区域3 人队伍识别前三个头像区域2 人队伍识别「头像-3-1」与「头像-2-2」单人仅识别「头像-3-1」只有在全量识别模式下才 4 个区域全部识别。这也是「全量匹配压力更高」的直观体现。三、战斗按钮提示普通攻击与切换后援战斗画面中的部分按钮会通过模板匹配写入状态供自动战斗状态判断与调试提示使用。相关状态常量定义在 auto_battle_state.py 的BattleStateEnum中例如BTN_SWITCH_BACKUP 按键-切换后援 BTN_SWITCH_NORMAL_ATTACK 按键-普通攻击 STATUS_SWITCH_BACKUP_READY 按键可用-切换后援 STATUS_NORMAL_ATTACK_READY 按键可用-普通攻击3.1 普通攻击按钮战斗画面的快速判据普通攻击按钮用于快速判断当前是否仍处于战斗画面。其实现为 is_normal_attack_btn_available()裁剪「战斗画面 / 按键-普通攻击」区域后用模板btn_normal_attack对应 assets/template/battle/btn_normal_attack/做一次模板匹配耗时约 2~3 ms属于开销极低的粗略判据该判据被多处复用例如 auto_battle_utils.py 中in_battle ctx.auto_battle_context.is_normal_attack_btn_available(screen)以及角色识别兜底逻辑对「是否仍处于战斗画面」的前置判断。3.2 切换后援按钮1 秒轮询与颜色识别切换后援按钮每 1 秒检测一次。对应实现为 check_switch_backup()节流间隔self._check_switch_backup_interval 1秒并通过线程锁保证同一时刻只有一次检测在运行识别命中时写入状态按键可用-切换后援检测通过后调用state_record_service.update_state(StateRecord(BattleStateEnum.STATUS_SWITCH_BACKUP_READY.value, screenshot_time))命中判定 _is_switch_backup_ready() 不是模板匹配而是对「切换后援标记」与「切换后援灰度区域」两个画面区域做 HSV 颜色特征分析标记区域基本全黑饱和度 ≤ 10 且明度 ≤ 20 的像素占比 ≥ 0.9见 _is_switch_backup_mark_black()灰度区域已明显变彩色饱和度 ≥ 40 且明度 ≥ 90 的彩色像素占比 ≥ 0.5且灰白像素占比 ≤ 0.2见 _is_switch_backup_gray_area_colorful()。即「按钮标记点亮 按钮底色由灰变彩」被视为切换后援可用。两个区域在战斗画面配置中注册为「按键-切换后援标记」与「按键-切换后援灰度区域」auto_battle_context.py。3.3 原子操作按键-切换后援与默认键位自动战斗可直接执行原子操作按键-切换后援对应类 AtomicBtnSwitchBackup在 atomic_op_factory.py 中注册。其execute()调用self.ctx.switch_backup(press, press_time, release)stop()时若仍处于按下状态会自动补发松开保证按键状态一致底层按键转发在 zzz_pc_controller.pyswitch_backup()通过self._action_btn(self.action_keys[switch_backup], ...)执行默认键盘键位为R配置定义于 game_config.pyConfigItem(切换后援, switch_backup)键盘模式默认switch_backup: r手柄模式下Xbox 默认映射为B 键XboxButtonEnum.BDS4 默认映射为○ 键Ds4ButtonEnum.CIRCLE。实际键位可在项目的按键设置界面中调整。四、机制协同一次完整的「识别真空 → 恢复」闭环将两部分机制串起来可以还原自动战斗在遇到队伍循环切换新模式时的完整行为链路战斗中普通攻击按钮模板匹配命中 → 确认仍处于战斗画面低成本识别模式下当前画面角色均不在固定候选集中 → 一帧识别结果全部为 None_should_force_check_all_agents()返回 True →request_check_all_agents()置位全量标记、清零节流时间下一帧立即执行全量匹配所有角色 → 重新识别出当前队伍成员 → 队伍信息更新候选集恢复之后又自动回落为低成本识别直到下一次识别真空出现。整个过程既兼容了新模式又不会让全量模板匹配常驻兼顾了识别准确性与性能。五、延伸阅读自动战斗状态定义总览src/zzz_od/auto_battle/auto_battle_state.py角色识别上下文候选集、兜底、并发识别src/zzz_od/auto_battle/auto_battle_agent_context.py战斗上下文按钮区域、切换后援检测、普通攻击判据src/zzz_od/auto_battle/auto_battle_context.py原子操作实现src/zzz_od/auto_battle/atomic_op/btn_switch_backup.py按键键位配置src/zzz_od/config/game_config.py模板资源assets/template/battle/btn_normal_attack/本文所有结论均可在上述源码与配置文件中验证实际运行效果以项目当前版本与游戏实际画面表现为准。赞分享桌面应用RPA计算机视觉【免费下载链接】ZenlessZoneZero-OneDragon绝区零 一条龙 | 全自动 | 自动闪避 | 自动每日 | 自动空洞 | 支持手柄项目地址https://gitcode.com/gh_mirrors/ze/ZenlessZoneZero-OneDragon点击查看免费下载相关推荐【绝区零一条龙】全自动战斗辅助的减负指南 为什么需要这款工具 还在为每日任务肝到深夜这款开源辅助工具就像你的游戏管家能自动完成日常清理、空洞作战等重复操作让你把时间花在更有趣的战斗策略上桌面应用RPA计算机视觉绝区零 一条龙剧情自动跳过设置专注战斗体验绝区零 一条龙剧情自动跳过设置专注战斗体验 痛点直击你还在被重复剧情消耗时间吗 在《绝区零》的游玩过程中剧情对话和过场动画往往会占用大量时间尤其是在重桌面应用RPA计算机视觉ZenlessZoneZero-OneDragon智能识别系统从零构建高效自动化战斗引擎ZenlessZoneZero OneDragon智能识别系统从零构建高效自动化战斗引擎 项目速览 ZenlessZoneZero OneDragon简称Z桌面应用RPA计算机视觉上一篇FANBOX 创作者内容批量下载工具fanbox-dl 完整上手指南下一篇给小米手表做一块表盘Mi-Create免费开源工具的完整实操指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。