refactor: generic concatStatsArray and use in concatBedwarsStats

This commit is contained in:
2025-08-24 14:05:59 +02:00
parent 9b1b25c5e9
commit ba835830b0

View File

@@ -4,39 +4,30 @@ import { devide } from "./hypixel/general"
export function concatBedwarsStats(...stats: BedwarsModeStats[]) {
if (stats.length === 0) return []
const base: BedwarsModeStats = {
kills_bedwars: 0,
deaths_bedwars: 0,
final_kills_bedwars: 0,
final_deaths_bedwars: 0,
wins_bedwars: 0,
losses_bedwars: 0,
winstreak: -1,
beds_broken_bedwars: 0,
beds_lost_bedwars: 0
}
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)
// winstreak special handling (max of provided, ignore -1)
let winstreak = -1
for (const s of stats) {
base.kills_bedwars += s.kills_bedwars
base.deaths_bedwars += s.deaths_bedwars
base.final_kills_bedwars += s.final_kills_bedwars
base.final_deaths_bedwars += s.final_deaths_bedwars
base.wins_bedwars += s.wins_bedwars
base.losses_bedwars += s.losses_bedwars
if (s.winstreak !== -1) {
base.winstreak = Math.max(base.winstreak, s.winstreak)
}
base.beds_broken_bedwars += s.beds_broken_bedwars
base.beds_lost_bedwars += s.beds_lost_bedwars
if (s.winstreak !== -1) winstreak = Math.max(winstreak, s.winstreak)
}
const ret = {
...base,
winstreak: base.winstreak < 0 ? "?" : base.winstreak,
kd: devide(base.kills_bedwars, base.deaths_bedwars),
fkd: devide(base.final_kills_bedwars, base.final_deaths_bedwars),
wl: devide(base.wins_bedwars, base.losses_bedwars),
bbl: devide(base.beds_broken_bedwars, base.beds_lost_bedwars)
...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 [
@@ -55,3 +46,14 @@ export function concatBedwarsStats(...stats: BedwarsModeStats[]) {
ret.bbl
]
}
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
}