배경
적성 값의 소유자를 서버 런타임으로 확정했다 (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·AptitudeInfoServer/WSGameServer/User/Character/Character.cs—GetAptitude·IndustriesServer/WSGameServer/User/User.Character.cs—SendCharacters- GitHub 이슈 #13 (클라 요청 원본)