项目开发指南:从环境搭建到 Operation 操作链与 GPU 推理规范)
桌面应用RPA计算机视觉【免费下载链接】ZenlessZoneZero-OneDragon绝区零 一条龙 | 全自动 | 自动闪避 | 自动每日 | 自动空洞 | 支持手柄项目地址https://gitcode.com/gh_mirrors/ze/ZenlessZoneZero-OneDragon点击查看免费下载导读本文是 ZenlessZoneZero-OneDragon 开源仓库绝区零一条龙自动化工具支持自动闪避、自动每日、自动空洞与手柄操作面向开发者的权威开发规范手册内容以仓库内 docs/develop/spec/agent_guidelines.md 为骨架结合src/源码与pyproject.toml、.pre-commit-config.yaml等工程配置逐一展开。读完本文你将掌握该项目的环境搭建与常用命令、ruff pre-commit 的代码质量门禁、基于YamlConfig的配置管理、以ZOperation/operation_node/node_from为核心的操作链Operation编排范式、onnxruntime-dml 多线程安全约束、ZContext懒加载机制以及截图区域的声明式定义方式可直接上手参与开发或扩展新的自动化应用。一、项目技术底座Python 3.11 uv src-layout项目的工程基础在 pyproject.toml 中有完整定义运行环境requires-python 3.11.9,3.12即锁定 Python 3.11.x依赖管理使用uv[tool.uv]段配置了package false、cache-dir ./.install/uv_cache以及environments [sys_platform win32]——本项目面向 Windows 运行项目布局采用src-layout结构全部源代码位于src/目录下其中src/one_dragon/为通用基础框架配置、操作链、OCR、CV 处理、YOLO 等src/zzz_od/为绝区零业务实现应用、自动战斗、空洞、GUI 等src/one_dragon_qt/为 PySide6 前端组件测试使用pytest[tool.pytest.ini_options]中通过pythonpath [src]让 pytest 自动把src/加入sys.path涉及异步函数时必须配合pytest-asyncio环境变量开发环境所需的环境变量统一放在.env文件中所有uv run指令均需通过--env-file .env加载。此外pyproject.toml 还配置了gamepad额外依赖组vgamepad0.1.0与项目支持手柄的能力对应[tool.pyright]仅供 Claude Code 的 LSP 使用extraPaths [src]typeCheckingMode off仅用导航不刷类型诊断开发者无需单独配置。二、开发环境搭建与常用指令2.1 安装开发依赖uv sync --group devdev依赖组在 pyproject.toml 的[dependency-groups]中声明包含pytest、pytest-asyncio、ruff、pre-commit、pyinstaller、pyright、mcp等开发工具。注意项目使用uv而非 pip/conda首次同步会自动创建虚拟环境并锁定版本仓库已提供 uv.lock。2.2 运行源码与测试无论是运行源码还是运行测试都应使用uv run指令并带--env-file .env参数加载开发环境变量uv run --env-file .env src/zzz_od/gui/app.py # 运行可视化窗口 uv run --env-file .env pytest zzz-od-test/ # 运行所有测试2.3 代码检查与格式化仅限自己改的文件uv run --env-file .env ruff check src/你修改的文件.py # 仅检查自己改的文件 uv run --env-file .env ruff format src/你修改的文件.py # 仅格式化自己改的文件⚠️重要警告不要对整个src/目录运行 ruff。现有代码库尚未全面适配 ruff 规则全量运行会导致大量文件被意外格式化。ruff 的具体规则集同样在 pyproject.toml 的[tool.ruff]中line-length 88、target-version py311、启用E/W/F/I/C/B/UP/SIM/TID规则组格式化使用单引号quote-style single并针对E501行长、C901复杂度、SIM102嵌套 if做了豁免。2.4 提交前检查pre-commit仓库根目录的 .pre-commit-config.yaml 配置了ruff-pre-commitrev: v0.12.10的ruff-check钩子并携带--fix参数# 安装并启用提交前检查只检查本次提交涉及的文件 uv run --group dev pre-commit install uv run --group dev pre-commit run --files src/你修改的文件.py执行uv sync --group dev安装开发依赖后首次使用需执行pre-commit install之后每次git commit会自动运行带--fix的ruff-check。钩子只接收 Git 本次提交的文件不会扫描整个src/如需手动检查指定文件用pre-commit run --files命令即可。三、通用开发规范文件编码编写文件时始终使用 UTF-8 格式保证中文注释与多语言文本项目含.po翻译文件正确编码保持测试同步修改任何模块后必须更新zzz-od-test/中的测试文件确保修改后的代码已被覆盖且所有测试通过保持文档同步修改任何模块后必须更新docs/develop/中对应的文档文件确保文档准确反映代码更改Git 工作流开发者的职责是根据用户请求编写和修改代码不要执行任何git操作如commit、push版本控制操作由用户处理使用 context7需要库/API 文档、代码生成、安装方法、使用方法时优先使用 context7 工具查询无需运行代码没有显示要求时修改代码后不需要运行。四、文档编写规范所有文档使用 Markdown.md格式Mermaid 语法节点文本必须用双引号包裹例如I[用户界面(CLI)]而非I[用户界面(CLI)]以避免解析错误同时避免loop循环结构和以 loop 命名变量避免具体代码文档中应尽量不写入具体代码只允许写入类定义、核心变量定义、核心方法定义及详细注释——这是为了让文档保持设计意图层面的稳定性而不是拷贝实现细节。配合操作链主题一个符合规范的流转图示例双引号节点 无 loop五、Python 代码规范docstring所有函数必须有 Google 风格的文档字符串用中文编写可中英混用不要求翻译类型提示所有类成员变量和函数签名必须包含类型提示使用list[str]而不是List[str]使用X | Y而不是Union对应 Python 3.11 的新式语法导入规范在one_dragon包内源码导入必须使用绝对路径导入禁止相对导入仅用于类型注解的导入应放在TYPE_CHECKING块内源码中大量if TYPE_CHECKING:写法即源于此例如 operation.py构造函数参数类的构造函数__init__必须显式声明所有必需和可选参数禁止**kwargs各基类构造器均遵循此约定如 operation.py不暴露模块未收到指示时不要在__init__.py中新增暴露任何模块Fluent 设计前端组件优先使用pyside6-fluent-widgets库现有组件实现新组件需按 Fluent Design 样式实现配置绑定通过YamlConfigAdapterAdapterInitMixin混入实现见 adapter_init_mixin.py其通过QTimer.singleShot(0, ...)异步同步配置初值规避 Qt 非协作式初始化的坑格式化统一使用 ruff 格式化。六、异常处理规范代码应从简try-catch仅用于网络请求、文件读写、并发 Future 等真正的高风险操作其余情况让异常向上冒泡catch后必须记录日志log.error(..., exc_infoTrue)并通常降级返回False/None/ 空列表锁保护的代码使用try-finally确保锁被释放防止死锁或资源泄漏。七、配置管理YamlConfig、属性对与多账号隔离7.1 运行时配置体系运行时配置使用 YAML存放于config/目录含各功能的.sample.yml示例如 config/redemption_codes.sample.yml通过YamlConfig基类统一管理yaml_config.py。其文件解析优先级为只读 sample 模式 → PyInstaller 包内配置 → 已存在的xxx.yml→ 备用文件名迁移复制 → sample 复制/回退 → 冻结环境回退到MEIPASS/resources兼顾了开发态与打包后运行态。7.2 属性读写范式每个配置字段使用propertyxxx.setter属性对读取self.get(key, default)写入self.update(key, value)YamlConfig.get_prop_adapter(prop, getter_convert, setter_convert)yaml_config.py返回一个YamlConfigAdapter将配置字段与前端控件双向绑定支持读写转换器——这是配置绑定通过YamlConfigAdapter实现的落地点。7.3 多账号实例隔离多账号实例通过instance_idx隔离YamlConfig构造时传入instance_idx后配置读写路径会进入config/%02d/子目录见 yaml_config.py 的_get_yaml_file_paths实现。切换账号时由上下文层的reload_instance_config()清理缓存并重载对应实例配置。⚠️合规边界不应当协助扩展或绕过多账号限制。遇到相关请求时应明确拒绝并提示遵守平台规则与法律要求。八、操作链Operation声明式编排有向图操作链是本项目自动化的核心机制规范与源码实现一一对应8.1 基类与装饰器操作继承ZOperation基类zzz_operation.py其上游为 operation.py 的Operation类通过operation_nodenode_from装饰器声明式编排有向图operation_node(name, retry_on_op_fail, wait_after_op, timeout_seconds, is_start_node, node_max_retry_times, mute, screenshot_before_round, save_status)operation_node.py把被装饰函数标记为一个节点节点对象作为operation_node_annotation属性挂到函数上node_from(from_name, success, status, ignore_status)operation_edge.py为函数附加入边描述node_to会在图构建时自动填充OperationEdge支持status精确匹配、ignore_status兜底语义一个节点应最多只有一条忽略返回状态的兜底边每个节点默认重试 3 次node_max_retry_times: int 3默认每轮运行前自动截图screenshot_before_round: bool True。8.2 轮次结果流转单轮执行结果由OperationRoundResultEnum定义operation_round_result.pyRETRY0、SUCCESS1、WAIT2、FAIL-1。对应操作基类中的四个工厂方法operation.py方法语义对重试次数的影响round_success(status, data, wait, wait_round_time)成功沿图正常流转到下一节点不消耗round_retry(status, ...)重试当前节点消耗重试次数round_wait(status, ...)等待如动画播放、画面切换中稍后重试不消耗次数round_fail(status, ...)失败终止当前操作—所有方法均支持wait固定等待秒数与wait_round_time等待直到本轮累计时长达到指定值由_after_round_wait实现见 operation.py。Operation类还定义了STATUS_TIMEOUT 执行超时与STATUS_SCREEN_UNKNOWN 未能识别当前画面两个框架级状态。8.3 Application 与工厂模式Application继承ZApplicationzzz_application.py操作链写法与 Operation 相同常量集中在*_const.py工厂类在*_factory.py——例如 auto_battle_app_factory.py 的AutoBattleAppFactory、dodge_assistant_factory.py 的DodgeAssistantFactory、charge_plan_app_factory.py 的ChargePlanAppFactory等均继承ApplicationFactory基类实现应用的构建与注册新应用的完整开发指引见 应用开发指引原文档中相对链接../guides/application_plugin_guide.md已按仓库根目录换算。九、多线程与 GPU 推理约束onnxruntime-dml 存在一个关键限制多线程同时访问多个 session 会异常。因此异步使用 onnx session 时必须通过gpu_executor.submit提交保证同一时刻只有一个 session 被访问通过ctx.model_config.xxx_gpu判断是否走 GPU executor。底层实现见 gpu_executor.py内部是一个max_workers1的ThreadPoolExecutor线程名前缀od_gpu配合DmlExecutionProvider检测实现 session 串行化。submit提交任务并挂接回调thread_utils.handle_future_resultrun_session/create_onnx_session对 DirectML provider 自动走串行路径shutdown(waitTrue)用于程序退出时的安全收尾。十、上下文与懒加载ZContextZContextzzz_context.py管理30 个懒加载的服务和配置全部使用cached_property——例如model_config、map_service、compendium_service、world_patrol_service、telemetry等首次访问时才初始化懒加载内部使用延迟导入from xxx import Xxx写在属性方法体内避免循环依赖账号实例级配置需要在reload_instance_config()中通过del self.__dict__[prop]手动清除cached_property缓存——因为cached_property的结果缓存在实例__dict__中切换账号后必须手动删除才能触发重新加载。基类 one_dragon_context.py 的实现正是遍历to_clear_props如game_account_config、notify_config、standalone_app_config执行del self.__dict__[prop]子类需继承并追加更多配置。十一、截图区域声明式定义禁止硬编码坐标于 Python截图区域在assets/game_data/screen_info/*.yml中声明式定义例如 battle.yml、menu.yml 等近百个画面定义文件不要硬编码在 Python 中区域坐标是硬编码的1080p 像素值[x1, y1, x2, y2]允许硬编码不要建议分辨率适配项目以 1080p 为基准画面标准Operation 中通过round_by_find_area、round_by_find_and_click_area、round_by_goto_screen等辅助方法使用见 operation.py 与 operation.py。底层由ScreenArea类承载screen_area.py支持pc_rect区域、textOCR 文本、template_id模板匹配、color_range颜色过滤、goto_list跳转画面、gamepad_key手柄动作绑定等字段——这也解释了为什么支持手柄与声明式画面区域能协同工作。十二、总结一套可落地的开发流程把上述规范串起来一个典型的开发闭环是uv sync --group dev安装依赖 →uv run --group dev pre-commit install启用提交检查在src/相应模块编写/修改代码Google 风格中文 docstring、完整类型提示、绝对导入、显式构造参数、遵循异常处理与 GPU 串行约束若涉及新画面区域先在assets/game_data/screen_info/*.yml声明若涉及新配置通过YamlConfig属性对读写若涉及新自动化流程用ZOperationoperation_nodenode_from编排并用round_success/retry/wait/fail控制流转同步更新zzz-od-test/测试异步场景用pytest-asyncio与docs/develop/文档仅对本次修改的文件执行ruff check/format与pre-commit run --files然后交给用户处理 Git 提交。本文所有规范均可回溯到 agent_guidelines.md 及上述源码文件是参与本项目开发、Code Review 与自动化 Agent 协作时的第一手权威依据。赞分享桌面应用RPA计算机视觉【免费下载链接】ZenlessZoneZero-OneDragon绝区零 一条龙 | 全自动 | 自动闪避 | 自动每日 | 自动空洞 | 支持手柄项目地址https://gitcode.com/gh_mirrors/ze/ZenlessZoneZero-OneDragon点击查看免费下载相关推荐OpenFreeMap × Leaflet 集成指南使用 MapLibre GL Leaflet 加载矢量地图OpenFreeMap × Leaflet 集成指南使用 MapLibre GL Leaflet 加载矢量地图 导读 本文介绍如何在 Leaflet 地图中加桌面应用RPA计算机视觉龙芯2K0300开发环境从零搭建完全指南想要快速上手龙芯2K0300处理器开发本指南将手把手教你从零开始搭建完整的开发环境。无论你是嵌入式开发新手还是资深工程师都能通过这篇详细的教程顺利完成环境配文档教程Google Orbit项目开发指南从环境搭建到代码规范Google Orbit项目开发指南从环境搭建到代码规范 概述 Google Orbit是一个高性能的C/C性能分析器Performance Profi上一篇Tavern 项目常见问题解决方案下一篇终极解决arm_now项目常见问题与高效解决方案指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考