2.9 KiB
2.9 KiB
2026-03-31 낚시 미니게임 Phase 1 완료
개요
낚시 미니게임의 Phase 1 범위를 완료했습니다. 이번 완료 단계에서는 전용 스레드 기반 플레이 흐름, 입력 예약형 판정, 물고기 데이터 기반 난이도/보상 시스템, 성공 시 아트 리소스 출력까지 포함해 실제 플레이 가능한 MVP를 마무리했습니다.
완료 범위
/fishing enter,/fishing cast,/fishing end명령 흐름 확정UserName's Fishing Spot형식의 전용 스레드 생성 및 재사용- 낚시 스레드 안에서만
/fishing cast가능하도록 제한 - 사용자당 1개 활성 낚시 세션 유지
⬅️,⏺️,➡️,🛌이모지 버튼 조작- 거리 게이지 / 끊어짐 게이지 렌더링
- 입력 예약형 판정 구조 적용
- 휴식 시 끊어짐 회복 + 거리 증가 규칙 반영
- 성공/실패 후 스레드 유지,
/fishing end에서만 삭제되도록 흐름 개선 resource/data/fishing/fish_catalog.json기반 물고기 데이터 연결- 물고기별 출현 확률, 골드 범위, 반응 시간, 위치 약점, 아트 경로 적용
- 성공 시 물고기 PNG 첨부 및 결과 메시지 전송
- 대상 물고기와 상세 판정 시간은 플레이 중 UI에서 비공개 처리
- 메시지 갱신 빈도 축소 및 판정 유예 시간 추가로 반응성 개선
주요 파일
src/commands/fishing.tssrc/services/FishingService.tssrc/events/interactionCreate.tssrc/services/MiniGameRegistry.tssrc/services/RefinementService.tssrc/i18n/types.tssrc/i18n/locales/en.tssrc/i18n/locales/ko.tsresource/data/fishing/fish_catalog.jsonresource/art/fishing/*tests/services/FishingService.test.ts
플레이 흐름
- 사용자가 허용된 텍스트 채널에서
/fishing enter - 봇이 낚시 전용 스레드를 생성하거나 기존 스레드를 재사용
- 사용자가 자신의 낚시 스레드 안에서
/fishing cast - 버튼 입력으로 거리와 끊어짐 게이지를 관리
- 성공 시 물고기 결과 메시지와 PNG 출력, 골드 지급
- 같은 스레드에서 다시
/fishing cast로 재도전 가능 /fishing end로 스레드 종료 및 삭제
밸런스 / UX 정리
- 라운드 길이와 반응 시간은 Discord 버튼 지연을 고려해 완화했습니다.
- 세션 틱은 더 촘촘하게 돌리되, 메시지 수정은 필요한 시점에만 수행하도록 조정했습니다.
- 반복 플레이 피로를 줄이기 위해 물고기별 위치 약점과 거리 감소량은 JSON 데이터 기반 랜덤 범위를 사용합니다.
검증
yarn buildyarn test --runInBand
두 명령 모두 정상 통과했습니다.
비고
- 낚시 세션은 메모리 기반이므로 봇 재시작 시 유지되지 않습니다.
- Phase 2에서는 통계 조회, 프로필 영속화, 도감/인벤토리 같은 확장 기능을 고려할 수 있습니다.