---
from: 개발팀장
to: 기획팀장
type: REQ응답
subject: "REQ001 응답 — 각성트리 퍼센트값 파싱 방식 확인"
priority: high
status: 대기
date: 2026-04-16
ref: 공유/소통/기획팀→개발팀/2026-04-14_REQ001_각성트리_퍼센트값_해석확인.md
---

# REQ001 응답 — 각성트리 퍼센트값(`'500%'`) 실제 파싱 방식

## 결론

**`'500%'`는 런타임에서 `5.0f`(= 500 * 0.01)로 파싱된다. `'5'`와 결과가 동일하며, 데이터 입력 형식의 불일치(입력 오류)이다.**

기획팀이 제시한 4가지 가능성 중 **사실상 (D) 데이터 입력 오류**에 해당. 단, 런타임 결과는 정상 동작하므로 긴급 수정은 불필요.

## 코드 근거

### 핵심 파싱 메서드: `table_base.cs` 20~26행 `Get_Value(string str)`

```csharp
protected float Get_Value(string str)
{
    if (IsPercentValue(str)) return float.Parse(str.Replace("%", "")) * 0.01f;
    else if (str.Contains("s")) return float.Parse(str.Replace("s", ""));
    else if (str.Contains("exp")) return float.Parse(str.Replace("exp", ""));
    return float.Parse(str);
}
```

- `%` 포함 시: 숫자 추출 후 `* 0.01f` 적용
- `%` 미포함 시: 숫자를 그대로 float 변환

### `table_PCAwakening.cs` 53행에서 호출

```csharp
temp.f_Value = Get_Value(temp.s_Value);
```

### 파싱 결과 비교

| s_Value | 파싱 결과 (f_Value) | 해석 |
|---------|-------------------|------|
| `"5"` | `5.0f` | 고정값 5 |
| `"500%"` | `5.0f` (= 500 * 0.01) | 퍼센트 표기이나 **결과 동일** |

### 실측 검증: PCID=6001, MaxHP 노드

- Step 2, 14, 26: `s_Value="5"` => `f_Value = 5.0`
- Step 39, 51, 63, 86, 110, 123: `s_Value="500%"` => `f_Value = 5.0`

**PCID 6001에만 `500%` 형식이 다수 존재.** PCID 6002~6005는 대부분 정수 형식 사용.

## 만렙 총 효과 계산 (기획팀 질문 2번)

`Get_Value(int pcid, ServerData sdata, int addlv)` 메서드: `f_Value + (f_ValuePerLv * (lv - 1))`

따라서 `s_Value="500%"`, `s_UpgradeStatValuePara="100%"`, `n_MaxLv=5` 일 때:
- `f_Value = 5.0`, `f_ValuePerLv = 1.0` (100% * 0.01)
- 만렙 효과 = `5.0 + 1.0 * 4 = 9.0` (고정값 +9)

기획팀 추정 `900%`는 잘못된 해석. 실제는 **고정값 +9**.

## 기획팀 밸런싱 시 유의사항

1. `'500%'`는 "MaxHP를 500% 배율 적용"이 아니라, 파이프라인에 의해 **고정값 5.0으로 변환**
2. 레벨업당 고정 증분 방식 (f_Value + f_ValuePerLv * (lv-1))
3. **Phase 3 기여도 재계산 시 DPS +1067%라는 비정상 수치는 해소됨** — 실제 효과는 고정값 수준
4. 다른 스탯(Attack_Min, Attack_Max, MaxPotion 등)도 동일한 파싱 로직 적용

## 권장 조치

기획 엑셀 시트에서 `s_Value` 컬럼 포맷을 정수 또는 퍼센트 한 가지로 통일 권장. 현재 런타임 결과는 동일하므로 긴급 수정 불필요.
