Added vampz and walls stats

This commit is contained in:
2025-09-21 21:35:17 +02:00
parent ae3f0124b5
commit 3892698d15
7 changed files with 177 additions and 4 deletions

View File

@@ -104,7 +104,9 @@ export function PlayerStats(
<ClassicStats
stats={{
arena: stats.ArenaBrawl,
paintball: stats.Paintball
paintball: stats.Paintball,
walls: stats.Walls,
vampirez: stats.VampireZ
}}
/>
)

View File

@@ -5,8 +5,19 @@ 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"] } }) {
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">
@@ -27,6 +38,8 @@ export default function ClassicStats({ stats }: { stats: { arena: NonNullStats["
<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>
)

View File

@@ -34,3 +34,56 @@ export function PaintballGeneralStats({ stats }: { stats: NonNullable<NonNullSta
</div>
)
}
export function WallsGeneralStats({ stats }: { stats: NonNullable<NonNullStats["Walls"]> }) {
return (
<div>
<BasicStat title="Coins: " value={formatNumber(stats.coins)} className="text-mc-gold" />
<p>
<br />
</p>
<BasicStat title="Kills: " value={formatNumber(stats.kills)} />
<BasicStat title="Deaths: " value={formatNumber(stats.deaths)} />
<BasicStat title="Kill/Death Ratio: " value={formatNumber(devide(stats.kills, stats.deaths))} />
<p>
<br />
</p>
<BasicStat title="Wins: " value={formatNumber(stats.wins)} />
<BasicStat title="Losses: " value={formatNumber(stats.losses)} />
<BasicStat title="Win/Loss Ratio: " value={formatNumber(devide(stats.wins, stats.losses))} />
</div>
)
}
export function VampireZGeneralStats({ stats }: { stats: NonNullable<NonNullStats["VampireZ"]> }) {
return (
<>
<div>
<BasicStat title="Coins: " value={formatNumber(stats.coins)} className="text-mc-gold" />
</div>
<div className="flex mt-4">
<div className="flex-1">
<BasicStat title="Wins as Vampire: " value={formatNumber(stats.vampire_wins)} />
<p>
<br />
</p>
<BasicStat title="Vampire Kills: " value={formatNumber(stats.vampire_kills)} />
<BasicStat title="Vampire Deaths: " value={formatNumber(stats.vampire_deaths)} />
<BasicStat title="Vampire Kill/Death Ratio: " value={formatNumber(devide(stats.human_kills, stats.vampire_deaths))} />
</div>
<div className="flex-1">
<BasicStat title="Human Wins: " value={formatNumber(stats.human_wins)} />
<p>
<br />
</p>
<BasicStat title="Human Kills: " value={formatNumber(stats.human_kills)} />
<BasicStat title="Human Deaths: " value={formatNumber(stats.human_deaths)} />
<BasicStat title="Human Kill/Death Ratio: " value={formatNumber(devide(stats.vampire_kills, stats.human_deaths))} />
</div>
<div className="flex-1">
<BasicStat title="Zombie Kills: " value={formatNumber(stats.zombie_kills)} />
</div>
</div>
</>
)
}

View File

@@ -0,0 +1,42 @@
import { Separator } from "@/components/ui/separator"
import { formatNumber } from "@/lib/formatters"
import { devide } from "@/lib/hypixel/general"
import { NonNullStats } from "@/lib/schema/player"
import GeneralStats from "../GeneralStats"
import { VampireZGeneralStats } from "./stats"
export default function VampireZStats({ stats }: { stats: NonNullStats["VampireZ"] }) {
if (!stats) return null
const vkd = formatNumber(devide(stats.human_kills, stats.vampire_deaths))
const hkd = formatNumber(devide(stats.vampire_kills, stats.human_deaths))
return (
<GeneralStats
id="classic-vampirez"
title="VampireZ"
collapsedStats={[
{
title: <p>Vampire KD</p>,
stat: <p className="text-muted-foreground">{vkd}</p>
},
{
title: <p>Human KD</p>,
stat: <p className="text-muted-foreground">{hkd}</p>
},
{
title: <p>Vampire Wins</p>,
stat: <p className="text-muted-foreground">{formatNumber(stats.vampire_wins)}</p>
},
{
title: <p>Human Wins</p>,
stat: <p className="text-muted-foreground">{formatNumber(stats.human_wins)}</p>
}
]}
>
<Separator className="my-4" />
<VampireZGeneralStats stats={stats} />
<Separator className="my-4" />
</GeneralStats>
)
}

View File

@@ -0,0 +1,42 @@
import { Separator } from "@/components/ui/separator"
import { formatNumber } from "@/lib/formatters"
import { devide } from "@/lib/hypixel/general"
import { NonNullStats } from "@/lib/schema/player"
import GeneralStats from "../GeneralStats"
import { WallsGeneralStats } from "./stats"
export default function WallsStats({ stats }: { stats: NonNullStats["Walls"] }) {
if (!stats) return null
const kd = formatNumber(devide(stats.kills, stats.deaths))
const wl = formatNumber(devide(stats.wins, stats.losses))
return (
<GeneralStats
id="classic-walls"
title="Walls"
collapsedStats={[
{
title: <p>Kills</p>,
stat: <p className="text-muted-foreground">{formatNumber(stats.kills)}</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)}</p>
},
{
title: <p>WL</p>,
stat: <p className="text-muted-foreground">{wl}</p>
}
]}
>
<Separator className="my-4" />
<WallsGeneralStats stats={stats} />
<Separator className="my-4" />
</GeneralStats>
)
}

View File

@@ -3,7 +3,7 @@ import { arcadeStatsSchema } from "./stats/arcade"
import { bedwarsStatsSchema } from "./stats/bedwars"
import { blitzStatsSchema } from "./stats/blitz"
import { buildBattleStatsSchema } from "./stats/build-battle"
import { arenaBrawlStatsSchema, paintBallStatsSchema } from "./stats/classic"
import { arenaBrawlStatsSchema, paintBallStatsSchema, vampireZStatsSchema, wallsStatsSchema } from "./stats/classic"
import { copsAndCrimsStatsSchema } from "./stats/copsandcrims"
import { duelsStatsSchema } from "./stats/duels"
import { megawallsStats } from "./stats/megawalls"
@@ -47,7 +47,9 @@ export const playerSchema = z.looseObject({
SuperSmash: smashHerosStats.optional(),
Battleground: warlordsStatsSchema.optional(),
Arena: arenaBrawlStatsSchema.optional(),
Paintball: paintBallStatsSchema
Paintball: paintBallStatsSchema.optional(),
Walls: wallsStatsSchema.optional(),
VampireZ: vampireZStatsSchema.optional()
}).transform(({ Walls3, MCGO, HungerGames, SuperSmash, Battleground, Arena, ...rest }) => {
return {
MegaWalls: Walls3,

View File

@@ -29,3 +29,22 @@ export const paintBallStatsSchema = z.object({
killstreaks: z.number().default(0),
shots_fired: z.number().default(0)
})
export const wallsStatsSchema = z.object({
coins: z.number().default(0),
kills: z.number().default(0),
deaths: z.number().default(0),
wins: z.number().default(0),
losses: z.number().default(0)
})
export const vampireZStatsSchema = z.object({
coins: z.number().default(0),
vampire_kills: z.number().default(0),
vampire_deaths: z.number().default(0),
vampire_wins: z.number().default(0),
human_kills: z.number().default(0),
human_deaths: z.number().default(0),
human_wins: z.number().default(0),
zombie_kills: z.number().default(0)
})