산업 레벨 (Industry Level)
상위:
자원채취·게임기획코어.md전제:작업슬롯최종 업데이트: 2026-10-02 · 상태: 골격·레벨 구성 확정 · 해금 = 개척 특성 레벨(특성 포인트 + 계정 레벨) · 서버 구현 완료(T-017 · T-021 · T-108) · 요구치M은 테스트값 바뀌면 갱신:게임UI·게임기획코어·기획평가·낚시·농사·벌목·특성사냥·아이템·자원채취·작업슬롯·채굴·캐릭터
산업마다 레벨이 있고, 플레이어는 슬롯에 배치할 때 산업과 레벨을 함께 고른다. 레벨이 오르면 판정 1회에 필요한 점수가 커지고, 그 대신 다른 아이템이 나온다.
경험치가 없다. 시간을 쌓아서 자동으로 오르는 값이 아니라, 조건을 채우면 다음 레벨이 해금되고 그때부터 선택지에 추가되는 구조다.
1. 확정 사항
| # | 항목 | 확정 내용 |
|---|---|---|
| 1 | 레벨의 단위 | 산업마다 따로 — 농사Lv · 벌목Lv · 낚시Lv · 채굴Lv · 사냥Lv |
| 2 | 해금 보관 | 계정 단위. 유저가 산업별로 "어디까지 열었는가"를 갖는다 |
| 3 | 레벨 선택 | 슬롯 단위. 배치할 때 해금된 레벨 중 아무거나 고른다 |
| 4 | 합산하지 않는다 | 같은 산업 슬롯을 여러 개 돌려도 레벨이 더해지지 않는다 |
| 5 | 경험치 없음 | 진행 바가 없다. 조건을 채우고 해금 행동으로 연다 |
| 6 | 레벨의 효과 | ① 판정 1회 필요 점수 ② 드롭 테이블 두 가지가 함께 바뀐다 (2.4) |
| 7 | 하향 선택 가능 | 상위 레벨을 열어도 하위 레벨을 계속 고를 수 있다 |
| 8 | 해금 조건 | 개척 특성을 올린다 — 특성 레벨 = 열린 산업 레벨. 레벨마다 특성 포인트 1 + 계정 레벨 M 이상 ✅ (2026-10-02) → 3장 |
| 9 | 해금은 영구 | 한 번 열리면 되돌아가지 않는다. 해금 후 재검사 없음 ✅ → 3.2 |
| 10 | 산업당 레벨 수 | 5개 ✅ (2026-08-01) |
| 11 | 필요 점수 곡선 | 레벨당 ×3 등비. 30,000 → 2,430,000 ✅ (2.4) |
| 12 | 필요 점수의 산업 차등 | 없다 — 5종 공통값으로 시작한다. 나중에 벌릴 수 있다 ✅ (2.5) |
| 13 | 레벨 드롭 | 자기 자원 6종. 하위 자원은 섞지 않는다. 상자는 따로 굴린다 ✅ (4.3 · 2026-10-01) |
| 14 | 요구치 M |
❌ 미정 (3.3) |
레벨은 성장 수치가 아니라 "어디서 캘지"의 선택지다. 높은 레벨이 무조건 좋은 것이 아니라 느린 대신 다른 것이 나오는 곳이어야 한다 (4장).
2. 구조
2.1 슬롯 배치가 세 칸이 된다
WorkStationSlot
├─ Industry 농사 · 벌목 · 낚시 · 채굴 · 사냥 중 1개 ← 저장
├─ IndustryLevel 해금된 레벨 중 1개 ← 저장 (신규)
└─ Character 배치된 캐릭터 1명 ← 저장
기존 작업슬롯 2장의 배치 설정에 IndustryLevel 한 칸이 붙는다.
DB에 남는 것도 이 셋뿐이며, 진행도는 여전히 저장하지 않는다(오프라인 진행 폐지).
| 층 | 무엇을 갖는가 | 어디에 |
|---|---|---|
| 계정 | 산업별 최대 해금 레벨 (예: 낚시 3, 채굴 1) | 유저 DB |
| 슬롯 | 지금 돌리고 있는 (산업, 레벨) | 유저 DB (슬롯 행) |
해금은 계정, 선택은 슬롯이다. 해금을 슬롯마다 따로 두면 슬롯을 늘릴 때마다 같은 조건을 다시 채워야 해서, 슬롯 확장이 곧 후퇴가 된다.
2.2 슬롯 조합이 이 게임의 질문이 된다
슬롯이 3개면 배치 경우의 수가 (산업 × 해금 레벨)의 조합이 된다.
슬롯 1 — 낚시 Lv3 (상위 어종을 노린다 · 느리다)
슬롯 2 — 낚시 Lv1 (기초 재료를 빠르게 쌓는다)
슬롯 3 — 채굴 Lv2 (다른 계열 재료)
같은 산업을 서로 다른 레벨로 두는 것이 유효한 선택이어야 한다. 그렇지 않으면 모든 슬롯이 최고 레벨로 수렴하고, 레벨 선택은 없는 것과 같아진다(4장).
2.3 레벨 변경 = 슬롯 변경
레벨을 바꾸는 것은 슬롯 설정 변경이므로 작업슬롯 3.1의 규칙을 그대로 탄다 — 바꾸기 직전에 정산한다.
| 시점 | 처리 |
|---|---|
| 레벨 변경 | 변경 전 구간을 이전 레벨의 필요 점수·드롭 테이블로 정산한 뒤 교체 |
| 진행 조각 | 점수 단위로 이월된다 |
⚠️ 정산을 빼먹으면 두 가지가 한꺼번에 어긋난다. 낮은 레벨로 쌓은 점수가 높은 레벨 보상으로 지급되고, 싸게 쌓은 점수가 비싼 판정에 그대로 쓰인다.
⚠️ 이월이 레벨 갈아타기의 구멍이 될 수 있다. Lv1로 점수를 싸게 모아 두고 Lv5로 바꿔 큰 판정에 쓰는 경로다. 조각의 최대치가 이전 레벨의 필요 점수 미만이라 이득이 크지는 않지만, 규칙으로 명시해 두지 않으면 나중에 논쟁이 된다. → 7장 7번
2.4 판정 비용이 상수에서 레벨별 점수가 된다 (2026-08-01 신설)
기존에 전역 상수 하나였던 "판정 1회 비용"이 (산업, 레벨)의 테이블 값이 된다.
점수 += 경과시간 × 작업속도 ← 작업속도가 곧 초당 점수
점수 >= 그 레벨의 RequiredScore → 판정 1회 성립, 점수를 그만큼 차감
| 항목 | 값 |
|---|---|
| 점수의 단위 | 적성 1 캐릭터가 1초 일하면 1000점 (= BaseWorkSpeedPermille) |
| 점수를 쌓는 것 | WorkSpeedTable.BaseWorkSpeedPermille에 보정을 적용한 현재 작업속도 |
| 판정 성립 조건 | 누적 점수 ≥ IndustryLevelTable.RequiredScore |
| 판정 1회의 산출 | 드롭 롤 1회 + 배치된 캐릭터에게 경험치 ExpPerJudge (2026-09-13) — 착용 장비의 인챈트 경험치 칸만큼 더 받는다 → 캐릭터 5.2 · 1.4 |
레벨별 필요 점수 (전 산업 공통)
| 레벨 | 필요 점수 | 적성 1 (1000점/초) | 적성 10 (4000점/초) |
|---|---|---|---|
| Lv1 | 30,000 | 30초 | 7.5초 |
| Lv2 | 90,000 | 1분 30초 | 22.5초 |
| Lv3 | 270,000 | 4분 30초 | 1분 7.5초 |
| Lv4 | 810,000 | 13분 30초 | 3분 22.5초 |
| Lv5 | 2,430,000 | 40분 30초 | 10분 7.5초 |
기준 채취주기 30초확정은 폐기되지 않았다 — Lv1의 값으로 살아남았다. 30,000점은 적성 1 캐릭터의 정확히 30초다. 전 산업 공통이라는 성질도 그대로다. 달라진 것은 "레벨을 올리면 한 판정이 길어진다" 한 가지뿐이다.
곱셈 항이 늘어나지 않는다. 속도 계산식(
적성 × (1 + Σ가산) × Π승산)은 그대로고, 나눗셈의 분자였던 상수가 테이블 조회로 바뀔 뿐이다. → 작업슬롯 3.4
⚠️ 단위 — 엑셀은 초 기준, 서버는 밀리초 기준
서버의 ProgressUnits는 밀리초 × 천분율이라 엑셀 값의 1000배다.
| 단위 | Lv1 | Lv5 | |
|---|---|---|---|
엑셀 RequiredScore |
초 × 천분율 | 30,000 | 2,430,000 |
서버 JudgeCostUnits |
밀리초 × 천분율 | 30,000,000 | 2,430,000,000 |
⚠️ 엑셀에 밀리초 값을 직접 넣으면 안 된다. Lv5의 24억 3천만은
int(21억)를 넘겨 조용히 깨진다. 엑셀은 초 기준으로 두고 서버가 로드 시 ×1000 한다. 서버 쪽 누적값은long이므로 안전하다.
2.5 필요 점수는 지금 전 산업 같은 값이다 — 나중에 벌릴 수 있다
5개 산업이 모두 위 표와 같은 값을 쓴다. 낚시 Lv2와 채굴 Lv2가 똑같이 90,000점이다.
IndustryLevelTable은 행이 (산업, 레벨)이라 산업마다 다른 값을 넣을 자리가 이미 있다.
지금은 그 자리에 같은 값을 넣어 둔 것뿐이므로, 벌리는 데 구조 변경이 필요 없다.
나중에 벌리면 이런 표현이 가능해진다.
| 산업 | 심리 정의 | 필요 점수를 | 회당 산출을 | 체감 |
|---|---|---|---|---|
| 낚시 | 확실한 도파민 | 낮게 | 적게 | 자주 조금씩 들어온다 |
| 농사 | 안정적인 수익 | 높게 | 많이 | 가끔 뭉텅이로 들어온다 |
이것이 세 번째 수치 차별화 축이다. 지금까지 회당 산출·희귀도 분포 둘뿐이었다. → 자원채취 1-1
공통값으로 시작하는 이유: 회당 산출량이 아직 미정(일감 T-009)이라 두 축을 동시에 벌리면 서로 상쇄되는지 확인할 수 없다. 또 벌리는 순간 관리 대상이 5산업 × 5레벨 = 25개 값이 되고, 희귀도 분포가 이미 5개 시트로 흩어져 있어 밸런싱할 표가 두 배가 된다. 다르게 두는 것은 의도가 있을 때만 한다 — 자원채취가 희귀도 분포에 대해 세운 규칙과 같다.
3. 해금 조건 (2026-10-02 — 개척 특성)
산업 레벨은 특성의 산업 개척으로 연다. 산업마다 개척 특성이 하나 있고, 특성 레벨이 곧 열린 산업 레벨이다. 5개 산업 Lv1은 처음부터 열려 있다(개척 기본 레벨 1).
| 항목 | 값 |
|---|---|
| 비용 | 레벨마다 특성 포인트 1 (UserTraitTable.TraitPoint) — 포인트는 계정 레벨마다 1점 |
| 조건 | 계정 레벨 ≥ M (UserTraitLevelTable.AccountLevel). 레벨은 1씩만 오르므로 앞 레벨이 자연히 선행이다. 캐릭터 적성 조건은 없다 |
| 여는 방법 | 특성 레벨업 (C_UserTraitLearnRequest) |
| 보관 | t_user_trait — 계정 단위 · 영구 · 재검사 없음 |
| 데이터 | 개척 특성 101~105(끝자리 = 산업) · 기본 Lv1 · 최대 Lv5. IndustryLevelTable.UnlockTID는 전부 0(클라 호환으로 컬럼만 남겼다) → 6.1 |
낚시 Lv3 해금 = 낚시 개척(102)을 Lv3으로 올린다 : 포인트 1 AND 계정 레벨 ≥ 15 (Lv2를 거쳐야 Lv3이 된다)
3.1 왜 적성 조건을 뺐는가
2026-08-01에는 "적성 N AND 계정 레벨 M"이었다. 계정 레벨만이면 시간이 알아서 여는 자동 해금이 된다는 것이 적성 조건을 둔 이유였는데, 해금이 유저의 행동이 되면서 그 근거가 사라졌고 단순한 쪽을 택했다.
- 잃는 것 — "적성 N 캐릭터를 뽑아야 레벨이 열린다"는 가챠 동기. 남는 가챠 동기는 적성 = 속도뿐이다.
- 사라지는 위험 — 가챠 천장이 없으면 레벨이 영영 안 열린다는 경고. 천장은 여전히 미정이지만 해금과 무관하다.
- 산업별(적성) 축이 빠져 한 산업만 파도 다른 산업의 문이 함께 열리는 성질은 그대로다 — 계정 레벨은 어느 산업에서 벌든 오른다.
3.2 해금은 영구다
한 번 열린 레벨은 되돌아가지 않는다. 배치 시 검증은 "그 산업 개척 특성 레벨 ≥ 고른 레벨" 한 번이다(User.IsIndustryLevelUnlocked).
원본은 t_user_trait 하나다.
3.3 요구치 M — 테스트값
- Lv1은 요구치가 없다. 게임 시작 시 5개 산업의 Lv1이 열려 있다.
- Lv2 · 3 · 4 · 5 = 계정 레벨 5 · 15 · 30 · 50 (테스트값). 계정 레벨 곡선 → 특성 3장
4. ⚠️ 왜 낮은 레벨을 고르는가 — 이 설계의 핵심 논점
상위 레벨이 단순히 더 좋기만 하면 레벨 선택은 죽는다. 전부 최고 레벨로 맞추면 끝이고, "고를 수 있다"는 확정(1장 #3·#7)이 의미를 잃는다.
사냥 3.1이 사냥터에 대해 이미 같은 지적을 했다 — "상위 사냥터가 단순히 더 좋기만 하면 하위 사냥터는 죽는다. 기대값을 비슷하게 두고 무엇을 모으는가로 갈라야 선택이 성립한다." 산업 레벨은 그 문제를 5개 산업 전체로 확대한 것이다.
4.1 채택 — B(상위는 느리다)를 중심에 둔다 (2026-08-01)
| 안 | 내용 | 결정 |
|---|---|---|
| A. 드롭 목록이 갈린다 | 상위 레벨에서는 다른 아이템이 나온다 | ✅ 완화형으로 채택 — 4.3 |
| B. 상위는 느리다 | 상위 레벨일수록 판정 1회 비용이 커진다 | ✅ 채택 · 중심 — 2.4 |
| C. 캐릭터 적성 요구 | 상위 레벨은 적성이 낮은 캐릭터가 돌리면 매우 느리다 | ✅ 자동으로 따라온다 — 4.4 |
B가 이 논점을 정면으로 푼다. 상위 레벨은 시간당 판정 횟수가 1/3씩 줄어들므로, 하위 레벨은 "박리다매", 상위 레벨은 "저빈도 고가치" 로 성격이 갈린다. 기대값을 비슷하게 두면 둘 다 살아남는다.
4.2 ⚠️ B는 원래 비권장이었다 — 판단이 뒤집힌 이유
이 문서는 2026-08-01 이전까지 B를 비권장했다. 근거는 두 가지였다.
| 당시 우려 | 실제 |
|---|---|
"JudgeCost는 전역 상수라 레벨이 개입하면 30초 공통 확정이 깨진다" |
안 깨진다. 30,000점 = 적성1의 30초이고, Lv1이 그 값을 그대로 갖는다. 전 산업 공통이라는 성질도 유지된다 (2.4) |
| "캐릭터 속도 계산식과 곱해지는 항이 하나 늘어난다" | 안 는다. 속도식은 손대지 않고, 나눗셈의 분자가 상수에서 테이블 값으로 바뀔 뿐이다 |
그리고 A만으로는 부족하다는 것이 그사이 분명해졌다. A는 "하위 아이템에 지속 수요가 있어야" 성립하는데, 2026-08-01에 특성이 전역으로 재작성되면서 "특성 해금 재료"라는 수요처가 통째로 없어졌다(특성 1장 #10).
| 남은 수요처 | 성격 |
|---|---|
| 즉시 판매 | 골드로 바꿀 뿐이라 상위 등급이 항상 낫다 — 하위를 살리지 못한다 |
| 캐릭터 먹이기 | 경험치 환산식이 미정. 희귀도별로 다르면 여기도 상위가 낫다 |
| 제작·납품 | 기획에 없다 |
B는 수요처 없이도 하위 레벨을 살린다 — 같은 시간에 더 많이 나오는 것 자체가 이유이기 때문이다.
정리: A는 수요처라는 외부 조건이 필요하고, B는 그 자체로 닫힌다. 그래서 B를 중심에 두고 A를 완화된 형태로 얹었다. 하위 수요처는 여전히 만들 가치가 있지만, 이제 레벨 시스템의 전제 조건은 아니다.
4.3 레벨 드롭 — 자기 자원 6종
레벨마다 자기 자원 6종만 나온다. 하위 레벨 자원은 섞지 않는다 (2026-10-01).
낚시 Lv2 드롭
└─ 피라미 6590 · 메기 2000 · 가물치 1000 · 백년 메기 300 · 저수지의 주인 100 · 용왕의 사자 10
- 상자는 자원과 따로 굴린다. 레벨마다 그 레벨의 상자 3종이 모든 등급 다 나오고, 가치가 그 레벨의 판정 기대값을 따라간다. 확률은 레벨별 공통이고 특정 산업만 덮어쓸 수 있다 → 아이템 4.1.
- 기초 재료(Lv1 자원)는 Lv1 슬롯에서만 나온다. 상위에서 끊기는 손해는 상위가 느린 구조(4.2)가 이미 보상한다 — 대량이 필요하면 하위를 돌리는 게 낫다.
4.4 적성 요구는 따로 만들 필요가 없었다
상위 레벨의 필요 점수가 크다는 것 자체가 적성 요구로 작동한다.
적성 1(1000점/초) 캐릭터를 Lv5에 놓으면 판정 1회가 40분 30초, 적성 10(4000점/초)이면 10분 7.5초다. 같은 레벨에서 적성 차이가 그대로 4배로 벌어진다.
낮은 레벨일수록 적성의 절대적 손해가 작다. Lv1은 30초 대 7.5초라 차이가 22.5초지만, Lv5는 30분이 넘는다. 그래서 좋은 캐릭터는 상위 레벨에, 약한 캐릭터는 하위 레벨에 두는 것이 자연스러운 배치가 된다 — 별도 규칙 없이 배치 퍼즐이 성립한다.
이것이 3.1의 해금 조건(적성 N)과 같은 축이다. 적성으로 열고, 적성으로 굴린다.
적성 0은 배치 자체가 거절된다. → 작업슬롯 3.4
✅ 점수 구조가 "적성 0의 속도값" 미결 항목을 없앴다. 기존
기준주기 ÷ 속도는 속도 0에서 0으로 나눠 터졌지만, 점수 누적은 나눗셈이 아니라 덧셈이라 0이 들어와도 사고가 나지 않는다. (배치 거절은 그것과 무관하게 유지되는 별도 규칙이다.)
5. 기존 고유 메커니즘과의 관계
5개 산업이 각자 다른 이름으로 "구간 선택"을 갖고 있었다. 산업 레벨은 그 자리를 통합한다 — 새 축을 추가하는 것이 아니라 이름을 하나로 모으는 것이다.
| 산업 | 기존 축 | 산업 레벨과의 관계 | 레벨 이름 (Lv1→Lv5) | 상태 |
|---|---|---|---|---|
| 낚시 | 낚시터 (1개 · 미생성) | 레벨이 낚시터를 대신한다 | 개울 · 저수지 · 강 하류 · 호수 · 심해 | ✅ 정합 |
| 사냥 | 사냥터 (HuntingFieldTable) |
레벨 = 사냥터 | 들판 · 야산 · 깊은 숲 · 설산 · 마수의 영역 | ✅ 정합 |
| 벌목 | 수종 (TreeTable) |
레벨 = 수종 등급. |
잡목림 · 소나무 숲 · 참나무 숲 · 흑림 · 세계수 뿌리 | ✅ 정합 |
| 농사 | 파종 작물 (CropTable) |
레벨과 작물 선택이 겹친다 | 텃밭 · 밭 · 농장 · 대농장 · 신성한 대지 | ⚠️ 결정 필요 |
| 채굴 | 깊이 (DepthLevel · 자동 누적) |
레벨 = 갱도. 깊이·하강 폐지(2026-09-27) | 노천 광산 · 갱도 · 심층 갱도 · 지하 대공동 · 심연 | ✅ 정합 |
레벨 이름은
IndustryLevelTable.Name에 들어 있다. 아이템Description의 레벨 표기와 같아야 한다 (예:저수지(Lv2)). 둘이 어긋나도 로직은 멀쩡하므로 사람이 맞춰야 하는 규칙이다.
5.1 ✅ 낚시 — 비어 있던 개입 지점이 채워진다
낚시 3장은 낚시가 5종 중 유일하게 고유 메커니즘이 없는 산업이라고 기록하고 있고, 낚시터 확장을 열린 선택지로 남겨 뒀다.
산업 레벨이 들어오면 낚시터를 따로 만들 이유가 없다. 레벨이 곧 낚시터다.
다만 이것이 낚시의 "조작 없음"(P1과 가장 잘 맞는 산업)을 깨는지는 별개 판단이다. 레벨 선택은 배치할 때 한 번이므로 상시 조작이 아니다 — P1과 충돌하지 않는다.
5.2 ⚠️ 농사 — 레벨과 파종 선택이 겹친다
농사 2장의 A안(파종 = 드랍 세트 선택) 과 산업 레벨은 같은 일을 한다. 둘 다 "슬롯이 어떤 드롭 세트를 쓸지 고르는 것"이다.
| 안 | 내용 |
|---|---|
| A. 파종을 레벨로 흡수 | 농사 레벨이 곧 작물 세트. CropTable을 만들지 않는다 |
| B. 두 층으로 분리 | 레벨 = 밭 등급, 작물 = 그 안에서의 세트 선택 (레벨 × 작물 행) |
A가 단순하다. B는 농사만 선택 칸이 하나 더 생겨 배치 UI가 산업마다 달라진다. 다만 A를 택하면 농사의 유일한 개입 지점이 다른 4종과 같은 것이 되어 "파종"이라는 농사 고유의 감각은 이름으로만 남는다.
현재 데이터는 A로 깔려 있다 — 농사도 다른 4종과 똑같이 레벨 5개짜리 드롭 시트다. B로 갈 거면 시트를 다시 짜야 한다. → 일감 T-014
5.3 ✅ 채굴 — A안(깊이를 레벨로 흡수)으로 해소 (2026-09-27)
깊이·하강 메커니즘을 폐지하고 레벨이 곧 갱도가 됐다 (T-011). 현재 데이터(레벨 5개, 깊이 없음)가 그대로 정답이다. 아래는 결정 전 검토 기록이다.
(기록) 깊이는 "선택"이 아니라 "누적"이다
채굴의 깊이는 플레이어가 고르는 것이 아니라 시간이 쌓아 주는 것이다. "확실한 스노우볼"이라는 심리 정의가 여기 걸려 있다. 산업 레벨(조건 → 해금 → 선택)과 성격이 정면으로 다르다.
| 안 | 내용 | 평가 |
|---|---|---|
| A. 깊이를 레벨로 흡수 | 하강 메커니즘 폐기. 깊이 = 채굴 레벨 | 구조는 깔끔하지만 채굴의 정체성이 사라진다 |
| B. 두 층으로 둔다 | 레벨 = 갱도, 깊이 = 그 갱도 안에서의 누적 | 권장. 스노우볼을 지키면서 레벨도 성립 |
| C. 채굴만 레벨 없음 | 채굴은 깊이로만 간다 | 5종 중 하나만 규칙이 다르다 |
B를 권장한다. 갱도(레벨)를 고르고, 그 안에서 깊이가 누적된다. 갱도를 바꾸면 깊이는 갱도별로 따로 보관한다 — 그래야 갱도 변경이 후퇴가 되지 않는다.
⚠️ B는
MiningBasicTable의 행 수가갱도 × 깊이 구간 × 아이템 수로 늘어난다. 지금 30행인 시트가 깊이 구간 3개만 둬도 100행을 넘는다. 현재 데이터는 A로 깔려 있다(레벨 5개, 깊이 없음). → 일감 T-016
⚠️ 점수 구조가 채굴에 새 논점을 만들었다.하강 폐지로 소멸 → 게임기획코어 5장
6. 데이터 설계 (2026-08-01 — 엑셀·생성물까지 완료 · 서버는 드롭 롤만 구현)
🔴 "구현 완료"가 아니다 (2026-08-02 정정 · 2026-08-10 부분 해소). 이 장의 ✅는 기본적으로 엑셀 시트와
.bytes·Unity 미러가 만들어졌다는 뜻이다. 서버는 드롭 롤과 판정 비용이IndustryLevel을 읽는다(2026-08-10 —DropTableCatalog레벨 분리 ·IndustryLevelCatalog신설로RequiredScore가 판정 비용이 됐다). 해금은 개척 특성의 레벨로 연다(2026-10-02, T-108). → 3장 · 6.4
6.1 IndustryLevelTable — 신설 (GameDesign/Excel/Industry.xlsx)
| 컬럼 | 타입 | 내용 |
|---|---|---|
IndustryLevelTID |
int (키) | 산업 EID × 100 + 레벨. 농사 101~105 · 낚시 201~205 · 채굴 301~305 · 벌목 401~405 · 사냥 501~505 |
IndustryType |
eIndustryType | 산업 (2026-08-10 eItemType에서 전환 → T-023) |
Level |
int (1~5) | 레벨 |
Name |
string | 레벨 이름 (낚시터·사냥터·수종·갱도의 통합 이름 — 5장) |
RequiredScore |
int | 판정 1회 필요 점수 (초 × 천분율 — 2.4) |
ExpPerJudge |
int | 판정 1회당 캐릭터 경험치 (Lv1 1 → Lv5 81, 레벨당 ×3 — RequiredScore와 같은 등비) ✅ 정산 시 가산(2026-09-13) → 캐릭터 5.2 |
UnlockTID |
int (Ref UnlockTable.UnlockTID?) |
전부 0 — 쓰지 않는다. 산업 레벨은 개척 특성으로 연다(3장). 클라가 읽어 컬럼만 남겼다 (2026-10-02) |
Description |
string | 기획 메모 (로직 미사용) |
행 수 = 산업 5 × 레벨 5 = 25행.
시트는 산업별로 갈라져 있다 (2026-08-08).
Industry.xlsx안에IndustryLevelTable.농사~IndustryLevelTable.사냥5개 시트가 있고, ExcelGenerator가 시트 이름의.앞부분이 같은 시트를 한 테이블로 병합한다. 레벨이 30~40으로 늘어도 자기 산업 시트에 행만 추가하면 된다.IndustryLevelTID채번식(산업 EID × 100 + 레벨)은 레벨 99까지 버티므로 그대로다.
해금 조건은 이 표에 없다. 개척 특성의 레벨 표(UserTraitLevelTable)가 레벨별 계정 레벨 조건을 갖는다 → 특성 2.1.
- Lv1은 해금 없이 열려 있다 — 개척 특성의 기본 레벨이 1이다.
⚠️ Lv2~5의 계정 레벨 요구치는 테스트값이다 (3.3).
UserTraitLevelTable.AccountLevel(개척 101~105 행)만 고치면 되고, 구조는 바뀌지 않는다.
(IndustryType, Level)복합키를 쓸 수 없다. ExcelGenerator는 단일 컬럼 키만 지원하므로, 첫 컬럼에 고유IndustryLevelTID를 두고 서버가 로드 후(산업 → 레벨 목록)인덱스를 만든다.
6.2 <산업>BasicTable 5종 — IndustryLevel 컬럼 추가 ✅
| 이전 | 이후 |
|---|---|
DropTID · ItemTID · Weight · Description |
DropTID · IndustryLevel · ItemTID · Weight · Description |
- 행 수 = 산업당 30행 (레벨마다 6행), 5종 합계 150행. 상자는 이 표가 아니라
CommonRewardTable에 있다 (2026-10-02). - 파일·시트 구조 (2026-08-08 개편):
Drop.xlsx한 파일이 산업별 5개 파일로 갈라졌다 —DropFarming.xlsx·DropFishing.xlsx·DropMining.xlsx·DropLogging.xlsx·DropHunting.xlsx. 각 파일 안은 레벨별 시트(FishingBasicTable.Lv1~.Lv5)이고, ExcelGenerator가 베이스 이름이 같은 시트를 한 테이블로 병합한다. 테이블명·생성물은 이전과 동일(<산업>BasicTable5종). 레벨이 30~40으로 늘면 시트만 추가한다. IndustryLevel에Ref = IndustryLevelTable.Level을 걸었다.- ✅ 서버가 로드 시 레벨로 갈라 등록한다 (2026-08-10).
DropTableCatalog의 키가(IndustryType, Level)이 되어 슬롯의 레벨에 맞는 테이블만 롤에 쓴다 — 레벨 간 아이템 섞임과 가중치 부풀림이 해소됐다. 상위 레벨은 개척 특성으로 연다(2026-10-02). → 3장
✅
ReferenceValidator는 참조 대상이 키가 아니어도 받아 준다 — 그 컬럼의 값 집합을 만들 뿐이다. 이 문서가 이전에 "Level은 키가 아니므로 참조 대상이 못 된다" 고 적었던 것은 사실이 아니었다.
⚠️
Ref는 레벨 번호가 1~5인지만 검사한다. 낚시 시트에 사냥 레벨을 적어도 통과한다. 시트가 산업별로 갈려 있어 실수 여지가 작지만, 산업 정합성은 검사되지 않는다.
DropTID를 6자리로 재배치했다 (2026-08-08)
| 이전 | 이후 |
|---|---|
산업 × 1000 + 레벨 × 100 + 순번 — 낚시 1101~1508 … |
산업 × 100000 + 레벨 × 100 + 순번 — 농사 100101~ · 낚시 200101~ … |
- 구식(×1000)은 레벨 10부터 레벨×100이 산업 대역을 침범해 깨졌다. 새 식은 레벨 999 · 순번 99까지 버틴다.
- 산업 자리는
IndustryTypeenum 값을 따른다 (농사 1 · 낚시 2 · 채굴 3 · 벌목 4 · 사냥 5) —IndustryLevelTID와 같은 기준이다. 2026-08-10에ItemType에서 갈라져 나왔지만 값은 1:1로 유지했으므로 이미 채번된DropTID는 그대로다 → T-023. - ⚠️
ItemTID대역(낚시 1 · 농사 2 · 벌목 3 · 채굴 4 · 사냥 5)과는 이제 다르다.ItemTID는 DB에 적히는 정수라 재배치하지 않았다 — 대역 통일은 남은 과제다.
DropTID는 DB에 저장되지 않으므로 번호를 바꿔도 안전하다. 재배치가 금지되는 것은ItemTID·enum처럼 DB에 적히는 정수다. → 게임기획코어 4장 식별자 규칙
6.3 아이템 — 산업당 30종 (총 150종) ✅
ItemTID = 산업 대역 + 레벨당 10 단위 + 희귀도 순 1~6.
| 레벨 | 낚시 | 농사 | 벌목 | 채굴 | 사냥 |
|---|---|---|---|---|---|
| Lv1 | 10001~10006 | 20001~ | 30001~ | 40001~ | 50001~ |
| Lv2 | 10011~10016 | 20011~ | 30011~ | 40011~ | 50011~ |
| Lv3 | 10021~10026 | 20021~ | 30021~ | 40021~ | 50021~ |
| Lv4 | 10031~10036 | 20031~ | 30031~ | 40031~ | 50031~ |
| Lv5 | 10041~10046 | 20041~ | 30041~ | 40041~ | 50041~ |
- 신규 120종 추가 (Lv2~5 × 6희귀도 × 5산업). 기존 30종은 Lv1으로 유지.
- 레벨당 10칸 중 6칸만 쓴다 — 희귀도가 늘어나도 대역이 밀리지 않는다.
- 산업당 9,950여 개가 남아 있어 레벨을 더 늘려도 자기 대역 뒤로 이어 붙일 수 있다.
6.4 서버 · DB · 패킷 영향 (T-017 · T-021 · T-108 ✅ 완료)
| 대상 | 변경 | 현재 |
|---|---|---|
| 드롭 롤 | (산업, 레벨) → 행 목록 인덱스로 거른다 |
✅ 완료 (2026-08-10) — 레벨별 테이블 25개로 분리 |
WorkStationSlot |
IndustryLevel 필드 추가 |
✅ 완료 (2026-08-10) — DB 저장·복원까지 |
WorkStationSlot.JudgeCost |
전역 상수 → RequiredScore × 1000 |
✅ 완료 (2026-08-10) — IndustryLevelCatalog 조회 · 슬롯별 JudgeCostUnits |
t_user_workstation_slot |
industry_level 컬럼 추가 |
✅ 완료 (2026-08-10) |
| 해금 저장 | t_user_trait(개척 특성 레벨) |
✅ 완료 (2026-10-02, T-108) |
WorkStationSlotInfo |
IndustryLevel 필드 추가 |
✅ 완료 (2026-08-10) |
| 슬롯 배치 패킷 | 요청에 레벨 추가 · 해금 여부를 서버가 검증 | ✅ 완료 (2026-08-10) — IndustryLevelLocked로 거절 |
| 해금 판정 | 개척 특성 레벨업 — 3장 · 특성 | ✅ 완료 (2026-10-02, T-108) · 클라 ❌ 미구현(T-108) |
✅ 해금 판정까지 섰다 (2026-10-02). 개척 특성을 올리면 그 레벨까지 열리고, 그 레벨로 배치할 수 있다.
7. 결정 필요 (Open Questions)
- 레벨별 계정 레벨 요구치
M은? — 테스트값(5·15·30·50)으로 돌고 있다. 실측 뒤 확정 (3.3) - 농사의 파종 선택을 레벨로 흡수하는가, 두 층으로 두는가? (5.2 — 현재 데이터는 흡수)
채굴의 깊이와 레벨을 어떻게 나누는가?✅ 깊이 폐지 — 레벨 = 갱도 (2026-09-27 · 5.3)벌목의 숲 자원량을 레벨별로 따로 두는가?✅ 고갈 폐지로 소멸 (2026-09-27)- 레벨 변경에 제약이 있는가? 쿨타임·비용 없이 자유롭게 바꾸는가 (작업슬롯 6장과 같은 질문이다)
- 해금하지 않은 레벨은 보여 준다 — 조건과 함께 ✅ (2026-09-14) → 해금 7장
- 레벨을 갈아탈 때 남은 점수 조각을 이월하는가, 버리는가? (2.3) 싸게 모아 비싸게 쓰는 경로가 열려 있다
- 회당 산출량이 레벨에 따라 달라지는가? 지금은 레벨과 무관이다. 상위가 느린 만큼 회당 산출까지 같으면 상위 레벨의 시간당 총량이 1/3씩 떨어진다 — 아이템 가치로만 벌충하는 것이 맞는지 확인이 필요하다 → 일감 T-009
이 문서가 답한 것:
- 레벨의 단위 — 산업별 ✅
- 해금/선택의 층 — 해금은 계정, 선택은 슬롯 ✅
- 레벨의 효과 — 필요 점수 + 드롭 테이블 ✅
- 경험치 유무 — 없음. 조건 충족이 곧 해금 ✅
- 해금 조건 — 개척 특성 레벨: 레벨마다 특성 포인트 1 + 계정 레벨 M ✅ (2026-10-02)
- 해금의 영속성 — 영구. 재검사 없음 ✅
- 산업당 레벨 수 — 5개 ✅
- 필요 점수 곡선 — 30,000에서 ×3 등비 ✅
- 필요 점수의 산업 차등 — 지금은 공통, 나중에 벌릴 수 있음 ✅
- 하위 레벨이 죽는 문제 — B안(상위는 느리다)이 수요처 없이 해결 ✅ (4.2)
- 상위 레벨 드롭 구성 — 자기 자원 6종 · 상자는 별도 롤 ✅ (4.3 · 2026-10-01)
이 문서가 만든 것:
- 판정 비용이 전역 상수에서 테이블 값이 됐다 (2.4) —
JudgeCost상수를 쓰는 모든 코드가 영향기준 채취주기 30초가 Lv1의 값으로 재해석됐다 (2.4)- 낚시터·사냥터·수종이 산업 레벨로 통합됐다 (5장)
- 아이템이 30종에서 150종이 됐다 (6.3)