내 작은 왕국 기획 위키

채집과 주머니

01 게임

이 문서 안에서

자원이 생기는 경로는 주민 개인 주머니 하나뿐입니다. 적립 공식, 용량 배수, 채집 직업 4종 산출물, 광산 8곳과 배정 규칙, 수거 명세서와 +10% 보너스, 음식 버프 적용 위치를 정합니다.

한 줄 요약 — 주머니 수량은 gatheredAt 이후 경과를 나눈 파생값이고, 플레이어가 버튼을 누르기 전까지는 공용 가방으로 넘어오지 않습니다.


1. 주머니 모델

1.1 공식

용량 (villagerPouchCapacity): capacity = max(1, round((100 + (level-1)×10) × traits.pouch × pouchMultiplier × maxBuffMultiplier))

단위당 시간 (villagerGatherMs): ms = max(2000, floor((8000 × mineMul) / (max(0.1, traits.gather) × max(1, gear))))

보유 수량 (gatheredAmount): amount = min(capacity, max(0, floor(buffedWorkMs(gatheredAt, now, buffs, "gather_rate", role) / villagerGatherMs)))

gather_rate 버프는 ms/개가 아니라 시계 배율로 적분에 곱해집니다. 구매권(packPurchases)은 세 함수의 필수 인자입니다.

1.2 상수

상수
GATHER_MS_PER_UNIT8,000 ms1개당 작업 시간
POUCH_CAPACITY_BASE100Lv.1 용량
POUCH_CAPACITY_PER_LEVEL10레벨 1당 추가 용량
POUCH_ENTITLEMENT_MULTIPLIER2perm_pouch 소유 시 용량 배수
COLLECT_BONUS_RATE0.1일괄 수거 보너스 비율
villagerGatherMs 하한2,000 ms분당 30개 속도 천장
traits.gather 하한0.10으로 나누기 방지
gear.gatherSpeed 하한1장비가 속도를 깎지 못함

1.3 레벨별 기본 용량 (특성 ×1, 구매권·버프 없음)

Lv용량만충 시간
1100≈ 13분 20초
5140≈ 18분 40초
10190≈ 25분 20초
20290≈ 38분 40초

상한 초과 시간은 버려집니다. 수거 시 gatheredAt = now 리셋.

1.4 자동 유입 없음

채집 자원은 공용 가방으로 저절로 흘러들지 않습니다. 예외는 없습니다 — 수거는 언제나 플레이어가 누릅니다. stats.resourcesGathered는 "거둔 양"입니다.

2026-08-10 — 전투도 이 규칙 아래로 들어왔습니다. 스테이지 보상은 전사 개인의 전리품 자루에 쌓이고 전사 상세에서 수거합니다(전투 6장). 이제 왕국에서 플레이어를 거치지 않고 가방에 들어오는 것은 없습니다.


2. 채집 직업 4종과 산출물

직업주머니 자원비고
farmer작업지에 따라 가변 (wheat~grape)밭 6단계 (작업지 선택)
woodcutter작업지에 따라 가변 (birch_log~ebony_log)숲 5단계 (작업지 선택)
miner배정 광산에 따라 가변 (quarry_stone~crystal)광산 8곳
fisher작업지에 따라 가변 (river_trout~moonlit_eel)어장 5단계 (작업지 선택)
warrior / cook / blacksmith없음villagerPouchnull

해석: premiumResourceFor(rosterId) ?? worksiteResource(v) ?? ROLE_RESOURCE[role]. 작업지가 있는 직업(농부·나무꾼·사냥꾼·어부)은 배정된 작업지의 자원을 캐고, 광부는 배정 광산의 광물을 캡니다. 인장 5·6번 후보는 전용 재료만 캡니다.

후보전용 재료
farmer-5·farmer-6golden_grain
woodcutter-5·woodcutter-6heartwood
miner-5·miner-6mithril
fisher-5·fisher-6deep_pearl

2.1 작업지 (src/game/data/worksites.ts)

농부·나무꾼·사냥꾼·어부는 광부의 광산처럼 작업지를 선택합니다. 레벨 게이트를 넘으면 더 깊은 곳을 열 수 있고, 깊을수록 좋은 재료를 가져오되 gatherMsMul이 올라 느려집니다.

직업작업지 수시작 자원 → 최종 자원레벨 범위
농부6wheat(Lv.1) → grape(Lv.16)1·3·5·8·12·16
나무꾼5birch_log(Lv.1) → ebony_log(Lv.15)1·3·6·10·15
사냥꾼5game_meat(Lv.1) → boar_tusk(Lv.15)1·3·6·10·15
어부5river_trout(Lv.1) → moonlit_eel(Lv.15)1·3·6·10·15

작업지 이동은 setVillagerWorksite 명시적 조작만. 이동 시 gatheredAt = now로 미수거분 소실. defaultWorksiteFor는 시작 작업지(체인의 첫 번째). 인장 후보(전용 재료)는 작업지가 없습니다(resolvedWorksiteFornull).


3. 광산 8곳

개방 허가 비용 = round(levelReq × 0.75) + 3. gatherMsMul은 ms/개에 곱해집니다(클수록 느림).

indexid이름levelReq자원gatherMsMulsealOnly개방 허가
0pebble-quarry자갈 채석장1stone1.00판매 안 함
1copper-shaft구리 갱도3copper1.05인장 5
2iron-vein철광 맥5iron1.10인장 7
3coal-depths석탄 심층8coal1.15인장 9
4silver-gallery은빛 회랑12silver1.20인장 12
5sunstone-cavern태양석 동굴16sunstone1.25인장 15
6crystal-hollow수정 공동20crystal1.30인장 18
7mithril-abyss미스릴 심연3mithril1.35판매 안 함

해금 규칙 (isMineUnlocked): 광부 아님→false / sealOnly→인장 광부+레벨 충족만 true / 인장 광부→일반 광산 false / 개방 허가 있음→true / level < levelReq→false / 선형 체인 충족→true.

인장 광부 판정: premiumResourceFor(rosterId)==="mithril" 또는 seals > 0.

defaultMineFor는 해금 중 가장 얕은 곳. 이동은 setMinerMine 명시적 조작만. 이동 시 gatheredAt = now로 미수거분 소실. 허가는 주민 개인 소유(VillagerState.mineGrants), 체인 전체를 엽니다.

copper·coal·silver·sunstone·crystal은 레시피에 안 쓰입니다. 가치는 판매가뿐입니다.

광산시간당 개수개당 판매가시간당 골드
자갈 채석장4501450
구리 갱도4292857
철광 맥4092818
석탄 심층39141,565
은빛 회랑37562,250
태양석 동굴360103,600
수정 공동346165,538
미스릴 심연3336020,000

4. 수거

4.1 [가방으로 옮기기] — collectVillager(id)

주머니 읽기 → amount <= 0이면 세이브 불변 → 집사의 손길 소유 시 collectBonus(amount) 가산 → inventory += amountgatheredAt = now + pruneBuffsstats.resourcesGathered += amount → 1회 persist. 약초꾼의 개별 collectForager도 약초 자원별로 같은 보너스를 붙입니다.

4.2 [모두 수거] — collectAllVillagers(now, bonus)

전 주민 합계 계산 → total <= 0이면 불변 → bonus시 자원별 collectBonus 가산 → 인벤토리 가산 → 비워진 주민만 시계 리셋 → 1회 persist. 프리뷰(collectPreview)와 동일 villagerPouch 사용.

4.3 +10% 보너스

collectBonus(amount) = max(1, ceil(amount × 0.1)). 올림, 최소 1. 수거 자체는 무료·무제한. 광고는 보너스만 삽니다. 규칙: { dailyCap: null, cooldownMs: 600_000 }. 다른 보상형 지면은 주민 카드의 20분 gather_boost입니다.

2026-08-03 — 수거 무료화, 광고는 보너스 전용으로 변경.

2026-08-04 — 일일 1회 → 10분 쿨다운. 반복 시 +10% 수렴, 집사의 손길과 같은 몫.

4.4 집사의 손길 (perm_collect, $9.99)

개별·일괄 수거가 곧 ×1.1이고, 모든 주머니와 약초 채집망의 채집 시계가 상시 ×1.5입니다(광고 불필요). 주민 카드의 20분 광고 가속은 선택한 한 명에게 추가로 곱해집니다. 특권은 수거를 대신 누르지는 않습니다.

2026-08-10 — 부팅 시 자동 수거 삭제. 플레이어가 손대기 전에 주머니를 비우는 것은 채집 루프의 유일한 조작을, 가장 많이 지불한 플레이어에게서 걷어내는 일이었습니다. 상품은 수거의 크기와 채집 속도를 팔되, 조작 자체는 남깁니다. tests/architecture.test.tsmain.ts를 지킵니다.


5. 버프 곱셈 자리

용량 사슬: (100+(lv-1)×10) × traits.pouch(0.90~1.70) × pouchMultiplier(1|2) × maxBuffMultiplier(1|1.5). 최소 1.

기본 속도: max(2000, floor((8000 × placeMul × resourceMul) / (innate × gear))). 실제 누적 작업 시간은 여기에 음식·광고 gather_rate 적분과 집사의 손길 collectGatherMultiplier(1|1.5)를 곱합니다.

용량 버프만 창 최댓값 사용. 속도 버프는 buffedWorkMs 적분. 현재 빌드 최대 innate×gear = 2.81(하한 도달 불가). 버프 지속 상한 = 기본 × 2(MAX_BUFF_STACK_FACTOR).

생선 스튜(harvest): 즉시 max(1, floor((min×60000)/villagerGatherMs)) 개를 가방에 직접 넣음. gatheredAt 불변. gather_rate 버프 무시, 광산·장비 반영.


6. 화면

자리표시
주민 카드{자원} {n}/{cap}
주민 상세수량, 분당 채집량, 가득 참 안내, 가방으로 옮기기 버튼
광산 목록이름+자원 / 레벨·인장 조건 / 버튼(작업 중·이동·개방·잠김)
명세서 시트자원별 수량·+n, 합계, 수거/수거(+10%)/광고/쿨다운 버튼

7. 설계안 — 맵 채집 노드 (미구현)

주머니 모델과 별개의 맵 타일 채집 설계. P5. 노드 5종: 해초 밭(120초)·야생 허브(90초)·낚시터(60초)·벌 떼(300초)·야생 동물(180초).


이어서 읽기

이 문서를 가리키는 곳