메이플 헬퍼 - 3

etc

작성일 : 2024.12.08

메이플에는 제네시스 무기 해방이라는 엔드 컨텐츠가 있습니다. 이번 겨울 쇼케이스 이후에 제네시스 무기 해방 퀘스트의 방법이 바뀌어 이를 계산해주는 계산기를 만들기로 했습니다.

해방퀘 조건

해방퀘스트는 255레벨 부터 시작할 수 있고 하위 보스를 잡고 필요한 어둠의 흔적을 모두 채우면 다음 퀘스트를 진행할 수 있습니다.

퀘스트 필요한 어둠의 흔적
사자왕 반 레온 500
시간의 대신관 아카이럼 500
폭군 매그너스 500
윙 마스터 스우 1000
파멸의 검 데미안 1000
거미의 왕 윌 1000
악몽의 주인 루시드 1000
붉은 마녀 진 힐라 1000

어둠의 흔적은 검은 마법사의 수하 보스들을 잡아 채울 수 있습니다.
이때 검은 마법사는 월 1회 다른 보스들은 주 1회 잡을 수 있는데 목요일마다 보스가 초기화되어 다시 잡을 수 있습니다.

추가로 이 보스들은 여려 명이서 잡게되면 1/n로 보상이 분배됩니다.

보스이름 난이도 보상
스우 노멀 10
하드 50
익스트림 50
데미안 노멀 10
하드 50
루시드 이지 15
노멀 20
하드 65
더스크 노멀 20
카오스 65
이지 15
노멀 25
하드 75
듄켈 노멀 25
하드 75
진 힐라 노멀 45
하드 90
검은 마법사 하드 600
익스트림 600

필요한 로직

제게 필요한 정보는 다음이 있습니다.

  • 현재 진행중인 퀘스트
  • 현재 보유한 어듬의 흔적
  • 1주에 획득할 수 있는 어둠의 흔적
  • 월에 획득하는 어둠의 흔적
  • 보스를 잡는 날짜

진행도 계산

진행중인 퀘스트를 선택한 후 보유중인 어둠의 흔적을 입력하면 퀘스트의 진행도를 알려줍니다.

const progress = currentBoss?.required_darkness
  ? (currentQuest.gauge / currentBoss.required_darkness) * 100
  : 0 // 퍼센트 계산, required_darkness가 없으면 0%

선택한 보스 계산

보스는 난이도와 상관없이 주에 1회 잡을 수 있기 때문에 input태그를 이용해 하나의 난이도만 선택할 수 있도록 해주고 몇명이서 보스를 잡았는지 선택할 수 있게 합니다.

그리고 선택한 보스의 보상 합계를 합산해 1주에 획득할 수 있는 보상으로 기록하고 소수점은 제거 합니다.

이때 주에 획득할 수 있는 보상과 월에 획득할 수 있는 보상을 분리합니다.

퀘스트 정보

완료 날짜 계산

사용자가 계산기를 사용한 날짜를 기준으로 계산해 현재 날짜에서 1주에 획득하는 어둠의 흔적 / 모든 총 필요한 어둠의 흔적으로 계산해 완료 예상 날짜를 제공합니다.

// 계산 로직 함수
const result = {
  need_darkness: 0,
  bossReward: 0,
  blackMageReward: 0,
  totalReward: 0,
  date: 0,
}
// 주마다 보상을 누적해 계산
export const calculateRewards = (result: RewardResult): RewardResult => {
  const reward = { ...result }

  while (reward.totalReward < reward.need_darkness) { 
    reward.totalReward += reward.bossReward
    if (reward.date % 4 === 0 || reward.date > 0) {
      reward.totalReward += reward.blackMageReward
    }
    reward.date += 1
  }
  return reward
}

결과

마치며

이번에 해방퀘의 조건이 바뀌면서 빠르게 이 기능을 추가하면 좋은 반응이 있겠단 생각이 들어 바로 반영 하게 되었습니다. 역시 만들고 난 후 여러 사람들이 이용해주는 데이터를 확인할 수 있었습니다.