Updated murder mystery stats

This commit is contained in:
2025-09-02 23:27:16 +02:00
parent e536054d2d
commit 23652bd412
5 changed files with 174 additions and 7 deletions

View File

@@ -5,6 +5,7 @@ import { formatNumber } from "@/lib/formatters"
import { NonNullStats } from "@/lib/schema/player"
import CollapsedStats from "../../_components/CollapsedStats"
import MurderMysteryGeneralStats from "./stats"
import MurderMysteryStatTable from "./table"
export default function MurderMysteryStats({ stats }: { stats: NonNullStats["MurderMystery"] }) {
if (!stats) return null
@@ -33,6 +34,9 @@ export default function MurderMysteryStats({ stats }: { stats: NonNullStats["Mur
<AccordionContent>
<Separator className="my-4" />
<MurderMysteryGeneralStats statsChecked={stats} />
<Separator className="my-4" />
<MurderMysteryStatTable stats={stats} />
<Separator className="my-4" />
</AccordionContent>
</CardContent>
</Card>

View File

@@ -0,0 +1,69 @@
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"
import { formatNumber } from "@/lib/formatters"
import { getBestMurderMysteryMode, getModeTitle, getMurderMysteryModeStats } from "@/lib/hypixel/murder-mystery/general"
import { NonNullStats } from "@/lib/schema/player"
import { cn } from "@/lib/utils"
export default function MurderMysteryStatTable({ stats }: { stats: NonNullStats["MurderMystery"] }) {
return (
<Table>
<MurderMysteryTableHeader />
<TableBody>
<MurderMysteryStat modeId="MURDER_CLASSIC" stats={stats} />
<MurderMysteryStat modeId="MURDER_ASSASSINS" stats={stats} />
<MurderMysteryStat modeId="MURDER_DOUBLE_UP" stats={stats} />
<MurderMysteryStat modeId="MURDER_HARDCORE" stats={stats} />
<MurderMysteryStat modeId="MURDER_SHOWDOWN" stats={stats} />
<MurderMysteryStat modeId="all_modes" stats={stats} />
</TableBody>
</Table>
)
}
function MurderMysteryTableHeader() {
const headerElements = [
"Mode",
"Kills",
"Bow Kills",
"Knife Kills",
"Thrown Knife Kills",
"Wins",
"Losses",
"WL",
"Gold Collected"
]
return (
<TableHeader>
<TableRow>
{headerElements.map((v, i) => {
return <TableHead key={i} className="font-bold">{v}</TableHead>
})}
</TableRow>
</TableHeader>
)
}
function MurderMysteryStat({ modeId, stats }: { modeId: Parameters<typeof getMurderMysteryModeStats>[0], stats: NonNullStats["MurderMystery"] }) {
if (!stats) return null
const title = getModeTitle(modeId)
const modeStats = getMurderMysteryModeStats(modeId, stats)
const bestMode = getBestMurderMysteryMode(stats) === modeId
return (
<TableRow
className={cn(
modeId === "all_modes" ? "font-bold" : undefined,
bestMode === true ? "font-bold text-mc-light-purple" : undefined
)}
>
<TableCell>{title}</TableCell>
{modeStats.map((v, i) => (
<TableCell key={i}>
{formatNumber(v)}
</TableCell>
))}
</TableRow>
)
}