mit einem Klick
environment-monitoring-add-route
// 向 routes.json 添加环境监测(EnvironmentMonitoring)新观察点条目。使用时:新增 zmdmap / kite_station_i18n 观察点路线配置、适配新版本的环境监测任务、补全缺失的 EnterMap、MapPath 或 MapTarget 数据。会自动检测缺失任务,逐字段询问路线数据后写入 routes.json。
// 向 routes.json 添加环境监测(EnvironmentMonitoring)新观察点条目。使用时:新增 zmdmap / kite_station_i18n 观察点路线配置、适配新版本的环境监测任务、补全缺失的 EnterMap、MapPath 或 MapTarget 数据。会自动检测缺失任务,逐字段询问路线数据后写入 routes.json。
MaaEnd MapTracker 相关组件编写指南。为 agent/go-service/maptracker 下的 Go 代码提供说明,并提供 MapTracker 的开发文档指引。在参与开发 MapTracker 的 Go 代码实现时,或需要了解 MapTracker 详细工作原理时使用。
分析 Windows 崩溃转储文件(.dmp),诊断 MaaEnd 及其依赖项(MaaFramework、MXU)的崩溃。自动从 GitHub Releases 下载对应版本 PDB 符号,使用 minidump-stackwalk 解析堆栈轨迹并定位崩溃根因。当 issue 日志包或附件中发现 .dmp 文件,或用户要求分析 DMP/崩溃转储时使用。
分析 MaaEnd 上游仓库公开 Issue(`https://github.com/MaaEnd/MaaEnd/issues/...` 或 `#1234`)。自动抓取 issue 正文和评论中的 `MaaEnd-logs-*.zip` 附件,下载解压后从 `maafw.log`、`maafw.bak.*.log`、`go-service.log`、`mxu-tauri.log`、`mxu-web-*.log`、`mxu-agent*.log`、`config/*`、`on_error/` 中筛选关键证据,并结合 MaaEnd、MaaFramework、MXU 的代码和文档判断根因、给出修复方案,供用户在让你分析 MaaEnd issue、日志包、识别失败、任务卡死、控制器差异、Pipeline/Agent/MXU 问题时使用。
分析 MaaEnd `CreditShoppingMain` 的日志。用于还原信用购物任务中实际购买了什么商品、每件商品的折扣力度、是否触发过刷新(或刷新次数已用尽)、稳健刷新是否触发、以及信用点的消耗状况。货架槽位必须以日志中的 `CreditIcon`(TemplateMatcher)为锚,有无 `BuyFirstOCR`/`Priority2OCR` 不影响槽位级货架的还原与呈现。适用于用户询问信用点交易、信用购物买了什么、折扣情况、刷新配置、`CreditShoppingMain` 任务行为等场景。
仅分析 `AutoStockStapleMain` 的 MaaEnd 日志。用于还原该任务实际购买了什么、购买所对应的证据、逐步剩余账单(券/账单)数值时间线,以及在 pipeline 或 go-service 中应当加日志/埋点的位置。适用于用户询问 `AutoStockStapleMain`、`AutoStockStaple`、武陵/四号谷地的稳定需求物资购买,或该任务内账单数值变化原因等场景。
MaaEnd Pipeline JSON 编写指南。基于 MaaFramework Pipeline 协议,提供节点命名、识别算法、动作类型、流程控制、可复用节点等编码规范与模式参考。在编写、修改或审查 Pipeline JSON、设计节点流程、使用 TemplateMatch/OCR/Custom 识别或 Click/Swipe 动作时使用。
| name | environment-monitoring-add-route |
| description | 向 routes.json 添加环境监测(EnvironmentMonitoring)新观察点条目。使用时:新增 zmdmap / kite_station_i18n 观察点路线配置、适配新版本的环境监测任务、补全缺失的 EnterMap、MapPath 或 MapTarget 数据。会自动检测缺失任务,逐字段询问路线数据后写入 routes.json。 |
| argument-hint | 可选:直接说明要适配哪个观察点名称,否则自动列出所有缺失条目 |
在 tools/pipeline-generate/EnvironmentMonitoring/routes.json 末尾追加新的观察点条目,以便后续运行 npx @joebao/maa-pipeline-generate 生成 Pipeline 文件。
MissionId / Name / Id 从 tools/pipeline-generate/data/kite_station_i18n.json 自动提取,不需要询问用户提供 MissionId:
MissionId:直接取 missionId,这是 routes.json 的匹配主键Name:直接取 name["zh-CN"]Id:按生成器规则从 name["en-US"] 转成最终模板使用的节点 ID,仅供人工搜索生成节点/文件名需向用户逐字段询问的路线字段:
| 字段 | 必填 | 说明 |
|---|---|---|
EnterMap | ✓ | 传送节点名(SceneEnterWorldXxx),必须已存在于 assets/resource/pipeline/SceneManager/;若无合适传送点,不要写占位值,跳过该条目即可 |
MapName | ✓ | 地图标识。MapPath 填 MapTracker map_name(如 map02_lv001,支持正则);MapTarget 填 MapLocate zone_id,必须与录制工具一致 |
MapAssert | ✓ | 目标矩形 [x, y, w, h],720p 小地图坐标,用于传送落点复核;MapPath 用 MapTracker 断言,MapTarget 用 MapLocate 断言 |
MapPath / MapTarget | ✓ | 二选一。MapPath 是手录路径 [[x1, y1], ...];MapTarget 是 NAVMESH 目标点 [x, y],适合不依赖交互/过图/机关的普通可达路线 |
CameraSwipeDirection | ✓ | EnvironmentMonitoringSwipeScreenUp/Down/Left/Right |
CameraMaxHit | 可选 | 摄像头最大滑屏次数,默认 2;较难对准时调大 |
NoEnsureInitialMovementState | 可选 | 仅对 MapPath 有意义,默认 false。路线起点紧贴桥边/悬崖边等危险地形时设为 true,跳过开局冲刺准备动作,避免掉下悬崖 |
MissionId。匹配范围包括每个 mission 的 name 与 shotTargetName 下全部 locale(如 zh-CN / zh-TW / en-US / ja-JP / ko-KR);匹配时忽略大小写、空格、常见中英文标点、引号和连字符差异。匹配唯一时,自动取该 mission 的 missionId / name["zh-CN"] / 最终模板 Id 写入 MissionId / Name / Id。Name / Id / MissionId 让用户选择;若没有匹配到,说明未找到并改为列出缺失条目供用户选择。kite_station_i18n.json 提取所有 mission 的 missionId(作为 MissionId)routes.json 中已有的 MissionId 做对比;没有条目,或条目缺少任一必填路线字段(EnterMap / MapName / MapAssert / CameraSwipeDirection / MapPath 或 MapTarget 二选一)都算待适配Name / Id / MissionId对每个待适配的观察点,按字段顺序使用 vscode_askQuestions 每次只问一个字段,依次提问:
EnterMapMapNameMapAssert(格式 [x, y, w, h])MapPath 或 MapTarget
MapPath 时,继续询问路径(格式 [[x1,y1],[x2,y2],...])MapTarget 时,继续询问目标点(格式 [x,y])CameraSwipeDirection(选项:Up / Down / Left / Right)CameraMaxHit(可选,跳过则不写入,使用默认值 2)NoEnsureInitialMovementState(可选,仅 MapPath 路线询问;跳过则不写入,默认 false;起点紧贴危险地形时选 true)收到每个字段的答案后,再问下一个字段。
使用 file_search 在 assets/resource/pipeline/SceneManager/ 中确认传送点文件是否存在。若不存在:
EnterMap 替换成占位值后写入条目。直接跳过该条目(不写入 routes.json),让生成器走未适配分支(仅接取并追踪)。按现有条目格式追加到 routes.json 末尾(数组 ] 之前):
// TODO 等注释)MapPath 每个坐标对单独一行;MapTarget 写成 [x, y]MapPath 与 MapTarget 必须且只能写一个,不要同时写入CameraMaxHit 仅当值非默认(≠ 2)时才写入NoEnsureInitialMovementState 仅用于 MapPath,MapTarget 条目不要写入提醒用户运行以下命令重新生成 Pipeline:
npx @joebao/maa-pipeline-generate
npx @joebao/maa-pipeline-generate --config terminals-config.json
并将 routes.json 与 assets/resource/pipeline/EnvironmentMonitoring/ 下的变更一并提交。
MapAssert、MapPath、MapTarget)。MapName 必须和录制工具一致:MapPath 路线使用 MapTracker 的 map_name,MapTarget 路线使用 MapLocate / MapNavigator 的 zone_id。MapTarget 最终会生成 MapNavigateAction 的 { "action": "NAVMESH", "target": [...] } 语义点;它只适合普通可达路线,不处理交互、过图、机关、战斗等特殊段。MissionId 是匹配主键;Name 只是给维护者阅读,Id 是最终模板使用的节点 ID,方便搜索生成节点/文件名;重新生成时会以 zmdmap 当前数据为准自动刷新。routes.json 缺失的任务自动追加仅含 MissionId / Name / Id 的未适配占位条目;skill 仍应把这类 metadata-only 条目视为待适配。