Added arcade stat card
This commit is contained in:
23
src/app/(stats)/player/[ign]/_stats/arcade/arcade.tsx
Normal file
23
src/app/(stats)/player/[ign]/_stats/arcade/arcade.tsx
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
import { Separator } from "@/components/ui/separator"
|
||||||
|
import { getArcadeTotalWins } from "@/lib/hypixel/arcade/general"
|
||||||
|
import { NonNullStats } from "@/lib/schema/player"
|
||||||
|
import GeneralStats from "../GeneralStats"
|
||||||
|
|
||||||
|
export default function ArcadeStats({ stats }: { stats: NonNullStats["Arcade"] }) {
|
||||||
|
if (!stats) return null
|
||||||
|
|
||||||
|
const wins = getArcadeTotalWins(stats)
|
||||||
|
|
||||||
|
return (
|
||||||
|
<GeneralStats
|
||||||
|
id="arcade"
|
||||||
|
title="Arcade"
|
||||||
|
collapsedStats={[{
|
||||||
|
title: <p>Wins</p>,
|
||||||
|
stat: <p className="text-muted-foreground">{wins}</p>
|
||||||
|
}]}
|
||||||
|
>
|
||||||
|
<Separator className="my-4" />
|
||||||
|
</GeneralStats>
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -12,6 +12,7 @@ import { Metadata } from "next"
|
|||||||
import { Suspense } from "react"
|
import { Suspense } from "react"
|
||||||
import { PlayerPageLoadText } from "./_client"
|
import { PlayerPageLoadText } from "./_client"
|
||||||
import Sidebar from "./_components/Sidebar"
|
import Sidebar from "./_components/Sidebar"
|
||||||
|
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"
|
||||||
@@ -132,6 +133,7 @@ async function SuspendedPage({ params }: Pick<PageProps<"/player/[ign]">, "param
|
|||||||
<CopsAndCrimsStats stats={player.stats.CopsAndCrims} />
|
<CopsAndCrimsStats stats={player.stats.CopsAndCrims} />
|
||||||
<WoolGamesStats stats={player.stats.WoolGames} />
|
<WoolGamesStats stats={player.stats.WoolGames} />
|
||||||
<BlitzStats stats={player.stats.Blitz} />
|
<BlitzStats stats={player.stats.Blitz} />
|
||||||
|
<ArcadeStats stats={player.stats.Arcade} />
|
||||||
</Accordion>
|
</Accordion>
|
||||||
</div>
|
</div>
|
||||||
) :
|
) :
|
||||||
|
|||||||
24
src/data/hypixel/arcade.ts
Normal file
24
src/data/hypixel/arcade.ts
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
export const WINS = [
|
||||||
|
"wins_dayone",
|
||||||
|
"wins_oneinthequiver",
|
||||||
|
"wins_dragonwars2",
|
||||||
|
"wins_easter_simulator",
|
||||||
|
"wins_ender",
|
||||||
|
"wins_farm_hunt",
|
||||||
|
"wins_soccer",
|
||||||
|
"sw_game_wins",
|
||||||
|
"wins_grinch_simulator_v2",
|
||||||
|
"wins_halloween_simulator",
|
||||||
|
"seeker_wins_hide_and_seek",
|
||||||
|
"hider_wins_hide_and_seek",
|
||||||
|
"wins_hole_in_the_wall",
|
||||||
|
"wins_simon_says",
|
||||||
|
"wins_party",
|
||||||
|
"wins_party_2",
|
||||||
|
"wins_party_3",
|
||||||
|
"wins_draw_their_thing",
|
||||||
|
"wins_scuba_simulator",
|
||||||
|
"wins_throw_out",
|
||||||
|
"wins_mini_walls",
|
||||||
|
"wins_zombies"
|
||||||
|
] as const
|
||||||
14
src/lib/hypixel/arcade/general.ts
Normal file
14
src/lib/hypixel/arcade/general.ts
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
import { WINS } from "@/data/hypixel/arcade"
|
||||||
|
import { NonNullStats } from "@/lib/schema/player"
|
||||||
|
|
||||||
|
export function getArcadeTotalWins(stats: NonNullable<NonNullStats["Arcade"]>) {
|
||||||
|
let wins = 0
|
||||||
|
for (const win of WINS) {
|
||||||
|
wins = wins + stats[win]
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stats.dropper) wins = wins + stats.dropper.wins
|
||||||
|
if (stats.pixel_party) wins = wins + stats.pixel_party.wins
|
||||||
|
|
||||||
|
return wins
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
import z from "zod"
|
import z from "zod"
|
||||||
import {
|
import {
|
||||||
|
arcadeStatsSchema,
|
||||||
bedwarsStatsSchema,
|
bedwarsStatsSchema,
|
||||||
blitzStatsSchema,
|
blitzStatsSchema,
|
||||||
buildBattleStatsSchema,
|
buildBattleStatsSchema,
|
||||||
@@ -38,7 +39,8 @@ export const playerSchema = z.looseObject({
|
|||||||
Walls3: megawallsStats.optional(),
|
Walls3: megawallsStats.optional(),
|
||||||
MCGO: copsAndCrimsStatsSchema.optional(),
|
MCGO: copsAndCrimsStatsSchema.optional(),
|
||||||
WoolGames: woolGamesStatsSchema.optional(),
|
WoolGames: woolGamesStatsSchema.optional(),
|
||||||
HungerGames: blitzStatsSchema.optional()
|
HungerGames: blitzStatsSchema.optional(),
|
||||||
|
Arcade: arcadeStatsSchema.optional()
|
||||||
}).transform(({ Walls3, MCGO, HungerGames, ...rest }) => {
|
}).transform(({ Walls3, MCGO, HungerGames, ...rest }) => {
|
||||||
return {
|
return {
|
||||||
MegaWalls: Walls3,
|
MegaWalls: Walls3,
|
||||||
|
|||||||
@@ -878,3 +878,46 @@ export const blitzStatsSchema = z.object({
|
|||||||
...blitzKitPlayedStats().kits,
|
...blitzKitPlayedStats().kits,
|
||||||
...blitzKitPlayedStats().prestiges
|
...blitzKitPlayedStats().prestiges
|
||||||
})
|
})
|
||||||
|
|
||||||
|
function arcadeModeWins() {
|
||||||
|
const ids = [
|
||||||
|
"wins_dayone",
|
||||||
|
"wins_oneinthequiver",
|
||||||
|
"wins_dragonwars2",
|
||||||
|
"wins_easter_simulator",
|
||||||
|
"wins_ender",
|
||||||
|
"wins_farm_hunt",
|
||||||
|
"wins_soccer",
|
||||||
|
"sw_game_wins",
|
||||||
|
"wins_grinch_simulator_v2",
|
||||||
|
"wins_halloween_simulator",
|
||||||
|
"seeker_wins_hide_and_seek",
|
||||||
|
"hider_wins_hide_and_seek",
|
||||||
|
"wins_hole_in_the_wall",
|
||||||
|
"wins_simon_says",
|
||||||
|
"wins_party",
|
||||||
|
"wins_party_2",
|
||||||
|
"wins_party_3",
|
||||||
|
"wins_draw_their_thing",
|
||||||
|
"wins_scuba_simulator",
|
||||||
|
"wins_throw_out",
|
||||||
|
"wins_mini_walls",
|
||||||
|
"wins_zombies"
|
||||||
|
] as const
|
||||||
|
|
||||||
|
const entries = new Map<string, z.ZodDefault<z.ZodNumber>>()
|
||||||
|
for (const id of ids) {
|
||||||
|
entries.set(`${id}`, z.number().default(0))
|
||||||
|
}
|
||||||
|
return Object.fromEntries(entries) as Record<`${typeof ids[number]}`, z.ZodDefault<z.ZodNumber>>
|
||||||
|
}
|
||||||
|
|
||||||
|
export const arcadeStatsSchema = z.object({
|
||||||
|
pixel_party: z.object({
|
||||||
|
wins: z.number().default(0)
|
||||||
|
}).optional(),
|
||||||
|
dropper: z.object({
|
||||||
|
wins: z.number().default(0)
|
||||||
|
}).optional(),
|
||||||
|
...arcadeModeWins()
|
||||||
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user