Added shards and opals

This commit is contained in:
2025-08-29 13:40:58 +02:00
parent 06adea0098
commit bcff435bc6
6 changed files with 151 additions and 4 deletions

View File

@@ -1,8 +1,34 @@
import { formatNumber } from "@/lib/formatters"
import { getPrestigeName, getSkyWarsIcon, getTextColor } from "@/lib/hypixel/skywars"
import { getSkywarsLevel } from "@/lib/hypixel/skyWarsLevel"
import { cn } from "@/lib/utils"
import GenericProgress from "../../_components/GenericProgress"
export function AngelOfDeath(
{ shards, lifetime_shards, opals, lifetime_opals }: { shards: number, lifetime_shards: number, opals: number, lifetime_opals: number }
) {
return (
<div className="grid grid-cols-2 grid-rows-2 mt-5">
<p>
<span className="font-bold">{"Shards: "}</span>
<span className="text-mc-aqua">{shards}</span>
</p>
<p>
<span className="font-bold">{"Opals: "}</span>
<span className="text-mc-blue">{opals}</span>
</p>
<p>
<span className="font-bold">{"Lifetime Shards: "}</span>
<span className="text-mc-aqua">{formatNumber(lifetime_shards)}</span>
</p>
<p>
<span className="font-bold">{"Lifetime Opals: "}</span>
<span className="text-mc-blue">{lifetime_opals}</span>
</p>
</div>
)
}
export function ShardProgress({ percent }: { percent: number }) {
return (
<div>

View File

@@ -10,11 +10,13 @@ import { NonNullStats } from "@/lib/schema/player"
import { ChevronDown, ChevronUp } from "lucide-react"
import { useEffect, useRef, useState } from "react"
import CollapsedStats from "../../_components/CollapsedStats"
import { ShardProgress, SkywarsLevel, SkywarsProgress } from "./components"
import { AngelOfDeath, ShardProgress, SkywarsLevel, SkywarsProgress } from "./components"
import SkyWarsGeneralStats from "./stats"
import SkywarsStatTable from "./table"
export default function SkyWarsStats({ stats }: { stats: NonNullStats["SkyWars"] }) {
export default function SkyWarsStats(
{ stats, achievements_skywars_opal_obsession }: { stats: NonNullStats["SkyWars"], achievements_skywars_opal_obsession: number }
) {
const ref = useRef<HTMLDivElement>(null)
const [opened, setOpened] = useState(false)
@@ -92,6 +94,12 @@ export default function SkyWarsStats({ stats }: { stats: NonNullStats["SkyWars"]
<SkywarsStatTable stats={stats} />
<Separator className="my-4" />
<ShardProgress percent={shardProgress} />
<AngelOfDeath
shards={stats.shard}
lifetime_shards={achievements_skywars_opal_obsession * 20000 + stats.shard}
opals={stats.opals}
lifetime_opals={achievements_skywars_opal_obsession}
/>
</CollapsibleContent>
</Collapsible>
</CardContent>

View File

@@ -85,7 +85,10 @@ async function SuspendedPage({ ign: pign }: { ign: string }) {
(
<div className="pb-4 space-y-4 w-3/4">
<BedwarsStats stats={player.stats.Bedwars} />
<SkyWarsStats stats={player.stats.SkyWars} />
<SkyWarsStats
stats={player.stats.SkyWars}
achievements_skywars_opal_obsession={player.achievements?.["skywars_opal_obsession"] ?? 0}
/>
</div>
) :
(

View File

@@ -12,6 +12,7 @@ export const playerSchema = z.looseObject({
networkExp: z.number().default(0),
karma: z.number().default(0),
achievementPoints: z.number().default(0),
achievements: z.record(z.string(), z.number()).optional(),
stats: z.looseObject({
Bedwars: bedwarsStatsSchema.optional(),
SkyWars: skywarsStatsSchema.optional()

View File

@@ -247,5 +247,6 @@ export const skywarsStatsSchema = z.looseObject({
deaths_ranked_normal: z.number().default(0),
wins_ranked_normal: z.number().default(0),
losses_ranked_normal: z.number().default(0),
shard: z.number().default(0)
shard: z.number().default(0),
opals: z.number().default(0)
})