최종 갱신 (KST)

← 일감 목록
T-027

가챠 비용 — 골드를 내고 뽑는다

진우 Closed 우선순위 높음 목표 미정 · 보관됨

배경

지금 가챠는 공짜다. GachaService.Draw가 횟수와 풀 존재만 검사하고 바로 지급한다. 비용이 없으면 캐릭터를 무한히 뽑을 수 있어 적성·배치·산업 레벨 해금이 전부 무의미해진다.

기획의 sink 3종은 거래 수수료 · 슬롯 확장권 · 가챠 티켓이었으나 가챠 비용은 골드 직접으로 확정한다(2026-08-17). 티켓 획득 경로를 만들지 않아도 판매 → 골드 → 뽑기가 곧바로 이어지고, 즉시 판매(T-028)가 만든 골드에 첫 출구가 생긴다.

할 일

  • [x] 엑셀 — 풀 메타 테이블 신설 (Gacha.xlsx)
    • [x] GachaInfoTable — GachaInfoTID(= 풀 ID) · Name · CostCurrency(eEnum CurrencyType) · CostSingle · CostMulti · Description
    • [x] 방향이 뒤집혔다 — 풀 시트가 메타를 참조한다 (GachaItemTable.GachaId·GachaCharacterTable.GachaId에 Ref: GachaInfoTable.GachaInfoTID). 시트가 둘로 갈려(T-026) 메타가 한쪽만 가리킬 수 없기 때문이다 — 메타 없는 풀을 막는다
    • [x] 값은 테스트용 (1번 500/5,000 · 2번 1,000/10,000). 10연차 = 정확히 10배
    • [x] generate-tables.ps1 실행 · 엑셀 + 생성물 같은 커밋
  • [x] 서버
    • [x] GachaService.Draw에 비용 검사·차감을 넣는다 — 지급 전에 차감한다
    • [x] 잔액 부족은 EResultCode.NotEnoughCurrency(102)로 거절 — 아무것도 지급하지 않는다
    • [x] 차감 후 S_CurrencyResponse로 잔액을 내려보낸다 (TrySpendGold가 이미 저장·통지한다)
    • [x] 메타가 없는 GachaId는 거절한다 (공짜로 새는 구멍을 만들지 않는다)
    • [x] 테스트 — 잔액 부족 시 지급·차감이 둘 다 없는지 / 10연차가 CostMulti를 쓰는지
  • [x] 기획 문서 — 거래 3.2 sink ③ 갱신 · 전파 검사
  • [x] 프로토콜 미러 커밋

완료 조건

골드가 모자라면 뽑기가 거절되고, 뽑으면 골드가 줄어든 잔액이 클라에 내려온다. 공짜로 뽑히는 경로가 하나도 남지 않는다.

⏳ 실물 확인은 남았다 — 더미 클라로 돌리려면 골드를 벌 수단이 필요하다 → T-028 즉시 판매.

막고 있는 것 / 선행 일감

  • T-026 — 같은 작업 단위에서 함께 끝냈다

관련 커밋

  • 미커밋 (worktree-T-026-character-gacha)

참고

  • Server/WSGameServer/User/User.Currency.cs (TrySpendGold·TrySpendDia)
  • Server/WSGameServer/Gacha/GachaService.cs
  • 거래 3.2