Files
hypixel-stats/src/lib/hypixel/bedwars.ts
2025-08-21 22:53:08 +02:00

165 lines
5.4 KiB
TypeScript

import { PRESTIGE_ICONS, PRESTIGES, SLUMBER_ROOMS, SLUMBER_WALLETS } from "@/data/hypixel/bedwars"
import { floorLevel } from "./formatters"
export function getBedwarsStar(level: number) {
if (level < 1100) {
return PRESTIGE_ICONS[0].symbol
}
if (level > 1100 && level < 2100) {
return PRESTIGE_ICONS[1].symbol
}
if (level > 2100 && level < 3100) {
return PRESTIGE_ICONS[2].symbol
}
return PRESTIGE_ICONS[3].symbol
}
export function getTextColor(level: number) {
const floored = floorLevel(level, 100)
if (level > 5000) {
return PRESTIGES[PRESTIGES.length - 1].color
}
return PRESTIGES.find(l => l.level === floored)!.color
}
export function getPrestigeName(level: number) {
const floored = floorLevel(level, 100)
if (level > 5000) {
return PRESTIGES[PRESTIGES.length - 1].name
}
return PRESTIGES.find(p => p.level === floored)!.name
}
export function getWalletMax(name?: string) {
if (!name) return 25
const wallets = SLUMBER_WALLETS as Record<string, number>
if (!wallets[name]) return 25
return wallets[name]
}
export function getLatestRoom(rooms?: Record<string, boolean>) {
if (!rooms) return null
let latestRoom = null
for (const room of SLUMBER_ROOMS) {
if (rooms[room.id]) {
latestRoom = room.name
}
}
return latestRoom
}
export type _BedwarsStats = Record<string, number> & { [key: `${string}_winstreak`]: number | undefined }
type Mode =
| "solo"
| "doubles"
| "3s"
| "4s"
| "4v4"
| "rush_2s"
| "rush_4s"
| "ultimate_2s"
| "ultimate_4s"
| "lucky_2s"
| "lucky_4s"
| "voidless_2s"
| "voidless_4s"
| "armed_2s"
| "armed_4s"
| "swap_4s"
| "underworld_4s"
| "castle"
export function getBedwarsModeStats(mode: Mode, stats: _BedwarsStats, raw: true): number[]
export function getBedwarsModeStats(mode: Mode, stats: _BedwarsStats, raw?: false): (string | number)[]
export function getBedwarsModeStats(mode: Mode, stats: _BedwarsStats, raw = false) {
switch (mode) {
case "solo":
return bedwarsModeStats("eight_one", stats, raw)
case "doubles":
return bedwarsModeStats("eight_two", stats, raw)
case "3s":
return bedwarsModeStats("four_three", stats, raw)
case "4s":
return bedwarsModeStats("four_four", stats, raw)
case "4v4":
return bedwarsModeStats("two_four", stats, raw)
case "rush_2s":
return bedwarsModeStats("eight_two_rush", stats, raw)
case "rush_4s":
return bedwarsModeStats("four_four_rush", stats, raw)
case "ultimate_2s":
return bedwarsModeStats("eight_two_ultimate", stats, raw)
case "ultimate_4s":
return bedwarsModeStats("four_four_ultimate", stats, raw)
case "lucky_2s":
return bedwarsModeStats("eight_two_lucky", stats, raw)
case "lucky_4s":
return bedwarsModeStats("four_four_lucky", stats, raw)
case "voidless_2s":
return bedwarsModeStats("eight_two_voidless", stats, raw)
case "voidless_4s":
return bedwarsModeStats("four_four_voidless", stats, raw)
case "armed_2s":
return bedwarsModeStats("eight_two_armed", stats, raw)
case "armed_4s":
return bedwarsModeStats("four_four_armed", stats, raw)
case "swap_4s":
return bedwarsModeStats("four_four_swap", stats, raw)
case "underworld_4s":
return bedwarsModeStats("four_four_underworld", stats, raw)
case "castle":
return bedwarsModeStats("castle", stats, raw)
default:
throw new Error(`${mode satisfies never} does not exist`)
}
}
function bedwarsModeStats(prefix: string, stats: _BedwarsStats, raw = false) {
if (raw) {
return [
stats[`${prefix}_kills_bedwars`],
stats[`${prefix}_deaths_bedwars`],
stats[`${prefix}_kills_bedwars`] / stats[`${prefix}_deaths_bedwars`],
stats[`${prefix}_final_kills_bedwars`],
stats[`${prefix}_final_deaths_bedwars`],
stats[`${prefix}_final_kills_bedwars`] / stats[`${prefix}_final_deaths_bedwars`],
stats[`${prefix}_wins_bedwars`],
stats[`${prefix}_losses_bedwars`],
stats[`${prefix}_wins_bedwars`] / stats[`${prefix}_losses_bedwars`],
stats[`${prefix}_winstreak`] ?? -1,
stats[`${prefix}_beds_broken_bedwars`],
stats[`${prefix}_beds_lost_bedwars`],
stats[`${prefix}_beds_broken_bedwars`] / stats[`${prefix}_beds_lost_bedwars`]
]
}
return [
stats[`${prefix}_kills_bedwars`],
stats[`${prefix}_deaths_bedwars`],
(stats[`${prefix}_kills_bedwars`] / stats[`${prefix}_deaths_bedwars`]).toFixed(2),
stats[`${prefix}_final_kills_bedwars`],
stats[`${prefix}_final_deaths_bedwars`],
(stats[`${prefix}_final_kills_bedwars`] / stats[`${prefix}_final_deaths_bedwars`]).toFixed(2),
stats[`${prefix}_wins_bedwars`],
stats[`${prefix}_losses_bedwars`],
(stats[`${prefix}_wins_bedwars`] / stats[`${prefix}_losses_bedwars`]).toFixed(2),
stats[`${prefix}_winstreak`] ?? "?",
stats[`${prefix}_beds_broken_bedwars`],
stats[`${prefix}_beds_lost_bedwars`],
(stats[`${prefix}_beds_broken_bedwars`] / stats[`${prefix}_beds_lost_bedwars`]).toFixed(2)
]
}