2026-04-14 00:22:46 +09:00
|
|
|
// 제네시스 해방 챕터 (8단계, 총 6,500)
|
|
|
|
|
// phase 1: 반레온/아카이럼/매그너스/스우 (1차 해방)
|
|
|
|
|
// phase 2: 데미안/윌/루시드/진힐라 (2차 해방)
|
|
|
|
|
export const GENESIS_CHAPTERS = [
|
|
|
|
|
{ idx: 0, phase: 1, boss: '반 레온', required: 500 },
|
|
|
|
|
{ idx: 1, phase: 1, boss: '아카이럼', required: 500 },
|
|
|
|
|
{ idx: 2, phase: 1, boss: '매그너스', required: 500 },
|
|
|
|
|
{ idx: 3, phase: 1, boss: '스우', required: 1000 },
|
|
|
|
|
{ idx: 4, phase: 2, boss: '데미안', required: 1000 },
|
|
|
|
|
{ idx: 5, phase: 2, boss: '윌', required: 1000 },
|
|
|
|
|
{ idx: 6, phase: 2, boss: '루시드', required: 1000 },
|
|
|
|
|
{ idx: 7, phase: 2, boss: '진 힐라', required: 1000 },
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
// 퀘스트 이미지 경로 (제네시스)
|
2026-04-15 11:18:00 +09:00
|
|
|
export const QUEST_BOSS_IMAGE_BASE = 'https://s3.caadiq.co.kr/maplestory/liberation/genesis/quest'
|
2026-04-14 00:22:46 +09:00
|
|
|
export const QUEST_BTBOSS_IMAGE_BASE = 'https://s3.caadiq.co.kr/maplestory/liberation/genesis/quest/btboss'
|
2026-04-14 09:54:06 +09:00
|
|
|
// 주간/월간 보스 초상화 (해방용)
|
|
|
|
|
export const LIBERATION_BOSS_IMAGE_BASE = 'https://s3.caadiq.co.kr/maplestory/liberation/genesis/boss'
|
2026-04-14 00:22:46 +09:00
|
|
|
|
|
|
|
|
export const GENESIS_TOTAL = GENESIS_CHAPTERS.reduce((s, c) => s + c.required, 0) // 6500
|
|
|
|
|
|
|
|
|
|
// 주간 보스 (주 1회)
|
|
|
|
|
export const WEEKLY_BOSSES = [
|
|
|
|
|
{
|
2026-04-15 11:18:00 +09:00
|
|
|
key: 'lotus', name: '스우', image: '스우.webp',
|
2026-04-14 00:22:46 +09:00
|
|
|
difficulties: [
|
|
|
|
|
{ key: 'normal', label: '노말', points: 10 },
|
|
|
|
|
{ key: 'hard', label: '하드', points: 50 },
|
|
|
|
|
{ key: 'extreme', label: '익스트림', points: 50 },
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
{
|
2026-04-15 11:18:00 +09:00
|
|
|
key: 'damien', name: '데미안', image: '데미안.webp',
|
2026-04-14 00:22:46 +09:00
|
|
|
difficulties: [
|
|
|
|
|
{ key: 'normal', label: '노말', points: 10 },
|
|
|
|
|
{ key: 'hard', label: '하드', points: 50 },
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
{
|
2026-04-15 11:18:00 +09:00
|
|
|
key: 'lucid', name: '루시드', image: '루시드.webp',
|
2026-04-14 00:22:46 +09:00
|
|
|
difficulties: [
|
|
|
|
|
{ key: 'easy', label: '이지', points: 15 },
|
|
|
|
|
{ key: 'normal', label: '노말', points: 20 },
|
|
|
|
|
{ key: 'hard', label: '하드', points: 65 },
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
{
|
2026-04-15 11:18:00 +09:00
|
|
|
key: 'will', name: '윌', image: '윌.webp',
|
2026-04-14 00:22:46 +09:00
|
|
|
difficulties: [
|
|
|
|
|
{ key: 'easy', label: '이지', points: 15 },
|
|
|
|
|
{ key: 'normal', label: '노말', points: 25 },
|
|
|
|
|
{ key: 'hard', label: '하드', points: 75 },
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
{
|
2026-04-15 11:18:00 +09:00
|
|
|
key: 'dusk', name: '더스크', image: '더스크.webp',
|
2026-04-14 00:22:46 +09:00
|
|
|
difficulties: [
|
|
|
|
|
{ key: 'normal', label: '노말', points: 20 },
|
|
|
|
|
{ key: 'chaos', label: '카오스', points: 65 },
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
{
|
2026-04-15 11:18:00 +09:00
|
|
|
key: 'jinhilla', name: '진 힐라', image: '진 힐라.webp',
|
2026-04-14 00:22:46 +09:00
|
|
|
difficulties: [
|
2026-04-14 09:54:06 +09:00
|
|
|
{ key: 'normal', label: '노말', points: 45 },
|
|
|
|
|
{ key: 'hard', label: '하드', points: 90 },
|
2026-04-14 00:22:46 +09:00
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
{
|
2026-04-15 11:18:00 +09:00
|
|
|
key: 'darknell', name: '듄켈', image: '듄켈.webp',
|
2026-04-14 00:22:46 +09:00
|
|
|
difficulties: [
|
2026-04-14 09:54:06 +09:00
|
|
|
{ key: 'normal', label: '노말', points: 25 },
|
|
|
|
|
{ key: 'hard', label: '하드', points: 75 },
|
2026-04-14 00:22:46 +09:00
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
// 월간 보스
|
|
|
|
|
export const MONTHLY_BOSSES = [
|
|
|
|
|
{
|
2026-04-15 11:18:00 +09:00
|
|
|
key: 'blackmage', name: '검은 마법사', image: '검은 마법사.webp',
|
2026-04-14 00:22:46 +09:00
|
|
|
difficulties: [
|
|
|
|
|
{ key: 'hard', label: '하드', points: 600 },
|
|
|
|
|
{ key: 'extreme', label: '익스트림', points: 600 },
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
export const BOSS_IMAGE_BASE = 'https://s3.caadiq.co.kr/maplestory/crystal/boss'
|
|
|
|
|
export const DIFFICULTY_IMAGE_BASE = 'https://s3.caadiq.co.kr/maplestory/crystal/difficulty'
|
|
|
|
|
|
2026-04-21 18:54:28 +09:00
|
|
|
// ── 데스티니 해방 (6단계, 총 45,000) ──
|
|
|
|
|
// phase 1: 선택받은 세렌 / 감시자 칼로스 / 카링
|
|
|
|
|
// phase 2: 최초의 대적자 / 림보 / 발드릭스
|
|
|
|
|
export const DESTINY_CHAPTERS = [
|
|
|
|
|
{ idx: 0, phase: 1, boss: '선택받은 세렌', image: '선택받은 세렌.webp',
|
|
|
|
|
quest_name: '결전, 선택받은 세렌', boss_label: '하드 세렌',
|
|
|
|
|
penalty: '최종 데미지 80% 감소', required: 2000 },
|
|
|
|
|
{ idx: 1, phase: 1, boss: '감시자 칼로스', image: '감시자 칼로스.webp',
|
|
|
|
|
quest_name: '결전, 감시자 칼로스', boss_label: '카오스 칼로스',
|
|
|
|
|
penalty: '데스 카운트 3으로 감소', required: 2500 },
|
|
|
|
|
{ idx: 2, phase: 1, boss: '카링', image: '카링.webp',
|
|
|
|
|
quest_name: '결전, 사도 카링', boss_label: '하드 카링',
|
|
|
|
|
penalty: '최종 데미지 20% 증가', required: 3000 },
|
|
|
|
|
{ idx: 3, phase: 2, boss: '최초의 대적자', image: '최초의 대적자.webp',
|
|
|
|
|
quest_name: '결전, 최초의 대적자', boss_label: '하드 대적자',
|
|
|
|
|
penalty: '최종 데미지 20% 감소 / 피격 시 질서의 힘 감소량 50% 증가', required: 10000 },
|
|
|
|
|
{ idx: 4, phase: 2, boss: '림보', image: '림보.webp',
|
|
|
|
|
quest_name: '결전, 사도 림보', boss_label: '하드 림보',
|
|
|
|
|
penalty: '침식 수치 800으로 시작', required: 12500 },
|
|
|
|
|
{ idx: 5, phase: 2, boss: '발드릭스', image: '발드릭스.webp',
|
|
|
|
|
quest_name: '결전, 사도 발드릭스', boss_label: '하드 발드릭스',
|
|
|
|
|
penalty: '피격 시 받는 데미지 30% 증가', required: 15000 },
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
export const DESTINY_TOTAL = DESTINY_CHAPTERS.reduce((s, c) => s + c.required, 0) // 45,000
|
|
|
|
|
|
|
|
|
|
// 데스티니 포인트 획득 보스 (대적자의 결의 / 1인격파 기준)
|
|
|
|
|
export const DESTINY_BOSSES = [
|
|
|
|
|
{ key: 'seren', name: '선택받은 세렌', image: '선택받은 세렌.webp',
|
|
|
|
|
difficulties: [
|
|
|
|
|
{ key: 'hard', label: '하드', points: 6 },
|
|
|
|
|
{ key: 'extreme', label: '익스트림', points: 80 },
|
|
|
|
|
] },
|
|
|
|
|
{ key: 'kalos', name: '감시자 칼로스', image: '감시자 칼로스.webp',
|
|
|
|
|
difficulties: [
|
|
|
|
|
{ key: 'normal', label: '노말', points: 10 },
|
|
|
|
|
{ key: 'chaos', label: '카오스', points: 70 },
|
|
|
|
|
{ key: 'extreme', label: '익스트림', points: 400 },
|
|
|
|
|
] },
|
|
|
|
|
{ key: 'kaling', name: '카링', image: '카링.webp',
|
|
|
|
|
difficulties: [
|
|
|
|
|
{ key: 'normal', label: '노말', points: 20 },
|
|
|
|
|
{ key: 'hard', label: '하드', points: 160 },
|
|
|
|
|
{ key: 'extreme', label: '익스트림', points: 1200 },
|
|
|
|
|
] },
|
|
|
|
|
{ key: 'limbo', name: '림보', image: '림보.webp',
|
|
|
|
|
difficulties: [
|
|
|
|
|
{ key: 'normal', label: '노말', points: 120 },
|
|
|
|
|
{ key: 'hard', label: '하드', points: 360 },
|
|
|
|
|
] },
|
|
|
|
|
{ key: 'baldrix', name: '발드릭스', image: '발드릭스.webp',
|
|
|
|
|
difficulties: [
|
|
|
|
|
{ key: 'normal', label: '노말', points: 150 },
|
|
|
|
|
{ key: 'hard', label: '하드', points: 450 },
|
|
|
|
|
] },
|
|
|
|
|
{ key: 'firstadversary', name: '최초의 대적자', image: '최초의 대적자.webp',
|
|
|
|
|
difficulties: [
|
|
|
|
|
{ key: 'normal', label: '노말', points: 15 },
|
|
|
|
|
{ key: 'hard', label: '하드', points: 120 },
|
|
|
|
|
{ key: 'extreme', label: '익스트림', points: 500 },
|
|
|
|
|
] },
|
|
|
|
|
{ key: 'brilliantvillain', name: '찬란한 흉성', image: '찬란한 흉성.webp',
|
|
|
|
|
difficulties: [
|
|
|
|
|
{ key: 'normal', label: '노말', points: 20 },
|
|
|
|
|
{ key: 'hard', label: '하드', points: 380 },
|
|
|
|
|
] },
|
|
|
|
|
{ key: 'jupiter', name: '유피테르', image: '유피테르.webp',
|
|
|
|
|
difficulties: [
|
|
|
|
|
{ key: 'normal', label: '노말', points: 160 },
|
|
|
|
|
{ key: 'hard', label: '하드', points: 500 },
|
|
|
|
|
] },
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
export const DESTINY_BOSS_IMAGE_BASE = 'https://s3.caadiq.co.kr/maplestory/liberation/destiny/boss'
|
|
|
|
|
export const DESTINY_QUEST_IMAGE_BASE = 'https://s3.caadiq.co.kr/maplestory/liberation/destiny/quest'
|
|
|
|
|
|
2026-04-14 00:22:46 +09:00
|
|
|
// 파티 인원수로 점수 분배 (버림)
|
|
|
|
|
export function calcPoints(basePoints, partySize) {
|
|
|
|
|
return Math.floor(basePoints / partySize)
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-14 08:55:39 +09:00
|
|
|
import dayjs from 'dayjs'
|
|
|
|
|
import utc from 'dayjs/plugin/utc'
|
|
|
|
|
import timezone from 'dayjs/plugin/timezone'
|
|
|
|
|
|
|
|
|
|
dayjs.extend(utc)
|
|
|
|
|
dayjs.extend(timezone)
|
|
|
|
|
|
|
|
|
|
const KST = 'Asia/Seoul'
|
|
|
|
|
|
2026-04-14 00:22:46 +09:00
|
|
|
export function formatDate(date) {
|
2026-04-14 08:55:39 +09:00
|
|
|
return dayjs(date).tz(KST).format('YYYY-MM-DD')
|
2026-04-14 00:22:46 +09:00
|
|
|
}
|
|
|
|
|
|
2026-04-14 08:55:39 +09:00
|
|
|
export function todayKST() {
|
|
|
|
|
return dayjs().tz(KST).startOf('day').toDate()
|
2026-04-14 00:22:46 +09:00
|
|
|
}
|