refactror

This commit is contained in:
2025-08-30 14:03:12 +02:00
parent cf655833b2
commit 8ceb9c7105
23 changed files with 124 additions and 133 deletions

View File

@@ -1,6 +1,6 @@
import { PRESTIGE_ICONS, PRESTIGES, SLUMBER_ROOMS, SLUMBER_WALLETS } from "@/data/hypixel/bedwars"
import { floorLevel } from "./formatters"
import { devide } from "./general"
import { getColorFromCode } from "@/lib/colors"
import { concatStatsArray, devide, floorLevel } from "../general"
export function getBedwarsStar(level: number) {
if (level < 1100) {
@@ -18,6 +18,51 @@ export function getBedwarsStar(level: number) {
return PRESTIGE_ICONS[3].symbol
}
export function concatBedwarsStats(...stats: BedwarsModeStats[]) {
if (stats.length === 0) return []
const summed = concatStatsArray<BedwarsModeStats>([
"kills_bedwars",
"deaths_bedwars",
"final_kills_bedwars",
"final_deaths_bedwars",
"wins_bedwars",
"losses_bedwars",
"beds_broken_bedwars",
"beds_lost_bedwars"
], ...stats)
let winstreak = -1
for (const s of stats) {
if (s.winstreak !== -1) winstreak = Math.max(winstreak, s.winstreak)
}
const ret = {
...summed,
winstreak: winstreak < 0 ? "?" : winstreak,
kd: devide(summed.kills_bedwars, summed.deaths_bedwars),
fkd: devide(summed.final_kills_bedwars, summed.final_deaths_bedwars),
wl: devide(summed.wins_bedwars, summed.losses_bedwars),
bbl: devide(summed.beds_broken_bedwars, summed.beds_lost_bedwars)
}
return [
ret.kills_bedwars,
ret.deaths_bedwars,
ret.kd,
ret.final_kills_bedwars,
ret.final_deaths_bedwars,
ret.fkd,
ret.wins_bedwars,
ret.losses_bedwars,
ret.wl,
ret.winstreak,
ret.beds_broken_bedwars,
ret.beds_lost_bedwars,
ret.bbl
]
}
export function getTextColor(level: number) {
const floored = floorLevel(level, 100)
@@ -28,6 +73,26 @@ export function getTextColor(level: number) {
return PRESTIGES.find(l => l.level === floored)!.color
}
export function bedwarsLevelColors(level: number) {
if (level < 0) return getColorFromCode()
const floored = floorLevel(level, 100)
if (floored < 1000) {
return getColorFromCode(PRESTIGES.find(v => v.level === floored)!.colormap)
}
if (floored > 5000) {
return PRESTIGES[PRESTIGES.length - 1].colormap.split("").map(v => {
return getColorFromCode(v)
})
}
return PRESTIGES.find(v => v.level === floored)!.colormap.split("").map(v => {
return getColorFromCode(v)
})
}
export function getPrestigeName(level: number) {
const floored = floorLevel(level, 100)

View File

@@ -1,9 +0,0 @@
export function floorLevel(level: number, base: number) {
const extra = level % base
if (extra === 0) {
return level;
}
return level - extra;
}

View File

@@ -11,3 +11,24 @@ export function devide(num: number, num2: number) {
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
}

View File

@@ -1,4 +1,4 @@
import { Guild } from "../schema/guild"
import { Guild } from "@/lib/schema/guild"
export function getGuildMember(guild: Guild["guild"], uuid: string) {
return guild.members.find(m => m.uuid === uuid)

View File

@@ -1,6 +1,5 @@
import { HEADS, ICONS, PRESTIGES } from "@/data/hypixel/skywars"
import { floorLevel } from "./formatters"
import { devide } from "./general"
import { concatStatsArray, devide, floorLevel } from "../general"
export function getHeadsColor(key: string) {
const val = HEADS.find(v => v.id === key)?.color
@@ -10,6 +9,25 @@ export function getHeadsColor(key: string) {
return val
}
export function concatSkywarsStats(...stats: SkywarsModeStats[]) {
const summed = concatStatsArray<SkywarsModeStats>(["kills", "deaths", "wins", "losses"], ...stats)
const ret = {
...summed,
kd: devide(summed.kills, summed.deaths),
wl: devide(summed.wins, summed.losses)
}
return [
ret.kills,
ret.deaths,
ret.kd,
ret.wins,
ret.losses,
ret.wl
]
}
export function getTextColor(level: number) {
const floored = floorLevel(level, 5)