GameDesign/design/gathering/README.md 최종 업데이트 2026-08-08

01. 자원 채취 (Gathering)

상위 문서: 게임기획코어.md · 전제: 작업슬롯 최종 업데이트: 2026-08-08 · 상태: 산업 5종 확정 · 산업 레벨 5단계 데이터 생성 완료 · 확률값 미정 · ⚠️ 서버 미구현 바뀌면 갱신: 거래 · 게임UI · 게임기획코어 · 기획평가 · 낚시 · 농사 벌목 · 사냥 · 산업레벨 · 아이템 · 작업슬롯 · 진행 및 성장 채굴 · 특성

코어 루프의 시작점이자, 게임에서 유일하게 재화가 새로 생성되는 지점(faucet)이다. 여기서 나오는 총량이 경제 전체의 상한을 정하므로, 이 문서의 수치는 거래와 반드시 함께 결정한다.

⚠️ 2026-07-29 구조 전환. "산업 택 1"과 "요일 로테이션"이 폐지되고 작업슬롯 구조로 바뀌었다. 채취는 슬롯마다 독립적으로 돈다. 이 문서의 2.0·2.3은 폐지된 내용이며 이력으로 남겨 둔다.


1. 확정 사항

  • 1차 산업은 5종이다: 농사 · 벌목 · 낚시 · 채굴 · 사냥.
  • 채취는 작업슬롯마다 독립적으로 돈다. 슬롯당 산업 1개 · 캐릭터 1명.
    • 산업 택 1 폐지. 슬롯 수만큼 동시에 가동된다.
  • 기준 채취주기는 전 산업 공통 30초다. 산업별로 다르게 두지 않는다. 단 캐릭터 속도로 실효 주기가 슬롯마다 갈린다. (2.1)
  • 오프라인 누적에 감쇠가 없다폐지 (2026-07-29). 오프라인 진행 자체가 없다. (2.2)
  • 요일 효율 보너스 · 주말 택1 ×2 폐지. (2.3)
  • 진행은 방치형. 플레이어의 조작 없이 자동으로 흐른다.
  • 실패(허탕)는 없다. 판정하면 반드시 무언가 나온다. 전 산업 공통.
  • 보상은 한 층이다. 판정 1회 = 드롭 롤 한 번. (2.4)
    • 기본 9 : 특별 1 두 층 폐지 (2026-07-30).
    • 희귀도 분포는 전 산업 동일 폐지 (2026-07-31). 가중치는 각 산업의 드롭 시트가 직접 갖는다 — 분포도 아이템도 산업별이다.
  • 아이템에 개체 변량이 없다. 개체별 수치 롤(크기 등)을 두지 않는다. 등급 차이는 희귀도(GlobalRarity)와 별도 ItemTID 로 표현한다. → 모든 아이템이 정상 스택된다.
  • 티켓·고유 아이템은 전 산업 공통이며, 채취 보상과 별개의 롤로 나온다. (특별보상 층이 폐지돼 롤은 판정당 2번이다 — 채취 보상 1 + 공통 보상 1)
  • 산업마다 레벨이 있다 (2026-08-01). 슬롯에 배치할 때 산업과 레벨을 함께 고른다. 레벨이 오르면 드롭 목록이 확장된다. 경험치는 없다 — 조건 충족이 곧 해금이다. → 산업 레벨

1-1. 1차 산업 5종

산업은 수치가 아니라 플레이어가 느끼는 심리로 구분한다. "무엇이 나오는가"가 아니라 "왜 이걸 고르는가" 가 산업의 정의다.

산업 enum 심리 정의 투자 비유 고유 메커니즘 상세
낚시 Fishing 확실한 도파민 소액 잦은 당첨 없음 ⚠️ 낚시
농사 Farming 안정적인 수익 적금 파종 선택 농사
채굴 Mining 확실한 스노우볼 복리 장기투자 깊이 누적 채굴
벌목 Logging 절제하면 지속되는 수익 배당주 (원금 보존) 자원 고갈·재생 벌목
사냥 Hunting 도전 · 목표 지향 ⚠️ 적립식 목표 투자 사냥터 선택 + 보스 사냥

이렇게 놓으면 5개 산업이 투자 성향 스펙트럼이 된다. 산업 택1 + 자유 변경(2.0)과 맞물려 "오늘 어디에 넣을까"가 게임의 질문이 된다.

  • 농사와 벌목이 둘 다 "안정"이지만 갈린다 — 농사는 그냥 안정적이고, 벌목은 내가 조절해야 안정적이다.
  • 낚시와 사냥은 반대다 — 낚시는 지금 당장의 만족, 사냥은 나중을 위한 축적.
  • ⚠️ 사냥의 심리 정의는 제안이다. 보스 시스템이 구체화되면 확정한다.

ItemType.Hunting은 값 5로 추가돼 있다 (2026-07-28). 아직 enum에 없다 · 값 7로 추가한다둘 다 낡은 서술이었다 (2026-08-02 정정). Hunting이 중간에 삽입되면서 Misc·Special이 한 칸씩 밀렸고, 되돌리지 않는다 (t_user_workstation_slot.industry에 이미 저장된 값이 어긋난다). → 아이템 1.2

수치 차별화 수단 — 하나까지 줄었다가 둘로 돌아왔다

산업을 가르던 수치 축이 결정을 거치며 계속 깎였다가, 분포 통일 폐지로 하나를 되찾았다.

시점 남은 수치 축
초기 채취주기 · 회당 산출 · 희귀도 분포 · 실패율
주기 통일 후 회당 산출 · 희귀도 분포 · 실패율
분포 통일 후 회당 산출 · 실패율
실패 폐기 후 회당 산출 (+ 특별보상 내용)
특별보상 폐기 후 (2026-07-30) 회당 산출 ← 최저점
분포 통일 폐지 후 (2026-07-31) 회당 산출 · 희귀도 분포
산업 레벨 도입 후 (2026-08-01) 회당 산출 · 희귀도 분포 · 판정 필요 점수

수치 축 고유 메커니즘이 더해진다.

⚠️ 세 번째 축(필요 점수)은 아직 안 쓰고 있다. 5개 산업이 같은 값을 쓴다. 벌리는 데 구조 변경이 필요 없으므로 회당 산출량이 정해진 뒤에 함께 조정한다 (T-009).

산업 회당 산출 희귀도 분포 고유 메커니즘
농사 가장 많음 미정 파종 선택
벌목 중간 (자원량 비례) 미정 고갈·재생
채굴 중간 (깊이 비례) 미정 — 깊이로 올릴 수 있다 깊이 누적
낚시 적음 미정 — 상위로 기울일 수 있다 없음
사냥 중간 미정 사냥터 선택

결론: 밸런스 시트로도 산업을 구분할 수 있게 됐다.

  • 낚시의 차별화 수단이 생겼다. 고유 메커니즘은 여전히 없지만, 상위 등급 비중을 높여 "확실한 도파민"을 수치로 만들 수 있다.낚시 3장
  • 채굴의 "깊이가 희귀도를 올린다"가 다시 가능하다. 분포 통일 때문에 폐기했던 원래 설계가 되살아난다. → 채굴 1장
  • ⚠️ 대가는 밸런싱 비용이다. 확률을 손볼 때 5개 시트를 함께 봐야 하고, 의도치 않게 어긋나기 쉽다. 다르게 두는 것은 의도가 있을 때만 한다 — 기본은 같은 값으로 시작한다.

산업 간 역할 분담 (제안)

담당 산업
기반 물량 농사
총량 제어 벌목
즉각적 만족 낚시
장기 성장 재료 채굴
후반 콘텐츠(보스) 진입권 사냥

이 분담이 유지되면 5개 산업이 서로를 대체하지 않는다. 새 산업을 추가할 때도 비어 있는 축을 찾아 배정한다.

낚시의 축은 "잔재미·티켓" → (티켓 공통화) → "개체 변량(크기)" → (변량 폐기) → "희귀도 분포" → (분포 공통화) → "실패율" → (실패 폐기) → "즉각적 만족" 으로 네 번 바뀌었다. 현재 5종 중 고유 메커니즘이 없는 유일한 산업이다. → 기획평가.md

산업 레벨이 들어오면 낚시에도 개입 지점이 생긴다 (2026-08-01). 레벨이 낚시터를 대신하므로 "고유 메커니즘이 없는 유일한 산업"이라는 상태가 해소된다. → 산업 레벨 4.1


1-2. 산업 레벨 (2026-08-01 신설)

산업마다 레벨이 있고, 슬롯에 배치할 때 산업과 레벨을 함께 고른다. 상세는 산업 레벨에 있고, 여기서는 채취 루프에 미치는 영향만 적는다.

항목 내용
해금 계정 단위 — 유저가 산업별로 어디까지 열었는지를 갖는다. 한 번 열리면 영구
선택 슬롯 단위 — 해금된 레벨 중 아무거나 고른다. 하위도 계속 고를 수 있다
레벨 수 산업당 5개
효과 ① 판정 1회 필요 점수 ② 드롭 테이블 — 둘이 함께 바뀐다
경험치 없다. 조건을 채우면 해금되고 선택지에 추가된다
해금 조건 캐릭터 적성 N + 계정 레벨 M (요구치는 미정)

🔴 서버가 아직 레벨을 모른다 (2026-08-02 확인 · 일감 T-017). 엑셀은 레벨별로 갈라졌는데 DropTableCatalogIndustryLevel 컬럼을 읽지 않아 산업당 38행이 한 테이블에 뭉쳐 있다 — 지금 개발 서버는 Lv1 슬롯에서 Lv5 아이템이 나오고, 희귀도 분포도 5개 레벨이 뒤섞인 값이다. WorkStationSlot에 레벨 필드가 없어 필터를 걸 축 자체가 없는 상태다. 아래 서술은 구현 후의 목표 동작이다.

채취 루프에 대한 영향:

  • 판정 1회 비용이 전역 상수가 아니라 (산업, 레벨)의 값이 된다 — 2.1의 공식이 바뀐다.
  • 드롭 롤의 대상이 <산업>BasicTable 전체가 아니라 (산업, 레벨)으로 걸러진 행 목록이 된다.
  • <산업>BasicTable 5종에 IndustryLevel 컬럼이 붙는다 (3장).
  • 레벨 변경은 슬롯 변경이므로 변경 직전에 정산한다 — 산업 변경과 같은 규칙이다.

레벨별 필요 점수 (전 산업 공통 · 적성 1 캐릭터가 1초에 1000점)

레벨 필요 점수 적성 1 적성 10
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초

"상위 레벨이 더 좋기만 하면 선택이 죽는다"는 문제가 이걸로 풀렸다. 상위 레벨은 시간당 판정 횟수가 1/3씩 줄어드니 하위는 박리다매, 상위는 저빈도 고가치로 갈린다. 사냥 3.1이 사냥터에 대해 지적한 것과 같은 문제였다. → 산업 레벨 4.2

필요 점수는 지금 전 산업 공통이다. 행이 (산업, 레벨)이라 나중에 산업별로 벌릴 수 있고, 그때는 세 번째 수치 차별화 축이 된다 (1-1 참조).

낚시터·사냥터·수종이 산업 레벨로 통합된다. 5개 산업이 각자 다른 이름으로 갖고 있던 "구간 선택"이 하나의 축으로 모인다. 농사(파종)와 채굴(깊이)만 성격이 달라 결정이 필요하다. → 산업 레벨 4장


2. 채취 모델

⚠️ 표기가 붙은 항목만 제안이다. 나머지는 확정.

2.0 산업 선택 — 한 번에 1개폐지 (2026-07-29)

작업슬롯 구조로 대체됐다. 슬롯마다 산업 1개를 지정하며, 슬롯 수만큼 동시에 돈다. 아래는 폐지된 내용의 이력이다.

플레이어는 5개 산업 중 하나를 골라 임한다. 나머지 4종은 돌지 않는다. 선택은 언제든 자유롭게 바꿀 수 있다.

항목 내용
동시 가동 1개
변경 제약 없음 (자유)
변경 시 진행도 벌목 자원량·채굴 깊이 등 산업별 상태는 유지된다 (리셋 없음)

이 구조가 갖는 의미:

  • 오프라인 정산이 1개 산업만 계산하면 된다. 5종 동시 가동 대비 부담이 1/5로 줄었다.
  • 하루 판정은 2,880회다 (5종 합산 14,400회가 아니다).
  • 요일 보너스는 강제가 아니라 유인이 된다. → 2.3

⚠️ 자유 변경 + 요일 보너스의 상호작용을 주의할 것. 보너스 배수 N이 크면 "보너스 산업을 안 고르면 손해"가 되어 선택이 형식화된다. N이 작아야 "오늘은 낚시가 이득이지만 광석이 급하니 채굴"이 실제 선택으로 성립한다. 자유 변경을 택한 이상 N을 크게 잡으면 안 된다.

산업을 오갈 때 상태를 잃지 않는 것이 중요하다. 채굴 깊이가 리셋되면 플레이어는 산업을 바꾸지 못하고 묶인다 — 자유 변경의 의미가 사라진다.

2.1 기본 공식 · 기준 채취주기 30초 (확정)

누적작업량 += 경과시간 × 속도                ← 슬롯마다 계산한다
판정 횟수   = floor(누적작업량 / 1판정비용)
채취 산출량 = 판정 횟수 × 회당산출
속도        = 적성기본값 × (1 + Σ가산) × Π승산      ← 가산이 기본, 승산은 예외

⚠️ 2026-08-01 — 1판정비용이 전역 상수가 아니게 됐다. (산업, 레벨)IndustryLevelTable.RequiredScore를 쓴다. 누적하는 값이 곧 "점수" 이며, 적성 1 캐릭터가 1초 일하면 1000점이다. 아래 표의 30초는 Lv1 기준값이다. → 1-2

항목 출처 비고
기준 채취주기 Lv1 = 30,000점 적성 1일 때 30초. 전역 상수IndustryLevelTable
실효 주기 기준주기 ÷ 속도 슬롯마다 다르다 (배치된 캐릭터가 다르므로)
회당산출 산업별 테이블 기준주기가 같으므로 산업 물량 차이는 전부 여기서 난다
적성기본값 캐릭터 2장 확정. 적성 → WorkSpeedTable → 속도. 적성 0은 배치 불가
특성 패시브 (가산) 특성 상시 적용. 전역 특성만 있다 (산업별 폐지)
액티브 부스트 (가산) 특성 하루 2회 · 1시간
장비 (가산) 일감 T-002 무기1·장신구2·보석1
캐릭터 레벨 캐릭터 5장 미정 — 레벨이 무엇을 올리는지 정해지지 않았다

곱셈이 아니라 가산이다. 보정을 전부 곱하면 보정원의 개수가 밸런스를 흔든다 → 작업슬롯 3.4.

경과시간은 슬롯의 LastTickAt 기준이다. 슬롯마다 배치 시각과 속도가 다르므로 판정 횟수도 슬롯마다 따로 구한다. → 작업슬롯 3장

진행도를 작업량으로 누적하는 이유작업슬롯 2장 참조. 요약하면 속도는 구간별로 쪼갤 수 있지만 주기는 그렇지 않기 때문이다.

기준 속도에서 30초 = 하루 2,880회 판정. 속도 배수가 그대로 곱해진다.

구분 판정 횟수 (속도 1.0배)
1분 2회
1시간 120회
24시간 2,880회

⚠️ 이 문서를 포함해 기획 곳곳의 "하루 2,880회"는 전부 기준 속도 기준이다. 실제 총량에는 슬롯 수 × 속도 배수 × 접속 시간 비율이 곱해진다.

주기 통일 + 산업 택1로 얻은 것:

  • 정산할 산업이 1개다. 판정 횟수를 한 번만 구하면 된다.
  • 개체 변량도 없으므로 정산 결과가 Dictionary<ItemTID, count> 단순 집계로 끝난다.
  • 밸런싱 변수가 줄었다. 초기 개발에서는 이득이 크다.
  • 위젯도 한 산업만 표시하면 되므로 화면이 단순해진다 (P1에 유리).

부스트는 주기를 줄이지 않는다. 요일 보너스·특성이 30초를 단축하면 판정 수가 배로 늘고 구간 분할 계산도 꼬인다. 산출량 배수로만 적용한다.

폐지 (2026-07-29). 캐릭터 스탯·버프는 주기에 작용한다. "구간 분할 계산이 꼬인다"는 우려는 실재했지만, 진행도를 시간이 아니라 작업량으로 누적하면 해소된다 — 속도는 구간별로 더할 수 있기 때문이다. → 작업슬롯 2장

2.2 오프라인 진행폐지 (2026-07-29)

접속 중에만 자란다. 오프라인 진행도, 접속 보상도 없다.

시점 동작
접속 모든 슬롯이 진행도 0에서 시작
접속 중 슬롯마다 독립적으로 진행
접속 종료 완성된 판정은 지급, 진행 조각은 폐기
비접속 아무 일도 일어나지 않는다

경과 시간 전체가 100%로 쌓인다 / 24시간 이후 -50% 둘 다 폐지. 오프라인 구간이 사라지면서 감쇠·상한·총 누적 상한 논의가 전부 없어졌다.

해소된 리스크:

  • 무한 누적 → 복귀 시 대량 재화 유입 — 총량이 접속 시간에 정비례한다.
  • 오프라인 정산이 슬롯 수에 비례해 무거워진다 — 정산 구간이 세션 길이로 묶인다.
  • 버프가 오프라인 구간에 소급 적용 — 모든 속도 변경 구간을 서버가 관측한다.

⚠️ 대신 "접속 중" 판정이 곧 재화 생성 조건이 됐다. 하트비트가 없으면 끊김을 늦게 감지해 그만큼 공짜 진행이 생긴다. 무응답 15초로 확정됐다 (2026-08-04) — 기준 주기 30초보다 짧아 그 구간이 판정 1회를 채우지 못하므로 산출이 새지 않는다.작업슬롯 3.3

정산 결과가 ItemTID + 개수뿐이라 집계로 끝난다.

2.3 요일 로테이션폐지 (2026-07-29)

요일 시스템 전체가 없어졌다. 슬롯 구조에서는 플레이어가 여러 산업을 동시에 돌리므로 "오늘 무엇을 고를까"라는 질문이 성립하지 않는다. 효율배수에서 요일 항이 빠진다(2.1). 이 폐지로 설계 원칙 P3가 근거를 잃었다게임기획코어 1장. 아래는 폐지된 내용의 이력이다.

산업 택1(2.0)과 결합되면서, 요일의 역할이 "오늘은 이걸 하면 이득"이라는 유인으로 정리됐다. 플레이어는 보너스를 따를 수도, 무시하고 필요한 자원을 캘 수도 있다.

요일 보너스 산업 그 산업을 골랐을 때 다른 산업을 골랐을 때
농사 ×N ×1.0
벌목 ×N ×1.0
낚시 ×N ×1.0
채굴 ×N ×1.0
사냥 ×N ×1.0
토·일 플레이어가 택 1 ×2.0
  • 배정 순서(월=농사…금=사냥)는 제안이다. 산업 수(5)와 평일 수(5)가 맞으므로 1:1이 자연스럽다.
  • 평일 보너스 배수 N은 미정.
  • 주말은 플레이어가 고른 산업에 ×2.0이 붙는다. 요일 배정이 없는 날이다.

P3("하루 단위로 달라진다")는 어느 산업이 열리는가가 아니라 오늘 무엇을 하면 이득인가로 유지된다. 강제하지 않으므로 P1과도 충돌하지 않는다.

⚠️ N이 이 시스템의 성패를 가른다

자유 변경(2.0)과 결합되면 N의 크기가 곧 선택의 유무다.

N 결과
너무 큼 (×3 이상) 보너스를 안 따르면 손해가 커서 사실상 강제 로테이션. 선택이 사라짐
적정 (×1.3~1.5) "오늘은 낚시가 이득이지만 광석이 급하니 채굴" 이 실제 고민이 됨
너무 작음 (×1.1) 요일을 신경 쓸 이유가 없어져 P3가 죽음

×1.5 안팎을 권장한다. 주말 ×2.0보다 확실히 낮아야 "주말에 뭘 고를까"가 주간 최대 의사결정으로 남는다.

논점 내용 권장
평일 보너스 배수 N 위 표 참조 ×1.5 안팎
주말 택1 시점 토요일 1회 선택 → 일요일까지 고정 고정 (변경 남용 방지)
보너스 대상 산출량만? 희귀도 확률도? 산출량만 (분포까지 흔들면 드랍 설계가 복잡해짐)

❓ 주말은 산업 선택이 자유 변경(2.0)인데 주말 택1만 고정이면 규칙이 어긋난다. 주말 ×2를 "선택 고정 대가"로 둘지, 주말도 자유 변경으로 통일할지 결정 필요.

여전히 미결: 요일 경계 기준 시각 (예: KST 05:00). 퀘스트 리셋과 같아야 한다.

2.4 보상 구조 — 한 층 (2026-07-30 변경)

판정하면 반드시 보상이 나온다. 실패(허탕)는 전 산업에서 폐기됐다.

판정 1회 — 실패 없음
 │
 ├─ ① 채취 보상 (분기 없음)
 │    └─ 가중치 롤 한 번 ← <산업>BasicTable (가중치·아이템 모두 산업별) ✅
 │         예) 낚시 → 붕어 6590 / 잉어 2000 / 월척 붕어 1000 …
 │
 └─ ② CommonRewardTable 롤 (①과 별개)
      └─ 티켓·고유 아이템 (전 산업 동일 확률)

기본 9 : 특별 1폐지 (2026-07-30)

90% 기본보상 / 10% 특별보상으로 분기한다층 분기를 없앤다.

함께 사라진 것 처리
<산업>SpecialTable 만들지 않는다 (낚시 것도 미작성이라 실제 피해 없음)
SpecialRate 컬럼·상수 두지 않는다
특별보상 내부 등급 · 낚시 비율 인상 논점 질문 자체가 사라졌다
보스 티켓 경로 ⚠️ 미정으로 남는다 (아래)

실패를 없앤 이유: 방치형에서 허탕은 "자리를 비운 대가"로 체감된다. 30초마다 반드시 무언가 들어와야 P2("꺼져 있어도 자란다")가 온전해진다. FailRate 컬럼은 어느 테이블에도 두지 않는다.

채취 보상 — 가중치도 아이템도 산업별 (2026-07-31 변경)

산업마다 자기 드롭 시트를 하나씩 갖고, 그 시트가 가중치까지 직접 갖는다.

산업 시트
낚시 FishingBasicTable 붕어 6590 / 잉어 2000 / 월척 붕어 1000
채굴 MiningBasicTable 돌덩어리 · 구리 광석 · 은광석 …
  • 드롭 테이블의 가중치가 곧 그 산업의 희귀도 분포다. 롤은 판정당 한 번이다.
  • 산업마다 분포를 다르게 둘 수 있다 — 이것이 남은 두 개의 수치 차별화 축 중 하나다.
희귀도 분포 = 전 산업 동일 · RarityWeightTable 단일 원본폐지 (2026-07-31)

희귀도를 먼저 뽑고 그 희귀도의 아이템을 고르는 2단계 롤한 단계로 되돌린다.

함께 사라진 것 처리
RarityWeightTable 만들지 않는다 (미작성 상태라 실제 피해 없음)
(Rarity → ItemTID) 매핑 구조 <산업>BasicTableItemTID + Weight를 직접 갖는다
"한 곳만 고치면 5개에 반영" ⚠️ 없어졌다. 확률 조정 시 5개 시트를 함께 본다

얻은 것 / 잃은 것

내용
✅ 얻음 산업별 분포 차별화. 낚시를 상위로 기울이거나 채굴을 깊이로 올릴 수 있다
✅ 얻음 롤이 판정당 2회 → 1회. 서버 계산이 줄었다
⚠️ 잃음 단일 원본. 5개 분포가 조용히 어긋날 수 있다

기본은 5개를 같은 값으로 시작한다. 다르게 두는 것은 산업 정체성을 표현할 의도가 있을 때만 한다. "그냥 다르게"는 밸런싱 사고의 원인이다.

❓ 보스 티켓 경로 — 미정

보스 티켓은 사냥 특별보상 전용이었다. 그 층이 없어져 획득 경로가 비었다. 보스는 채취 루프 바깥으로 나가는 유일한 통로라 경로가 없으면 콘텐츠가 닫힌다.

후보 성격
사냥 아이템 목록에 티켓을 섞는다 희귀도 롤에 편입 — 구조 변경 없음
CommonRewardTable에 넣는다 전 산업 공통이 되어 "사냥 전용"이 깨진다
퀘스트·상점 보상으로 옮긴다 채취와 분리

사냥

공통 보상 (②)

티켓·고유 아이템. 채취 보상과 무관하게 매 판정마다 별도로 롤한다. 전 산업 동일 확률이며 CommonRewardTable 한 곳에서 관리한다.

특성이 확률에 개입하는지 여부 미정 → 특성와 함께 결정. 개입시킨다면 희귀도 가중치 보정이 가장 깔끔하다 (롤 추가 금지).


3. 데이터 설계 (제안)

밸런스 수치는 코드가 아니라 엑셀 테이블로 간다 (게임기획코어 6장 규칙).

보상이 한 층이므로 산업당 테이블 하나로 끝난다. 엑셀은 산업당 파일 하나(Drop농사.xlsx ~ Drop사냥.xlsx)이고, 파일 안은 레벨별 시트 (FishingBasicTable.Lv1 ~)다 — ExcelGenerator가 . 앞 이름이 같은 시트를 한 테이블로 병합한다 (2026-08-08 개편 · 레벨 30~40 확장 대비).

테이블 범위 주요 컬럼 상태
<산업>BasicTable 산업별 5종 DropTID(키) · IndustryLevel(Ref) · ItemTID(Ref) · Weight · Description 레벨 5단계 확장 완료 (2026-08-01 · 산업당 38행 · 2026-08-08 산업별 파일 분리)
IndustryLevelTable 산업 × 레벨 IndustryLevelTID(키) · IndustryType · Level · Name · RequiredScore · RequiredAptitude · RequiredAccountLevel 생성됨 (2026-08-01 · 25행 · Industry.xlsx · 2026-08-08 산업별 시트 분리)
GatheringTable 산업별 IndustryType(=ItemType), YieldPerCycle, UnlockCondition ❌ 미작성
CommonRewardTable 전 산업 공통 ItemTID, Weight — 티켓·고유 아이템 ❌ 미작성
RarityWeightTable 폐지 (2026-07-31). 가중치는 산업 시트가 직접 갖는다
<산업>SpecialTable 폐지 (2026-07-30). 특별보상 층이 없어졌다
WeekdayRotationTable 폐지 (2026-07-29). 요일 로테이션이 없어졌다

기존 ItemTable(ItemTID/Name/ItemType/GlobalRarity/MaxStack/Description)을 그대로 참조한다.

아이템 TID는 산업별 10000 단위 대역이고, 그 안에서 레벨마다 10칸씩 쓴다 (2026-07-31 대역 확정 · 2026-08-01 레벨 구획 추가) — 낚시 10001~ · 농사 20001~ · 벌목 30001~ · 채굴 40001~ · 사냥 50001~.

레벨 낚시 규칙
Lv1 10001~10006 대역 + 0
Lv2 10011~10016 대역 + 10
Lv3 10021~10026 대역 + 20
Lv4 10031~10036 대역 + 30
Lv5 10041~10046 대역 + 40

레벨당 10칸 중 6칸(희귀도 6단계)만 쓰므로 희귀도가 늘어도 대역이 밀리지 않는다. 산업당 9,950여 개가 남아 있어 레벨이 늘어도 자기 대역 뒤로 이어 붙인다. 현재 총 150종(산업 5 × 레벨 5 × 희귀도 6)이다.

DropTID6자리 대역(산업 × 100000 + 레벨 × 100 + 순번 — 농사 100101~ · 낚시 200101~)이라 아이템 TID와 숫자가 겹치지 않고, 레벨 999까지 버틴다 (2026-08-08 재채번 — 구식 ×1000은 레벨 10부터 붕괴). 산업 자리는 ItemType enum 값(농사 1 · 낚시 2 · 채굴 3 · 벌목 4 · 사냥 5)을 따른다 — ⚠️ ItemTID 대역(낚시 1 · 농사 2 …)과는 다르다. DropTID는 DB에 저장되지 않으므로 재배치해도 안전하다.

CycleSec 컬럼은 두지 않는다. 채취주기가 전 산업 공통 30초로 확정됐으므로 판정 비용은 IndustryLevelTable.RequiredScore가 갖는다(2026-08-01). 드롭 시트에 주기·비용 컬럼을 두면 같은 값이 두 곳에 생겨 조용히 어긋난다.

산업 고유 축은 <산업>BasicTable에 컬럼으로 붙인다

특별 테이블 층이 없어졌으므로, 산업마다 하나씩 있는 축은 자기 Basic 시트에 컬럼을 더한다.

⚠️ 2026-08-01 — 아래 축 대부분이 IndustryLevel 하나로 통합된다. 사냥터·낚시터·수종은 곧 산업 레벨이다. 산업마다 다른 컬럼을 두는 대신 5종 전부에 같은 IndustryLevel 컬럼을 붙인다. → 산업 레벨 4장

산업 붙을 축 산업 레벨 도입 후
채굴 깊이 구간(DepthLevel) — 행 수가 깊이 구간 × 6이 된다 ⚠️ 레벨(갱도)과 두 층으로 공존 — 결정 필요
사냥 사냥터(FieldTID) — 사냥터별로 드랍이 갈린다 → 사냥 IndustryLevel로 대체
낚시 낚시터(SpotTID) — 지금은 1개라 컬럼이 없다 IndustryLevel로 대체
벌목 잔여 자원량 (유저 상태라 시트가 아니라 DB) 레벨(수종)과 직교 — 그대로 유지
농사 파종 작물 ⚠️ 레벨과 겹친다 — 결정 필요

DropTID를 첫 컬럼에 두는 이유가 여기 있다. 축이 붙으면 (축, 희귀도) 조합마다 행이 생기므로 키가 될 수 있는 컬럼이 없어진다. DropTID가 그 자리를 미리 잡아 둔다.

Rarity 컬럼을 드롭 시트에 두지 않는다ItemTable.GlobalRarity가 원본이고, 드롭 시트는 ItemTIDWeight만 갖는다.

⚠️ 제너레이터 제약 — 키는 단일 컬럼, 중복 불가

ExcelGenerator는 Type = ID 컬럼(없으면 첫 비배열 컬럼)을 자동으로 키로 잡고, 값이 중복되면 로드 시점에 예외를 던진다. 복합키가 없다.

가중치 롤처럼 "그룹 1개 : 행 N개"인 시트는 첫 컬럼에 고유 DropTID(ID)를 두고, 그룹 축(SpotTID·FieldTID·깊이 구간)은 일반 컬럼으로 둔 뒤 서버가 로드 후 (그룹 → 행 목록) 인덱스를 만든다. <산업>BasicTable(희귀도 → 아이템) 1:1 매핑이라 Rarity가 그대로 키가 된다.

ItemTID 컬럼에는 Ref 마커(ItemTable.ItemTID)를 반드시 붙인다. 끊어진 TID를 .bytes 생성 전에 잡아 파이프라인을 멈춘다. → 낚시 5장

티켓·고유 아이템은 기본/특별과 무관한 3번째 롤이므로 산업별 테이블에 넣지 않는다. 산업 테이블에 중복 정의하면 확률 조정 시 5곳을 고쳐야 하고 산업 간 편차가 생긴다.

ItemType을 "아이템 분류"와 "산업 종류" 양쪽으로 쓰는 중이다. 의미가 갈리기 시작하면 IndustryType enum을 분리한다. 자세한 우려는 기획평가.md 참조.


4. 서버 / 클라이언트 책임

책임 주체 이유
경과 시간 산정 서버 클라 시계 조작 방지
산출량·드랍 롤 서버 재화 생성 지점이므로 권위 필요 (P4)
인벤토리 반영 서버 (DB)
진행 상황 표시·연출 클라이언트 서버 값의 시각화일 뿐

필요 패킷(제안): 채취 상태 조회 / 정산 요청·응답 / 산업 선택 변경. 패킷 추가는 Server/.claude/skills/packet-creator 규칙을 따른다.

산업 선택이 자유 변경(2.0)이므로 변경 패킷이 자주 온다. 변경 시점을 서버가 기록해야 그 이전 구간을 이전 산업으로 정산할 수 있다. 산업을 바꾸는 순간 일단 정산하고 타이머를 리셋하는 편이 계산이 단순하다.


5. 결정 필요 (Open Questions)

  1. 산업별 희귀도 분포 확률값은? 산업마다 두므로 5개 시트를 정해야 한다. 현재 5종 모두 낚시 기존값(6590/2000/1000/300/100/10)을 공유하는 임시 상태
  2. 산업별 회당 산출량은? 희귀도 분포와 함께 두 개 남은 수치 차별화 수단
  3. 보스 티켓을 어디서 얻는가? 특별보상 폐지로 경로가 비었다 (2.4)
  4. 낚시의 분포를 실제로 상위로 기울이는가? 수단은 생겼고(2026-07-31) 수치가 미정이다
  5. 캐릭터 스탯이 산출량에 어떻게 곱해지는가? (2.1 — 폐지된 요일배수의 자리) → 작업슬롯 5장
  6. 무한 누적을 방치하는가? (2.2 — 감쇠를 없앴으므로 상한이 유일한 제동 장치다. 슬롯 수만큼 곱해진다)
  7. 슬롯 변경(산업·캐릭터) 시 즉시 정산하는가? → 작업슬롯 3.1
  8. 채취에 재료·도구 소모가 있는가? (사냥은 소모품 전제 — 사냥)
  9. 산업별 해금 조건이 있는가? (처음부터 5개 전부 열려 있는가)
  10. 산업 레벨 해금 요구치(N·M)는 얼마인가? ❌ 미정 — 조건의 형태는 확정됐고 (캐릭터 적성 + 계정 레벨) 값만 남았다. 엑셀은 현재 임시값 → 산업 레벨 3.3
  11. 회당 산출량이 레벨에 따라 달라지는가? 지금은 레벨과 무관이라, 상위 레벨은 시간당 총량이 1/3씩 줄고 아이템 가치로만 벌충한다 → 산업 레벨 7장 8번

해소됨:

  • 산업 레벨의 해금 조건캐릭터 적성 N + 계정 레벨 M 으로 확정(2026-08-01). UnlockCondition 범용 컬럼 대신 정수 2개로 끝났다.
  • 하위 레벨이 죽는 문제상위 레벨이 느려진 것만으로 해결(2026-08-01). 하위 아이템 수요처가 없어도 "같은 시간에 더 많이 나온다"가 이유가 된다 → 산업 레벨 4.2
  • "+α 산업"은 사냥으로 확정. 1차 산업은 5종으로 고정.
  • 실패(허탕)전 산업 폐기. 판정하면 반드시 보상이 나온다.
  • 산업 정체성 — 수치가 아니라 심리 정의로 확정 (1-1).
  • 동시 가동 산업 수택 1슬롯 수만큼으로 변경(2026-07-29).
  • 요일 로테이션폐지(2026-07-29). 배정 순서·배수 N·경계 시각 논점이 함께 사라졌다.
  • 오프라인 상한 — 24시간 100%, 이후 -50% 감쇠로 확정.
  • 보상 구조기본 9 : 특별 1한 층으로 통합(2026-07-30). 공통 보상은 여전히 별도 롤.
  • 특별보상 비율·특별보상 내부 등급 — 특별보상 폐기로 질문이 사라졌다(2026-07-30).
  • 희귀도 분포의 산업별/공통전 산업 공통산업별로 변경(2026-07-31). 가중치는 각 산업의 <산업>BasicTable이 직접 갖는다. RarityWeightTable은 만들지 않는다.
  • 채취주기 — 전 산업 공통 30초로 확정.
  • 개체 변량 — 폐기. 희귀도 + 별도 ItemTID로 등급을 표현한다.

"+β"(주말 추가 요소)는 여전히 미정 — 필요 없으면 삭제를 권장한다.

⚠️ 1~3번은 주기 통일로 남은 유일한 차별화 수단이다. 이 셋을 산업마다 다르게 잡지 않으면 5개 산업이 이름만 다른 같은 채취가 된다.