# 데이터 출처

> 데이터 종류별 출처와 정밀도입니다. "뭔가 이상해 보이는" 일이 생기면 이 페이지부터 확인하세요.

출처: https://war3ai.com/ko/docs/data-sources/

| 데이터 | 출처 | 정밀도 |
|---|---|---|
| 유닛, 자원, 오더, 스킬, 버프, 인벤토리 | 런타임이 50 ms마다 푸시하는 월드 블록 | 발행 주기(16 ms까지 조정 가능) |
| 피해, 처치 이벤트 | 런타임이 게임 스레드에서 즉시 기록, 타격마다 | 즉시 |
| 기타 이벤트(등장, 사망, 오더 변경, 레벨 업……) | 인접한 두 발행을 비교 | 발행 주기 |
| 생산 테이블(훈련 / 연구 / 건설 / 업그레이드) | 엔진 생산 스킬의 타이머 필드 + 런타임이 누적한 경과 시간 | 약 ±0.2게임초 |
| 전투 속성, 상성표 | 게임 자체 데이터 테이블(여러분의 게임에서 추출) | 아이템, 오라, 버프 보정은 미포함 |
| 경로 탐색 | 엔진의 지형 이동 가능성(128 단위 한 칸) + 나무 + 건물 점유 영역, SDK 측 A* | 한 칸. 한 칸보다 좁은 틈은 막힌 것으로 판정 |
| 게임 내 시각 | JASS `GetFloatGameState(GAME_STATE_TIME_OF_DAY)` | 발행 주기 |
| 가시성 | 런타임이 유닛마다 플레이어별로 계산한 가시성 마스크 | 발행 주기 |
| 기술 카운트, 실행 가능성, 금광 잔량 | 고속 레인 조회로 엔진에 직접 질의 | 즉시 |

## 게임 데이터는 코드와 함께 배포하지 않습니다

유닛 테이블, 스킬, 아이템, 영웅, 버프, 피해 상성표 등은 블리자드의 게임 파일에서 나오며 **저장소에 포함되지 않습니다**. Farsight "컨트롤 센터"에서 게임 디렉터리를 설정하면 여러분의 게임에서 자동으로 추출하며, 직접 실행할 수도 있습니다:

```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초), 1시간 = 20게임초. 게임은 오전 8시에 시작 |
| 낮 | 6:00 ~ 18:00 |
| 방어력 계수 | 0.06(게임 데이터 테이블 기준) |
| 월드 블록 용량 | 플레이어 16명, 유닛 1024개, 유닛 세부 정보 256개, 바닥 아이템 256개, 생산 128건 |
| 나무 | 파괴 가능한 오브젝트 최대 4096개, 2초마다 갱신 |
| 이벤트 링 | 8192건. 너무 느리게 읽으면 유실(SDK가 감지 가능) |
| 맵 그리드 | 한 칸 = 게임 단위 128, 최대 256 × 256 |

## 실측으로 보정한 예

- 생산 시간: 일꾼 14.9, 농장 34.9, Iron Forged Swords 59.9게임초로, 런타임이 푸시한 값과 일치합니다(오차 0.2초 미만).
- 전투 속성을 게임 패널과 대조: 팔라딘 체력 650, 마나 255, 방어력 3.9, 공격력 24 ~ 34. 공격 업그레이드 1단계 보병 13 ~ 15.
- 엔진 피해 이벤트의 방어력 적용 전 피해(14 / 15 / 15)가 `stats()`로 계산한 범위 안에 들어갑니다.
- 경로 탐색: Echo Isles 116 × 88칸, 상대 본진 건물까지 지상 거리 10642(직선 9856), 그리드 생성 18 ms, A* 1회 약 1 ms.
