Finished first column of duels stats
This commit is contained in:
@@ -1,15 +1,18 @@
|
||||
import { AccordionContent, AccordionItem, AccordionTrigger } from "@/components/ui/accordion"
|
||||
import { Card, CardContent } from "@/components/ui/card"
|
||||
import { Separator } from "@/components/ui/separator"
|
||||
import { formatNumber } from "@/lib/formatters"
|
||||
import { getDivision, getMostPlayed } from "@/lib/hypixel/duels/duels"
|
||||
import { romanize } from "@/lib/hypixel/general"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
import CollapsedStats from "../../_components/CollapsedStats"
|
||||
import DuelsGeneralStats from "./stats"
|
||||
|
||||
export default function DuelsStats({ stats }: { stats: NonNullStats["Duels"] }) {
|
||||
if (!stats) return null
|
||||
|
||||
const wl = formatNumber(stats.wins / stats.losses)
|
||||
const wl = stats.wins / stats.losses
|
||||
const kd = stats.kills / stats.deaths
|
||||
const div = getDivision("all_modes", stats)
|
||||
const mostPlayed = getMostPlayed(stats)
|
||||
|
||||
@@ -57,13 +60,15 @@ export default function DuelsStats({ stats }: { stats: NonNullStats["Duels"] })
|
||||
},
|
||||
{
|
||||
title: <p>WL</p>,
|
||||
stat: <p className="text-muted-foreground">{wl}</p>
|
||||
stat: <p className="text-muted-foreground">{formatNumber(wl)}</p>
|
||||
}
|
||||
]}
|
||||
/>
|
||||
</div>
|
||||
</AccordionTrigger>
|
||||
<AccordionContent>
|
||||
<Separator className="my-4" />
|
||||
<DuelsGeneralStats statsChecked={stats} div={div} kd={kd} />
|
||||
</AccordionContent>
|
||||
</CardContent>
|
||||
</Card>
|
||||
|
||||
40
src/app/(stats)/player/[ign]/_stats/duels/stats.tsx
Normal file
40
src/app/(stats)/player/[ign]/_stats/duels/stats.tsx
Normal file
@@ -0,0 +1,40 @@
|
||||
import { formatNumber } from "@/lib/formatters"
|
||||
import { Div } from "@/lib/hypixel/duels/duels"
|
||||
import { romanize } from "@/lib/hypixel/general"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
import { cn } from "@/lib/utils"
|
||||
import { BasicStat } from "../../_components/Stats"
|
||||
|
||||
export default function DuelsGeneralStats({ statsChecked, div, kd }: { statsChecked: NonNullStats["Duels"], div: Div | null, kd: number }) {
|
||||
const stats = statsChecked!
|
||||
|
||||
return (
|
||||
<div className="flex mb-10">
|
||||
<div className="flex-1">
|
||||
<BasicStat title="Tokens: " value={formatNumber(stats.coins)} className="text-mc-dark-green" />
|
||||
<BasicStat
|
||||
title="Overall division: "
|
||||
value={div !== null ? `${div.name} ${romanize(div.level)}` : "-"}
|
||||
className={cn("font-bold", div !== null ? `text-mc-${div.color}` : undefined)}
|
||||
/>
|
||||
<p>
|
||||
<br />
|
||||
</p>
|
||||
<p>
|
||||
<br />
|
||||
</p>
|
||||
<BasicStat title="Kills: " value={formatNumber(stats.kills)} />
|
||||
<BasicStat title="Deaths: " value={formatNumber(stats.deaths)} />
|
||||
<BasicStat title="Kill/Death Ratio: " value={formatNumber(kd)} />
|
||||
<p>
|
||||
<br />
|
||||
</p>
|
||||
<BasicStat title="Melee Swings: " value={formatNumber(stats.melee_swings)} />
|
||||
<BasicStat title="Melee Hits: " value={formatNumber(stats.melee_hits)} />
|
||||
<BasicStat title="Melee Hit Accuracy: " value={`${formatNumber(stats.melee_hits / stats.melee_swings * 100)}%`} />
|
||||
</div>
|
||||
<div className="flex-1">
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
@@ -2,6 +2,11 @@ import { DIVISIONS, MODES } from "@/data/hypixel/duels"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
|
||||
type DuelType = "all_modes"
|
||||
export type Div = {
|
||||
name: typeof DIVISIONS[number]["name"]
|
||||
level: number
|
||||
color: typeof DIVISIONS[number]["color"]
|
||||
}
|
||||
|
||||
export function getDivision(duelType: DuelType, stats: NonNullable<NonNullStats["Duels"]>) {
|
||||
for (const div of DIVISIONS.slice().reverse()) {
|
||||
|
||||
@@ -272,6 +272,12 @@ export const skywarsStatsSchema = z.looseObject({
|
||||
export const duelsStatsSchema = z.looseObject({
|
||||
wins: z.number().default(0),
|
||||
losses: z.number().default(0),
|
||||
coins: z.number().default(0),
|
||||
kills: z.number().default(0),
|
||||
deaths: z.number().default(0),
|
||||
melee_swings: z.number().default(0),
|
||||
melee_hits: z.number().default(0),
|
||||
//
|
||||
all_modes_rookie_title_prestige: z.number().default(-1),
|
||||
all_modes_iron_title_prestige: z.number().default(-1),
|
||||
all_modes_gold_title_prestige: z.number().default(-1),
|
||||
|
||||
Reference in New Issue
Block a user