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