[maple-helper - 3] 메이플 헬퍼 - 3

etc메이플 헬퍼

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

해방퀘 조건

해방퀘스트는 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주에 획득할 수 있는 어둠의 흔적
  • 월에 획득하는 어둠의 흔적
  • 보스를 잡는 날짜

진행도 계산

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

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

선택한 보스 계산

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

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

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

퀘스트 정보

완료 날짜 계산

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

TypeScript
// 계산 로직 함수
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
}

결과

마치며

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