Added duels kits stats table
This commit is contained in:
@@ -6,7 +6,7 @@ import { NonNullStats } from "@/lib/schema/player"
|
|||||||
import { cn } from "@/lib/utils"
|
import { cn } from "@/lib/utils"
|
||||||
import GeneralStats from "../GeneralStats"
|
import GeneralStats from "../GeneralStats"
|
||||||
import BlitzGeneralStats from "./stats"
|
import BlitzGeneralStats from "./stats"
|
||||||
import { BlitzModeStatsTable } from "./table"
|
import { BlitzKitStatsTable, BlitzModeStatsTable } from "./table"
|
||||||
|
|
||||||
export default function BlitzStats({ stats }: { stats: NonNullStats["Blitz"] }) {
|
export default function BlitzStats({ stats }: { stats: NonNullStats["Blitz"] }) {
|
||||||
if (!stats) return null
|
if (!stats) return null
|
||||||
@@ -47,6 +47,7 @@ export default function BlitzStats({ stats }: { stats: NonNullStats["Blitz"] })
|
|||||||
<Separator className="my-4" />
|
<Separator className="my-4" />
|
||||||
<BlitzModeStatsTable stats={stats} />
|
<BlitzModeStatsTable stats={stats} />
|
||||||
<Separator className="my-4" />
|
<Separator className="my-4" />
|
||||||
|
<BlitzKitStatsTable stats={stats} />
|
||||||
</GeneralStats>
|
</GeneralStats>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"
|
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"
|
||||||
import { formatNumber } from "@/lib/formatters"
|
import { formatNumber, formatSecondsToTime } from "@/lib/formatters"
|
||||||
|
import { getAllBlitzKitStats, getBlitzKitLevel, getBlitzKitName, getBlitzMostPlayedKit } from "@/lib/hypixel/blitz/general"
|
||||||
|
import { romanize } from "@/lib/hypixel/general"
|
||||||
import { NonNullStats } from "@/lib/schema/player"
|
import { NonNullStats } from "@/lib/schema/player"
|
||||||
|
import { cn } from "@/lib/utils"
|
||||||
|
|
||||||
export function BlitzModeStatsTable({ stats }: { stats: NonNullable<NonNullStats["Blitz"]> }) {
|
export function BlitzModeStatsTable({ stats }: { stats: NonNullable<NonNullStats["Blitz"]> }) {
|
||||||
return (
|
return (
|
||||||
@@ -27,3 +30,55 @@ export function BlitzModeStatsTable({ stats }: { stats: NonNullable<NonNullStats
|
|||||||
</Table>
|
</Table>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function BlitzKitStatsTableHeader() {
|
||||||
|
const headerElements = [
|
||||||
|
"Kit",
|
||||||
|
"Exp",
|
||||||
|
"Prestige",
|
||||||
|
"Kills",
|
||||||
|
"Wins",
|
||||||
|
"Losses",
|
||||||
|
"WL",
|
||||||
|
"Time Played"
|
||||||
|
]
|
||||||
|
|
||||||
|
return (
|
||||||
|
<TableHeader>
|
||||||
|
<TableRow>
|
||||||
|
{headerElements.map((v, i) => <TableHead key={i} className="font-bold">{v}</TableHead>)}
|
||||||
|
</TableRow>
|
||||||
|
</TableHeader>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function BlitzKitStatsTable({ stats }: { stats: NonNullable<NonNullStats["Blitz"]> }) {
|
||||||
|
const kitStats = getAllBlitzKitStats(stats)
|
||||||
|
return (
|
||||||
|
<Table>
|
||||||
|
<BlitzKitStatsTableHeader />
|
||||||
|
<TableBody>
|
||||||
|
{kitStats.map((r, i) => {
|
||||||
|
const { id, nums } = r
|
||||||
|
const kitName = getBlitzKitName(id)
|
||||||
|
const kitLevel = getBlitzKitLevel(id, stats)
|
||||||
|
const mostPlayed = getBlitzMostPlayedKit(stats)?.id
|
||||||
|
return (
|
||||||
|
<TableRow className={cn(mostPlayed === id && "text-mc-light-purple font-bold")} key={i}>
|
||||||
|
<TableCell className={cn(kitLevel === 10 && "text-mc-dark-red")}>{`${kitName} ${romanize(kitLevel)}`}</TableCell>
|
||||||
|
{nums.map((v, j) => {
|
||||||
|
if (j === nums.length - 1) {
|
||||||
|
return <TableCell key={j}>{formatSecondsToTime(v)}</TableCell>
|
||||||
|
}
|
||||||
|
if (j === 1) {
|
||||||
|
return <TableCell key={j}>{v === 0 ? "-" : romanize(v)}</TableCell>
|
||||||
|
}
|
||||||
|
return <TableCell key={j}>{formatNumber(v)}</TableCell>
|
||||||
|
})}
|
||||||
|
</TableRow>
|
||||||
|
)
|
||||||
|
})}
|
||||||
|
</TableBody>
|
||||||
|
</Table>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,5 +1,21 @@
|
|||||||
import { KITS } from "@/data/hypixel/blitz"
|
import { KITEXP, KITS } from "@/data/hypixel/blitz"
|
||||||
import { NonNullStats } from "@/lib/schema/player"
|
import { NonNullStats } from "@/lib/schema/player"
|
||||||
|
import { devide } from "../general"
|
||||||
|
|
||||||
|
export function getBlitzKitLevel(kitId: typeof KITS[number]["id"], stats: NonNullable<NonNullStats["Blitz"]>) {
|
||||||
|
let level = stats[kitId]
|
||||||
|
if (level === -1) {
|
||||||
|
const exp = stats[`exp_${kitId}`]
|
||||||
|
for (const kitexp of KITEXP.slice()) {
|
||||||
|
if (exp >= kitexp) {
|
||||||
|
level++
|
||||||
|
} else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return level + 1
|
||||||
|
}
|
||||||
|
|
||||||
export function getBlitzMostPlayedKit(stats: NonNullable<NonNullStats["Blitz"]>) {
|
export function getBlitzMostPlayedKit(stats: NonNullable<NonNullStats["Blitz"]>) {
|
||||||
let mostPlayedKit: typeof KITS[number] | null = null
|
let mostPlayedKit: typeof KITS[number] | null = null
|
||||||
@@ -15,3 +31,34 @@ export function getBlitzMostPlayedKit(stats: NonNullable<NonNullStats["Blitz"]>)
|
|||||||
|
|
||||||
return mostPlayedKit
|
return mostPlayedKit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getBlitzKitName(kitId: typeof KITS[number]["id"]) {
|
||||||
|
return KITS.find(k => k.id === kitId)!.name
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getAllBlitzKitStats(stats: NonNullable<NonNullStats["Blitz"]>) {
|
||||||
|
const nums: { id: typeof KITS[number]["id"], nums: number[] }[] = []
|
||||||
|
|
||||||
|
for (const kit of KITS) {
|
||||||
|
nums.push({ id: kit.id, nums: getBlitzKitStats(kit.id, stats) })
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(nums)
|
||||||
|
|
||||||
|
return nums
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getBlitzKitStats(kitId: typeof KITS[number]["id"], stats: NonNullable<NonNullStats["Blitz"]>) {
|
||||||
|
const wins = stats[`wins_${kitId}`] + stats[`wins_teams_${kitId}`]
|
||||||
|
const losses = stats[`games_played_${kitId}`] - wins
|
||||||
|
|
||||||
|
return [
|
||||||
|
stats[`exp_${kitId}`],
|
||||||
|
stats[`p${kitId}`],
|
||||||
|
stats[`kills_${kitId}`],
|
||||||
|
wins,
|
||||||
|
losses,
|
||||||
|
devide(wins, losses),
|
||||||
|
stats[`time_played_${kitId}`]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|||||||
@@ -837,22 +837,30 @@ function blitzKitPlayedStats() {
|
|||||||
] as const
|
] as const
|
||||||
|
|
||||||
const stats = [
|
const stats = [
|
||||||
"time_played"
|
"wins",
|
||||||
|
"wins_teams",
|
||||||
|
"time_played",
|
||||||
|
"exp",
|
||||||
|
"kills",
|
||||||
|
"games_played"
|
||||||
] as const
|
] as const
|
||||||
|
|
||||||
const entries = new Map<string, z.ZodDefault<z.ZodNumber>>()
|
const entries = new Map<string, z.ZodDefault<z.ZodNumber>>()
|
||||||
const kits = new Map<string, z.ZodDefault<z.ZodNumber>>()
|
const kits = new Map<string, z.ZodDefault<z.ZodNumber>>()
|
||||||
|
const prestiges = new Map<string, z.ZodDefault<z.ZodNumber>>()
|
||||||
|
|
||||||
for (const id of ids) {
|
for (const id of ids) {
|
||||||
for (const stat of stats) {
|
for (const stat of stats) {
|
||||||
entries.set(`${stat}_${id}`, z.number().default(0))
|
entries.set(`${stat}_${id}`, z.number().default(0))
|
||||||
kits.set(`${id}`, z.number().default(0))
|
kits.set(`${id}`, z.number().default(-1))
|
||||||
|
prestiges.set(`p${id}`, z.number().default(0))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
stats: Object.fromEntries(entries) as Record<`${typeof stats[number]}_${typeof ids[number]}`, z.ZodDefault<z.ZodNumber>>,
|
stats: Object.fromEntries(entries) as Record<`${typeof stats[number]}_${typeof ids[number]}`, z.ZodDefault<z.ZodNumber>>,
|
||||||
kits: Object.fromEntries(entries) as Record<`${typeof ids[number]}`, z.ZodDefault<z.ZodNumber>>
|
kits: Object.fromEntries(kits) as Record<`${typeof ids[number]}`, z.ZodDefault<z.ZodNumber>>,
|
||||||
|
prestiges: Object.fromEntries(prestiges) as Record<`p${typeof ids[number]}`, z.ZodDefault<z.ZodNumber>>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -867,5 +875,6 @@ export const blitzStatsSchema = z.object({
|
|||||||
damage: z.number().default(0),
|
damage: z.number().default(0),
|
||||||
damage_taken: z.number().default(0),
|
damage_taken: z.number().default(0),
|
||||||
...blitzKitPlayedStats().stats,
|
...blitzKitPlayedStats().stats,
|
||||||
...blitzKitPlayedStats().kits
|
...blitzKitPlayedStats().kits,
|
||||||
|
...blitzKitPlayedStats().prestiges
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user