Quest 만들기

SigAchievement 에서 Quest 란 Daily Quest 와 Weekly Quest 를 의미합니다.

둘다 일정 기간 내에 완수해야 하는 Quest 로 Period Quest (기간제 퀘스트) 로 보통 명명합니다.

1. Quest Group 내에 신규 quest_name.yml 만들기

모든 퀘스트 데이터는 quest_group 폴더 내에 존재해야 합니다.
이 예제에서는 miner_easy.yml 퀘스트를 만들어 볼 예정입니다. 

2. 설정

miner_easy:
  type: PERIOD_QUEST # Quest 는 이걸로 고정
  time_type: DAILY # DAILY , WEEKLY 중 하나 선택
  select_amount: 3 # 아래 Quest 중 몇개를 뽑을까요? (랜덤)
  permission: "sigachievement.start.miner_quest_easy"  # 이 퀘스트를 시작하기 위해 필요한 per

3. Quest 설정

  quest:
    # quest id 는 상위 퀘스트 (여기서는 miner_easy) 그리고 sub type 을 붙여 만드는 것을 기본 
    # naming convention 으로 합니다. 
    miner_easy_granite:
      id: miner_easy_granite # 위 id와 일치시킴
      locale_id: "block_break_granite" # localization.yml 용 
      type: DAILY
      expression: "{sigachievement_daily_block_break_granite} >= 10" # 실제 logic
      progress_not_complete: "&e{sigachievement_daily_block_break_granite}&f/&610" # 완료 전 보이는 text
      progress_on_complete: "&6{sigachievement_daily_block_break_granite}&f/&610" # 완료 후 보이는 text
      reward: # 보상
        season_points: # 시즌 포인트
          id: 'season_pass'
          point: 20
        sig_drop_loot: # sigdrop 보상
          id: "MINER_QUEST_EASY" # lootdata Id

id 와 locale_id

miner_easy_granite: 이름은 quest id 를 반드시 포함한 상태에서 명확하고 최대한 짧게 이 quest 가 무엇을 하는 것인지 인지할 수 있도록 정한다.

locale_id : 이건 quest id 와 상관이 없다. 해당 퀘스트의 objective 가 무엇인지 나타내 주는 것으로 statistic type ( ) 과 필요시 뒤 subtype ( granite ) 를 붙인 것을 적어야 한다.

block_break_granite 는 block_break 타입에서 granite 에 대해서 데이터를 받겠다는 뜻이다. 즉 granite(화강암) 을 캔 수를 의미한다.

여기서 subtype 을 사용하기 위해서는 objective whitelisting 을 꼭 거쳐야 한다는 것을 기억하자

expression

expression 은 이 퀘스트의 실제 logic 을 담당하며 { } 로 둘러싸여 있는 것은 papi 를 의미한다.

/papi parse me %sigachievement_daily_block_break_granite% 이 정상적으로 숫자로 보여야 해당 placeholder 이 제대로 사용되고 있다는 것으로 볼 수 있다. 수식 자체는 현실 세계의 수식과 비슷하게 작동한다 ( 정확히 말해선 EvalEx 형식이지만 사칙연산은 모두 지원 )

즉 위 예제는 granite 를 10개 이상 캐오기. 가 되는 것.

papi 는 sigachievement_$timeType_$statisticType_$subType 형식의 포맷을 가지고 있다

즉 위 papi 같은 경우

timeType: Daily

statisticType: block_break

subType: granite

형식이다. papi 는 모두의 정신건강을 위해 무조건 lowercase 로 변환된다.

4. locale id 를 잘 설정하기

방금 위에서 locale_id 를 설정했는데 해당 locale_id 에 해당되는 텍스트가 localization.yml 의 Quest 하위 항목에 반드시 존재해야 한다.

이렇게 locale 이 설정되어 있으면 퀘스트 gui 에서 다음과 같은 형식으로 표시되게 된다.

진행도 표시는 눈치챘듯 progress_not_complete 에 설정한 값으로 치환된다. 각 quest 에 맞는 papi 만 바꿔 주고 format 은 보통 변경할 일이 없을 것.

5. 테스트

/questgroup (quest_id) 를 통해 quest 를 열어 테스트 해 보자.

만약 열리지 않는다면 십중팔구 locale_id 가 누락되었을 가능성이 매우 높으므로 콘솔을 확인하자

/achievedebug reload 를 통해 컨픽 파일을 리로드 할 수 있다.

6. 뭔가 안돼요

Last updated