# WL813o Probe 2026-09-09 13:01:57 (edit mode · Play 0 · 로그인 0) playMode=False ── ⓪ 에셋 (WLZonePickupSettings · NEW) · 813p 계약 [PASS] Resources.Load("WL/WLZonePickupSettings") [PASS] Enabled = True 값: cardCount=3 timeout=10s(unscaled=True) first=True includeFinalZone=False guideWait=True(max 8s) deferRevive=True pauseTimer=True holdWorld=False stopActors=True openDelay=0.35s [PASS] 존4(마지막 존) 기본 제외 — 보스 흐름 방해 금지(발주서 §1-1) [PASS] 세계 정지 기본 off = 타이머만 정지(발주서 §1-3 권장) [PASS] 타임아웃 10 s(발주서 §1-2) — 실측 10 [PASS] 3장(기획안 F-3) — 실측 3 [PASS] 남은 초·카드 글자 아웃라인(813y ApplyEdge) outlineWidth=0.26 [PASS] 813p WLRunSettings 존재(존 수·런 길이의 주인 · UI 는 수치를 갖지 않는다) 813p 값(읽기만): runSeconds=240 존 4개 ── ① 🔴 원본 SelectSkillUI 노드 실측 — 발주서 §1-1 전제와 다르다 [PASS] LoadPrefabContents(Assets/Res_Addr/MainUI/NewGameUI.prefab) NewGameUI.prefab 안: SelectSkillUI=0 SelectSkillCard=0 GameUI=0 UILabel=0 UISprite=0 TextMeshProUGUI=712 [PASS] 원본 SelectSkillUI 노드 0개 = 열 대상이 없다 [PASS] GameUI 컴포넌트 0개 · GameUI.Ins=null → MyActor.cs:162 의 자동전투 정지 배선은 작동하지 않는다 [PASS] 실제 인게임 UI 에 NGUI 위젯 0개(원본 카드 UI 는 NGUI) · TMP 는 712개 = uGUI 트리 → 그래서 813o 는 ① 원본 노드가 있으면 그대로 열고, ② 없으면 같은 원본 데이터·효과 경로를 쓰는 런타임 uGUI 패널로 간다. ── ② 원본 데이터·효과 경로 — table_selectskill / InGameInfo / ActorInfo [PASS] 테이블 원본 TextAsset Assets/ResWork/Table/table_selectskill.txt [PASS] 원본 table_selectskill.Awake 확보 [PASS] table_selectskill.Ins 설정(원본 Awake 경로) [PASS] InGameInfo.Ins 설정 [PASS] ActorInfo.Ins 설정(All_Stop 대상 0 = 무해) 테이블 행 수 = 58 [PASS] 카드 3장을 뽑기에 충분한 행 수 [PASS] 원본 뽑기 Get_DataList(3) = 3행(셔플·보유 제외·PreSkill 규칙 그대로) 뽑기 예시 0: id=102 "체력(소)" pet=False 뽑기 예시 1: id=12 "서리 요정" pet=False 뽑기 예시 2: id=15 "바람의 길" pet=False ── ③ 노드 조립 — WL_ZonePickup(런타임 생성 · HideFlags.DontSave) · 구독 3종 Subscribe : 구독=True (ZoneCleared/RunStarted/RunEnded) [PASS] ZoneCleared 구독 +1 — 실측 1 Subscribe(중복): 구독 변화 없음(True) [PASS] 2회 호출해도 +1(중복 구독 0) [PASS] IngameUIs/WL_HUD 경로 실측(813y/813q 와 같은 부모) [PASS] WL_HUD 가 SafeAreaFitter 아래 = Safe Area 안 Bind : 연결 IngameUIs/WL_HUD · box(1742.22, 1280.00) 카드=3 unitsPerPx=1.7778 [PASS] WL_ZonePickup 노드 생성 배치 : box(1742.22, 1280.00) 카드=3 unitsPerPx=1.7778 [PASS] 조립 직후에는 닫혀 있다 ── ④ 가짜 ZoneCleared(존 0) → 카드 3장 열림 런 시작: phase=Zones zoneCount=4 [PASS] ZoneCleared 수신 1 — 실측 1 [PASS] 예약 상태 = Pending [PASS] 예약 존 = 0 Tick(지연 전): 지연 대기 [PASS] openDelaySeconds 전에는 열리지 않는다 Tick(지연 후): 열림 — 런타임 패널 [PASS] 카드 열림 — phase=Open open=True zone=0 picks=0 cards=3 sec=10 timerPaused=True worldHeld=False actorsStopped=True orig=False bound=True [PASS] 원본 노드가 없어 런타임 패널 경로(폴백)로 열렸다 [PASS] 카드 3장 — 실측 3 카드 0: id=12 "서리 요정" 카드 1: id=17 "히키코모리 요정" 카드 2: id=106 "치명타 확률(소)" [PASS] 3장 전부 실제 스킬 ID [PASS] 중복 없음 [PASS] 카드 이름이 테이블 값으로 채워졌다 [PASS] 제목 = "스킬 선택" [PASS] 남은 초 첫 표시 = "10초 후 자동 선택" [PASS] 원본 ActorInfo.All_Stop(true) 도달 = 자동전투 정지 [PASS] 런 타이머 정지 요청 on(RunDirector.PauseTimer) — 세계 정지 없음 [PASS] timeScale 무접촉 = 1.00(holdWorld off) ── ⑤ 타임아웃 → 첫 카드 자동 선택 · 닫힘 · 정지 해제 6.8s 남음 표시 = "7초 후 자동 선택" (sec=7) [PASS] 올림 표기 6.8 → 7 — 실측 7 1.5s 남음 표시 = "2초 후 자동 선택" (경고색 구간) [PASS] 올림 표기 1.5 → 2 — 실측 2 [PASS] 표시 쓰기 발생 2회 Tick(타임아웃): 선택 0 id=12 (자동) [PASS] 타임아웃 1회 — 실측 1 [PASS] 선택 1회 — 실측 1 [PASS] 닫힘 — phase=Idle open=False zone=-1 picks=1 cards=3 sec=-2147483648 timerPaused=False worldHeld=False actorsStopped=False orig=False bound=True [PASS] 원본 InGameInfo.Add_SelectSkill(12) 도달 = 첫 카드가 적용됐다(효과는 원본 로직 그대로) [PASS] 원본 All_Stop(false) 도달 = 자동전투 복귀 [PASS] 런 타이머 정지 해제 [PASS] 이번 런의 픽업 수 = 1 ── ⑥ 카드 버튼 클릭 경로(자동이 아닌 사용자 선택) [PASS] 존 1 클리어로 다시 열림 클릭 카드 1: id=13 "바람 요정" ClickCard(1): 클릭 1 [PASS] 클릭 즉시 닫힘 [PASS] 타임아웃 아님(클릭 선택) — 실측 0 [PASS] 클릭한 카드의 효과가 원본 경로로 적용됐다 ── ⑦ 마지막 존(존4) 제외 · SO 로 포함 전환 존 수 = 4 (마지막 인덱스 3) [PASS] 마지막 존은 카드를 띄우지 않는다 — 마지막 존 제외 [PASS] 건너뜀 1회 — 실측 1 [PASS] includeFinalZone=1 이면 마지막 존도 예약된다(코드 변경 0) ── ⑧ 813i/813z 부활 팝업과 동시 — 부활 우선(카드는 미룬다) [PASS] 프리팹에서 ReviveDialog 발견 — 1개 ReviveDialog.Initialize : initialized · 폴백 팝업 box size(1351.11, 675.56) unitsPerPx=1.7778 ReviveDialog.ShowNowOnce: 폴백 팝업 표시 msg="존 시작점에서 부활합니다. 무료" [PASS] 부활 팝업 Busy = True [PASS] 부활 팝업이 떠 있는 동안 카드는 열리지 않는다 [PASS] 미룸 카운트 1 [PASS] 픽업이 timeScale 을 건드리지 않았다 [PASS] 부활 팝업 닫힘 — Busy=False [PASS] 부활이 닫힌 뒤 카드가 뜬다 [PASS] 정리 후 닫힘 · 타이머 정지 해제 ── ⑨ 813w RunGuide 이동 중이면 도착 뒤에 연다 RunGuide.Active=True State=Off BeginZone(1) 후 RunGuide.State=Travel (존 1 유도 시작(probe-813o) → (147.0, 2.6, 30.0) [SO 폴백]) [PASS] 이동 중에는 열리지 않는다 [PASS] 가이드 대기 1회 [PASS] 도착(가이드 종료) 뒤 열린다 ── ⑩ 런 타이머 정지(813p RunDirector.PauseTimer · 세계 정지 0) [PASS] 시작 상태 = 정지 아님 [PASS] PauseTimer(true) → ExternalTimerPause=True [PASS] timeScale 무접촉 = 1.00 [PASS] 틱을 돌려도 정지가 유지된다(PollPause 가 외부 정지도 같은 층으로 본다) [PASS] PauseTimer(false) → 해제 [PASS] 열림=정지 · 닫힘=해제 (짝 맞음 · PauseCalls=2) 정지 전 경과 = 10.00s [PASS] 정지 시작 시각이 잡혔다(s_pauseStart=129.45) [PASS] 프로브가 정지 창을 5초로 벌렸다 정지 중 5초 경과 후 = 10.00s (정지가 들으면 그대로 10.00) [PASS] 🔴 정지 중 5초가 흘러도 런 경과 불변 = 10.00s [PASS] 정지 누적 = 5.00s 로 집계됐다 [PASS] 해제 뒤 5초는 정상적으로 흐른다 = 15.00s (대조군) ── ⑪ GC — 같은 초 100틱 = 표시 쓰기 0회 [PASS] GC 측정용으로 열림 같은 초 100틱: 표시 쓰기 0회 · ΔGetTotalMemory=0 B · gc0 287→287 [PASS] 표시 쓰기 0회(값이 안 바뀌면 SetText 를 아예 안 부른다) [PASS] ΔGetTotalMemory = 0 B 대조군 16 MB: Δ=16781312 B (계기 감도 확인) [PASS] 대조군은 잡힌다 = 「0」이 진짜 0 ── ⑫ C8 — enabled_ = 0 이면 아무것도 하지 않는다 [PASS] Enabled=False Tick: off [PASS] ZoneCleared 를 받아도 예약 0 — off [PASS] 표시 0 [PASS] 런 타이머 정지 0 Bind(off): off — 조립 생략 [PASS] 813p WLRunSettings.Enabled 불변 = True [PASS] 복구 후 Enabled=True ── ⑬ 정리 — 구독 해제 · 노드 파괴 · 프리팹 저장 0 Teardown : 정리 완료 [PASS] ZoneCleared 구독자 0 — 실측 0 [PASS] 타이머 정지 해제 확인 [PASS] 프리팹 UnloadPrefabContents(저장 0) · 대역 오브젝트 파괴 RESULT PASS (pass=92 fail=0)