Project_WL/AgentScripts/WL813w5_PROBE.txt

101 lines
7.1 KiB
Plaintext
Raw Permalink 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.

# WL813w5 Probe 2026-09-09 17:43:25 (edit mode · Play 0 · 로그인 0)
playMode=False
── ⓪ 준비
[PASS] WLBossArenaSettings 로드 · Active=True
[PASS] BossArena.Subscribed(CombatEvents)
[PASS] 🔴 BossArena.RunSubscribed(RunEvents.RunEnded) — 813w5 신규 구독
── ① 에셋 (Assets/WL/Combat/Settings/Resources/WL/WLBossArenaSettings.asset · 값 전부 SO = C45)
신규 8필드: parkBossOnRunEnd=True nextRunBossHoldSeconds=30 nextRunBossHoldRewarpMargin=1.5 nextRunWarpBeforeHeal=True nextRunClearsPlayerTarget=True leashOutsideRunDistanceOnly=True gateMinSeconds=60 gateMinAllowsZonesCleared=True
[PASS] parkBossOnRunEnd=1 (런 종료 순간 고정)
[PASS] nextRunBossHoldSeconds=30 (발주서 §1-2)
[PASS] gateMinSeconds=60 (발주서 §1-2)
[PASS] leashOutsideRunDistanceOnly=1 (런 밖 거리 판정만)
[PASS] nextRunWarpBeforeHeal=1 (워프 → 만피 순서)
런 축 대조: runSeconds=270 openGateAtSec=170 zoneClearKills=[18,20]
[PASS] gateMinSeconds(60) < openGateAtSec(170) — 시간제한 개방은 막지 않는다
[PASS] gateMinSeconds < runSeconds(270) — 런을 막지 않는다
[PASS] nextRunBossHoldSeconds < runSeconds
[PASS] 0 < nextRunBossHoldRewarpMargin(1.5) < arenaRadius(20)
── ② 🔴 D-39 원인 ① 실측 — 「되돌림이 자기 호출 안에서 되돌려진다」 (원본 파일 직접 읽기)
MobActor.cs:138 `On_Regen` · :142 그 안의 `Check_Battle();`
MobActor.cs:343 `Check_Battle` · :347 `Get_EnemyActors(… f_BaseChaseRange)`
MobActor.cs:324 🔴 `Change_MobStatus(Battle)` → **`FindNextTarget(10000f)`** = 사실상 무한 반경 재타깃
MobActor.cs:352 `Check_Patrol`(OriginalPos 기준 f_BaseChaseRange 밖이면 귀환) — 아레나 리쉬보다 먼저 걸린다
[PASS] 🔴 원본 `On_Regen` 은 **그 안에서 `Check_Battle()` 을 부른다** → 813w3 의 `Del_Target` → `On_Regen` → `Set_Warp` 순서에서는
재아그로가 **워프 전(= 런이 끝난 자리 · PC 옆)** 에서 일어나고, 워프 뒤에도 MobStatus=Battle · m_Target=PC 가 남는다.
[PASS] `FindNextTarget(10000f)` 존재 — 「추적 범위(20 m)」와 무관하게 맵 어디의 PC 든 잡는다
원본 정지 API 접근성(발주서 §1-2 「StopMove_Imm 실측 · 없으면 NavMeshAgent」):
Actor.cs:2146 `protected void StopMove_Imm` · Actor.cs:53 `protected bool IsStop`
[PASS] 🔴 `StopMove_Imm` 은 **protected** — WL 코드에서 못 부른다(PCActor.WL_StopNavMove 는 PC 전용)
[PASS] 대안 = Actor.cs:900 `public virtual NavMeshAgent Get_Agent()` 로 같은 본체 재현
[PASS] 공개 API 실측 — Actor.cs:957 `Del_Target(bool)` · Actor.cs:2245 `Change_MobStatus(eMobStatus)`
원인 ③ — RunDirector.cs:262 `NoteBossSpawned` 가 보스 Spawned 한 건에 게이트를 연다(AlreadySpawned)
[PASS] RunDirector.cs:374 `OpenBossGate` — 813w5 가드 2줄이 들어간 자리
── ③ 게이트 조기 개방 방지 진리표 (gateMinSeconds=60 · D-39 t≈19.6 개방)
[PASS] 런이 한 번도 시작 안 됨(StartCount=0) → 차단 0 (C8 · 813d 그대로)
StartCount=1 IsRunning=True Elapsed=0.0s
[PASS] 🔴 reason=AlreadySpawned · 런 시작 직후(Elapsed≈0) → **차단**(D-39 의 그 경로)
[PASS] GateMinBlocked 1 증가 · LastGateHeldElapsed=0.0
[PASS] reason=ZonesCleared → 통과(gateMinAllowsZonesCleared=1 · 런 축의 진짜 존 전멸은 막지 않는다)
[PASS] reason=TimeLimit → 통과(openGateAtSec 170)
[PASS] reason=External → 통과(QA·치트 버튼)
[PASS] 🔴 reason=None(= BossArena 자체 `ZonesCleared` 판정) → **차단** — 지난 런에서 굳은 alive=0 으로 열리는 길을 막는다
[PASS] 런 밖(EndRun 뒤) → 차단 0 (런 안에서만 시간을 잰다)
── ④ 보스 홀드 (nextRunBossHoldSeconds=30 · 가짜 시각)
[PASS] 초기 상태 → 홀드 아님
[PASS] arm 직후(t=1000) → 홀드 · BossHoldUntil=1030.0
[PASS] t=1029(29 s 경과) → **아직 홀드**
[PASS] t=1031(31 s 경과) → **해제**
[PASS] 재무장(다음 런에서 다시 30 s) → 홀드 · until=1130.0
[PASS] ClearBossHold() → 즉시 해제(QA·프로브)
[PASS] C8 nextRunBossHoldSeconds=0 → 홀드 0(813w3 그대로)
── ⑤ RunEnded 구독 (813w5 신규 · 「런 종료 시 보스 상태 확정」)
[PASS] RunEvents.RunEnded 구독 중
[PASS] 🔴 진짜 RunDirector.EndRun(Win) → BossArena 가 RunEnded 를 받았다(2회 · LastRunOutcome=Win)
[PASS] 보스 없음 → ParkCount 불변(0) · 예외 0
[PASS] ParkBoss(보스 null) → false(안전)
[PASS] 가짜 보스 IsDead()=true(비활성)
[PASS] ParkBoss(죽은 보스) → false · ParkCount 불변(True)
[PASS] RunEnded(Timeout · 죽은 보스) → 통지 1 · 고정 0 · 예외 0
[PASS] C8 parkBossOnRunEnd=0 → RunEnded 통지 0(813w3 그대로)
── ⑥ 런 밖 리쉬 = 거리 판정만 유지 (813w3 은 판정 자체를 껐다 → D-39 ②)
아레나 중심=(139.0, 0.8, -20.0) 반경=20 leashMargin=2 → 되돌림 경계 22m
[PASS] RunActive=false 강제(결과창·다음 런 대기 상황)
[PASS] 보스 없음 → LeashTick 이 보스 가드에서 먼저 끊긴다(카운터 불변)
[PASS] 판정식 = XZ 거리 > 22m → 회복 없이 중심 워프(ResetBossNoHeal · LeashHealCount 불변)
[PASS] 이번 틱 리셋 0(보스 없음) · 누적 0
[PASS] C8 leashOutsideRunDistanceOnly=0 → 런 밖 판정 0(813w3 그대로)
── ⑦ 실 경로 (진짜 RunDirector.StartRun/Restart + BossArena.NoteKill · 813p 계약 그대로)
[PASS] HoldSpawn 전에는 무장 0(NoteSpawn 이 무시된다) — 813d 계약
런 1 시작 — StartCount=1 Phase=Zones Elapsed=0.0
[PASS] 🔴 OpenBossGate(AlreadySpawned) @Elapsed≈0 → **열리지 않는다**(D-39 수리)
[PASS] GateMinBlocked +1 = 1
[PASS] OpenBossGate(External · QA 버튼) → 열린다 · reason=External
[다음 런] Restart() — RestartCount=1 StartCount=2 Phase=Zones GateOpened=False
[PASS] 두 번째 런에서 게이트가 다시 잠긴다
[PASS] 🔴 두 번째 런에서도 60 s 전 AlreadySpawned 개방 **차단**(Q8 R1n·R3n 의 t≈19.6 개방이 여기서 막힌다)
[PASS] 같은 시점에도 **진짜 존 전멸**은 연다(reason=ZonesCleared)
── ⑧ GC (틱 경로 0 B)
[PASS] GateHeldByMinSeconds ×100 = 0 B
[PASS] BossHeld ×100 = 0 B (held=True)
[PASS] 런 밖 LeashTick ×100 = 0 B
── ⑨ C8 롤백 (임시 SO · 실에셋 읽기만 · 끄면 813w3 동작 그대로)
[PASS] gateMinSeconds=0 → 조기 개방 차단 0(813p/813w3 그대로)
[PASS] gateMinAllowsZonesCleared=0 → 존 전멸도 60 s 전에는 막는다(스위치 방향 확인)
[PASS] WLBossArenaSettings.RuntimeDisabled=1 → 게이트 차단 0(Active=false)
[PASS] RuntimeDisabled=1 → RunEnded 통지 0(고정 0)
813w5 C8 스위치 정리: parkBossOnRunEnd=True nextRunBossHoldSeconds=30 nextRunWarpBeforeHeal=True nextRunClearsPlayerTarget=True leashOutsideRunDistanceOnly=True gateMinSeconds=60
[PASS] 6개를 전부 0 으로 두면 813w3 판(ResetGate 1회 리셋 · 런 밖 리쉬 정지 · 게이트 시간 제한 없음)으로 정확히 돌아간다
RESULT PASS