배경
산업 레벨을 실제로 굴리려면
엑셀·DB·패킷·서버 로직이 전부 한 칸씩 늘어난다.
슬롯 배치가 (산업, 캐릭터)에서 (산업, 레벨, 캐릭터)가 되고,
드롭 롤의 대상이 시트 전체가 아니라 (산업, 레벨)로 걸러진 행 목록이 된다.
해금 조건이 정해지기 전에는 시작할 수 없다 →
✅ 2026-08-01에 조건이 확정됐다 — 적성 N + 계정 레벨 M (AND).
컬럼은 RequiredAptitude + RequiredAccountLevel 정수 2개로 끝난다.
범용 조건 시스템(ConditionType enum 등)을 만들지 않는다.
✅ 2026-08-01에 레벨 개수(5개)와 판정 비용 구조도 확정됐다.
판정 1회 비용이 전역 상수에서 (산업, 레벨)의 필요 점수가 된다 —
Lv1 30,000에서 레벨당 ×3. 점수는 작업속도로 쌓인다(적성 1 = 1000점/초).
⚠️ 남은 선행 조건: 요구치 값(N·M) — 엑셀에 임시값이 들어가 있다 (T-016).
🔴 지금 서버가 잘못 동작하고 있다 (2026-08-02 확인)
엑셀만 먼저 레벨별로 갈라져서, 레벨을 모르는 옛 코드가 새 데이터를 읽고 있다. 이건 "아직 안 됨"이 아니라 "틀리게 됨" 이다.
| 증상 | 원인 |
|---|---|
| 어떤 레벨을 돌리든 Lv1~Lv5 아이템이 전부 섞여 나온다 | DropTableCatalog.LoadAll이 <산업>BasicTable.All 38행을 통째로 등록한다. IndustryLevel 컬럼을 읽지 않는다 |
| 희귀도 분포가 의도와 다르다 | 5개 레벨의 가중치가 한 통에 합산돼 총합이 부풀었다 |
| 판정 주기가 레벨과 무관하게 30초 고정 | WorkStationSlot.JudgeCost가 상수 30_000_000 |
WorkStationSlot에 레벨 필드가 없어 필터를 걸 축 자체가 없다. 그래서 드롭만 따로 고칠 수 없고, 아래 "패킷·서버" 항목이 함께 가야 한다.- 구현 전까지 채취 결과는 밸런스 참고값이 아니다. T-008(희귀도 분포)·T-009(회당 산출)를 지금 데이터로 검증하면 안 된다.
최소 임시 조치를 원하면 드롭 롤을 Lv1으로 고정 필터하는 방법이 있다 (현재 해금은 Lv1뿐이라 기획과도 맞는다). 다만
JudgeCost는 그대로 틀린 채 남는다.
할 일
엑셀 — ✅ 완료 (2026-08-01)
- [x]
IndustryLevelTable시트 신설 (GameDesign/Excel/Industry.xlsx· 25행) —IndustryLevelTID(키) ·IndustryType·Level·Name·RequiredScore·RequiredAptitude(0~10) ·RequiredAccountLevel·Description - [x]
<산업>BasicTable5종에IndustryLevel컬럼 추가 + 레벨별 행 확장 (산업당 38행 · 총 190행) - [x]
IndustryLevel의Ref검사 방식 →IndustryLevelTable.Level로 그대로 걸린다.ReferenceValidator는 참조 대상이 키가 아니어도 값 집합을 만들어 검사한다 - [x] 신규 아이템 120종 추가 (Lv2~5 × 희귀도 6 × 산업 5) —
ItemTable총 150행 (가챠 전용 6종을 더해 시트는 156행) - [x]
generate-tables.ps1실행 —.bytes·DataLog·Unity 미러까지 생성 완료
2026-08-08 엑셀 재편 (레벨 30~40 확장 대비).
Drop.xlsx→ 산업별 5개 파일(파일 안은 레벨별 시트),Industry.xlsx는 산업별 시트로 분리 — 제너레이터가 병합하므로 테이블명· 생성물·서버 코드 영향 없음.DropTID는산업×100000+레벨×100+순번으로 재채번 (산업 자리 =ItemTypeenum 값 — 농사 1 · 낚시 2 …). DropTID는 DB 미저장이라 안전하다.
DB
- [ ]
t_user_workstation_slot에industry_level컬럼 추가 - [ ]
t_user_industry_level신설 — 유저 × 산업 → 최대 해금 레벨 - [ ] 기존 슬롯 행의 마이그레이션 (레벨 1로 채운다)
패킷 · 서버
- [ ]
WorkStationSlotInfo에IndustryLevel추가 (Server/MikaProtocol에서만 수정) - [ ] 슬롯 배치 요청에 레벨 추가 · 서버가 해금 여부를 검증한다
- [ ] 적성 0 캐릭터 배치를 거절하는 응답을 함께 넣는다 (
Character.CanWork는 이미 있다) - [ ]
WorkStationSlot.JudgeCost상수를(산업, 레벨)조회로 바꾼다 →IndustryLevelTable.RequiredScore × 1000(엑셀은 초 기준, 서버는 밀리초 기준) - [ ]
WorkStationSlotInfo.JudgeCostUnits를 그 값으로 채운다 (클라 카운트다운이 이 값을 쓴다) - [ ] 🔴 드롭 롤을
(산업, 레벨)인덱스 기준으로 변경 — 지금 틀리게 동작 중이다(위 참조).DropTableCatalog의 키가ItemType하나라(ItemType, Level)로 늘려야 한다 - [ ] 레벨 변경 시 변경 직전에 정산 — 산업 변경과 같은 경로를 탄다
- [ ] 해금 처리 — 보유 캐릭터의 산업별 최고 적성과 계정 레벨을 비교해 판정,
t_user_industry_level갱신 - [ ] 판정 시점 결정 — 캐릭터 획득 시 · 계정 레벨업 시 · 배치 UI를 열 때 (해금을 영구로 두면 위 세 시점에 갱신만 하면 된다)
- [ ] 테스트 — 해금하지 않은 레벨 배치 거절 · 레벨 변경 시 소급 없음 · 캐릭터를 잃어도 이미 열린 레벨은 유지(영구 채택 시)
완료 조건
해금하지 않은 레벨로는 배치가 거절되고, 레벨을 바꾸면 그 시점 이전 구간이 이전 레벨의 필요 점수·드롭 테이블로 정산되며, 레벨마다 판정 주기와 나오는 아이템이 실제로 다른 상태.
막고 있는 것 / 선행 일감
T-016 해금 조건✅ 풀렸다레벨 개수✅ 5개로 확정엑셀 작업✅ 완료 (2026-08-01)- T-016의 남은 것 — 요구치
N·M값. 계정 레벨 곡선(미정) 이 선행. ⚠️ 값이 임시라 해금 로직을 구현해도 밸런스 검증은 못 한다 - T-005(드롭 테이블)와 같은 시트를 건드린다. 순서가 겹치면 충돌한다
- ⚠️ 이 일감은 T-008·T-009를 막고 있다. 드롭이 레벨별로 갈리기 전에는 희귀도 분포도 회당 산출도 실측할 수 없다 (위 "지금 잘못 동작하고 있다")
관련 커밋
- 없음 (엑셀·생성물 커밋 예정)