# DS 전투 데이터 수집 시스템

## 📁 폴더 구조

```
데이터수집/
├── 수집스크립트/
│   ├── collect_combat_data.py      # 메인 실행 스크립트
│   ├── data_extractors.py          # DataTable/AnimMontage 데이터 추출
│   ├── custom_property_parser.py   # CustomProperties 파싱
│   ├── markdown_formatter.py       # 마크다운 생성
│   ├── validators.py               # 데이터 검증
│   └── validate_result.py          # 결과 검증 스크립트
└── 수집결과/
    ├── all_stalkers_combat_data.json    # 통합 JSON 결과
    ├── collection_log.txt               # 수집 로그
    └── markdown/                        # 스토커별 마크다운 (11개)
```

## 🚀 실행 방법

### 데이터 수집 실행

```bash
cd "D:\Work\WorldStalker\DS-전투분석_저장소\데이터수집\수집스크립트"
python collect_combat_data.py
```

### 결과 검증

```bash
cd "D:\Work\WorldStalker\DS-전투분석_저장소\데이터수집\수집스크립트"
python validate_result.py
```

## 📊 수집 데이터 항목

### DT_CharacterStat (캐릭터 기본 스탯)
- 기본 스탯: Str, Dex, Int, Con, Wis (합계 75)
- 체력/마나: HP, MP, ManaRegen, Stamina
- 공격: PhysicalDamage, MagicalDamage, CriticalPer, CriticalDamage
- 방어: Defense, 각종 저항력
- 스킬 ID 목록: defaultSkills, subSkill, ultimateSkill
- 장비 타입: equipableTypes
- 궁극기 포인트: ultimatePoint

**소수점 처리**: 모든 숫자 필드를 소수점 2자리로 반올림

### DT_Skill (스킬 상세 정보)
- 기본 정보: name, desc, descValues
- 속성: skillAttackType, skillElementType, skillDamageRate
- 코스트: manaCost, coolTime, castingTime
- 몽타주: useMontages (제외 키워드: ready, Equip, Equipment, _E)
- 어빌리티: abilityClass, activeAbilityClass
- 효과: gameplayEffectSet (trigger, gEClass)

### DT_CharacterAbility (기본 공격 몽타주)
- attackMontageMap: 무기 타입별 몽타주 배열

### AnimMontage (애니메이션 타이밍)
- 기본 정보: AssetName, SequenceLength, RateScale
- 섹션: Sections (SectionName, StartTime)
- AnimNotifies (4가지 타입만 수집):
  - **ANS_AttackState_C**: 공격 상태 (AddNormalAttackPer, AddPhysicalAttackPer)
  - **AnimNotifyState_AttackWithEquip**: 히트 판정 (AttackTag)
  - **ANS_SkillCancel_C**: 스킬 캔슬 윈도우
  - **AN_Trigger_Projectile_Shot_C**: 발사체 발사 (EventTag)

## 📝 결과물 형식

### 통합 JSON (all_stalkers_combat_data.json)

```json
{
  "collection_metadata": {
    "collected_at": "2025-11-05T20:04:25.894098",
    "total_stalkers": 11
  },
  "stalkers": {
    "hilda": {
      "basic_info": { "name": "힐다", "jobName": "전사" },
      "stats": { "str": 20.0, "dex": 15.0, ... },
      "skills": {
        "default": ["SK100201", "SK100202", "SK100204"],
        "sub": "SK100101",
        "ultimate": "SK100301"
      },
      "skill_details": { ... },
      "basic_attacks": { ... }
    }
  }
}
```

### 마크다운 (각 스토커별)

- 기본 정보 (직업, 궁극기 포인트)
- 기본 스탯 테이블
- 스킬 상세 정보
  - 설명 (desc + descValues 치환 완료)
  - 스킬 속성 테이블
  - 어빌리티 클래스
  - Gameplay Effects
  - 몽타주 타이밍 정보
- 기본 공격 정보

## ⚠️ 주의사항

1. **원본 데이터 경로**
   - `DS-전투분석_저장소/원본데이터/DataTable.json`
   - `DS-전투분석_저장소/원본데이터/AnimMontage.json`

2. **스킬 몽타주 제외 규칙**
   - DT_Skill의 useMontages에만 적용
   - 제외 키워드: ready, Equip, Equipment, _E
   - 기본 공격 몽타주는 제외 규칙 미적용

3. **descValues 처리**
   - JSON: 배열 그대로 보존
   - Markdown: desc와 합쳐서 완성된 문장 생성
   - 줄바꿈 태그 제거: `\r\n`, `\n`, `<br>` 등

4. **에러 처리**
   - 경고 로그만 출력하고 계속 진행
   - 누락 데이터는 빈 값으로 표시

## 🔄 재실행 방법

데이터가 업데이트되면:

1. 원본데이터 폴더에 최신 JSON 파일 배치
2. 수집 스크립트 재실행
3. 수집결과 폴더의 파일들이 자동으로 덮어쓰기됨

## 📈 수집 통계 (2025-11-05)

- 총 스토커: 11명
- 평균 스킬 수: 5개 (기본 3~4 + 서브 1 + 궁극기 1)
- 총 스킬 몽타주: 64개
- 총 기본 공격 몽타주: 24개
- 스탯 합계 검증: 모든 스토커 75.0 ✓

## 🛠️ 향후 보완 계획

- [ ] Blueprint 내부 정보 수집 (변수, 함수 등)
- [ ] GameplayEffect 상세 정보 수집
- [ ] 모든 AnimNotifies 수집 (현재는 4가지만)
- [ ] CurveTable 데이터 수집
- [ ] 데이터 비교/분석 도구 추가
