Files
hypixel-stats/src/lib/hypixel/general.ts

81 lines
1.6 KiB
TypeScript

export function getProgress(min: number, mid: number, max: number) {
if (max === min) return 100
const diff = max - min
const progress = mid - min
return progress / diff * 100
}
export function devide(num: number, num2: number) {
if (num2 === 0) return num
return num / num2
}
export function floorLevel(level: number, base: number) {
const extra = level % base
if (extra === 0) {
return level
}
return level - extra
}
export function concatStatsArray<T extends Record<string, number>>(keys: (keyof T)[], ...stats: T[]) {
const base: Record<string, number> = {}
for (const k of keys) base[k as string] = 0
for (const s of stats) {
for (const k of keys) {
base[k as string] += s[k] ?? 0
}
}
return base as T
}
export function romanize(num: number) {
if (!Number.isFinite(num)) return "NaN"
const digits = Math.trunc(num).toString().split("")
const key = [
"",
"C",
"CC",
"CCC",
"CD",
"D",
"DC",
"DCC",
"DCCC",
"CM",
"",
"X",
"XX",
"XXX",
"XL",
"L",
"LX",
"LXX",
"LXXX",
"XC",
"",
"I",
"II",
"III",
"IV",
"V",
"VI",
"VII",
"VIII",
"IX"
] as const
let roman = ""
let i = 3
while (i--) {
const idx = Number(digits.pop()) + i * 10
roman = (key[idx] || "") + roman
}
const thousands = Number(digits.join(""))
return "M".repeat(thousands) + roman
}