From 542cdc1cd8d53568b6ebe63c9d58bebfec60e4a4 Mon Sep 17 00:00:00 2001 From: Taken Date: Mon, 1 Sep 2025 20:13:49 +0200 Subject: [PATCH] Finished first column of duels stats --- .../player/[ign]/_stats/duels/duels.tsx | 9 ++++- .../player/[ign]/_stats/duels/stats.tsx | 40 +++++++++++++++++++ src/lib/hypixel/duels/duels.ts | 5 +++ src/lib/schema/stats.ts | 6 +++ 4 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 src/app/(stats)/player/[ign]/_stats/duels/stats.tsx diff --git a/src/app/(stats)/player/[ign]/_stats/duels/duels.tsx b/src/app/(stats)/player/[ign]/_stats/duels/duels.tsx index ac6ab9d..8a26c49 100644 --- a/src/app/(stats)/player/[ign]/_stats/duels/duels.tsx +++ b/src/app/(stats)/player/[ign]/_stats/duels/duels.tsx @@ -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:

WL

, - stat:

{wl}

+ stat:

{formatNumber(wl)}

} ]} /> + + diff --git a/src/app/(stats)/player/[ign]/_stats/duels/stats.tsx b/src/app/(stats)/player/[ign]/_stats/duels/stats.tsx new file mode 100644 index 0000000..503362f --- /dev/null +++ b/src/app/(stats)/player/[ign]/_stats/duels/stats.tsx @@ -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 ( +
+
+ + +

+
+

+

+
+

+ + + +

+
+

+ + + +
+
+
+
+ ) +} diff --git a/src/lib/hypixel/duels/duels.ts b/src/lib/hypixel/duels/duels.ts index c15f9de..e9db055 100644 --- a/src/lib/hypixel/duels/duels.ts +++ b/src/lib/hypixel/duels/duels.ts @@ -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) { for (const div of DIVISIONS.slice().reverse()) { diff --git a/src/lib/schema/stats.ts b/src/lib/schema/stats.ts index 9100322..00bf6eb 100644 --- a/src/lib/schema/stats.ts +++ b/src/lib/schema/stats.ts @@ -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),