게임 시스템

게임 내 퀘스트: 일일 과제와 보상

iDos Games의 준비된 퀘스트가 작동하는 방식: 일일, 주간, 1회성 과제, 상자가 있는 포인트 트랙, 과제 묶음 보너스, 그리고 대시보드에서 설정하는 방법.

퀘스트는 준비된 과제 시스템입니다. 보상이 있는 일일, 주간, 1회성 퀘스트, 상자가 있는 포인트 트랙, 과제 묶음을 끝내면 받는 보너스. 퀘스트는 모든 새 프로젝트에 들어 있습니다. 진행도와 보상은 서버가 계산하고, 게임은 플레이어가 한 일을 알리고 결과를 보여 줄 뿐입니다.

플레이어가 보는 것

  • 탭으로 된 주기: 일일, 주간, 업적, 다음 주기까지의 타이머.
  • 과제마다 진행 바와 모든 목표가 나오는 상세 창.
  • 끝난 과제를 위한 "모두 받기" 버튼.
  • 포인트가 쌓이면 상자가 열리는 포인트 트랙.
  • 끝난 과제가 기다릴 때 탭의 배지.
퀘스트
12 450
320
일일2
주간
업적
08:12:44 후 새 퀘스트
퀘스트 포인트: 45
20
40
60
80
100
몬스터 20마리 처치
20/20
+10
받기
스테이지 3개 클리어
3/3
+10
받기
영웅 10회 강화
7/10
+15
받기
상점에서 아무거나 구매
0/1
+20
받기
모두 받기
주기는 탭으로 표시되며 다음 주기까지의 타이머가 있습니다.
포인트 트랙: 완료한 퀘스트가 포인트를 더하고, 도중에 상자가 열립니다.
완료한 퀘스트는 ‘받기’를 기다리고, 나머지는 진행도를 보여 줍니다.
‘모두 받기’는 완료한 퀘스트를 한 번에 받습니다.
예시. 퀘스트 화면: 주기, 상자가 있는 포인트 트랙, 퀘스트 목록.

퀘스트의 구조

  • 주기: 일정이 있는 과제 묶음. 일일, 주간, 상시 또는 기간 한정 이벤트. 주기는 단계별로 이어질 수 있습니다. 예를 들어 8주짜리 시즌에서 주마다 자기 과제와 포인트 트랙이 있습니다.
  • 퀘스트: 각자 카운터가 있는 목표 하나 이상("몬스터 20마리 처치")과 보상. 퀘스트는 다른 퀘스트를 먼저 끝내도록 요구할 수 있고, 그렇게 연속 퀘스트를 만듭니다.

보상은 세 가지이며 모두 동시에 작동합니다:

  1. 퀘스트 보상: 모든 목표를 끝냈을 때.
  2. 포인트 트랙의 상자: 받은 퀘스트가 주기 포인트를 더하고, 필요한 합계에서 상자가 열립니다.
  3. 그룹 보너스: 한 그룹의 퀘스트를 정해진 수만큼 끝냈을 때.

진행도는 어디서 오나

출처예해야 할 일
게임이 알림몬스터 처치, 레벨 클리어일이 일어나는 곳에 코드 한 줄
서버가 셈상점 구매, 다른 퀘스트 받기없음, 이벤트만 고르기
서버 스크립트클라우드 코드의 나만의 규칙스크립트에서 호출

단계 01주기 만들기

대시보드를 열고 프로젝트를 고른 뒤 라이브 운영 → v2 → 퀘스트로 가세요. 주기 탭에서 주기를 만드세요. 예를 들어 일일 주기를 만들고, 원하면 상자가 있는 포인트 트랙을 추가하세요.

단계 02과제 추가하기

퀘스트 탭에서 퀘스트를 만드세요: 이름, 주기, 목표, 보상. 목표마다 진행도가 어디서 오는지 고르세요. 게임이 센다면 카운터 이름을 고르세요. 예: monsters_defeated.

페이지의 AI 버튼은 어시스턴트를 엽니다: "승리, 상점 구매, 영웅 강화에 대한 일일 퀘스트 세 개를 만들어 줘". 변경을 제안하면 확인한 뒤 저장을 누르세요.

단계 03게임이 진행도를 알리게 하기

게임이 세는 목표는 AI 코더에게 요청하세요: "몬스터를 처치할 때마다 monsters_defeated를 세 줘". 코드의 알맞은 곳에 호출을 넣어 줍니다. 방치형 RPG 템플릿은 이미 클리어한 스테이지와 영웅 강화를 알립니다.

개발자용

퀘스트는 @idosgames/core의 client.quest로 작동합니다. 진행도는 퀘스트가 아니라 카운터 이름으로 보냅니다. 서버가 그 카운터를 듣는 모든 진행 중인 과제에 전달합니다.

TypeScript
// 일이 일어나는 곳: 몬스터를 처치함
await client.quest.addQuestProgress('monsters_defeated', 1)

// 퀘스트 화면: 플레이어의 진행도, 주기는 알아서 넘어갑니다
const state = await client.quest.getUserQuestState()

// 끝난 퀘스트의 보상 받기
const claim = await client.quest.claimQuestReward('daily_win_20', 'daily')
if (!claim.ok) return showError(claim.error)
  • addQuestProgress는 출처가 게임인 목표만 움직입니다. 서버가 직접 세는 목표는 거부됩니다.
  • 값을 "혹시 몰라서" 보내지 마세요. 목표에 호출당 최대치가 있으면 넘었을 때 플레이어 계정이 차단됩니다.
  • 지급된 보상은 SDK 캐시의 잔액에 이미 반영되어 있어 다시 불러올 필요가 없습니다.

모든 필드는 SDK의 MCP 서버가 제공하는 quest-system 스킬에 설명되어 있습니다.

자주 묻는 질문

프로젝트에 퀘스트를 추가해야 하나요?

아니요. 퀘스트는 모든 새 프로젝트에 들어 있습니다. 대시보드에서 퀘스트가 하나라도 설정되면 퀘스트 탭이 플레이어에게 보입니다.

게임은 과제가 끝난 걸 어떻게 아나요?

진행도는 서버가 셉니다. 어떤 과제는 서버가 직접 세고(구매, 다른 퀘스트), 몬스터 처치 같은 게임 속 행동은 게임이 코드 한 줄로 서버에 알립니다.

배틀 패스를 만들 수 있나요?

주기의 포인트 트랙이 비슷한 메커니즘을 줍니다. 받은 퀘스트마다 포인트가 쌓이고, 트랙의 상자는 플레이어가 필요한 포인트에 이르면 열립니다.

함께 보기

나만의 게임을 만드세요

아이디어를 한 문장으로 설명하면 AI 코더가 만들어 주고, 게임은 고유 링크로 바로 공개됩니다.