Overhauled classic stats and added quakecraftr
This commit is contained in:
@@ -17,7 +17,11 @@ import ArcadeStats from "./_stats/arcade/arcade"
|
|||||||
import BedwarsStats from "./_stats/bedwars/bedwars"
|
import BedwarsStats from "./_stats/bedwars/bedwars"
|
||||||
import BlitzStats from "./_stats/blitz/blitz"
|
import BlitzStats from "./_stats/blitz/blitz"
|
||||||
import BuildBattleStats from "./_stats/build-battle/build-battle"
|
import BuildBattleStats from "./_stats/build-battle/build-battle"
|
||||||
import ClassicStats from "./_stats/classic/classic"
|
import ArenaBrawlStats from "./_stats/classic/arenabrawl"
|
||||||
|
import PaintballStats from "./_stats/classic/paintball"
|
||||||
|
import QuakecraftStats from "./_stats/classic/quakecraft"
|
||||||
|
import VampireZStats from "./_stats/classic/vampirez"
|
||||||
|
import WallsStats from "./_stats/classic/walls"
|
||||||
import CopsAndCrimsStats from "./_stats/copsandcrims/copsandcrims"
|
import CopsAndCrimsStats from "./_stats/copsandcrims/copsandcrims"
|
||||||
import DuelsStats from "./_stats/duels/duels"
|
import DuelsStats from "./_stats/duels/duels"
|
||||||
import MegaWallsStats from "./_stats/megawalls/megawalls"
|
import MegaWallsStats from "./_stats/megawalls/megawalls"
|
||||||
@@ -101,16 +105,11 @@ export function PlayerStats(
|
|||||||
"speeduhc": <SpeedUHCStats stats={stats.SpeedUHC} uhcCoins={stats.UHC?.coins} />,
|
"speeduhc": <SpeedUHCStats stats={stats.SpeedUHC} uhcCoins={stats.UHC?.coins} />,
|
||||||
"smashheros": <SmashHerosStats stats={stats.SmashHeros} />,
|
"smashheros": <SmashHerosStats stats={stats.SmashHeros} />,
|
||||||
"warlords": <WarlordsStats stats={stats.Warlords} />,
|
"warlords": <WarlordsStats stats={stats.Warlords} />,
|
||||||
"classic": (
|
"arenabrawl": <ArenaBrawlStats stats={stats.ArenaBrawl} />,
|
||||||
<ClassicStats
|
"paintball": <PaintballStats stats={stats.Paintball} />,
|
||||||
stats={{
|
"walls": <WallsStats stats={stats.Walls} />,
|
||||||
arena: stats.ArenaBrawl,
|
"vampirez": <VampireZStats stats={stats.VampireZ} />,
|
||||||
paintball: stats.Paintball,
|
"quakecraft": <QuakecraftStats stats={stats.Quakecraft} />
|
||||||
walls: stats.Walls,
|
|
||||||
vampirez: stats.VampireZ
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
)
|
|
||||||
} as const
|
} as const
|
||||||
|
|
||||||
const defaultOrder = Object.keys(statsComponents)
|
const defaultOrder = Object.keys(statsComponents)
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ export default function ArenaBrawlStats({ stats }: { stats: NonNullStats["ArenaB
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<GeneralStats
|
<GeneralStats
|
||||||
id="classic-arena"
|
id="arenabrawl"
|
||||||
title="Arena Brawl"
|
title="Arena Brawl"
|
||||||
collapsedStats={[
|
collapsedStats={[
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,46 +0,0 @@
|
|||||||
import { AccordionContent, AccordionItem, AccordionTrigger } from "@/components/ui/accordion"
|
|
||||||
import { Card, CardContent } from "@/components/ui/card"
|
|
||||||
import { NonNullStats } from "@/lib/schema/player"
|
|
||||||
import { cn } from "@/lib/utils"
|
|
||||||
import CollapsedStats from "../../_components/CollapsedStats"
|
|
||||||
import ArenaBrawlStats from "./arenabrawl"
|
|
||||||
import PaintballStats from "./paintball"
|
|
||||||
import VampireZStats from "./vampirez"
|
|
||||||
import WallsStats from "./walls"
|
|
||||||
|
|
||||||
export default function ClassicStats(
|
|
||||||
{ stats }: {
|
|
||||||
stats: {
|
|
||||||
arena: NonNullStats["ArenaBrawl"]
|
|
||||||
paintball: NonNullStats["Paintball"]
|
|
||||||
walls: NonNullStats["Walls"]
|
|
||||||
vampirez: NonNullStats["VampireZ"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
) {
|
|
||||||
return (
|
|
||||||
<AccordionItem value="classic">
|
|
||||||
<Card className="py-0">
|
|
||||||
<CardContent>
|
|
||||||
<AccordionTrigger className={cn("items-center py-2 hover:no-underline hover:cursor-pointer overflow-y-auto")}>
|
|
||||||
<h1 className="text-xl font-bold">Classic</h1>
|
|
||||||
<div className="flex gap-4">
|
|
||||||
<CollapsedStats
|
|
||||||
stats={[{
|
|
||||||
title: <p>Modes</p>,
|
|
||||||
stat: <p className="text-muted-foreground">Arena Brawl | Paintball | Quakecraft | TKR | VampireZ | Walls</p>
|
|
||||||
}]}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</AccordionTrigger>
|
|
||||||
</CardContent>
|
|
||||||
</Card>
|
|
||||||
<AccordionContent className="pt-4 space-y-4 mx-auto w-[95%]">
|
|
||||||
<ArenaBrawlStats stats={stats.arena} />
|
|
||||||
<PaintballStats stats={stats.paintball} />
|
|
||||||
<WallsStats stats={stats.walls} />
|
|
||||||
<VampireZStats stats={stats.vampirez} />
|
|
||||||
</AccordionContent>
|
|
||||||
</AccordionItem>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
@@ -12,7 +12,7 @@ export default function PaintballStats({ stats }: { stats: NonNullStats["Paintba
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<GeneralStats
|
<GeneralStats
|
||||||
id="classic-paintball"
|
id="paintball"
|
||||||
title="Paintball"
|
title="Paintball"
|
||||||
collapsedStats={[
|
collapsedStats={[
|
||||||
{
|
{
|
||||||
|
|||||||
34
src/app/(stats)/player/[ign]/_stats/classic/quakecraft.tsx
Normal file
34
src/app/(stats)/player/[ign]/_stats/classic/quakecraft.tsx
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
import { Separator } from "@/components/ui/separator"
|
||||||
|
import { formatNumber } from "@/lib/formatters"
|
||||||
|
import { devide } from "@/lib/hypixel/general"
|
||||||
|
import { NonNullStats } from "@/lib/schema/player"
|
||||||
|
import { EmptyStats, GeneralStats } from "../stats-components"
|
||||||
|
|
||||||
|
export default function QuakecraftStats({ stats }: { stats: NonNullStats["Quakecraft"] }) {
|
||||||
|
if (!stats) return <EmptyStats title="Quakecraft" />
|
||||||
|
|
||||||
|
const kd = formatNumber(devide(stats.kills + stats.kills_teams, stats.deaths + stats.deaths_teams))
|
||||||
|
|
||||||
|
return (
|
||||||
|
<GeneralStats
|
||||||
|
id="quakecraft"
|
||||||
|
title="Quakecraft"
|
||||||
|
collapsedStats={[
|
||||||
|
{
|
||||||
|
title: <p>Kills</p>,
|
||||||
|
stat: <p className="text-muted-foreground">{formatNumber(stats.kills + stats.kills_teams)}</p>
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: <p>KD</p>,
|
||||||
|
stat: <p className="text-muted-foreground">{kd}</p>
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: <p>Wins</p>,
|
||||||
|
stat: <p className="text-muted-foreground">{formatNumber(stats.wins + stats.wins_teams)}</p>
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<Separator className="my-4" />
|
||||||
|
</GeneralStats>
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -13,7 +13,7 @@ export default function VampireZStats({ stats }: { stats: NonNullStats["VampireZ
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<GeneralStats
|
<GeneralStats
|
||||||
id="classic-vampirez"
|
id="vampirez"
|
||||||
title="VampireZ"
|
title="VampireZ"
|
||||||
collapsedStats={[
|
collapsedStats={[
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ export default function WallsStats({ stats }: { stats: NonNullStats["Walls"] })
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<GeneralStats
|
<GeneralStats
|
||||||
id="classic-walls"
|
id="walls"
|
||||||
title="Walls"
|
title="Walls"
|
||||||
collapsedStats={[
|
collapsedStats={[
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -3,3 +3,7 @@ export const ARENABRAWLMODES = [
|
|||||||
{ id: "2v2", name: "2v2" },
|
{ id: "2v2", name: "2v2" },
|
||||||
{ id: "4v4", name: "4v4" }
|
{ id: "4v4", name: "4v4" }
|
||||||
] as const
|
] as const
|
||||||
|
export const QUAKECRAFTMODES = [
|
||||||
|
{ id: "", name: "Solo" },
|
||||||
|
{ id: "teams", name: "Teams" }
|
||||||
|
] as const
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { arcadeStatsSchema } from "./stats/arcade"
|
|||||||
import { bedwarsStatsSchema } from "./stats/bedwars"
|
import { bedwarsStatsSchema } from "./stats/bedwars"
|
||||||
import { blitzStatsSchema } from "./stats/blitz"
|
import { blitzStatsSchema } from "./stats/blitz"
|
||||||
import { buildBattleStatsSchema } from "./stats/build-battle"
|
import { buildBattleStatsSchema } from "./stats/build-battle"
|
||||||
import { arenaBrawlStatsSchema, paintBallStatsSchema, vampireZStatsSchema, wallsStatsSchema } from "./stats/classic"
|
import { arenaBrawlStatsSchema, paintBallStatsSchema, quakecraftStatsSchema, vampireZStatsSchema, wallsStatsSchema } from "./stats/classic"
|
||||||
import { copsAndCrimsStatsSchema } from "./stats/copsandcrims"
|
import { copsAndCrimsStatsSchema } from "./stats/copsandcrims"
|
||||||
import { duelsStatsSchema } from "./stats/duels"
|
import { duelsStatsSchema } from "./stats/duels"
|
||||||
import { megawallsStats } from "./stats/megawalls"
|
import { megawallsStats } from "./stats/megawalls"
|
||||||
@@ -49,8 +49,9 @@ export const playerSchema = z.looseObject({
|
|||||||
Arena: arenaBrawlStatsSchema.optional(),
|
Arena: arenaBrawlStatsSchema.optional(),
|
||||||
Paintball: paintBallStatsSchema.optional(),
|
Paintball: paintBallStatsSchema.optional(),
|
||||||
Walls: wallsStatsSchema.optional(),
|
Walls: wallsStatsSchema.optional(),
|
||||||
VampireZ: vampireZStatsSchema.optional()
|
VampireZ: vampireZStatsSchema.optional(),
|
||||||
}).transform(({ Walls3, MCGO, HungerGames, SuperSmash, Battleground, Arena, ...rest }) => {
|
Quake: quakecraftStatsSchema.optional()
|
||||||
|
}).transform(({ Walls3, MCGO, HungerGames, SuperSmash, Battleground, Arena, Quake, ...rest }) => {
|
||||||
return {
|
return {
|
||||||
MegaWalls: Walls3,
|
MegaWalls: Walls3,
|
||||||
CopsAndCrims: MCGO,
|
CopsAndCrims: MCGO,
|
||||||
@@ -58,6 +59,7 @@ export const playerSchema = z.looseObject({
|
|||||||
SmashHeros: SuperSmash,
|
SmashHeros: SuperSmash,
|
||||||
Warlords: Battleground,
|
Warlords: Battleground,
|
||||||
ArenaBrawl: Arena,
|
ArenaBrawl: Arena,
|
||||||
|
Quakecraft: Quake,
|
||||||
...rest
|
...rest
|
||||||
}
|
}
|
||||||
}).optional(),
|
}).optional(),
|
||||||
|
|||||||
@@ -48,3 +48,18 @@ export const vampireZStatsSchema = z.object({
|
|||||||
human_wins: z.number().default(0),
|
human_wins: z.number().default(0),
|
||||||
zombie_kills: z.number().default(0)
|
zombie_kills: z.number().default(0)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
export const quakecraftStatsSchema = z.object({
|
||||||
|
kills: z.number().default(0),
|
||||||
|
deaths: z.number().default(0),
|
||||||
|
wins: z.number().default(0),
|
||||||
|
headshots: z.number().default(0),
|
||||||
|
kills_since_update_feb_2017: z.number().default(0),
|
||||||
|
shots_fired: z.number().default(0),
|
||||||
|
kills_teams: z.number().default(0),
|
||||||
|
deaths_teams: z.number().default(0),
|
||||||
|
wins_teams: z.number().default(0),
|
||||||
|
headshots_teams: z.number().default(0),
|
||||||
|
kills_since_update_feb_2017_teams: z.number().default(0),
|
||||||
|
shots_fired_teams: z.number().default(0)
|
||||||
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user