feat(skywars): add full mode stats rows and best mode detection
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import { ICONS, PRESTIGES } from "@/data/hypixel/skywars"
|
||||
import { floorLevel } from "./formatters"
|
||||
import { devide } from "./general"
|
||||
|
||||
export function getTextColor(level: number) {
|
||||
const floored = floorLevel(level, 5)
|
||||
@@ -36,3 +37,94 @@ export function getPrestigeName(level: number) {
|
||||
|
||||
return PRESTIGES.find(p => p.level === floored)!.name
|
||||
}
|
||||
|
||||
export type _SkywarsStats = Record<string, number>
|
||||
type Mode =
|
||||
| "normal"
|
||||
| "insane"
|
||||
| "teams_normal"
|
||||
| "teams_insane"
|
||||
| "mega"
|
||||
| "mega_doubles"
|
||||
| "ranked"
|
||||
|
||||
export type SkywarsModeStats = {
|
||||
kills: number
|
||||
deaths: number
|
||||
wins: number
|
||||
losses: number
|
||||
}
|
||||
|
||||
export function getBestMode(stats: _SkywarsStats): Mode | null {
|
||||
const { wins: normal } = getSkywarsModeStats("normal", stats, true)
|
||||
const { wins: insane } = getSkywarsModeStats("insane", stats, true)
|
||||
const { wins: teams_normal } = getSkywarsModeStats("teams_normal", stats, true)
|
||||
const { wins: teams_insane } = getSkywarsModeStats("teams_insane", stats, true)
|
||||
const { wins: mega } = getSkywarsModeStats("mega", stats, true)
|
||||
const { wins: mega_doubles } = getSkywarsModeStats("mega_doubles", stats, true)
|
||||
const { wins: ranked } = getSkywarsModeStats("ranked", stats, true)
|
||||
|
||||
const max = Math.max(normal, insane, teams_normal, teams_insane, mega, mega_doubles, ranked)
|
||||
|
||||
switch (max) {
|
||||
case normal:
|
||||
return "normal"
|
||||
case insane:
|
||||
return "insane"
|
||||
case teams_normal:
|
||||
return "teams_normal"
|
||||
case teams_insane:
|
||||
return "teams_insane"
|
||||
case mega:
|
||||
return "mega"
|
||||
case mega_doubles:
|
||||
return "mega_doubles"
|
||||
case ranked:
|
||||
return "ranked"
|
||||
default:
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
export function getSkywarsModeStats(mode: Mode, stats: _SkywarsStats, raw: true): SkywarsModeStats
|
||||
export function getSkywarsModeStats(mode: Mode, stats: _SkywarsStats, raw?: false): (string | number)[]
|
||||
export function getSkywarsModeStats(mode: Mode, stats: _SkywarsStats, raw = false) {
|
||||
switch (mode) {
|
||||
case "normal":
|
||||
return skywarsModeStats("solo_normal", stats, raw)
|
||||
case "insane":
|
||||
return skywarsModeStats("solo_insane", stats, raw)
|
||||
case "teams_normal":
|
||||
return skywarsModeStats("team_normal", stats, raw)
|
||||
case "teams_insane":
|
||||
return skywarsModeStats("team_insane", stats, raw)
|
||||
case "mega":
|
||||
return skywarsModeStats("mega_mega", stats, raw)
|
||||
case "mega_doubles":
|
||||
return skywarsModeStats("mega_doubles", stats, raw)
|
||||
case "ranked":
|
||||
return skywarsModeStats("ranked_normal", stats, raw)
|
||||
default:
|
||||
throw new Error(`${mode satisfies never} does not exist`)
|
||||
}
|
||||
}
|
||||
|
||||
function skywarsModeStats(suffix: string, stats: _SkywarsStats, raw = false) {
|
||||
if (raw) {
|
||||
return {
|
||||
kills: stats[`kills_${suffix}`],
|
||||
deaths: stats[`deaths_${suffix}`],
|
||||
wins: stats[`wins_${suffix}`],
|
||||
losses: stats[`losses_${suffix}`]
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
stats[`kills_${suffix}`],
|
||||
stats[`deaths_${suffix}`],
|
||||
devide(stats[`kills_${suffix}`], stats[`deaths_${suffix}`]).toFixed(2),
|
||||
stats[`wins_${suffix}`],
|
||||
stats[`losses_${suffix}`],
|
||||
devide(stats[`wins_${suffix}`], stats[`losses_${suffix}`]).toFixed(2)
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user