# 資料從哪裡來

> 每一類資料的來源與精度。遇到「看起來不對」的怪事時，先查這一頁。

來源: https://war3ai.com/zh-tw/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。
