배경
서버에 계정 레벨과 특성 트리가 섰다(2026-09-19, T-021). 캐릭터가 얻은 경험치가 그대로 계정 경험치가 되고, 5레벨마다 특성 포인트 1점을 준다. 포인트로 특성 노드를 찍으면 산업 레벨(Lv2~5) 이 열리거나 산업별 작업속도(+10%씩 5단) 가 붙는다.
클라에는 아직 이것을 보여 주거나 누를 자리가 없다 — 지금은 상위 산업 레벨을 열 방법이 없다.
할 일
- [x] 계정 레벨 표시 (2026-09-20) —
S_AccountLevelResponse { Level, Exp, TraitPoint }수신(로그인 직후 · 경험치 오를 때 · 포인트 쓸 때). 필요 경험치는AccountLevelTable.RequiredExp - [x] 특성 트리 화면 (2026-09-20) —
UserTraitTable(노드 · 비용 · 효과) +UnlockTable(같은 TID 행의 계정 레벨 · 선행)로 그린다. 찍었는지는 열린 해금 목록(S_UnlockListResponse·S_UnlockResponse)- 요청
C_UserTraitLearnRequest { UserTraitTID }→S_UserTraitLearnResponse { Result, UserTraitTID } - 결과 코드:
NotEnoughTraitPoint·UnlockLocked(계정 레벨·선행 미달) ·AlreadyUnlocked·InvalidUserTraitTID - 잠긴 노드도 조건과 함께 보인다(해금 규칙 — 숨기지 않는다)
- 요청
- [x] 작업슬롯 세팅 화면의 산업 레벨 선택 칸 (2026-09-20) — 열린 레벨만 고를 수 있게. 열렸는지 =
IndustryLevelTable.UnlockTID가 열린 해금 목록에 있는가(Lv1은0= 항상) - [x] ⏳ 실측 (사용자 확인 2026-09-21) — 속도 특성을 찍으면 슬롯 속도가
S_WorkStationSlotSyncResponse로 바뀌어 온다 — 카운트다운이 따라가는지 확인 - [x] 결과 문구 —
ResultMessages에NotEnoughTraitPoint·TraitOnlyUnlock·InvalidUserTraitTID추가 (IndustryLevelLocked문구도 다듬었다 — 산업 자체를 가리키는 것처럼 읽혔다)
완료 조건
✅ 2026-09-21 사용자 실측 — "기능들은 다 정상 작동한다". 같은 날 UI 한 곳을 다듬었다: 계정 경험치가 가로 띠 → 닉 아이콘을 두르는 원형 진행도로 바뀌었다 (43px을 위아래로 나누니 재화 줄이 눌렸다 — 근거는
State 규칙.md). ⚠️ 검증은 트리에서 직접 찍어서 한다. 치트 「해금」으로 특성 노드를 열면 포인트가 안 빠진다 (이슈 #31 — 2026-09-22 종료, 포인트 미차감은 치트의 정의대로 유지).
치트(GiveAccountExp = 9)로 계정 레벨을 올린 뒤 특성 트리에서 "낚시 Lv2"를 찍으면 포인트가 1 줄고,
작업슬롯에서 낚시 Lv2를 골라 배치할 수 있다. 속도 노드를 찍으면 그 산업 슬롯의 주기가 짧아진다.
막고 있는 것 / 선행 일감
- 없음 — 서버·패킷·데이터가 섰다 (T-021)
- 창고 특성 탭(T-043)과 같은 화면으로 정했다 (2026-09-20) —
#Storage Canvas의 자식Trait Presenter. 특성 탭에서만 켜지고 격자를 쓰지 않는다
관련 커밋
da7aa66코드 — 수신 층 · 특성 화면 · 산업 레벨 선택32af50a씬 — Trait Presenter · 상태 패널 · Industry Level Panel3be0d6b문서e89e3dd·31c1e98씬·문서 — 경험치를 원형 진행도로 (2026-09-21)
참고
- 기획: 특성 2·3장 · 산업 레벨 3장 · 해금 4.2
- 치트창 「해금」 51줄 중 45줄이 특성 노드다(노드 TID = UnlockTID). 치트 경로가
TraitOnlyUnlock검사를 지나치는 건은 이슈 #31에서 2026-09-22 종료 — 서버가 속도 재정산을 해금 공통 후속(ApplyUnlock)으로 옮겨 치트 해금도 즉시 속도가 붙는다. 포인트는 치트 정의대로 차감하지 않는다 → 치트창은 지금 목록 그대로 두고, 포인트까지 볼 때는 트리에서 직접 찍는다 - ⚠️
PacketId·EResultCode번호가 바뀌었다(적성 포인트 27·28 → 32·33, 캐릭터 결과 코드 600 → 700) — 미러를 다시 받으면 이름은 그대로라 클라 코드 수정은 없다