Project_WL/AgentScripts/WL813o2_PROBE.txt

196 lines
12 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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