export const LEVEL_THRESHOLDS = [ 0, // Level 1: 0-99 100, // Level 2: 100-249 250, // Level 3: 250-499 500, // Level 4: 500-999 1000, // Level 5: 1000-1999 2000, // Level 6: 2000-3499 3500, // Level 7: 3500-4999 5000, // Level 8: 5000-7499 7500, // Level 9: 7500-9999 10000 // Level 10: 10000+ ]; export function getLevelFromXP(xp: number): number { for (let i = LEVEL_THRESHOLDS.length - 1; i >= 0; i--) { if (xp >= LEVEL_THRESHOLDS[i]) { return i + 1; } } return 1; } export function getNextLevelXP(level: number): number { if (level >= LEVEL_THRESHOLDS.length) { return LEVEL_THRESHOLDS[LEVEL_THRESHOLDS.length - 1] * 1.5; // Scale indefinitely } return LEVEL_THRESHOLDS[level]; } export function getLevelProgress(xp: number): number { const currentLevel = getLevelFromXP(xp); const currentLevelStart = LEVEL_THRESHOLDS[currentLevel - 1]; const nextLevelStart = getNextLevelXP(currentLevel); if (xp >= nextLevelStart) return 100; const progress = ((xp - currentLevelStart) / (nextLevelStart - currentLevelStart)) * 100; return Math.min(100, Math.max(0, progress)); } export const RANK_KEYS = [ 'novice', // Level 1 'apprentice', // Level 2 'journeyman', // Level 3 'artisan', // Level 4 'expert', // Level 5 'master', // Level 6 'grandmaster', // Level 7 'virtuoso', // Level 8 'legend', // Level 9 'mythic' // Level 10 ]; export function getRankKey(level: number): string { if (level <= 0) return 'novice'; if (level > RANK_KEYS.length) return RANK_KEYS[RANK_KEYS.length - 1]; return RANK_KEYS[level - 1]; }