v2 폐기하고 v3로 새출발

This commit is contained in:
Gnill82
2025-11-05 11:09:16 +09:00
parent e17020143f
commit 80176c7c9e
64 changed files with 378 additions and 263 deletions

View File

@ -63,21 +63,10 @@
- 10201 분노 (+10% 물리 피해)
- 10103 공략 (+20% 머리 공격 피해)
#### 마법 딜러 - Nave (네이브)
**Main: 스킬 그룹 (20xxx)**
- 20201 파괴 (+10% 스킬 피해)
- 20301 명상 (+70% 마나 회복)
**Sub: 전투 그룹 (10xxx)**
- 10301 폭풍 (+10% 마법 피해)
- 10103 공략 (+20% 머리 공격 피해)
**선택 이유**: 마법 화살 사이클(5.5초)이 쿨타임(3.5초)보다 길어 왜곡 룬 효과 미미, 파괴 룬이 DPS 5.9% 우수
#### 마법 딜러 - Rene (레네)
#### 마법 딜러 (Nave, Rene)
**Main: 스킬 그룹 (20xxx)**
- 20103 활기 (마나 높을 때 스킬 피해 증가)
- 20202 왜곡 (-25% 쿨타임)
- 20301 명상 (+70% 마나 회복)
@ -85,8 +74,6 @@
- 10301 폭풍 (+10% 마법 피해)
- 10103 공략 (+20% 머리 공격 피해)
**선택 이유**: 소환수 쿨타임 감소 효과로 Ifrit(7초→5.25초), Shiva(10초→7.5초) 재소환 빈도 증가
#### 원거리 딜러 (Urud, Lian)
**Main: 스킬 그룹 (20xxx)**
@ -109,6 +96,46 @@
- 40201 면역 (물약 사용 시 +20% 저항 20초)
- 40301 효율 (+50% 물약 효과)
### 특수 시스템 활용률
**전제**: 최적 플레이 = 100% 활용
#### Cazimord - Parrying (흘리기)
- **판정 윈도우**: 0.2초
- **성공 시 효과**:
- 적 피해 무효화
- 자동 반격 (높은 피해)
- **스킬 쿨타임 감소**:
- 섬광(SK170201): -3.8초
- 날개베기(SK170202): -3.8초
- 작열(SK170203): -6.8초
- **활용률 시나리오**: 0% (미사용) vs 100% (완벽 성공)
#### Rio - Chain Score
- **최대 스택**: 3
- **효과**: 각 스킬별로 다른 위력 증가
- **충전**: Dropping Attack 성공 시
- **활용률**: 100% (항상 3스택 유지)
#### Urud & Lian - Reload
- **탄약**: 6발
- **재장전 시간**: 2.0초
- **활용률**: 100% (탄약 관리 최적화)
#### Lian - Charging Bow
- **만충전 데미지**: 1.5배
- **충전 시간**: 레벨당 0.5초 (최대 1.5초)
- **활용률**: 100% (항상 만충전 후 발사)
#### Rene - Spirit 소환
- **소환수**: Ifrit, Shiva
- **활용률**: 100% (소환수 항상 활용)
#### Sinobu - Shuriken 충전
- **최대 충전**: 3개
- **충전 속도**: 1초/개
- **활용률**: 100% (충전 관리 최적화)
---
## 10명 스토커 종합 비교표
@ -141,7 +168,7 @@
| **Hilda (힐다)** | 마석 ‘핏빛 달’ | Normal | 0.5 | 20초 / 2초 | 마석의 힘을 해방하여 20초 동안 공격력 15, 방어력 25 증가합니다.... |
| **Urud (우르드)** | 마석 ‘폭쇄’ | Normal | 1 | 15초 / 2초 | 마석의 힘을 해방하여 15초 동안 화살에 범위 피해 효과를 부여합니다. 적중된 대상은 30% 확률로 화상에 걸립니다.... |
| **Nave (네이브)** | 마석 ‘해방’ | MagicalSkill | 1 | 5초 / 2초 | 마석의 힘으로 5초 동안 적을 관통하는 광선을 발사합니다. 광선은 0.5초 간격마다 100%의 마법 피해를 입힙니다.... |
| **Baran (바란)** | 마석 '일격분쇄' | PhysicalSkill | 1.7 | 2초 / 10초 | 대검을 내리찍어 4m의 균열을 생성합니다. 균열 범위 내 170%의 물리 피해를 주며, 적중된 대상은 기절합니다.... |
| **Baran (바란)** | 마석 '일격분쇄' | PhysicalSkill | 1.7 | 2초 / 1.29초 | 대검을 내리찍어 4m의 균열을 생성합니다. 균열 범위 내 170%의 물리 피해를 주며, 적중된 대상은 기절합니다.... |
| **Rio (리오)** | 마석 ‘민감’ | Normal | 0.3 | 15초 / 2초 | 마석의 힘을 개방하여 연계 점수 3점을 획득하고, 15초 동안 은신 및 투시 효과를 획득합니다. 대상의 뒤를 공격 시 '약점' 판정이 적용됩니다.... |
| **Clad (클라드)** | 마석 ‘황금’ | Normal | 300 | 6초 / 0.55초 | 마석의 힘을 해방하여 5초 동안 자신과 아군에게 300의 보호막을 생성합니다.... |
| **Rene (레네)** | 마석 ‘붉은 축제’ | MagicalSkill | 50 | 20초 / 2초 | 마석의 힘을 해방하여 20초 동안 자신과 아군의 모든 공격에 흡혈 효과를 부여합니다. 피해의 50%만큼 체력을 회복합니다.... |
@ -155,16 +182,16 @@
다음 스킬들은 DoT(Damage over Time) 효과가 있으며, **DPS 계산 시 추가 지속 피해를 고려해야 합니다**.
| 스토커 | 스킬 이름 | DoT 타입 | 기본 피해 | DoT 피해 | 지속시간 | DPS (HP 250 기준) |
|--------|----------|----------|----------|-------------|----------|-------------------|
| **Urud (우르드)** | 독성 화살 | Poison | 1 | 대상 MaxHP의 20% | 10초 | 5 |
| **Rene (레네)** | 독기 화살 | Bleed | 1 | 고정 20 피해 | 10초 | 2 |
| **Cazimord (카지모르드)** | 섬광 | Burn | 0.5 | 대상 MaxHP의 10% | 10초 | 2.5 |
| 스토커 | 스킬 이름 | DoT 타입 | 기본 피해 | DoT 피해 | 지속시간 |
|--------|----------|----------|----------|----------|----------|
| **Urud (우르드)** | 독성 화살 | Poison | 1 | 대상 MaxHP의 20% | 5초 |
| **Rene (레네)** | 독기 화살 | Bleed | 1 | 고정 20 피해 | 5초 |
| **Cazimord (카지모르드)** | 섬광 | Burn | 0.5 | 대상 MaxHP의 10% | 3초 |
| **Rene (레네)** | 정령 소환 : 화염 | Burn | 1.2 | 대상 MaxHP의 10% | 3초 |
**주의사항**:
- DoT는 **1초 간격(1틱)으로 발동**되며, 적용 1초 후부터 시작됩니다.
- DoT 피해는 대상의 HP에 비례하므로, 적의 체력에 따라 실제 피해량이 달라집니다.
- 동일한 DoT는 중첩되지 않고 지속시간만 초기화됩니다.
- 구체적인 DoT DPS 계산 방법은 다음 챕터에서 다룹니다.
- 위 표의 '기본 피해'는 스킬의 skillDamageRate입니다.
---
@ -183,14 +210,11 @@
**weaponShield** (3타 콤보):
| 타수 | 몽타주 | 시퀀스(초) | 실제(초) | 배율(%) | 비고 |
|------|--------|-----------|---------|---------|------|
| 1 | AM_PC_Hilda_B_Attack_W01_01 | 1.60 | 1.23 | 0.0 | 콤보 캔슬 적용 |
| 2 | AM_PC_Hilda_B_Attack_W01_02 | 1.60 | 1.23 | +5.0 | 콤보 캔슬 적용 |
| 3 | AM_PC_Hilda_B_Attack_W01_03 | 1.37 | 1.23 | -5.0 | 콤보 캔슬 적용 |
**평타 DPS 효율**: 107.3 DPS (총 피해 396 / 콤보 시간 3.69초, 룬 적용 1.10배)
- ✨ **콤보 캔슬 시스템**: ANS_DisableBlockingState_C 노티파이로 조기 캔슬 가능 (평균 23% 시간 단축)
| 타수 | 몽타주 | 실제 시간(초) | 배율(%) | 비고 |
|------|--------|---------------|---------|------|
| 1 | AM_PC_Hilda_B_Attack_W01_01 | 0.80 | -5.0 | ANS_AttackState: 0.80초 |
| 2 | AM_PC_Hilda_B_Attack_W01_02 | 0.77 | -5.0 | ANS_AttackState: 0.77초 |
| 3 | AM_PC_Hilda_B_Attack_W01_03 | 1.00 | +20.0 | ANS_AttackState: 1.00초 |
### 스킬 목록
@ -204,7 +228,6 @@
1. AM_PC_Hilda_B_Skill_Ready (5.43초) [준비]
2. AM_PC_Hilda_B_Skill_SwordStrike (1.80초)
- **시퀀스 길이**: 1.80초
- **DPS 효율**: 104.9 DPS (피해 156 / 1.80초, 룬 적용 1.21배)
- **설명**: 검을 휘둘러 130%만큼 번개 속성 물리 피해를 입힙니다. 적중된 대상은 잠시 경직됩니다.
2. **SK100202 반격**
@ -213,7 +236,6 @@
- **쿨타임**: 4초 / **마나**: 10
- **몽타주**: AM_PC_Hilda_B_Skill_Counter
- **시퀀스 길이**: 2.81초
- **DPS 효율**: 41.3 DPS (피해 96 / 2.81초, 룬 적용 1.21배)
- **설명**: 방패를 들어 5초 동안 반격 자세를 취합니다. 반격 성공 시 80%만큼 물리 피해를 줍니다.
3. **SK100204 도발**
@ -267,12 +289,10 @@
**bow** (1타 콤보):
| 타수 | 몽타주 | 시간(초) | 배율(%) | 비고 |
|------|--------|----------|---------|------|
| 타수 | 몽타주 | 실제 시간(초) | 배율(%) | 비고 |
|------|--------|---------------|---------|------|
| 1 | AM_PC_Urud_Base_B_Attack_N | 3.28 | 0.0 | |
**평타 DPS 효율**: 40.2 DPS (피해 120 / 콤보 시간 3.28초, 룬 적용 1.10배)
### 스킬 목록
**기본 스킬**:
@ -283,20 +303,16 @@
- **쿨타임**: 7초 / **마나**: 14
- **몽타주**: AM_PC_Urud_Base_B_Skill_MultiArrow
- **시퀀스 길이**: 1.62초
- **DPS 효율**: 80.7 DPS (피해 108 / 1.62초, 룬 적용 1.21배)
- 💡 **단일 대상**: 3발 중 1발만 적중 (산탄 방사형 패턴)
- 💡 **광역용**: 여러 적 대상 시 유용
- **설명**: 3발의 화살을 동시에 발사하여 각각 90%만큼 물리 피해를 입힙니다. 화살 3개 소모합니다.
2. **SK110204 독성 화살**
- **타입**: PhysicalSkill / **속성**: Poison
- **피해 배율**: 1
- **쿨타임**: 7초 / **마나**: 9
- ⚠️ **Poison 상태이상 유발**: 대상 MaxHP의 20% (10초간)
- ⚠️ **Poison 상태이상 유발**: 대상 MaxHP의 20% (5초간)
- 💡 **DoT 피해는 대상 HP에 비례** (구체적 DPS는 다음 챕터 참조)
- **몽타주**: AM_PC_Urud_Base_B_Skill_PoisonArrow
- **시퀀스 길이**: 1.62초
- **DPS 효율**: 89.6 DPS (피해 120 / 1.62초, 룬 적용 1.21배) + DoT 5 DPS (대상 HP 250 기준, 10초)
- **설명**: 화살에 독을 발라 발사합니다. 적중된 대상은 중독됩니다. 화살을 1개 소모합니다.
3. **SK110201 덫 설치**
@ -328,7 +344,6 @@
- **피해 배율**: 0.7
- **몽타주**: AM_PC_Urud_Base_B_Skill_ArrowStab
- **시퀀스 길이**: 1.11초
- **DPS 효율**: 87.7 DPS (피해 80.5 / 1.11초, 룬 적용 1.21배)
- **설명**: 화살로 찔러 75%만큼 물리 피해를 입힙니다. 적중 시 다음 일반 공격이 50% 증가합니다.
@ -362,12 +377,10 @@
**staff** (2타 콤보):
| 타수 | 몽타주 | 시간(초) | 배율(%) | 비고 |
|------|--------|----------|---------|------|
| 1 | AM_PC_Nave_B_Attack_W01_01 | 1.60 | 0.0 | |
| 2 | AM_PC_Nave_B_Attack_W01_02 | 1.70 | 0.0 | |
**평타 DPS 효율**: 83.3 DPS (총 피해 250 / 콤보 시간 3.30초, 룬 적용 1.10배)
| 타수 | 몽타주 | 실제 시간(초) | 배율(%) | 비고 |
|------|--------|---------------|---------|------|
| 1 | AM_PC_Nave_B_Attack_W01_01 | 0.90 | 0.0 | ANS_AttackState: 0.90초 |
| 2 | AM_PC_Nave_B_Attack_W01_02 | 0.90 | 0.0 | ANS_AttackState: 0.90초 |
### 스킬 목록
@ -379,8 +392,6 @@
- **쿨타임**: 3.5초 / **마나**: 18 / **시전시간**: 2초
- **몽타주**: AM_PC_Nave_B_Skill_MagicMissile
- **시퀀스 길이**: 3.33초
- **DPS 효율**: 60.7 DPS (3회 × 피해 92 / 사이클 5.5초, 룬 적용 1.21배)
- 💡 **사이클 타임**: 시전 2초 + 발사 3.3초 (쿨타임 3.5초와 중첩)
- **설명**: 최대 3개의 마법 화살을 생성하여 일반 공격으로 발사합니다. 마법 화살은 각각 80%만큼 마법 피해를 입힙니다.
2. **SK120202 화염구**
@ -389,7 +400,6 @@
- **쿨타임**: 5초 / **마나**: 25 / **시전시간**: 4초
- **몽타주**: AM_PC_Nave_B_Skill_FireWall
- **시퀀스 길이**: 3.33초
- **DPS 효율**: 83.6 DPS (피해 230 / 3.33초, 룬 적용 1.21배)
- **설명**: 화염구를 생성하여 일반 공격으로 발사합니다. 화염구는 200% 화염 속성 마법 피해와 주변에 150% 추가 피해를 입힙니다.
3. **SK120206 노대바람**
@ -398,7 +408,6 @@
- **쿨타임**: 7초 / **마나**: 9
- **몽타주**: AM_PC_Nave_B_Skill_WindForce
- **시퀀스 길이**: 1.33초
- **DPS 효율**: 52.3 DPS (피해 57.5 / 1.33초, 룬 적용 1.21배)
- **설명**: 강한 바람으로 밀쳐내고 50%만큼 마법 피해를 입힙니다.
@ -443,14 +452,11 @@
**twoHandWeapon** (3타 콤보):
| 타수 | 몽타주 | 시퀀스(초) | 실제(초) | 배율(%) | 비고 |
|------|--------|-----------|---------|---------|------|
| 1 | AM_PC_Baran_B_Attack_W01_01 | 1.90 | 1.50 | +5.0 | 콤보 캔슬 적용 |
| 2 | AM_PC_Baran_B_Attack_W01_02 | 1.93 | 1.48 | +10.0 | 콤보 캔슬 적용 |
| 3 | AM_PC_Baran_B_Attack_W01_03 | 1.73 | 1.50 | +5.0 | 콤보 캔슬 적용 |
**평타 DPS 효율**: 90.4 DPS (총 피해 404.8 / 콤보 시간 4.48초, 룬 적용 1.10배)
- ✨ **콤보 캔슬 시스템**: ANS_DisableBlockingState_C 노티파이로 조기 캔슬 가능 (평균 19% 시간 단축)
| 타수 | 몽타주 | 실제 시간(초) | 배율(%) | 비고 |
|------|--------|---------------|---------|------|
| 1 | AM_PC_Baran_B_Attack_W01_01 | 1.17 | +10.0 | ANS_AttackState: 1.17초 |
| 2 | AM_PC_Baran_B_Attack_W01_02 | 1.17 | +15.0 | ANS_AttackState: 1.17초 |
| 3 | AM_PC_Baran_B_Attack_W01_03 | 1.00 | +10.0 | ANS_AttackState: 1.00초 |
### 스킬 목록
@ -462,8 +468,6 @@
- **쿨타임**: 13초 / **마나**: 14
- **몽타주**: AM_PC_Baran_B_Skill_Pulling
- **시퀀스 길이**: 1.70초
- **DPS 효율**: 20.5 DPS (피해 28.75 / 1.70초, 룬 적용 1.21배)
- 💡 **유틸리티 스킬** (낮은 DPS, 주로 끌어당기기용)
- **설명**: 갈고리를 던져 25%만큼 물리 피해를 입히고, 대상을 끌어당깁니다. 적중된 대상은 잠시 경직됩니다.
2. **SK130203 후려치기**
@ -472,7 +476,6 @@
- **쿨타임**: 8초 / **마나**: 9
- **몽타주**: AM_PC_Baran_B_Skill_Smash
- **시퀀스 길이**: 1.89초
- **DPS 효율**: 176.7 DPS (2회 × 피해 138 / 1.89초, 룬 적용 1.21배)
- **설명**: 대검을 크게 휘둘러 두 번 연속으로 120%만큼 물리 피해를 입힙니다.
3. **SK130206 깊게 찌르기**
@ -481,7 +484,6 @@
- **쿨타임**: 7초 / **마나**: 10
- **몽타주**: AM_PC_Baran_B_Skill_SwordStab
- **시퀀스 길이**: 1.75초
- **DPS 효율**: 87.5 DPS (피해 126.5 / 1.75초, 룬 적용 1.21배)
- **설명**: 대검을 깊게 찔러 넣어 120%만큼 물리 피해를 입힙니다. 문을 파괴할 수 있습니다. 적중된 대상은 잠시 경직됩니다.
@ -501,10 +503,10 @@
**SK130301 마석 '일격분쇄'**
- **타입**: PhysicalSkill
- **피해 배율**: 1.7
- **시전시간**: 1.29초 (AN_SimpleSendEvent 시점, 최대 홀딩 10초)
- **시전시간**: 1.29초
- **몽타주**: AM_PC_Baran_B_Skill_RockBraker2
- **시퀀스 길이**: 1.98초
- **설명**: 대검을 내리찍어 4m의 균열을 생성합니다. 균열 범위 내 170%의 물리 피해를 주며, 적중된 대상은 기절합니다. (대검을 최대 10초까지 들고 있으면서 타이밍 조절 가능)
- **설명**: 대검을 내리찍어 4m의 균열을 생성합니다. 균열 범위 내 170%의 물리 피해를 주며, 적중된 대상은 기절합니다.
---
@ -523,13 +525,11 @@
**shortSword** (3타 콤보):
| 타수 | 몽타주 | 시간(초) | 배율(%) | 비고 |
|------|--------|----------|---------|------|
| 1 | AM_PC_Rio_B_Attack_W01_01 | 1.17 | -30.0 | |
| 2 | AM_PC_Rio_B_Attack_W01_02 | 1.33 | -20.0 | |
| 3 | AM_PC_Rio_B_Attack_W01_03 | 1.37 | -15.0 | |
**평타 DPS 효율**: 80.2 DPS (총 피해 282 / 콤보 시간 3.87초, 룬 적용 1.10배)
| 타수 | 몽타주 | 실제 시간(초) | 배율(%) | 비고 |
|------|--------|---------------|---------|------|
| 1 | AM_PC_Rio_B_Attack_W01_01 | 0.62 | -30.0 | ANS_AttackState: 0.62초 |
| 2 | AM_PC_Rio_B_Attack_W01_02 | 1.00 | +10.0 | ANS_AttackState: 1.00초 |
| 3 | AM_PC_Rio_B_Attack_W01_03 | 0.97 | +15.0 | ANS_AttackState: 0.97초 |
### 스킬 목록
@ -541,8 +541,6 @@
- **쿨타임**: 3.5초 / **마나**: 9
- **몽타주**: AM_PC_Rio_B_Skill_RapidStab
- **시퀀스 길이**: 1.41초
- **DPS 효율**: 205.9 DPS (2회 × 피해 120 / 1.41초, 룬 적용 1.21배)
- 💡 **Chain Score +2** (타격당 1점씩)
- **설명**: 단검을 빠르게 2번 찔러 각각 100%만큼 암흑 속성 물리 피해를 입힙니다. 각 공격은 25%의 추가 치명타 확률을 가집니다. 타격당 연계 점수 1점을 획득합니다.
2. **SK140205 접근**
@ -562,7 +560,6 @@
1. AM_PC_Rio_B_Skill_ThrowingDagger (1.63초)
2. AM_PC_Rio_B_Skill_ThrowingDagger_E (1.20초)
- **시퀀스 길이**: 2.83초
- **DPS 효율**: 51.3 DPS (피해 120 / 2.83초, 룬 적용 1.21배)
- **설명**: 단검을 던져 100%만큼 피해를 입힙니다.
@ -573,8 +570,6 @@
- **피해 배율**: 0.7
- **몽타주**: AM_PC_Rio_B_Skill_DroppingAttack
- **시퀀스 길이**: 1.30초
- **DPS 효율** (Chain Score 3스택): 195.5 DPS (피해 84 × 2.5배 / 1.30초, 룬 적용 1.21배)
- 💡 **Chain Score 소모**: 3스택 시 +150% 추가 피해 (총 250%)
- **설명**: 단검으로 내려 찍어 70%만큼 물리 피해를 입힙니다. 연계 점수에 따라 50/100/150% 추가 피해를 입힙니다.
@ -608,13 +603,10 @@
**mace** (2타 콤보):
| 타수 | 몽타주 | 시퀀스(초) | 실제(초) | 배율(%) | 비고 |
|------|--------|-----------|---------|---------|------|
| 1 | AM_PC_Clad_Base_Attack_Mace1 | 1.90 | 0.97 | +5.0 | 콤보 캔슬 적용 |
| 2 | AM_PC_Clad_Base_Attack_Mace2 | 2.27 | 0.87 | +5.0 | 콤보 캔슬 적용 |
**평타 DPS 효율**: 125.5 DPS (총 피해 231 / 콤보 시간 1.84초, 룬 적용 없음)
- ✨ **콤보 캔슬 시스템**: ANS_DisableBlockingState_C 노티파이로 조기 캔슬 가능 (평균 56% 시간 단축!)
| 타수 | 몽타주 | 실제 시간(초) | 배율(%) | 비고 |
|------|--------|---------------|---------|------|
| 1 | AM_PC_Clad_Base_Attack_Mace1 | 0.90 | +5.0 | ANS_AttackState: 0.90초 |
| 2 | AM_PC_Clad_Base_Attack_Mace2 | 1.00 | +5.0 | ANS_AttackState: 1.00초 |
### 스킬 목록
@ -639,7 +631,6 @@
1. AM_PC_Clad_Base_B_Skill_Ready (2.23초) [준비]
2. AM_PC_Clad_Base_B_Skill_TurnUndead (1.20초)
- **시퀀스 길이**: 1.20초
- **DPS 효율**: 137.5 DPS (피해 165 / 1.20초, 룬 적용 없음)
- **설명**: 3m 내의 적에게 150% 빛 속성 마법 피해를 주고, 3초 동안 5 방어력을 감소 시킵니다.
3. **SK150202 신성한 빛**
@ -694,13 +685,11 @@
**staff** (3타 콤보):
| 타수 | 몽타주 | 시간(초) | 배율(%) | 비고 |
|------|--------|----------|---------|------|
| 1 | AM_PC_Rene_B_Attack_W01_01 | 1.90 | 0.0 | |
| 2 | AM_PC_Rene_B_Attack_W01_02 | 1.80 | 0.0 | |
| 3 | AM_PC_Rene_B_Attack_W01_03 | 2.20 | 0.0 | |
**평타 DPS 효율**: 69.9 DPS (총 피해 375 / 콤보 시간 5.90초, 룬 적용 1.10배)
| 타수 | 몽타주 | 실제 시간(초) | 배율(%) | 비고 |
|------|--------|---------------|---------|------|
| 1 | AM_PC_Rene_B_Attack_W01_01 | 0.85 | 0.0 | ANS_AttackState: 0.85초 |
| 2 | AM_PC_Rene_B_Attack_W01_02 | 0.90 | 0.0 | ANS_AttackState: 0.90초 |
| 3 | AM_PC_Rene_B_Attack_W01_03 | 0.91 | 0.0 | ANS_AttackState: 0.91초 |
### 스킬 목록
@ -710,10 +699,11 @@
- **타입**: MagicalSkill
- **피해 배율**: 1.2
- **쿨타임**: 7초 / **마나**: 8
- ⚠️ **Burn 상태이상 유발**: 대상 MaxHP의 10% (3초간)
- 💡 **DoT 피해는 대상 HP에 비례** (구체적 DPS는 다음 챕터 참조)
- 🔮 **소환**: Ifrit (지속 20초)
- **몽타주**: AM_PC_Rene_B_Skill_SummonIfrit
- **시퀀스 길이**: 1.46초
- **DPS 효율**: 113.0 DPS (피해 150 / 1.46초, 룬 적용 1.10배) + **Ifrit 독립 DPS 90.51** (소환 20초)
- **설명**: 20초 동안 유지되는 화염의 정령을 소환합니다. 정령은 이동하지 않고 화염 화살을 발사하여 120% 화염 속성 마법 피해를 입힙니다.
2. **SK160206 정령 소환 : 냉기**
@ -723,7 +713,6 @@
- 🔮 **소환**: Shiva (지속 60초)
- **몽타주**: AM_PC_Rene_B_Skill_SummonShiva
- **시퀀스 길이**: 2.69초
- **DPS 효율**: 40.9 DPS (피해 100 / 2.69초, 룬 적용 1.10배) + **Shiva 독립 DPS 37.93** (소환 60초)
- **설명**: 60초 동안 유지되는 냉기의 정령을 소환합니다. 정령은 레네를 따라 이동하며 얼음 송곳을 소환합니다. 얼음 송곳은 80%만큼 물 속성 마법 피해를 입히며, 적중된 적은 둔화됩니다.
3. **SK160203 독기 화살**
@ -731,9 +720,9 @@
- **피해 배율**: 1
- **쿨타임**: 10초 / **마나**: 15 / **시전시간**: 2초
- ⚠️ **Bleed 상태이상 유발**: 고정 20 피해 (5초간)
- 💡 **DoT 피해는 대상 HP에 비례** (구체적 DPS는 다음 챕터 참조)
- **몽타주**: AM_PC_Rene_B_Skill_PoisonGas
- **시퀀스 길이**: 4.67초
- **DPS 효율**: 29.4 DPS (피해 125 / 4.67초, 룬 적용 1.10배) + DoT 4 DPS (고정)
- **설명**: 방어력을 무시하고 30만큼 암흑 속성 마법 피해를 입힙니다. 적중된 적은 출혈 상태가 됩니다.
@ -746,7 +735,6 @@
1. AM_PC_Rene_B_Skill_Scratching (1.11초)
2. AM_PC_Rene_B_Skill_Scratching2 (1.61초)
- **시퀀스 길이**: 1.36초 (평균)
- **DPS 효율**: 75.8 DPS (피해 93.75 / 1.36초, 룬 적용 1.10배)
- **설명**: 손톱을 휘둘러 75%만큼 마법 피해를 입히고 흡혈합니다. 피해의 30%만큼 체력을 회복합니다.
@ -777,6 +765,7 @@
- **공격 사이클**: 2.29초 → 2.29초 → 3.70초 (총 8.29초, 반복)
- **예상 공격 횟수**: ~7.2회
- **총 피해 배율**: ~8.69배 상당
- **특수 효과**: Burn DoT (대상 MaxHP의 10% (3초간))
#### ❄️ Shiva
@ -805,12 +794,10 @@
**shortSword** (2타 콤보):
| 타수 | 몽타주 | 시간(초) | 배율(%) | 비고 |
|------|--------|----------|---------|------|
| 1 | AM_PC_Sinobu_B_Attack_W01_03 | 1.07 | -20.0 | |
| 2 | AM_PC_Sinobu_B_Attack_W01_01 | 1.20 | -20.0 | |
**평타 DPS 효율**: 89.2 DPS (총 피해 184 / 콤보 시간 2.27초, 룬 적용 1.10배)
| 타수 | 몽타주 | 실제 시간(초) | 배율(%) | 비고 |
|------|--------|---------------|---------|------|
| 1 | AM_PC_Sinobu_B_Attack_W01_03 | 0.80 | -5.0 | ANS_AttackState: 0.80초 |
| 2 | AM_PC_Sinobu_B_Attack_W01_01 | 0.80 | -15.0 | ANS_AttackState: 0.80초 |
### 스킬 목록
@ -822,8 +809,6 @@
- **쿨타임**: 6초 / **마나**: 10 / **시전시간**: 1초
- **몽타주**: AM_PC_Sinobu_B_Skill_BombTalisman
- **시퀀스 길이**: 2.14초
- **DPS 효율**: 84.5 DPS (피해 149.5 / 2.14초, 룬 적용 1.21배)
- 💡 **표창 충전 +1**
- **설명**: 뒤로 점프하며 기폭찰 쿠나이를 설치합니다. 기폭찰 쿠나이는 적이 근처에 오면 폭발하여 130%만큼 물리 피해를 입힙니다. 사용 시 표창 1개를 충전합니다.
2. **SK180203 비뢰각**
@ -834,8 +819,6 @@
1. AM_PC_Sinobu_B_Skill_ThunderKick (0.60초)
2. AM_PC_Sinobu_B_Skill_ThunderKick_E (0.87초)
- **시퀀스 길이**: 1.47초
- **DPS 효율**: 104.2 DPS (피해 126.5 / 1.47초, 룬 적용 1.21배)
- 💡 **표창 충전 +1** (적중 시)
- **설명**: 대각선으로 날아차기를 하여 110%만큼 번개 속성 물리 피해를 입힙니다. 점프 상태에서만 사용 가능하며, 적중된 대상은 잠시 경직됩니다. 적중 시 표창 1개를 충전합니다.
3. **SK180205 인술 ‘바꿔치기’**
@ -859,8 +842,6 @@
- **시전시간**: 1초
- **몽타주**: AM_PC_Sinobu_B_Skill_Shuriken
- **시퀀스 길이**: 0.88초
- **DPS 효율**: 189.8 DPS (피해 138 / 0.88초, 룬 적용 1.21배)
- 💡 **표창 소모 -1** (최대 3개 충전)
- **설명**: 표창을 던져 120%만큼 물리 피해를 입힙니다. 일반 공격이 적중하거나 스킬을 사용하면 충전됩니다. 최대 3개까지 충전 가능합니다.
@ -890,12 +871,10 @@
**bow** (1타 콤보):
| 타수 | 몽타주 | 시간(초) | 배율(%) | 비고 |
|------|--------|----------|---------|------|
| 타수 | 몽타주 | 실제 시간(초) | 배율(%) | 비고 |
|------|--------|---------------|---------|------|
| 1 | AM_PC_Lian_Base_000_Attack_Bow | 3.27 | 0.0 | |
**평타 DPS 효율**: 40.4 DPS (피해 120 / 3.27초, 룬 적용 1.10배)
### 스킬 목록
**기본 스킬**:
@ -906,8 +885,6 @@
- **쿨타임**: 7초 / **마나**: 16
- **몽타주**: AM_PC_Lian_Base_000_Skill_RapidShot1
- **시퀀스 길이**: 2.67초
- **DPS 효율**: 184.9 DPS (4회 × 피해 102 / 2.67초, 룬 적용 1.21배)
- 💡 **탄약 소모 -4**
- **설명**: 4발의 화살을 빠르게 발사하여 각각 85%만큼 물리 피해를 입힙니다. 화살을 4개 소모합니다.
2. **SK190205 비연사**
@ -918,8 +895,6 @@
1. AM_PC_Lian_Base_000_Skill_BackStepBowAttack (1.33초)
2. AM_PC_Lian_Base_000_Skill_BackStepBowAttack (1.33초)
- **시퀀스 길이**: 1.33초
- **DPS 효율**: 163.8 DPS (피해 180 / 1.33초, 룬 적용 1.21배)
- 💡 **탄약 소모 -1**
- **설명**: 뒤로 빠지며 화살을 발사하여 150%만큼 물리 피해를 입힙니다. 화살을 1개 소모합니다.
3. **SK190201 연화**
@ -928,8 +903,6 @@
- **쿨타임**: 7.5초 / **마나**: 12
- **몽타주**: AM_PC_Lian_Base_000_Skill_DarkSouls_NoCasting
- **시퀀스 길이**: 2.20초
- **DPS 효율**: 79.2 DPS (피해 144 / 2.20초, 룬 적용 1.21배)
- 💡 **탄약 소모 없음**
- **설명**: 60초 동안 적을 천천히 추적하는 연꽃을 만들어 발사합니다. 연꽃은 120%만큼 빛 속성 물리 피해를 입히며, 적중된 대상은 10초 동안 25%의 주는 피해 감소 효과를 받습니다.
4. **SK190209 재장전**
@ -952,8 +925,6 @@
- **시전시간**: 1.5초
- **몽타주**: AM_PC_Lian_Base_000_Skill_ChargingBow
- **시퀀스 길이**: 4.93초
- **DPS 효율** (만충전): 34.6 DPS (피해 84 × 1.5배 / 4.93초, 룬 적용 1.21배)
- 💡 **탄약 소모 -1**, 충전 시간 1.5초로 최대 150% 피해
- **설명**: 조준하는 동안 물리 피해가 증가하는 화살을 발사합니다. 최대 150%까지 물리 피해가 증가합니다. 화살을 1개 소모합니다.
@ -987,14 +958,11 @@
**weaponShield** (3타 콤보):
| 타수 | 몽타주 | 시간(초) | 배율(%) | 비고 |
|------|--------|----------|---------|------|
| 1 | AM_PC_Cazimord_B_Attack_W01_01 | 1.67 | -15.0 | |
| 2 | AM_PC_Cazimord_B_Attack_W01_02 | 1.90 | +5.0 | |
| 3 | AM_PC_Cazimord_B_Attack_W01_03 | 1.87 | +10.0 | |
**평타 DPS 효율**: 72.8 DPS (총 피해 360 / 콤보 시간 5.44초, 룬 적용 1.10배)
**평타 DPS 효율 (작열 버프 시)**: 87.4 DPS (+20% 추가 마법 피해)
| 타수 | 몽타주 | 실제 시간(초) | 배율(%) | 비고 |
|------|--------|---------------|---------|------|
| 1 | AM_PC_Cazimord_B_Attack_W01_01 | 0.90 | -5.0 | ANS_AttackState: 0.90초 |
| 2 | AM_PC_Cazimord_B_Attack_W01_02 | 0.94 | +10.0 | ANS_AttackState: 0.94초 |
| 3 | AM_PC_Cazimord_B_Attack_W01_03 | 0.85 | 0.0 | ANS_AttackState: 0.85초 |
### 스킬 목록
@ -1004,13 +972,13 @@
- **타입**: PhysicalSkill
- **피해 배율**: 0.5
- **쿨타임**: 15.5초 / **마나**: 5
- ⚠️ **Burn 상태이상 유발**: 대상 MaxHP의 10% (10초간)
- ⚠️ **Burn 상태이상 유발**: 대상 MaxHP의 10% (3초간)
- 💡 **DoT 피해는 대상 HP에 비례** (구체적 DPS는 다음 챕터 참조)
- **몽타주**:
1. AM_PC_Cazimord_B_Skill_Flash (3.62초)
2. AM_PC_Cazimord_B_Skill_Flash_Active (1.73초)
- **시퀀스 길이**: 1.73초
- **DPS 효율**: 42.0 DPS (피해 60 / 1.73초, 룬 적용 1.21배) + DoT 2.5 DPS (대상 HP 250 기준, 10초)
- **설명**: 정면으로 4m 돌진하며, 베기 공격으로 공격력의 100%의 피해를 가합니다. 스킬 사용 중에는 경직에 면역 됩니다.
- **설명**: 정면으로 4m 돌진하며, 베기 공격으로 공격력의 100%의 피해를 가합니다.
2. **SK170202 날개 베기**
- **타입**: PhysicalSkill
@ -1018,7 +986,6 @@
- **쿨타임**: 15.5초 / **마나**: 10
- **몽타주**: AM_PC_Cazimord_B_Skill_BladeStorm
- **시퀀스 길이**: 2.00초
- **DPS 효율**: 87.1 DPS (4회 × 피해 36 / 2.00초, 룬 적용 1.21배)
- **설명**: 4번 베기로 공격력의 30% 피해를 입힙니다. 스킬 사용 중에는 경직에 면역 됩니다.
3. **SK170203 작열**
@ -1050,7 +1017,7 @@
- **시전시간**: 2초
- **몽타주**: AM_PC_Cazimord_B_Skill_ManaStoneBurn
- **시퀀스 길이**: 3.50초
- **설명**: 마석의 힘을 빌려 빠르게 정면을 12회 공격해 각각 80%의 물리 피해를 입힙니다. 마지막 2회의 타격은 100%의 물리 피해를 입힙니다. 시전 중에는 천천히 이동할 수 있지만, 마지막 타격때는 이동할 수 없습니다.
- **설명**: 마석의 힘을 빌려 빠르게 정면을 12회 공격해 각각 80%의 물리 피해를 입힙니다. 마지막 2회의 타격은 100%의 물리 피해를 입힙니다. 시전 중에는 천천히 이동할 수 있지만, 마지막 타격때는 이동할 수 없습니다. 또한 스킬 사용 중에는 경직에 면역 됩니다.
---
@ -1063,6 +1030,7 @@
- **판정 윈도우**: 0.2초
- **패링 성공 시**:
- 적 공격 무효화
- 자동 반격 (높은 피해)
- 스킬 쿨타임 감소
#### 쿨타임 감소 효과
@ -1090,12 +1058,12 @@
### Urud & Lian - Reload 시스템
#### 메커니즘
- **최대 탄약**: 12
- **최대 탄약**: 6
- **재장전 시간**: 2.0초
- **재장전 중**: 다른 행동 불가 (DPS 손실)
#### DPS 영향
- 12발 소진 후 2초 공백 발생
- 6발 소진 후 2초 공백 발생
- 최적 플레이: 탄약 관리로 전투 공백 최소화
### Lian - Charging Bow
@ -1113,33 +1081,29 @@
#### Ifrit (화염 정령)
- **지속 시간**: 20초
- **공격 타입**: 원거리 화염 공격
- **독립 DPS**: 90.51 (소환수 몽타주 기반)
- **공격 타입**: 근접 화염 공격
- **독립 DPS**: 계산 필요 (소환수 몽타주 기반)
#### Shiva (냉기 정령)
- **지속 시간**: 60초
- **공격 타입**: 원거리 냉기 공격
- **독립 DPS**: 37.93 (소환수 몽타주 기반)
- **독립 DPS**: 계산 필요 (소환수 몽타주 기반)
### Sinobu - Shuriken 충전
#### 메커니즘
- **최대 충전**: 3개
- **충전 조건**:
- 일반 공격 적중+1개
- SK180202 기폭찰 사용 시 +1개
- SK180203 비뢰각 적중 시 +1개
- SK180205 인술 '바꿔치기' 효과 발동 시 +1개 (피격 시)
- **소모**: SK180101 표창 사용 시 1개씩 소모
- **충전 속도**: 1초/개 (자동)
- **소모**: 특정 스킬 사용 시 1개씩 소모
#### DPS 영향
- 조건부 충전 시스템으로 전략적 스킬 사용 필요
- 최적 플레이: 충전 스킬과 표창을 효율적으로 교차 사용
- 충전 관리로 스킬 사용 빈도 조절
- 최적 플레이: 충전 타이밍 고려한 스킬 로테이션
---
---
**생성 일시**: 2025-10-27 20:13:43
**생성 일시**: 2025-10-28 23:18:41
**데이터 소스**: intermediate_data.json
**검증 상태**: 미검증

View File

@ -16,30 +16,16 @@ BLUEPRINT_JSON = DATA_DIR / "Blueprint.json"
ANIMMONTAGE_JSON = DATA_DIR / "AnimMontage.json"
CURVETABLE_JSON = DATA_DIR / "CurveTable.json"
# 출력 디렉토리 (타임스탬프 자동 생성)
# 출력 디렉토리 (Git 버전관리용 고정 경로)
def get_output_dir(create_new: bool = False) -> Path:
"""
출력 디렉토리 가져오기
- create_new=True: 타임스탬프 디렉토리 생성
- create_new=False: 가장 최근 디렉토리 사용 (없으면 생성)
- Git으로 버전관리하므로 타임스탬프 폴더 생성하지 않음
- 항상 분석결과/ 직접 사용
"""
result_base = PROJECT_ROOT / "분석결과"
result_base.mkdir(parents=True, exist_ok=True)
if create_new:
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
return result_base / f"{timestamp}_v2"
# 기존 v2 디렉토리 중 가장 최근 것 찾기 (수정 시간 기준)
v2_dirs = [d for d in result_base.iterdir() if d.is_dir() and d.name.endswith('_v2')]
if v2_dirs:
# 수정 시간 기준으로 정렬
v2_dirs_sorted = sorted(v2_dirs, key=lambda d: d.stat().st_mtime)
return v2_dirs_sorted[-1] # 가장 최근 디렉토리
# 없으면 새로 생성
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
return result_base / f"{timestamp}_v2"
return result_base
OUTPUT_DIR = get_output_dir()
@ -181,30 +167,7 @@ BASE_DAMAGE_FORMULA = {
'support': lambda stats: (stats['str'] + 80) * 1.00 # Clad uses STR, not WIS
}
# 콤보 캔슬 시스템 (v2.1)
# ANS_DisableBlockingState_C 노티파이로 조기 캔슬 가능
COMBO_CANCEL_STALKERS = {
'hilda': {
'weapons': ['weaponShield'], # 방패+무기
'patterns': ['AM_PC_Hilda_B_Attack_W01_'], # 평타 패턴
'time_reduction': 0.19, # 19% 시간 단축
'description': '3타 콤보 캔슬 (4.57s → 3.69s)'
},
'baran': {
'weapons': ['twoHandWeapon'], # 양손 무기
'patterns': ['AM_PC_Baran_B_Attack_W01_'],
'time_reduction': 0.19, # 19% 시간 단축
'description': '평타 콤보 캔슬 (5.53s → 4.48s)'
},
'clad': {
'weapons': ['oneHandWeapon'], # 한손 무기 (mace)
'patterns': ['AM_PC_Clad_Base_Attack_Mace'],
'time_reduction': 0.56, # 56% 시간 단축 (극적!)
'description': '평타 콤보 캔슬 (4.17s → 1.84s)'
}
}
# 특수 궁극기 처리 (v2.1)
# 특수 궁극기 처리
SPECIAL_ULTIMATE_HANDLING = {
'SK130301': { # 바란 - 일격분쇄
'stalker': 'baran',

View File

@ -278,40 +278,23 @@ def extract_anim_montages(montages: List[Dict]) -> Dict[str, Dict]:
"""
AnimMontage.json에서 몽타주 타이밍 노티파이 추출
- AddNormalAttackPer 추출 (ANS_AttackState_C 노티파이)
- cancellableTime 추출 (ANS_DisableBlockingState_C 노티파이)
- attackStateEndTime 추출 (ANS_AttackState_C 종료 시점)
Returns:
{montage_name: {timing, notifies, attackMultiplier, cancellableTime}}
{montage_name: {timing, notifies, attackMultiplier, attackStateEndTime}}
"""
print("\n=== AnimMontage 추출 ===")
all_montages = {}
pc_montages = [m for m in montages if 'AM_PC_' in m.get('AssetName', '') or 'AM_Sum_' in m.get('AssetName', '')]
# 콤보 캔슬 적용 대상 스토커 및 패턴 (평타만 해당)
CANCEL_TARGETS = {
'hilda': ['AM_PC_Hilda_B_Attack_W01_'], # weaponShield
'baran': ['AM_PC_Baran_B_Attack_W01_'], # twoHandWeapon
'clad': ['AM_PC_Clad_Base_Attack_Mace'] # oneHandWeapon (mace) - 특수 패턴
}
for montage in pc_montages:
asset_name = montage['AssetName']
# 공격 노티파이 추출
attack_notifies = []
attack_multiplier = 0.0 # AddNormalAttackPer (기본값 0)
cancellable_time = None # 콤보 캔슬 가능 (기본값 None)
# 콤보 캔슬 적용 대상 판별
is_cancel_target = False
for stalker_name, patterns in CANCEL_TARGETS.items():
for pattern in patterns:
if pattern in asset_name:
is_cancel_target = True
break
if is_cancel_target:
break
attack_state_end_time = None # ANS_AttackState 종료 (평타용)
for notify in montage.get('AnimNotifies', []):
notify_class = notify.get('NotifyClass', '')
@ -319,7 +302,7 @@ def extract_anim_montages(montages: List[Dict]) -> Dict[str, Dict]:
notify_name = notify.get('NotifyName', '')
custom_props = notify.get('CustomProperties', {})
# ANS_AttackState_C에서 AddNormalAttackPer 추출
# ANS_AttackState_C에서 AddNormalAttackPer 및 종료 시점 추출
if 'ANS_AttackState' in notify_state_class:
add_normal_attack_str = custom_props.get('AddNormalAttackPer', '0')
try:
@ -327,11 +310,10 @@ def extract_anim_montages(montages: List[Dict]) -> Dict[str, Dict]:
except (ValueError, TypeError):
attack_multiplier = 0.0
# ANS_DisableBlockingState_C에서 콤보 캔슬 시간 추출 (적용 대상만)
if is_cancel_target and 'ANS_DisableBlockingState' in notify_state_class:
# ANS_AttackState 종료 시점 = TriggerTime + Duration
trigger_time = notify.get('TriggerTime', 0)
duration = notify.get('Duration', 0)
cancellable_time = trigger_time + duration
attack_state_end_time = trigger_time + duration
# 공격 판정 로직 (우선순위)
is_attack_notify = False
@ -379,7 +361,7 @@ def extract_anim_montages(montages: List[Dict]) -> Dict[str, Dict]:
'sequenceLength': seq_len,
'rateScale': rate_scale,
'actualDuration': actual_duration, # 시퀀스 길이 (SequenceLength / RateScale)
'cancellableTime': cancellable_time, # 콤보 캔슬 가능 (해당되는 경우만)
'attackStateEndTime': attack_state_end_time, # ANS_AttackState 종료 (평타용)
'attackMultiplier': attack_multiplier, # AddNormalAttackPer
'sections': montage.get('Sections', []),
'numSections': montage.get('NumSections', 0),
@ -393,15 +375,6 @@ def extract_anim_montages(montages: List[Dict]) -> Dict[str, Dict]:
print(f" [OK] 총 {len(all_montages)}개 몽타주 추출 (PC + Summon)")
# 콤보 캔슬 적용된 몽타주 확인
cancel_montages = [(name, data['cancellableTime'], data['actualDuration'])
for name, data in all_montages.items()
if data.get('cancellableTime') is not None]
if cancel_montages:
print(f" [INFO] 콤보 캔슬 적용 몽타주: {len(cancel_montages)}")
for name, cancel_time, actual_time in cancel_montages:
print(f" - {name}: 캔슬 {cancel_time:.2f}초 (원본 {actual_time:.2f}초)")
# 소환수 몽타주 확인
summon_montages = [m for m in all_montages.keys() if 'Summon' in m or 'Sum_' in m]
if summon_montages:
@ -733,13 +706,20 @@ def organize_stalker_data(
montage_name = montage_path.split('/')[-1].replace("'", "").split('.')[0]
if montage_name in anim_montages:
montage_info = anim_montages[montage_name]
# 평타는 ANS_AttackState 종료 시점을 우선 사용
# 없으면 actualDuration 폴백
attack_state_end = montage_info.get('attackStateEndTime')
effective_duration = attack_state_end if attack_state_end is not None else montage_info['actualDuration']
basic_attacks[weapon_type].append({
'index': idx + 1,
'montageName': montage_name,
'sequenceLength': montage_info['sequenceLength'],
'rateScale': montage_info['rateScale'],
'actualDuration': montage_info['actualDuration'],
'cancellableTime': montage_info.get('cancellableTime'), # 콤보 캔슬 시간 (해당되는 경우)
'actualDuration': montage_info['actualDuration'], # 원본 몽타주 시간
'attackStateEndTime': attack_state_end, # ANS_AttackState 종료 시점
'effectiveDuration': effective_duration, # 실제 평타 시간 (ANS_AttackState 우선)
'attackMultiplier': montage_info['attackMultiplier'],
'hasAttack': montage_info['hasAttack']
})

View File

@ -301,17 +301,25 @@ def generate_stalker_detail(stalker_id: str, stalker_data: Dict) -> str:
for weapon_type, attacks in basic_attacks.items():
if attacks:
md += f"**{weapon_type}** ({len(attacks)}타 콤보):\n\n"
md += "| 타수 | 몽타주 | 시간(초) | 배율(%) | 비고 |\n"
md += "|------|--------|----------|---------|------|\n"
md += "| 타수 | 몽타주 | 실제 시간(초) | 배율(%) | 비고 |\n"
md += "|------|--------|---------------|---------|------|\n"
for attack in attacks:
idx = attack['index']
montage_name = attack['montageName']
duration = attack['actualDuration']
# effectiveDuration 사용 (ANS_AttackState 종료 시점 우선)
duration = attack.get('effectiveDuration', attack['actualDuration'])
multiplier = attack['attackMultiplier']
mult_display = f"{multiplier:+.1f}" if multiplier != 0 else "0.0"
# 태그 추가
# 비고: ANS_AttackState 적용 여부 표시
notes = []
tag = get_montage_tag(montage_name)
note = tag if tag else ""
if tag:
notes.append(tag)
if attack.get('attackStateEndTime') is not None:
notes.append(f"ANS_AttackState: {attack['attackStateEndTime']:.2f}")
note = ", ".join(notes) if notes else ""
md += f"| {idx} | {montage_name} | {duration:.2f} | {mult_display} | {note} |\n"
md += "\n"