Finished quake craft stats
This commit is contained in:
@@ -109,7 +109,7 @@ export function PlayerStats(
|
||||
"paintball": <PaintballStats stats={stats.Paintball} />,
|
||||
"walls": <WallsStats stats={stats.Walls} />,
|
||||
"vampirez": <VampireZStats stats={stats.VampireZ} />,
|
||||
"quakecraft": <QuakecraftStats stats={stats.Quakecraft} />
|
||||
"quakecraft": <QuakecraftStats stats={stats.Quakecraft} godlikes={achievements?.["quake_godlikes"] ?? 0} />
|
||||
} as const
|
||||
|
||||
const defaultOrder = Object.keys(statsComponents)
|
||||
|
||||
@@ -3,8 +3,10 @@ import { formatNumber } from "@/lib/formatters"
|
||||
import { devide } from "@/lib/hypixel/general"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
import { EmptyStats, GeneralStats } from "../stats-components"
|
||||
import { QuakeCraftGeneralStats } from "./stats"
|
||||
import { QuakecraftModeStatsTable } from "./table"
|
||||
|
||||
export default function QuakecraftStats({ stats }: { stats: NonNullStats["Quakecraft"] }) {
|
||||
export default function QuakecraftStats({ stats, godlikes }: { stats: NonNullStats["Quakecraft"], godlikes: number }) {
|
||||
if (!stats) return <EmptyStats title="Quakecraft" />
|
||||
|
||||
const kd = formatNumber(devide(stats.kills + stats.kills_teams, stats.deaths + stats.deaths_teams))
|
||||
@@ -29,6 +31,10 @@ export default function QuakecraftStats({ stats }: { stats: NonNullStats["Quakec
|
||||
]}
|
||||
>
|
||||
<Separator className="my-4" />
|
||||
<QuakeCraftGeneralStats stats={stats} godlikes={godlikes} />
|
||||
<Separator className="my-4" />
|
||||
<QuakecraftModeStatsTable stats={stats} />
|
||||
<Separator className="my-4" />
|
||||
</GeneralStats>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -87,3 +87,32 @@ export function VampireZGeneralStats({ stats }: { stats: NonNullable<NonNullStat
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export function QuakeCraftGeneralStats({ stats, godlikes }: { stats: NonNullable<NonNullStats["Quakecraft"]>, godlikes: number }) {
|
||||
return (
|
||||
<div className="flex mt-4">
|
||||
<div className="flex-1">
|
||||
<BasicStat title="Coins: " value={formatNumber(stats.coins)} className="text-mc-gold" />
|
||||
<p>
|
||||
<br />
|
||||
</p>
|
||||
<BasicStat title="Kills: " value={formatNumber(stats.kills + stats.kills_teams)} />
|
||||
<BasicStat title="Deaths: " value={formatNumber(stats.deaths + stats.deaths_teams)} />
|
||||
<BasicStat
|
||||
title="Kill/Death Ratio: "
|
||||
value={formatNumber(devide(stats.kills + stats.kills_teams, stats.deaths + stats.deaths_teams))}
|
||||
/>
|
||||
</div>
|
||||
<div className="flex-1">
|
||||
<BasicStat title="Wins: " value={formatNumber(stats.wins + stats.wins_teams)} />
|
||||
<p>
|
||||
<br />
|
||||
</p>
|
||||
<BasicStat title="Godlikes: " value={formatNumber(godlikes)} />
|
||||
<BasicStat title="Highest Killstreak: " value={formatNumber(stats.highest_killstreak)} />
|
||||
<BasicStat title="Dash Cooldown: " value={stats.dash_cooldown + 1} />
|
||||
<BasicStat title="Dash Power: " value={stats.dash_power + 1} />
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,9 +1,82 @@
|
||||
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"
|
||||
import { formatNumber } from "@/lib/formatters"
|
||||
import { getArenaBrawlModeName, getArenaBrawlModeStats, getArenaBrawlMostPlayedMode, getArenaBrawlOverallStats } from "@/lib/hypixel/classic/general"
|
||||
import {
|
||||
getArenaBrawlModeName,
|
||||
getArenaBrawlModeStats,
|
||||
getArenaBrawlMostPlayedMode,
|
||||
getArenaBrawlOverallStats,
|
||||
getQuakecraftModeName,
|
||||
getQuakecraftModeStats,
|
||||
getQuakecraftMostPlayedMode
|
||||
} from "@/lib/hypixel/classic/general"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
import { cn } from "@/lib/utils"
|
||||
|
||||
export function QuakecraftModeStatsTable({ stats }: { stats: NonNullable<NonNullStats["Quakecraft"]> }) {
|
||||
return (
|
||||
<Table>
|
||||
<QuakecraftModeStatsTableHeader />
|
||||
<TableBody>
|
||||
<QuakecraftModeStat modeId="solo" stats={stats} />
|
||||
<QuakecraftModeStat modeId="teams" stats={stats} />
|
||||
<QuakecraftModeStat modeId="all" stats={stats} />
|
||||
</TableBody>
|
||||
</Table>
|
||||
)
|
||||
}
|
||||
|
||||
function QuakecraftModeStat(
|
||||
{ modeId, stats }: { modeId: Parameters<typeof getQuakecraftModeStats>[0], stats: NonNullable<NonNullStats["Quakecraft"]> }
|
||||
) {
|
||||
if (modeId === "all") {
|
||||
const modeStats = getQuakecraftModeStats(modeId, stats)
|
||||
return (
|
||||
<TableRow className="font-bold">
|
||||
<TableCell>Overall</TableCell>
|
||||
{modeStats.map((v, i) => {
|
||||
return <TableCell key={i}>{formatNumber(v)}</TableCell>
|
||||
})}
|
||||
</TableRow>
|
||||
)
|
||||
}
|
||||
|
||||
const modeStats = getQuakecraftModeStats(modeId, stats)
|
||||
const modeName = getQuakecraftModeName(modeId)
|
||||
const mostPlayed = getQuakecraftMostPlayedMode(stats) === modeId
|
||||
|
||||
return (
|
||||
<TableRow className={cn(mostPlayed && "text-mc-light-purple")}>
|
||||
<TableCell>{modeName}</TableCell>
|
||||
{modeStats.map((v, i) => {
|
||||
return <TableCell key={i}>{formatNumber(v)}</TableCell>
|
||||
})}
|
||||
</TableRow>
|
||||
)
|
||||
}
|
||||
|
||||
function QuakecraftModeStatsTableHeader() {
|
||||
const headerElements = [
|
||||
"Mode",
|
||||
"Kills",
|
||||
"Deaths",
|
||||
"KD",
|
||||
"Wins",
|
||||
"Killstreaks",
|
||||
"Headshots",
|
||||
"Shots Fired",
|
||||
"HK",
|
||||
"KS"
|
||||
]
|
||||
|
||||
return (
|
||||
<TableHeader>
|
||||
<TableRow>
|
||||
{headerElements.map((v, i) => <TableHead key={i} className="font-bold">{v}</TableHead>)}
|
||||
</TableRow>
|
||||
</TableHeader>
|
||||
)
|
||||
}
|
||||
|
||||
export function ArenaBrawlModeStatsTable({ stats }: { stats: NonNullable<NonNullStats["ArenaBrawl"]> }) {
|
||||
return (
|
||||
<Table>
|
||||
|
||||
Reference in New Issue
Block a user