최종 갱신 (KST)

← 일감 목록
T-022

적성이 변하면 클라에 푸시

진우 Closed 우선순위 보통 목표 미정 · 보관됨

배경

적성 값의 소유자를 서버 런타임으로 확정했다 (2026-08-10 · 캐릭터 7.1). 클라이언트는 CharacterTable을 직접 읽지 않고 CharacterInfo.Aptitudes로 받은 값만 쓴다.

전달 경로는 로그인 스냅샷까지만 만들어져 있다 — User.SendCharacters()가 S_CharacterListResponse에 실어 한 번 보낸다. 세션 도중 적성이 바뀌면 알릴 방법이 없다.

지금은 적성을 바꾸는 주체가 없어서 문제가 드러나지 않는다(서버가 테이블값을 그대로 내려준다). 장비(T-002)가 붙으면 그때 실제로 필요해진다.

⚠️ 사유 소멸 (2026-09-17). T-002에서 장비는 적성을 바꾸지 않는다(속도 가산만)로 확정됐다. 적성 변경은 이미 적성 포인트(S_AptitudeUpResponse)·개체 싱크(S_CharacterSyncResponse)로 나간다. 새로 적성을 바꾸는 주체가 생기지 않으면 이 일감은 폐기 대상이다 — 사용자 결정으로 닫는다.

✅ 클라는 이미 준비돼 있다 (2026-08-10). PlayerDataModel.GetAptitude가 Aptitudes에서 읽고, 작업슬롯 배치 화면이 적성 0을 잠금 표시한다. 푸시가 붙으면 클라는 같은 필드를 다시 받기만 하면 된다 — 화면 코드는 안 바뀐다.

왜 지금 만들지 않는가

바꾸는 주체가 없는 상태에서 푸시 경로를 먼저 만들면 호출부 없는 코드가 된다. 어떤 단위로 보낼지(캐릭터 1장 / 전체 목록)도 장비 장착 API의 모양에 달려 있다.

할 일

  • [ ] 적성 변경 푸시 패킷 — S_CharacterAptitudeResponse(가칭). 캐릭터 1장 단위가 유력하다
  • [ ] 장비 장착·해제가 적성을 바꾸는 경우 그 경로에서 푸시
  • [ ] 배치 중인 슬롯이 있으면 정산 → 적성 변경 → 속도 재확정 순서를 지킨다 (RefreshWorkStationSpeed와 같은 문제다 — 순서가 뒤집히면 소급 지급이 된다)

완료 조건

세션 도중 적성이 바뀌면 클라가 재접속 없이 갱신된 값을 받고, 그 시점에 배치돼 있던 슬롯의 속도가 소급 없이 다시 확정된다.

막고 있는 것 / 선행 일감

  • T-002 장비 시스템 — 적성을 바꾸는 첫 주체다. 이게 없으면 푸시할 일이 없다
  • ⚠️ 장비가 적성을 올리는지 속도만 올리는지는 아직 확정이 아니다. 현재 확정은 "장비 = 속도 가산"(작업슬롯 3.4)이다. 속도만 올리는 쪽으로 굳으면 이 일감은 닫아도 된다 — 적성이 영영 안 변하기 때문이다. 특히 적성 0 → 1 승격을 허용하는가는 "배치 불가"라는 축을 뚫는 문제라 함께 결정한다 (캐릭터 5장 #1)

관련 커밋

  • 없음 — 폐기 (2026-09-25 · 사용자 결정). 장비는 적성을 바꾸지 않는다(T-002 확정)는 것을 사용자가 확인했다. 적성 변경은 기존 S_AptitudeUpResponse·S_CharacterSyncResponse로 이미 나간다. 새로 적성을 바꾸는 주체가 생기면 새 번호로 등록한다

참고

  • Server/MikaProtocol/PacketInfo.cs — CharacterInfo.Aptitudes · AptitudeInfo
  • Server/WSGameServer/User/Character/Character.cs — GetAptitude · Industries
  • Server/WSGameServer/User/User.Character.cs — SendCharacters
  • GitHub 이슈 #13 (클라 요청 원본)