Files
DS-Combat_analy/legacy/분석도구/v2/장기과제_Blueprint변수검증.md
2025-11-05 11:09:16 +09:00

205 lines
6.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 장기 과제: Blueprint 변수 검증
## 과제 개요
DT_Skill의 스킬 설명(desc)에 사용된 {0}, {1} 등의 변수가 실제 게임 로직(Blueprint, 몽타주 등)의 값과 일치하는지 검증하는 작업
## 현재 상태
### ✅ 완료된 부분
- DT_Skill의 `desc` (원본 설명 문자열) 추출
- DT_Skill의 `descValues` (UI 표시용 값 배열) 추출
- `descFormatted` (변수 치환된 최종 설명) 생성
- 문서에 완전한 스킬 설명 표시
### ⚠️ 제한 사항
**descValues는 유저에게 보여주기 위한 텍스트 정보일 뿐, 실제 게임 로직에서는 사용되지 않음**
- 실제 스킬 효과는 Blueprint, AnimMontage, GameplayEffect 등에 정의됨
- descValues와 실제 게임 로직 값이 다를 가능성 존재
- 각 변수가 어느 Blueprint/몽타주의 어떤 변수와 연결되는지 case-by-case 분석 필요
## 검증 대상 예시
### 예시 1: Hilda 반격 (SK100202)
**DT_Skill 정보**:
```
desc: "방패를 들어 {0}초 동안 반격 자세를 취합니다. 반격 성공 시 {1}%만큼 물리 피해를 줍니다."
descValues: [5, 80]
abilityClass: /Game/Blueprints/Abilities/GA_Skill_Knight_Counter.GA_Skill_Knight_Counter_C
```
**검증 필요 사항**:
- {0} = 5초 → GA_Skill_Knight_Counter의 어느 변수? (activeDuration? blockingDuration?)
- {1} = 80% → GA_Skill_Knight_Counter의 어느 변수? (counterDamageMultiplier?)
**현재 문제**:
- Blueprint.json에서 GA_Skill_Knight_Counter 추출 시 모든 VarName이 `None`으로 나타남
- 변수 이름 없이는 매칭 불가능
### 예시 2: Urud 다발 화살 (SK110205)
**DT_Skill 정보**:
```
desc: "{0}발의 화살을 동시에 발사하여 각각 {1}%만큼 물리 피해를 입힙니다."
descValues: [3, 90]
abilityClass: /Game/Blueprints/Characters/Urud/GA_Skill_Urud_MultiShot_Quick.GA_Skill_Urud_MultiShot_Quick_C
```
**검증 필요 사항**:
- {0} = 3발 → Blueprint의 ProjectileCount? 또는 몽타주의 AN_Trigger_Projectile_Shot_C 호출 횟수?
- {1} = 90% → 이미 DT_Skill.skillDamageRate=0.9로 검증됨 ✅
## 작업 범위
### 1단계: 정보 수집 (필수)
Blueprint 변수 이름을 얻기 위한 방법 선택:
#### 옵션 A: Blueprint.json 재추출
- FModel 또는 다른 추출 도구 설정 변경
- VarName 필드가 포함되도록 추출 옵션 조정
- 또는 Unreal Editor에서 직접 Blueprint을 JSON으로 Export
#### 옵션 B: 수동 조사
- Unreal Editor에서 각 GA_Skill Blueprint 열기
- 변수 목록과 기본값을 수동으로 기록
- config.py에 수동으로 정의
#### 옵션 C: 코드 분석
- C++ 소스 코드에서 WSGameplayAbility 클래스 분석
- 각 GA_Skill의 부모 클래스 변수 확인
- .h/.cpp 파일에서 변수 정의 추출
### 2단계: 변수 매칭 규칙 정의
각 스킬 타입별 변수 매칭 패턴 정의:
```python
# 예시 매칭 규칙
SKILL_VAR_MAPPING = {
'counter_skills': {
# 반격 스킬 계열
'{0}': 'blockingDuration', # 반격 지속 시간
'{1}': 'counterDamageRate' # 반격 피해 배율
},
'projectile_skills': {
# 발사체 스킬 계열
'{0}': 'projectileCount', # 발사체 개수
'{1}': 'skillDamageRate' # 피해 배율 (DT_Skill에서 검증 가능)
},
'summon_skills': {
# 소환 스킬 계열
'{0}': 'activeDuration', # 소환 지속 시간 (DT_Skill에서 검증 가능)
'{1}': 'summonDamageRate' # 소환수 피해 배율
}
}
```
### 3단계: 자동 검증 스크립트 작성
```python
def verify_skill_desc_values(skill_id: str, skill_data: Dict) -> Dict:
"""
스킬 설명의 변수가 실제 Blueprint/몽타주 값과 일치하는지 검증
Returns:
{
'verified': bool,
'mismatches': [],
'sources': {
'{0}': {'expected': 5, 'actual': 5, 'source': 'Blueprint.activeDuration'},
'{1}': {'expected': 80, 'actual': 75, 'source': 'Blueprint.counterDamageRate'}
}
}
"""
pass
```
### 4단계: 검증 리포트 생성
각 스킬별 검증 상태를 마크다운으로 출력:
```markdown
## SK100202 - 반격 (Hilda)
**Desc**: 방패를 들어 {0}초 동안 반격 자세를 취합니다. 반격 성공 시 {1}%만큼 물리 피해를 줍니다.
| 변수 | descValues | 실제 값 | 출처 | 상태 |
|------|------------|---------|------|------|
| {0} | 5 | 5 | GA_Skill_Knight_Counter.blockingDuration | ✅ 일치 |
| {1} | 80 | 75 | GA_Skill_Knight_Counter.counterDamageRate | ❌ 불일치 |
**결론**: descValues가 실제 로직과 다를 수 있음 (UI 표시용 값)
```
## 우선순위 스킬 목록
다음 스킬들을 우선적으로 검증:
### High Priority (복잡한 변수 사용)
1. SK100202 (Hilda 반격) - 지속시간, 피해량
2. SK110205 (Urud 다발 화살) - 발사체 개수, 피해량
3. SK160202 (Rene Ifrit 소환) - 지속시간, 공격력
4. SK160206 (Rene Shiva 소환) - 지속시간, 공격 주기
5. SK120202 (Nave 화염벽) - 지속시간, 틱 피해
### Medium Priority (1-2개 변수)
6. SK100201 (Hilda 칼날 격돌) - 피해량, 경직 시간
7. SK130204 (Baran 강제 끌어오기) - 피해량
8. SK180202 (Sinobu 부적폭탄) - 폭발 범위, 피해량
### Low Priority (변수 없거나 단순)
- 대부분의 유틸리티 스킬
- 변수가 없는 스킬
## 예상 결과물
1. **검증 스크립트**: `verify_blueprint_variables.py`
2. **변수 매칭 정의**: `config.py``SKILL_VAR_MAPPING` 추가
3. **검증 리포트**: `Blueprint변수검증_리포트.md`
4. **업데이트된 문서**: 각 스킬에 실제 값 vs descValues 비교 추가
## 예상 소요 시간
- **옵션 A** (Blueprint 재추출): 1-2시간 (추출 설정 + 재실행)
- **옵션 B** (수동 조사): 10-15시간 (91개 스킬 × 평균 10분)
- **옵션 C** (코드 분석): 3-5시간 (C++ 코드 리뷰 + 자동화)
## 권장 접근 방법
1. **단기 (1-2시간)**:
- Blueprint.json 재추출 시도 (FModel 설정 변경)
- 성공 시 자동 검증 스크립트 작성
2. **중기 (3-5시간)**:
- C++ 소스 코드 분석으로 변수 패턴 파악
- 우선순위 High 스킬 5개만 수동 검증
3. **장기 (필요 시)**:
- 모든 스킬 완전 검증
- 자동화 스크립트 완성
- CI/CD 파이프라인에 검증 단계 추가
## 참고 사항
- **descValues는 UI 표시용이므로 실제 로직과 다를 수 있음을 명심**
- 밸런스 패치 시 Blueprint는 업데이트되지만 descValues는 업데이트 안 될 수 있음
- 이 검증은 "문서의 정확성"보다 "게임 로직의 일관성"을 위한 것
- 실제 DPS 계산에는 Blueprint/몽타주의 실제 값을 사용해야 함
## 연락처 및 진행 상황
- **담당자**: (추후 할당)
- **시작일**: 2025-10-24
- **목표 완료일**: (TBD)
- **현재 상태**: 계획 단계
- **진행률**: 0% (정보 수집 대기 중)
---
**생성일**: 2025-10-24 21:34
**버전**: v1.0
**작성자**: Claude Code