101 lines
7.1 KiB
Plaintext
101 lines
7.1 KiB
Plaintext
|
|
# 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
|