diff --git a/src/lib/funcs.ts b/src/lib/funcs.ts index 228bbd0..b722d45 100644 --- a/src/lib/funcs.ts +++ b/src/lib/funcs.ts @@ -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([ + "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>(keys: (keyof T)[], ...stats: T[]) { + const base: Record = {} + 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 +}