🔁 방향 변경 (2026-09-25 · 사용자). 상자를 별도 시트(
CommonRewardTable)가 아니라 산업 레벨 드롭 테이블(<산업>BasicTable)의 신화 아래 2줄로 옮긴다. 산업·레벨마다 확률을 두고 레벨이 오를수록 확률과 상자 등급이 함께 오른다. Lv2~5의 Lv1 자원 혼입 2줄은 그 자리에서 빠진다. 테이블을 없애면 서버가 깨지므로 서버에 요청했다 → 이슈 #33 (확률표도 거기에).🔁 재설계 (2026-10-01 · 사용자). 2줄이 아니라 3줄 — 모든 레벨에서 나무·은·황금이 다 나온다(저레벨에서도 황금 상자를 본다). 상자는 레벨마다 따로 15종(
100019~100033· 풀 9~23)이고, 가치는 그 레벨 판정 기대값 × 10 · 30 · 100. 확률은 전 레벨 2% · 0.3% · 0.03%. 기존 상자 3종(100007~100009· 풀 6~8)은 지우고 결번으로 둔다 → 아이템 4.1.🔁 다시 별도 롤로 (2026-10-02 · 사용자). 상자가 자원을 대신하지 않게 자원 롤과 따로 굴린다.
CommonRewardTable을 되살리고IndustryType·IndustryLevel컬럼을 더해 (산업, 레벨)마다 확률을 둔다(75행 — 특정 산업에서 상자가 더 잘 나오게 할 수 있다). 드롭 테이블의 상자 줄은 다시 뺐다.🔁 공통 + 덮어쓰기로 (2026-10-02 · 사용자). 산업 칸에 None/All을 두는 대신 시트를 나눴다 —
CommonRewardTable(레벨별 공통 15행) ·CommonRewardOverrideTable(산업, 레벨 — 행이 있으면 그 레벨 공통을 통째로 대신, 지금 0행). 이벤트는 나중에 기간 있는 시트를 더해 공통에 얹는다.
🔁 상한 50 → 1000 · 연속 개봉 크래시 수정 (2026-10-05 · 태웅).
- 상한 — 50은 "자주 까게" 하려던 값인데, 자는 동안·일하는 동안 방치해 두고 돌아와 확인하는 P1의 재미와 부딪혀 대부분이 버려졌다.
Item.xlsx상자 15종MaxStack1000. 한 번에 여는 수(BoxOpenMax)는 50 그대로 — 여러 번 나눠 연다.- 크래시 — 50개를 연 뒤 다시 50개를 열면 튕겼다.
GachaService.OpenBox가 DB 스레드에 넘긴 차감 목록(SaveItemChangesRepository)에 보상 변경분을AddRange해 저장 도중Collection was modified→ 세션 끊김 → 클라 핑 타임아웃 → 종료. 응답용 목록을 새로 만들고, 저장소도 받은 목록을 복사하게 고쳤다(이슈 #55 — 진우 리뷰 요청)(테스트상자_차감_저장_작업에는_보상_변경분이_섞이지_않는다). 띄워 둔 서버는 재시작해야 반영된다.- 레벨별 기대값 점검 — 판정 기대값이 레벨당 ×3, 판정 시간도 ×3이라 시간당 자원 수익은 레벨과 무관하게 같다(점수 100만당 903). 상자 내용물 기대값은 목표(판정 기대값 × 10·30·100)의 Lv1 94% → Lv5 86% — 큐브가 고정가라 높은 레벨일수록 조금 모자란다. 상자 즉시 판매가는 내용물 기대값의 약 1/5. 시간당 상자 가치도 레벨과 무관하게 같다(높은 레벨 상자는 크고 드물다).
배경
T-029로 상자를 깔 수 있게 돼도, 상자를 얻는 길이 없다.
기획에는 채취 판정 1회마다 별도로 도는 공통 보상 롤이 이미 설계돼 있으나
CommonRewardTable이 미작성이다 → 아이템 1.4.
이 일감이 루프를 닫는다:
채취 → 상자 → 개봉 → 아이템 → 판매 → 골드 → 캐릭터 뽑기 → 배치 → 채취
띄워 두기만 해도 상자가 쌓이고, 들여다볼 때 깔 것이 있다 — P3(하루에 한 번 들여다볼 이유)에 맞는 장치이며, 놓쳐도 사라지지 않으므로 P1을 어기지 않는다.
할 일
- [x] 엑셀 —
CommonRewardTable(DropCommon.xlsx) 전 산업 공통 1벌 ·ItemTID·Count·ChancePerMillion— 미당첨 가중치 대신 행마다 독립 확률로 바꿨다(사용자: "판정 1회당 각각 엄청 낮은 확률"). 한 판정에 둘 이상 나올 수 있다 - [x]
산업 레벨별 차등 — 당분간 공통→ 2026-09-25 뒤집힘(위 머리글) - [x] 서버 — 정산에 별도 롤(
CommonRewardCatalog.Roll) · 결과는 그 슬롯의S_GatherResultResponse에 얹는다 - [x] 테스트 — 확정(백만분율 100만)이면 판정마다 · 행마다 따로 · 없으면 드롭만
- [x] 기획 문서 — 아이템 1.4 · 4.1 · 자원채취 · 게임기획코어 5장
- [x] 실측 —
확률이 낮아(0.2%) 실서버에서는 보지 못했다. 이관 뒤에 확인한다(레벨 툴팁에 럭키 상자 줄이 보이는지 · 채취로 실제로 나오는지) → 태웅이 클라에서 확인했다(2026-10-02 · #49 코멘트 — Lv1에서 상자 드랍 · 레벨별 툴팁 표시) - [x] 프로토콜 미러 커밋 —
15d5223에 함께 들어갔다 (2026-09-25 점검) - [x] 서버 — 상자를
<산업>BasicTable로 이관 ·CommonRewardTable·CommonRewardCatalog폐지 (이슈 #33) — 2026-10-01 · 엑셀(드롭 5 · 아이템 · 가챠 · 우편 템플릿 1번 상자 교체) · 서버 테스트 729 통과 - [x] 공통 + 산업별 덮어쓰기 시트 분리 (2026-10-02)
- [x] 상자를 별도 롤로 되돌림 · (산업, 레벨)별 확률 —
CommonRewardTable75행 ·Roll(industry, level, …)(2026-10-02) - [x] 클라 — 산업 레벨 툴팁의 럭키 상자 줄을
CommonRewardTable에서 읽게 — 공통 + 덮어쓰기 두 시트 (태웅 · 이슈 #49) —1153da8(2026-10-02) · 서버 확인 완료 — 덮어쓰기 규칙이CommonRewardCatalog.Roll과 같다. 이슈 닫음 (2026-10-06) - [x] 상자 15종 재설계 — 레벨별 상자 · 내용물을 레벨 기대값에 맞춤 (2026-10-01)
- [x] 상자 상한 50 · 넘치는 몫은 버린다 —
MaxStack·BoxOpenMax99 → 50, 채취 지급이MaxStack에서 자른다(User.ClampToMaxStack· 우편·개봉 경로는 자르지 않음). 99는 그동안 서버가 강제하지 않던 값이었다 (2026-10-01) - [x] 상자 상한 50 → 1000 · 연속 개봉 크래시 수정 — 엑셀
MaxStack·GachaService.OpenBox·SaveItemChangesRepository복사 · 서버 테스트 748 통과 (2026-10-05 · 태웅 — 서버 폴더 변경이라 진우 확인 필요) - [x] 클라 — 산업 레벨 툴팁에
■ 럭키 상자묶음 · 상자 개봉 수량 팝업을 "몇 개를 열까?"로 (2026-09-25 · 개봉 팝업 문구는 사용자 확인 · 럭키 상자 묶음은 데이터가 오면 저절로 보인다)
완료 조건
캐릭터를 배치해 두면 아무 조작 없이 상자가 인벤토리에 쌓이고, 그 상자를 T-029로 까서 나온 아이템을 T-028로 팔아 T-027의 가챠를 돌릴 수 있다. 루프 한 바퀴가 실제로 돈다.
막고 있는 것 / 선행 일감
— 같은 작업에서 함께 섰다 (2026-09-19)T-029
관련 커밋
8dcd8fa상자를 산업 레벨별 15종으로 바꾸고 드롭 테이블로 옮긴다c4f492c상자 최대 수량을 50개로 줄이고 넘치는 몫은 버린다85d8899상자를 자원과 따로 굴리고 확률을 (산업, 레벨)마다 둔다