Files
hypixel-stats/src/lib/hypixel/bedwarsLevel.ts
2025-08-17 19:42:58 +02:00

56 lines
1.4 KiB
TypeScript

/*
* Functions for BedWars exp and level conversions.
*/
const EASY_LEVELS = 4
const EASY_LEVELS_XP = 7000
const XP_PER_PRESTIGE = 96 * 5000 + EASY_LEVELS_XP
const LEVELS_PER_PRESTIGE = 100
const HIGHEST_PRESTIGE = 10
export function getBWLevel(level: number) {
if (level > HIGHEST_PRESTIGE * LEVELS_PER_PRESTIGE) {
return level - HIGHEST_PRESTIGE * LEVELS_PER_PRESTIGE
}
return level % LEVELS_PER_PRESTIGE
}
export function getBWExpForLevel(level: number) {
if (level === 0) return 0
const respectedLevel = getBWLevel(level)
if (respectedLevel > EASY_LEVELS) {
return 5000
}
switch (respectedLevel) {
case 1:
return 500
case 2:
return 1000
case 3:
return 2000
case 4:
return 3500
default:
return 5000
}
}
export function getBWLevelForExp(exp: number) {
const prestiges = Math.floor(exp / XP_PER_PRESTIGE)
let level = prestiges * LEVELS_PER_PRESTIGE
let expWithoutPrestiges = exp - (prestiges * XP_PER_PRESTIGE)
let expForEasyLevel
for (let i = 1; i <= EASY_LEVELS; i += 1) {
expForEasyLevel = getBWExpForLevel(i)
if (expWithoutPrestiges < expForEasyLevel) {
break
}
level += 1
expWithoutPrestiges -= expForEasyLevel
}
return level + Math.floor(expWithoutPrestiges / 5000)
}