# 数据从哪来

> 每一类数据的来源和精度。出了「看起来不对」的怪事时，先查这一页。

来源: https://war3ai.com/docs/data-sources/

| 数据 | 来源 | 精度 |
|---|---|---|
| 单位、资源、订单、技能、buff、背包 | 运行时每 50 ms 推送的世界块 | 发布周期（可调到 16 ms） |
| 伤害、击杀事件 | 运行时在游戏线程上当场记下，每一下 | 当场 |
| 其它事件（出现、死亡、换订单、升级……） | 对比相邻两次发布 | 发布周期 |
| 生产表（训练 / 研究 / 建造 / 升级） | 引擎生产技能的计时字段 + 运行时累加已进行时间 | 约 ±0.2 游戏秒 |
| 战斗属性、克制表 | 游戏自带的数据表（从你本机的游戏提取） | 不含物品、光环、buff 的修正 |
| 寻路 | 引擎的地形可走性（128 一格）+ 树 + 建筑占地，SDK 侧 A* | 一格；窄于一格的缝判不通 |
| 游戏内时间 | JASS `GetFloatGameState(GAME_STATE_TIME_OF_DAY)` | 发布周期 |
| 可见性 | 运行时对每个单位按玩家算的可见性掩码 | 发布周期 |
| 科技计数、可行性、金矿余量 | 快车道查询，直接问引擎 | 当场 |

## 游戏数据不随代码分发

单位表、技能、物品、英雄、buff、伤害克制表等来自暴雪的游戏文件，**不进仓库**。在远见「控制中心」设好游戏目录后，会自动从你自己的游戏里提取，也可以手动跑：

```bash
python data/tools/extract_game_data.py
```

提取结果放在 `data/game/`（不进 git）：原始的 `.slk` / `.txt`，以及整理好的 `units.json`、`names.json`、`skills.json`、`items.json`、`heroes.json`、`buffs.json`。

## 几个具体数字

| 量 | 值 |
|---|---|
| 一天 | 480 游戏秒（白天、黑夜各 240 秒），一小时 = 20 游戏秒；开局是早上 8 点 |
| 白天 | 6:00 ~ 18:00 |
| 护甲系数 | 0.06（来自游戏数据表） |
| 世界块容量 | 16 个玩家、1024 个单位、256 份单位细节、256 个地上物品、128 条生产 |
| 树 | 最多 4096 个可破坏物，每 2 秒刷新 |
| 事件环 | 8192 条；读太慢会丢（SDK 能检测到） |
| 地图格子 | 128 游戏单位一格，最多 256 × 256 |

## 实测校准过的例子

- 生产耗时：农民 14.9、农场 34.9、铁质武器 59.9 游戏秒，和运行时推送的一致（误差小于 0.2 秒）；
- 战斗属性对着游戏面板核对：圣骑士 650 血、255 蓝、3.9 甲、攻击 24 ~ 34；攻击一级的步兵 13 ~ 15；
- 引擎伤害事件里的护甲前伤害（14 / 15 / 15）落在 `stats()` 算出的区间里；
- 寻路：Echo Isles 116 × 88 格，到对面大厅的地面路程 10642（直线 9856），建网格 18 ms、一次 A* 约 1 ms。
