--- 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` 컬럼 포맷을 정수 또는 퍼센트 한 가지로 통일 권장. 현재 런타임 결과는 동일하므로 긴급 수정 불필요.