---
name: environment-monitoring-add-route
description: "向 routes.json 添加环境监测（EnvironmentMonitoring）新观察点条目。使用时：新增 kite_station 观察点路线配置、适配新版本的环境监测任务、补全缺失的 MapPath / EnterMap 数据。会自动检测缺失任务，逐字段询问路线数据后写入 ROUTE_CONFIG。"
argument-hint: "可选：直接说明要适配哪个观察点名称，否则自动列出所有缺失条目"
---

# 环境监测新增路线配置

## 目的

在 `tools/pipeline-generate/EnvironmentMonitoring/routes.json` 末尾追加新的观察点条目，以便后续运行 `npx @joebao/maa-pipeline-generate` 生成 Pipeline 文件。

## 字段说明

`Name` 从 `kite_station.json` 自动提取，**不需要询问用户**：

- `Name`：直接取 `name["zh-CN"]`

需向用户逐字段询问的路线字段：

| 字段                           | 必填 | 说明                                                                                                                                        |
| ------------------------------ | ---- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| `EnterMap`                     | ✓    | 传送节点名（`SceneEnterWorldXxx`），必须已存在于 `assets/resource/pipeline/SceneManager/`；若无合适传送点，**不要**写占位值，跳过该条目即可 |
| `MapName`                      | ✓    | MapTracker 小地图标识（如 `map02_lv001`），支持正则                                                                                         |
| `MapTarget`                    | ✓    | 目标矩形 `[x, y, w, h]`，720p 小地图坐标                                                                                                    |
| `MapPath`                      | ✓    | 寻路路径 `[[x1, y1], ...]`，用 `tools/MapNavigator/` 录制                                                                                   |
| `CameraSwipeDirection`         | ✓    | `EnvironmentMonitoringSwipeScreenUp/Down/Left/Right`                                                                                        |
| `CameraMaxHit`                 | 可选 | 摄像头最大滑屏次数，默认 2；较难对准时调大                                                                                                  |
| `NoEnsureInitialMovementState` | 可选 | 默认 false。路线起点紧贴桥边/悬崖边等危险地形时设为 true，跳过开局冲刺准备动作，避免掉下悬崖                                                |

## 操作流程

### 第一步：确定要适配的观察点

- 若用户已指定（如"我想适配 XX 任务"），直接跳到第二步。
- 否则：运行 [check_missing.mjs](./check_missing.mjs) 自动检测缺失条目。检测逻辑：
    - 从 `kite_station.json` 提取所有 mission 的 `name["zh-CN"]`（作为 Name）
    - 与 `routes.json` 中已有的 `Name` 做对比（去符号小写）
    - 列出真正缺失的条目供用户选择

### 第二步：逐字段问路线数据

对每个待适配的观察点，按字段顺序使用 `vscode_askQuestions` **每次只问一个字段**，依次提问：

1. `EnterMap`
2. `MapName`
3. `MapTarget`（格式 `[x, y, w, h]`）
4. `MapPath`（格式 `[[x1,y1],[x2,y2],...]`）
5. `CameraSwipeDirection`（选项：Up / Down / Left / Right）
6. `CameraMaxHit`（可选，跳过则不写入，使用默认值 2）
7. `NoEnsureInitialMovementState`（可选，跳过则不写入，默认 false；起点紧贴危险地形时选 true）

收到每个字段的答案后，再问下一个字段。

### 第三步：验证 EnterMap

使用 `file_search` 在 `assets/resource/pipeline/SceneManager/` 中确认传送点文件是否存在。**若不存在**：

- **不要**把 `EnterMap` 替换成占位值后写入条目。直接跳过该条目（不写入 `routes.json`），让生成器走未适配分支（仅接取并追踪）。
- 在交付消息 / PR 描述中以 TODO 形式记录"等 XXX 传送点补齐后再适配 YYY 观察点"。

### 第四步：写入文件

按现有条目格式追加到 `routes.json` 末尾（数组 `]` 之前）：

- 严格 JSON 语法（双引号、不允许尾随逗号、不允许 `// TODO` 等注释）
- 4 空格缩进，`MapPath` 每个坐标对单独一行
- `CameraMaxHit` 仅当值非默认（≠ 2）时才写入
- 数据暂缺时整个条目都不要写入（参见第三步）；TODO 留在交付消息里

### 第五步：提示后续操作

提醒用户运行以下命令重新生成 Pipeline：

```bash
npx @joebao/maa-pipeline-generate
npx @joebao/maa-pipeline-generate --config terminals-config.json
```

并将 `routes.json` 与 `assets/resource/pipeline/EnvironmentMonitoring/` 下的变更一并提交。

## 注意事项

- 坐标必须基于 720p 小地图（`MapTarget`、`MapPath`）。
- 若数据暂缺，**不要**填占位值后再加 TODO，直接不加该条目，把 TODO 放进 PR 描述/提交信息。
- `Name` 匹配是去符号小写比较，中文引号、空格等均会被忽略。
