# 자동 시전과 시간 제약

## 확인된 설정

| 항목 | 낙뢰 1070012 | 화염 분출 1070014 |
|---|---:|---:|
| CoolTime 원시 float | 14.699999809265137 | 14.699999809265137 |
| DelayMs | 500 | 500 |
| DelayMoveMs | 500 | 500 |
| AutoPlayUse | true | true |
| Range / AutoSkillRange | 6 / 약5.9 | 6 / 약5.9 |
| TargetType / Targetidentifies | GroundCenter / Enemy | GroundCenter / Enemy |
| SortingOrder | 4 | 6 |
| AutoPlayOrder / CheckCasting / PrecastTime | 직렬화 슬롯 부재 | 직렬화 슬롯 부재 |
| 그래프 Delay 값 / SpeedUp 값 | 330 / false | 330 / false |

CoolTime을 약14.7초로 읽는 것은 필드 관례 기반 해석이다. DelayMs·DelayMoveMs는 이름에 밀리초가 명시된다. 그래프 Delay.Duration330은 330ms 후보이지만 노드 구현을 확보하지 못해 단위·스케줄링 의미는 미확인이다. 330을 500에 더해 총830ms로 계산하면 안 된다. 각 값이 같은 시점 기준의 병행 타이머인지 아직 모른다.

null은 슬롯 부재이며, 접근자의 기본값을 복원하지 못했다. 따라서 CheckCasting=false, PrecastTime=0 등으로 자동 확정하지 않는다. SortingOrder는 목록 정렬 값으로 보이며 자동 시전 우선순위로 확인되지 않았다.

## 자동 전투 그래프

`resources/graphs/autobattle-parsed.json`의 Sequencer 노드116에 다음 자식 연결이 저장된다.

1. 포트0: SelectCastableSkill(노드26)
2. 포트1: 대상/복귀 상태 분기(노드134)
3. 포트2: HasNearTarget(노드1)
4. 포트3: FindTargetBySelectedSkill(노드89)
5. 포트4: 대상 사망 여부 관련 Inverter(노드13)
6. 포트5: IsTargetBySkillRange(노드110) 또는 RunMoveToTarget(노드47)의 Selector(노드74)
7. 포트6: Success(노드8), 소환 상태 처리 연결
8. 포트7: LookAtTarget(노드14)
9. 포트8: RunCasting(노드53)

이는 스킬 선택, 대상 탐색, 거리 확인/이동, 시전이라는 구조를 보여 준다. Sequencer·Selector의 실제 반환 처리, 틱 간 재개, 실패 시 건너뛰기 규칙은 미확인이다. `autobattle_server`라는 이름의 별도 그래프도 클라이언트 패키지에 있으나, 서버가 현재 이 파일을 실행한다는 증거는 아니다.

## 함수 후보

다음 오프셋은 `global-metadata.dat` 내부 위치이며 실행 주소가 아니다.

| 클래스·메서드 | 인덱스 | 메타데이터 오프셋 | 확인 범위 |
|---|---:|---|---|
| .drw.GetDefaultOrders | 115891 | 0x9ea5f0 | 이름·서명 |
| .drw.GenerateSortSkill | 115902 | 0x9ea750 | 이름·서명 |
| .drw.TryPickAutoSkill | 115908 | 0x9ea810 | 이름·서명 |
| .drw.CanSkillOrderChange | 115912 | 0x9ea890 | 이름·서명 |
| .hji.TryCastSkill | 132649 | 0xa6d4b0 | 이름·서명 |
| .hji.TryPreCastSkill | 132650 | 0xa6d4d0 | 이름·서명 |

.drw에는 SkillOrderPreference, SetSkillAutoUse, UpdatePreferenceOption, AddTriedSkill, AddFailedCastSkill, ClearTriedSkill, ClearFailedSkill 등도 있다. 사용자 순서와 사용 조건을 반영하는 경로의 존재를 뒷받침하지만 정렬 방향·동률 규칙·재시도 주기는 본문을 확보하지 못해 미확인이다.

GlobalCoolTimeAt, UseGlobalCoolTimeTicks, UseGlobalCoolTime라는 필드도 존재한다. 공통 쿨타임(다른 스킬 사용도 함께 제한하는 대기시간) 개념의 후보이다. 그 존재만으로 모든 스킬이 공유하는 500ms 잠금이나 완전 동시 사용 불가를 확정할 수 없다.

## 계산기에 반영할 규칙

- 자동 사용 가능 스킬과 실제 시전 가능 스킬을 구분한다. 대상·거리·상태·설정 조건 검사를 이벤트로 둔다.
- 우선순위는 사용자가 지정한 시나리오 입력으로 둔다. SortingOrder4/6에서 실제 자동 순서를 만들지 않는다.
- CoolTime 시작 기준, 지연 종료, 이동 가능 시점, 피해 발생 시점을 각각 분리한다.
- DelayMs500은 설정값으로 보존하고, 그래프330은 별도 피해 시점 후보로 보존한다.
- 동시 시전, 공통 쿨타임, 버프 만료와 타격이 같은 시각일 때의 순서는 미확인 옵션으로 둔다.
- 파멸 게이지의 쿨타임 변화가 있어 고정 주기14.7초만으로 장기 회전율을 결정할 수 없다.

실측은 동일 조건에서 순서를 A→B/B→A로 바꾸어 화면 시전·피해 시각을 반복 기록하는 방식이 적합하다. 이번 작업에는 실측·게임 조작을 포함하지 않았다. 상세 서명·필드는 `metadata/casting-evidence.md`, 수치 출처는 `skill-data.json`에 있다.


## 2026-10-14 추가 재검토

기존에 누락된 도술별 성장 계수5550행, 사거리·조준 도형,12계열 궁극기 연결을 추가로 복원했다. 성장값의 결합식과 조준 영역의 실제 피해 판정 일치는 미확인이다. 일반8칸/궁극기9번칸 및1~5칸3개조건은 사용자가 알려준 인게임 규칙을 적용했다. 상세 내용은 review-report-20261014.md. 기존 계산기 예시는 새 칸 배치 규칙으로 갱신했다.
