Project_WL/AgentScripts/WL813o2_PROBE.txt

196 lines
12 KiB
Plaintext
Raw Normal View History

# WL813o2 Probe 2026-09-09 19:01:19 (edit mode · Play 0 · 로그인 0)
playMode=False
── ⓪ 값(SO) — 코드 상수 0 (C45)
[PASS] WLZonePickupSettings.asset 로드
[PASS] WLErrorGuardSettings.asset 로드
validatePool=True runtimeKeyCheck=True maxRedraws=6 logExclusion=True cardCount=3
excludeSkillIds = [3, 11, 14]
noPrefabEffects(10) = Select_DoubleShot, Select_TripleShot, Select_Bounce, Select_Bounce2, Select_LeafFairy2, Select_FrostFairy2, Select_WindFairy2, Select_HikikomoriFairy2, Select_Heal, Select_Shield
extraKeys[0] Select_Star → Assets/Res_Addr/Projectile/ProjectileStar.prefab (Select_Star.cs:27 Shoot_Projectile("ProjectileStar"))
extraKeys[1] Select_SwordSlash → Assets/Res_Addr/Projectile/SwordSlash.prefab (Select_SwordSlash.cs:29 Shoot_Projectile("SwordSlash"))
extraKeys[2] Select_Shield → Assets/Res_Addr/Skill/Skill_Shield.prefab (InGameInfo2.cs:46 Set_Skill_ToPet(eEffect.Skill_Shield))
경로형식: select=Assets/Res_Addr/SelectSkill/{0}.prefab · skill=Assets/Res_Addr/Skill/{0}.prefab · effect=Assets/Res_Addr/Effect/{0}.prefab
[813x2] suppressErrorModalInRun=True suppressOnlyWhileRunning=True suppressUntilNextRunStart=True
[PASS] validatePool=1(풀 검증 켜짐)
[PASS] excludeSkillIds 비어 있지 않음
[PASS] extraKeys(코드 문자열 키) 채워짐
[PASS] suppressUntilNextRunStart=1(D-42 연장 켜짐)
[PASS] 카드 3장(기획안 F-3)
── ① Addressables 그룹 실측 — 키 존재 ⟺ 그 경로의 에셋 존재
Projectile 그룹 m_Address = Assets/Res_Addr/Projectile (엔트리 1개)
[PASS] Projectile = 폴더 엔트리 1개(자식 주소 = 에셋 경로)
Skill 그룹 m_Address = Assets/Res_Addr/Skill (엔트리 1개)
[PASS] Skill = 폴더 엔트리 1개(자식 주소 = 에셋 경로)
Effect 그룹 m_Address = Assets/Res_Addr/Effect (엔트리 1개)
[PASS] Effect = 폴더 엔트리 1개(자식 주소 = 에셋 경로)
SelectSkill 그룹 m_Address = Assets/Res_Addr/SelectSkill (엔트리 1개)
[PASS] SelectSkill = 폴더 엔트리 1개(자식 주소 = 에셋 경로)
── ② 원본 데이터 경로 — table_selectskill.Awake 를 그대로 태운다
[PASS] 테이블 TextAsset Assets/ResWork/Table/table_selectskill.txt
[PASS] table_selectskill.Ins 설정(원본 Awake)
[PASS] InGameInfo.Ins · ActorInfo.Ins 설정
테이블 행 수 실측 = 58 (발주서 「기획안 42행」과 다르다 → 실측값을 쓴다)
[PASS] 행 파싱 성공
── ③ 원본 효과 클래스 grep — `Shoot_Projectile("…")` 코드 문자열 (읽기만 · 수정 0)
[PASS] 원본 폴더 Assets/Script/Character/Projectile/SelectSkill
파일 16개
(주석) Select_LeafFairy.cs:44 키="LeafBullet"
Select_Star.cs:27 키="ProjectileStar"
Select_SwordSlash.cs:29 키="SwordSlash"
[PASS] 살아 있는 Shoot_Projectile 문자열 2건
[PASS] SO extraKeys 가 Select_Star → Assets/Res_Addr/Projectile/ProjectileStar.prefab 를 덮는다
[PASS] SO extraKeys 가 Select_SwordSlash → Assets/Res_Addr/Projectile/SwordSlash.prefab 를 덮는다
── ④ 🔴 풀 검증 표 — 전 행 × 참조 키 × 실존 (에디트 모드 · AssetDatabase)
| ID | SkillEffect | Stg | 뽑기가능 | 1차 키 | 실존 | 추가 키 | 실존 | 판정 |
|---|---|---|---|---|---|---|---|---|
| 1 | Select_DoubleShot | 2 | - | (없음) | - | - | - | 사용 |
| 2 | Select_Bounce | 4 | - | (없음) | - | - | - | 사용 |
| 3 | Select_Shield | 1 | O | (없음) | - | Skill/Skill_Shield.prefab | 🔴X | 🔴 제외 |
| 4 | Select_FireCircle | 1 | O | SelectSkill/Select_FireCircle.prefab | O | - | - | 사용 |
| 5 | Select_BarrelCircle | 1 | O | SelectSkill/Select_BarrelCircle.prefab | O | - | - | 사용 |
| 6 | Select_TripleShot | 5 | - | (없음) | - | - | - | 사용 |
| 7 | Select_Heal | 5 | - | (없음) | - | - | - | 사용 |
| 8 | Select_Bottle | 3 | - | SelectSkill/Select_Bottle.prefab | O | - | - | 사용 |
| 9 | Select_BodyonFire | 1 | O | SelectSkill/Select_BodyonFire.prefab | O | - | - | 사용 |
| 10 | Select_LeafFairy | 1 | O | SelectSkill/Select_LeafFairy.prefab | O | - | - | 사용 |
| 11 | Select_SwordSlash | 7 | - | SelectSkill/Select_SwordSlash.prefab | O | Projectile/SwordSlash.prefab | 🔴X | 🔴 제외 |
| 12 | Select_FrostFairy | 1 | O | SelectSkill/Select_FrostFairy.prefab | O | - | - | 사용 |
| 13 | Select_WindFairy | 1 | O | SelectSkill/Select_WindFairy.prefab | O | - | - | 사용 |
| 14 | Select_Star | 1 | O | SelectSkill/Select_Star.prefab | O | Projectile/ProjectileStar.prefab | 🔴X | 🔴 제외 |
| 15 | Select_MoveSpeedUp | 1 | O | SelectSkill/Select_MoveSpeedUp.prefab | O | - | - | 사용 |
| 16 | Select_MoveSpeedUp | 4 | - | SelectSkill/Select_MoveSpeedUp.prefab | O | - | - | 사용 |
| 17 | Select_HikikomoriFairy | 1 | O | SelectSkill/Select_HikikomoriFairy.prefab | O | - | - | 사용 |
| 18 | Select_LeafFairy2 | 4 | - | (없음) | - | - | - | 사용 |
| 19 | Select_FrostFairy2 | 3 | - | (없음) | - | - | - | 사용 |
| 20 | Select_WindFairy2 | 3 | - | (없음) | - | - | - | 사용 |
| 21 | Select_HikikomoriFairy2 | 2 | - | (없음) | - | - | - | 사용 |
| 22 | Select_Bounce2 | 5 | - | (없음) | - | - | - | 사용 |
| 101 | None | 1 | O | (없음) | - | - | - | 사용 |
| 102 | None | 1 | O | (없음) | - | - | - | 사용 |
| 103 | None | 1 | O | (없음) | - | - | - | 사용 |
| 104 | None | 1 | O | (없음) | - | - | - | 사용 |
| 105 | None | 1 | O | (없음) | - | - | - | 사용 |
| 106 | None | 1 | O | (없음) | - | - | - | 사용 |
| 107 | None | 1 | O | (없음) | - | - | - | 사용 |
| 108 | None | 1 | O | (없음) | - | - | - | 사용 |
| 109 | None | 1 | O | (없음) | - | - | - | 사용 |
| 110 | None | 1 | O | (없음) | - | - | - | 사용 |
| 111 | None | 1 | O | (없음) | - | - | - | 사용 |
| 112 | None | 1 | O | (없음) | - | - | - | 사용 |
| 113 | None | 3 | - | (없음) | - | - | - | 사용 |
| 114 | None | 3 | - | (없음) | - | - | - | 사용 |
| 115 | None | 3 | - | (없음) | - | - | - | 사용 |
| 116 | None | 3 | - | (없음) | - | - | - | 사용 |
| 117 | None | 3 | - | (없음) | - | - | - | 사용 |
| 118 | None | 3 | - | (없음) | - | - | - | 사용 |
| 119 | None | 3 | - | (없음) | - | - | - | 사용 |
| 120 | None | 3 | - | (없음) | - | - | - | 사용 |
| 121 | None | 3 | - | (없음) | - | - | - | 사용 |
| 122 | None | 3 | - | (없음) | - | - | - | 사용 |
| 123 | None | 3 | - | (없음) | - | - | - | 사용 |
| 124 | None | 3 | - | (없음) | - | - | - | 사용 |
| 125 | None | 6 | - | (없음) | - | - | - | 사용 |
| 126 | None | 6 | - | (없음) | - | - | - | 사용 |
| 127 | None | 6 | - | (없음) | - | - | - | 사용 |
| 128 | None | 6 | - | (없음) | - | - | - | 사용 |
| 129 | None | 6 | - | (없음) | - | - | - | 사용 |
| 130 | None | 6 | - | (없음) | - | - | - | 사용 |
| 131 | None | 6 | - | (없음) | - | - | - | 사용 |
| 132 | None | 6 | - | (없음) | - | - | - | 사용 |
| 133 | None | 6 | - | (없음) | - | - | - | 사용 |
| 134 | None | 6 | - | (없음) | - | - | - | 사용 |
| 135 | None | 6 | - | (없음) | - | - | - | 사용 |
| 136 | None | 6 | - | (없음) | - | - | - | 사용 |
전체 58행 · 부재 키 행 3건
🔴 행 3 Select_Shield (Stage 1 · 지금 뽑힘) — 부재 키 Assets/Res_Addr/Skill/Skill_Shield.prefab
🔴 행 11 Select_SwordSlash (Stage 7 · 지금은 안 뽑힘) — 부재 키 Assets/Res_Addr/Projectile/SwordSlash.prefab
🔴 행 14 Select_Star (Stage 1 · 지금 뽑힘) — 부재 키 Assets/Res_Addr/Projectile/ProjectileStar.prefab
[PASS] 부재 키 행 3(Select_Shield)이 SO excludeSkillIds 에 있다
[PASS] 부재 키 행 11(Select_SwordSlash)이 SO excludeSkillIds 에 있다
[PASS] 부재 키 행 14(Select_Star)이 SO excludeSkillIds 에 있다
[PASS] SO excludeSkillIds[3] 는 실측 부재 행이다(과잉 제외 0)
[PASS] SO excludeSkillIds[11] 는 실측 부재 행이다(과잉 제외 0)
[PASS] SO excludeSkillIds[14] 는 실측 부재 행이다(과잉 제외 0)
[PASS] D-41 재현 — 부재 키 행이 실제로 있다
── ⑤ 런타임 검사 — 게임 코드 `ZonePickupPool` 이 같은 결론을 내는가
[PASS] 에디트 모드 표와 런타임 판정 완전 일치(58행 · 불일치 0)
[PASS] 행 3 제외 판정 — 사유 "SO 제외 목록"
[PASS] 행 11 제외 판정 — 사유 "SO 제외 목록"
[PASS] 행 14 제외 판정 — 사유 "SO 제외 목록"
카운터: checked=3 staticExclude=3 missingKey=0 skipped=0
정적 목록 없이 키 검사만으로 제외된 행 = [3, 11, 14]
[PASS] 키 검사만으로도 같은 수(3)가 걸린다 = 목록은 캐시일 뿐
── ⑥ 3장 뽑기 100회 — 제외 행이 한 번도 안 나오는가
[PASS] 100회 전부 성공 — 실측 100
[PASS] 카드 수 3장 미달 0 — 실측 0
[PASS] 한 뽑기 안 ID 중복 0 — 실측 0
나온 ID 분포(300장): 4×12 5×12 9×18 10×15 12×22 13×12 15×19 17×13 101×11 102×15 103×7 104×16 105×18 106×15 107×15 108×21 109×6 110×18 111×16 112×19
[PASS] 🔴 제외 행 3 등장 0회 — 실측 0회
[PASS] 🔴 제외 행 11 등장 0회 — 실측 0회
[PASS] 🔴 제외 행 14 등장 0회 — 실측 0회
ExcludedCount=32 RedrawCount=27 last="행 14 — SO 제외 목록"
[PASS] 실제로 제외가 걸렸다(후필터가 살아 있다) — 32건
── ⑦ 대조군 — validatePool=0 (813o 동작) 이면 제외 행이 다시 뽑힌다
validatePool=0 에서 제외 대상 등장 = 27장 / 300장
[PASS] 대조군에서는 실제로 나온다 = ⑥의 0회가 필터 덕분임을 증명
[PASS] validatePool=0 이면 제외 0 · 재뽑기 0(813o 동작 그대로)
[PASS] 재뽑기 0회
── ⑧ GC — 검증 코드 자체의 할당(캐시가 선 뒤)
판정 6,000회(캐시 히트) Δ = 0 B
[PASS] 🔴 캐시가 선 뒤 판정 할당 = 0 B — 실측 0
[PASS] 판정은 ID 당 1회 — 58행×51회 뒤에도 누적 58회(=행 수)
검증 ON 뽑기 200회 Δ = 0 B · 원본 Get_DataList 호출 246회(재뽑기 46)
검증 OFF 뽑기 200회 Δ = 0 B · 원본 Get_DataList 호출 200회
원본 호출 1회당 = ON 0 B · OFF 0 B → 차이는 검증 코드가 아니라 **원본 LINQ 셔플을 몇 번 더 부르느냐**다
[PASS] 호출 1회당 할당이 대조군의 2배를 넘지 않는다(검증 코드 몫 ≈ 0)
🔴 실사용 빈도 = 존 클리어 1회당 뽑기 1회(런당 최대 3장×존 수) — 매 프레임 경로 아님
── ⑨ C8 — 스위치 하나로 813o 이전 100%
[PASS] validatePool=0 → 검증 축 off
[PASS] 제외 0 · 재뽑기 0
[PASS] RuntimeDisabled → 픽업 축 전체 off(813o C8 그대로)
[PASS] 복구
[PASS] suppressUntilNextRunStart=0 → 813x2 원래 동작으로 되돌린다
── ⑩ 🔴 D-42 — RunEnded 뒤 결과창~다음 런 시작까지 모달 0
[PASS] 813p WLRunSettings.Enabled(StartRun 전제) — 실측 True
초기 Phase=Idle IsRunning=False
[PASS] Idle(런 밖 · 시작 전) → 차단 안 함 = 원본 모달 살아 있음
[PASS] 훅 enabled=True
StartRun → Phase=Zones IsRunning=True
[PASS] 런 중 → 차단(813x2 그대로)
[PASS] 런 중 훅 enabled=False(원본 OnDisable 이 구독을 끊는다)
EndRun → Phase=Ended IsRunning=False
[PASS] 🔴 런 종료 뒤(결과창)에도 차단 유지 = D-42 해소
[PASS] 🔴 결과창에서 훅 enabled=False 유지(모달 0)
가짜 오류 1건 → captured=1 suppressed=1 written=1
[PASS] 🔴 결과창 예외가 「모달차단」으로 기록된다(모달 0)
[PASS] 훅은 우리가 내려둔 상태
로그 파일 = E:\NerdNavis\WL_wt\ui\Screenshots_WL/WL813x2\errors_190120.txt
[PASS] 연장 off → 결과창에서 차단 해제(= Q9 가 본 D-42 상태 재현)
[PASS] 연장 off 면 결과창에서 훅 enabled=True(원본 모달 부활)
[PASS] 연장 on 으로 되돌리면 다시 내려간다
다음 StartRun → Phase=Zones
[PASS] Phase=Zones(Ended 를 벗어났다 = 연장 래치 해제)
[PASS] 연장분 없이도 런 중이라 차단 = 복원 뒤 곧바로 다시 off
[PASS] Phase=Idle(로비/타이틀) → 차단 해제 = 원본 모달 복귀
[PASS] 훅 enabled=True 복원 · HookDisabledByUs=False
── ⑪ 정리
임시 오브젝트 제거 · 구독 해제 · 디스크 SO 무변경(값은 메모리 인스턴스만 손댔다)
[PASS] 픽업 노드 0
[PASS] 정리 완료
RESULT PASS — pass=67 fail=0