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" # 이 퀘스트를 시작하기 위해 필요한 per3. 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 Idid 와 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. 뭔가 안돼요
objective 의 statistic_objective 을 통해 해당 subtype 에 대해 whitelist 했나요?
해당 subtype 의 id 가 올바른가요?
/papi parse me %papi% 를 하면 정상적인 값이 나오나요?
gui 를 열였을 때 콘솔에 에러가 뜨지는 않나요?
locale_id 가 localization.yml 실제로 존재하나요? 그리고 Quest 아래 항목에 존재하나요?
achievedebug reload 를 통해 컨픽을 리로드 했나요?
이걸 모두 확인해도 안된다면 개발자 호출.
Last updated