최종 갱신 (KST)

← 일감 목록
T-067

서버 — 장비 뽑기 (가챠 풀에 장비 축 추가)

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

배경

장비를 얻는 정식 경로가 없다. 지금 장비를 넣는 방법은 치트(ECheatCommand.GiveEquip)뿐이라 테스트 계정에서만 장비를 볼 수 있다. 창고 장비 탭은 2026-09-19에 열렸으므로 (T-043) 받을 그릇은 준비돼 있다.

가챠는 이미 1회·10회로 돌고 있는데(GachaService) 풀이 아이템·캐릭터 둘뿐이다:

축 시트 GachaRewardType
아이템 GachaItemTable Item = 1
캐릭터 GachaCharacterTable Character = 2
장비 없다 없다

캐릭터 축이 이미 "개체를 발급하고 목록을 다시 내려보내는" 모양이라, 장비도 같은 자리에 붙는다 (GrantEquip → S_EquipSyncResponse). 새 지급 경로를 만들 필요가 없다.

2026-09-19 — 뽑을 물건은 다 생겼다. EquipTable이 5행 → 69종이 됐다 (무기 31 · 장신구 7 · 보석 31, Common~Mythic 전 등급). 풀만 만들면 된다.

할 일

  • [x] GameDesign/Excel — GachaEquipTable 시트 (GachaId · EquipTID · Count · Weight). GachaItemTable과 같은 모양이고 Ref는 EquipTable을 본다 - TID 대역이 규칙적이라 가중치를 등급으로 묶기 쉽다 — 11xx 농사 · 12xx 낚시 · 13xx 채굴 · 14xx 벌목 · 15xx 사냥 (무기), 31xx~35xx (보석), 20xx 장신구(전 산업), 끝자리가 등급 - ⚠️ 구 번호 1002(낚싯대) · 2002(어부의 목걸이)는 대역 밖이다. 풀에 넣을지 따로 정한다

  • [x] GachaInfoTable에 장비 풀 행 추가 (이름 · 비용 — CostSingle/CostMulti)

  • [x] GameData.GachaRewardType · 프로토콜 EGachaRewardType에 Equip = 3 (값이 1:1이어야 한다 — PacketEnumTest가 본다)

  • [x] GachaRewardInfo에 EquipTid 필드 — 연출용. 지금 RewardType이 ItemId/CharacterTid 중 무엇을 읽을지 정한다

  • [x] GachaPoolCatalog — 세 번째 시트를 풀에 조립

  • [x] GachaService.Draw — 장비 보상은 Count만큼 GrantEquip. 캐릭터와 같이 개체 PK가 DB 발급이라 응답보다 늦게 S_EquipSyncResponse로 내려간다

  • [x] 테스트 · Server/docs 갱신

  • [x] 클라 배선 (2026-09-20) — GachaPresenter.draws 4줄 → 8줄(캐릭터·무기·장신구·보석 × 1회·10회) · GachaResultPresenter.ToSlotData에 EGachaRewardType.Equip 분기(EquipTid → GetEquipName). 같은 작업에서 구슬 풀 버튼을 뺐다(T-031 · 이슈 #30)

  • [x] 플레이 확인 (2026-09-20 · 사용자) — 뽑으면 골드가 빠지고 창고 장비 탭에 즉시 들어온다

결과 (2026-09-19 · 서버 몫)

  • 실측 (더미 클라 + 실서버) — 무기 10연 5,000골드 → 무기 10개 · 장신구 1회 300 → 2001 · 보석 1회 200 → 3302. 장비는 S_EquipSyncResponse로 창고 칸 0부터 차례로 들어왔다

  • 풀을 종류별로 셋 둔다 (사용자 결정) — GachaId 3 무기 · 4 장신구 · 5 보석. 한 풀에 한 종류(GachaEquipSheetTest가 지킨다)

  • 비용(테스트값): 무기 500 / 5,000 · 장신구 300 / 3,000 · 보석 200 / 2,000 골드

  • 가중치(테스트값): 등급별 640 · 200 · 100 · 40 · 15 · 5 (아이템 풀과 같다). 구 번호 1001·1002·2001·2002·3001도 종류대로 넣었다

  • GachaRewardType.Equip = 3 · EGachaRewardType.Equip = 3 · GachaRewardInfo.EquipTid(끝에 추가)

  • GachaService — 장비 1개당 GrantEquip 1건. 개체는 S_EquipSyncResponse로 늦게 내려간다

  • 기획 반영: 캐릭터 5.1.1 · 게임기획코어 5장 · 아이템 4장 · 거래 3.2 · 문서관계도 · Server/docs/데이터-카탈로그.md

완료 조건

더미 클라 또는 클라 가챠 화면에서 장비 풀을 1회·10회 뽑으면 골드가 빠지고, 뽑힌 장비가 창고 장비 탭에 즉시 나타난다(재접속 불필요).

막고 있는 것 / 선행 일감

  • 없음. 받는 쪽(클라 장비 탭·S_EquipSyncResponse 처리)도, 뽑을 물건(EquipTable 69종)도 서 있다.
  • ⚠️ 장비 풀의 확률·비용은 기획 결정이다 — 테스트값으로 먼저 돌려도 된다(T-008과 같은 성격).
  • ⚠️ 장비 BasePrice와 묶인다 — 뽑기 비용이 판매가 기댓값보다 낮으면 뽑아서 되파는 골드 루프가 생긴다 (T-018이 Special 6종에서 같은 함정을 적어 뒀다).
  • 연관: T-029 상자 풀에 장비를 넣을지와 같은 결정이다. 한쪽만 정하면 경로가 둘로 갈린다.

관련 커밋

  • 서버 몫: 6a8bc84 — 장비 풀 3개 · GachaEquipTable · EGachaRewardType.Equip
  • 클라 몫: 7fc65ea(보상 분기) · 81bd727(씬 버튼 8줄)
  • 요청·완료: 이슈 #27 — 2026-09-20 닫음

참고

  • 클라가 할 일은 버튼 2줄 + 보상 분기 하나뿐이다 — GachaPresenter.draws(인스펙터 배선)에 gachaId·drawCount 2줄, GachaResultPresenter.ToSlotData에 EGachaRewardType.Equip 분기. ECheatCommand 번호와 인자 뜻만 알려 주면 붙인다.
  • 치트 지급(GiveEquip = 8)은 이미 있다 → Server/docs/치트.md