# WL813l2 Probe 2026-09-09 14:41:18 (edit mode · Play 0 · 로그인 0) playMode=False ── 준비 [OK] 구독 ON · MyValue.bMyPC=False(월드 PC 없음 = 로비·에디트 경로) ── ⓪ 설정 에셋 · 성장 입력 값 전수 (C45 · 코드 상수 0) [OK] WLPowerDeltaSettings 로드 [OK] Enabled · enabled_=True 성장 입력: useLevelUpPayload=True readGrowthFromServerData=True statPointWeight=1 atkGain=1 hpGain=22 perLevel=5 levelWeight=0 levelBase=1 기존 산식: atk=BaseDmg(폴백 ATK) hp=MaxHP hpWeight=0.1 powerScale=1 최소 표시 0.5% suppressToastOnLevelUp=True [OK] statPointsPerLevel=5 (원본 실측 ServerClass.cs:2770 Get_Point() = (Lv−1)*5 − 사용분) [OK] 포인트 환산 ATK +1 / MaxHP +22 (원본 실측 MyValue.cs:335-336 dic_MainStatMultiplier[STR] = ATK 1 · MaxHP 22) ── ① 🔴 D-28 원인 실증 — 원본 스탯은 레벨업으로 안 움직인다 · 움직이는 것은 미사용 포인트뿐 Lv 1 → 16 · 스탯 포인트 사용 0 · 장비 변화 0 일 때 원본이 주는 것: [OK] Get_Point() 0 → 75 (= (Lv−1)*5 · 미사용 포인트만 늘어난다) [OK] SD_PC.Get_Stat(STR) 0 → 0 (= **사용한** 포인트만 셈 · table_classconfig.Get_PureStat:246 이 읽는 값) → ActorStatInfo 는 그대로 ⇒ `ActorStatInfo.Reset`(MyValue.cs:286-453)은 SD_PC.Lv 를 한 번도 안 읽는다 = 813l 이 폴링해도 값이 상수 (Q6 D-28 `PollCount 1573` 인데 `LastPower 52.000000` 불변 · 레벨 1→16) [OK] ApplyGrowth ↔ 원본 Get_Point() 대조 — 내 값 70 · 원본 70 · level=16 (사용 5점 반영) [OK] 813l 산식 회귀 4건(성장 입력 0) — 200.00 / 210.00 / 230.00 / 486.00 (기대 200 / 210 / 230 / 486) [OK] 포인트 5점 → 216.00 (기대 216.00 = 105 + 111.0) [OK] 포인트 10점 → 232.00 (기대 232.00 · 레벨당 +16.0) [OK] 레벨업 1회 증가율 8.00% (최소 표시 0.5% 를 넘는다) [OK] 포인트 사용 전/후 연속 — 미사용 216.00 ↔ 사용 후 216.00 (statPointWeight=1 의 뜻) ── ② 813k GrowthEvents.LevelUp 실 Dispatch — prev ATK 100 → new 112 (발주서 §1-3) dispatch GrowthEvents.LevelUp 6→7 pt=30 · 구독자=1 [OK] 수신 1회 · 소스 "levelUp(813k 페이로드)" [OK] 페이로드 전투력 prev=280.00 new=308.00 (기대 280.00 / 308.00 · 손계산) [OK] 🔴 LastPower 0 → 308.00 (D-28 = 여기가 52 로 고정이었다) [OK] 레벨업 프레임 토스트 생략(Suppressed=1 Toast=0) — 같은 값을 팝업 줄이 보여준다 [OK] 팝업 줄 "전투력 280 → 308 (+10.0%)" (기대 280 → 308 · +10.0%) [OK] 토스트 1회 · 문구 "전투력 +10.0%" (기대 "전투력 +10.0%") [OK] useLevelUpPayload=0 → 소스 "levelUp(스탯 읽기 실패)" · 토스트 0회 · LastPower 없음(= 813l 원래 경로) ── ③ 🔴 D-28 재현 · 수리 — 스탯이 **하나도 안 바뀌는** 원본 기본 동작(813k 보고 ①)에서 dispatch GrowthEvents.LevelUp 7→8 pt=35 · 구독자=1 · 스탯 3종 prev == new (원본 기본값) [OK] 전투력 296.00 → 312.00 (기대 296.00 → 312.00) [OK] ✅ 수리 후 — 토스트 1회 "전투력 +5.4%" [OK] ❌ 재현(statPointWeight=0) — 레벨 7→8→9 인데 전투력 200.00 불변 · 토스트 0회 = Q6 D-28 그대로 [OK] 다단(5→8 · 3레벨) prev 포인트 역산 → prev 전투력 264.00 (기대 264.00 = 포인트 20점) ── ④ 레벨업 팝업 전투력 줄 — 813y StatPopup 왕복(구독 → Dispatch → 줄) init: 구독 ON · box pos=(0.00, 180.00) size=(1080.00, 296.00) rows=3 power=on unitsPerPx=1.0000 titleFont=72.0 edge[LiberationSans SDF Material (WL813y Edge) shader=TextMeshPro/Mobile/Distance Field outlineW=0.260 outlineC=0D0805FF underlay=000000BF off(0.45,-0.45) soft=0.20 UNDERLAY_ON=True] [OK] StatPopup.PowerLineOn [OK] StatPopup 구독=True · GrowthEvents.LevelUp 구독자=2(StatPopup + PowerDeltaToast) 팝업 표시: rows=1 level=10 text="LEVEL 10 / +5 포인트 (보유 45) / 전투력 328 → 344 (+4.9%)" [OK] 🔴 팝업 전투력 줄 "전투력 328 → 344 (+4.9%)" (기대 328 → 344 · +4.9%) [OK] 중복 표시 0 — Suppressed=1 Toast=0 [OK] 프레임 스탬프 prev=328.00 new=344.00 → 팝업/토스트가 같은 값을 본다(구독 순서 무관) ── ⑤ GC 0 (폴링 · 페이로드 · 포인트 산식) [OK] Tick × 1000 → GetTotalMemory 0 B · MonoUsedSize 0 B (폴링 2회) [OK] ApplyGrowth × 1000 = 0 B ↔ 원본 Get_Point() × 1000 = 0 B (원본은 LINQ Select+Sum · sink=138000) 레벨업 Dispatch × 1000 — 헬퍼만 126976 B · 구독 포함 176128 B → 내 경로 몫 49152 B / 1000회 (813l 때부터 있던 진단 문자열 · **프레임 경로 아님**) 대조군 new object() × 1000 = 24576 B (0 이 아니어야 측정이 살아 있다) · keep=1000 ── ⑥ C8 롤백 [OK] Enabled=false [OK] 레벨업 무시(LevelUpSeen=0 Toast=0) [OK] BuildStatPopupLine()=null [OK] 해제 후 Enabled=true [OK] statPointWeight=0 · levelWeight=0 → 레벨 16 · 포인트 75 여도 200.00 (813l 원래 산식과 동일 = 값 하나로 되돌린다) RESULT PASS