205 lines
6.9 KiB
Markdown
205 lines
6.9 KiB
Markdown
|
|
# 장기 과제: 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
|