Updated skywars stats

This commit is contained in:
2025-08-24 14:01:10 +02:00
parent ba84f90221
commit 9b1b25c5e9
8 changed files with 65 additions and 17 deletions

View File

@@ -1,6 +1,6 @@
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"
import { formatNumber } from "@/lib/formatters" import { formatNumber } from "@/lib/formatters"
import { concatStatArrays } from "@/lib/funcs" import { concatBedwarsStats } from "@/lib/funcs"
import { _BedwarsStats, getBedwarsModeStats, getBestMode } from "@/lib/hypixel/bedwars" import { _BedwarsStats, getBedwarsModeStats, getBestMode } from "@/lib/hypixel/bedwars"
import { NonNullStats } from "@/lib/schema/player" import { NonNullStats } from "@/lib/schema/player"
import { cn } from "@/lib/utils" import { cn } from "@/lib/utils"
@@ -131,7 +131,7 @@ function CoreModeStats({ stats }: { stats: NonNullStats["Bedwars"] }) {
const threesStats = getBedwarsModeStats("3s", stats as _BedwarsStats, true) const threesStats = getBedwarsModeStats("3s", stats as _BedwarsStats, true)
const foursStats = getBedwarsModeStats("4s", stats as _BedwarsStats, true) const foursStats = getBedwarsModeStats("4s", stats as _BedwarsStats, true)
const combinedStats = concatStatArrays(soloStats, doublesStats, threesStats, foursStats) const combinedStats = concatBedwarsStats(soloStats, doublesStats, threesStats, foursStats)
return ( return (
<TableRow className="font-bold"> <TableRow className="font-bold">
@@ -345,7 +345,7 @@ function AllModeStats({ stats }: { stats: NonNullStats["Bedwars"] }) {
const underworld4sStats = getBedwarsModeStats("underworld_4s", stats as _BedwarsStats, true) const underworld4sStats = getBedwarsModeStats("underworld_4s", stats as _BedwarsStats, true)
const castleStats = getBedwarsModeStats("castle", stats as _BedwarsStats, true) const castleStats = getBedwarsModeStats("castle", stats as _BedwarsStats, true)
const finalStats = concatStatArrays( const finalStats = concatBedwarsStats(
soloStats, soloStats,
doublesStats, doublesStats,
threesStats, threesStats,

View File

@@ -12,6 +12,7 @@ import { useEffect, useRef, useState } from "react"
import CollapsedStats from "../../_components/CollapsedStats" import CollapsedStats from "../../_components/CollapsedStats"
import { SkywarsLevel, SkywarsProgress } from "./components" import { SkywarsLevel, SkywarsProgress } from "./components"
import SkyWarsGeneralStats from "./stats" import SkyWarsGeneralStats from "./stats"
import SkywarsStatTable from "./table"
export default function SkyWarsStats({ stats }: { stats: NonNullStats["SkyWars"] }) { export default function SkyWarsStats({ stats }: { stats: NonNullStats["SkyWars"] }) {
const ref = useRef<HTMLDivElement>(null) const ref = useRef<HTMLDivElement>(null)
@@ -86,6 +87,7 @@ export default function SkyWarsStats({ stats }: { stats: NonNullStats["SkyWars"]
<SkywarsProgress level={Math.floor(level)} percent={percent} /> <SkywarsProgress level={Math.floor(level)} percent={percent} />
<SkyWarsGeneralStats statsChecked={stats} level={level} /> <SkyWarsGeneralStats statsChecked={stats} level={level} />
<Separator className="my-4" /> <Separator className="my-4" />
<SkywarsStatTable stats={stats} />
</CollapsibleContent> </CollapsibleContent>
</Collapsible> </Collapsible>
</CardContent> </CardContent>

View File

@@ -140,3 +140,24 @@ function Ranked({ stats }: { stats: NonNullStats["SkyWars"] }) {
</TableRow> </TableRow>
) )
} }
// function OverallModeStats({ stats }: { stats: NonNullStats["SkyWars"] }) {
// const normal = getSkywarsModeStats("normal", stats as _SkywarsStats, true)
// const insane = getSkywarsModeStats("insane", stats as _SkywarsStats, true)
// const teams_normal = getSkywarsModeStats("teams_normal", stats as _SkywarsStats, true)
// const teams_insane = getSkywarsModeStats("teams_insane", stats as _SkywarsStats, true)
// const mega = getSkywarsModeStats("mega", stats as _SkywarsStats, true)
// const mega_doubles = getSkywarsModeStats("mega_doubles", stats as _SkywarsStats, true)
// const ranked = getSkywarsModeStats("ranked", stats as _SkywarsStats, true)
//
// const combinedStats = concatStatArrays(soloStats, doublesStats, threesStats, foursStats)
//
// return (
// <TableRow className="font-bold">
// <TableCell>Core Modes</TableCell>
// {combinedStats.map((v, i) => {
// return <TableCell key={i}>{typeof v === "number" ? formatNumber(v) : v}</TableCell>
// })}
// </TableRow>
// )
// }

View File

@@ -1,6 +1,7 @@
import { BedwarsModeStats } from "./hypixel/bedwars" import { BedwarsModeStats } from "./hypixel/bedwars"
import { devide } from "./hypixel/general"
export function concatStatArrays(...stats: BedwarsModeStats[]) { export function concatBedwarsStats(...stats: BedwarsModeStats[]) {
if (stats.length === 0) return [] if (stats.length === 0) return []
const base: BedwarsModeStats = { const base: BedwarsModeStats = {
@@ -29,11 +30,6 @@ export function concatStatArrays(...stats: BedwarsModeStats[]) {
base.beds_lost_bedwars += s.beds_lost_bedwars base.beds_lost_bedwars += s.beds_lost_bedwars
} }
const devide = (a: number, b: number) => {
if (b === 0) return a
return a / b
}
const ret = { const ret = {
...base, ...base,
winstreak: base.winstreak < 0 ? "?" : base.winstreak, winstreak: base.winstreak < 0 ? "?" : base.winstreak,

View File

@@ -1,5 +1,6 @@
import { PRESTIGE_ICONS, PRESTIGES, SLUMBER_ROOMS, SLUMBER_WALLETS } from "@/data/hypixel/bedwars" import { PRESTIGE_ICONS, PRESTIGES, SLUMBER_ROOMS, SLUMBER_WALLETS } from "@/data/hypixel/bedwars"
import { floorLevel } from "./formatters" import { floorLevel } from "./formatters"
import { devide } from "./general"
export function getBedwarsStar(level: number) { export function getBedwarsStar(level: number) {
if (level < 1100) { if (level < 1100) {
@@ -161,12 +162,6 @@ export function getBedwarsModeStats(mode: Mode, stats: _BedwarsStats, raw = fals
} }
} }
function devide(num: number, num2: number) {
if (num2 === 0) return num
return num / num2
}
function bedwarsModeStats(prefix: string, stats: _BedwarsStats, raw = false) { function bedwarsModeStats(prefix: string, stats: _BedwarsStats, raw = false) {
if (raw) { if (raw) {
return { return {

View File

@@ -5,3 +5,9 @@ export function getProgress(min: number, mid: number, max: number) {
return progress / diff * 100 return progress / diff * 100
} }
export function devide(num: number, num2: number) {
if (num2 === 0) return num
return num / num2
}

View File

@@ -99,7 +99,7 @@ export function getSkywarsModeStats(mode: Mode, stats: _SkywarsStats, raw = fals
case "teams_insane": case "teams_insane":
return skywarsModeStats("team_insane", stats, raw) return skywarsModeStats("team_insane", stats, raw)
case "mega": case "mega":
return skywarsModeStats("mega_mega", stats, raw) return skywarsModeStats("mega", stats, raw)
case "mega_doubles": case "mega_doubles":
return skywarsModeStats("mega_doubles", stats, raw) return skywarsModeStats("mega_doubles", stats, raw)
case "ranked": case "ranked":

View File

@@ -218,5 +218,33 @@ export const skywarsStatsSchema = z.looseObject({
souls: z.number().default(0), souls: z.number().default(0),
paid_souls: z.number().default(0), paid_souls: z.number().default(0),
soul_well: z.number().default(0), soul_well: z.number().default(0),
packages: z.array(z.string()) packages: z.array(z.string()),
kills_solo_normal: z.number().default(0),
deaths_solo_normal: z.number().default(0),
wins_solo_normal: z.number().default(0),
losses_solo_normal: z.number().default(0),
kills_solo_insane: z.number().default(0),
deaths_solo_insane: z.number().default(0),
wins_solo_insane: z.number().default(0),
losses_solo_insane: z.number().default(0),
kills_team_normal: z.number().default(0),
deaths_team_normal: z.number().default(0),
wins_team_normal: z.number().default(0),
losses_team_normal: z.number().default(0),
kills_team_insane: z.number().default(0),
deaths_team_insane: z.number().default(0),
wins_team_insane: z.number().default(0),
losses_team_insane: z.number().default(0),
kills_mega: z.number().default(0),
deaths_mega: z.number().default(0),
wins_mega: z.number().default(0),
losses_mega: z.number().default(0),
kills_mega_doubles: z.number().default(0),
deaths_mega_doubles: z.number().default(0),
wins_mega_doubles: z.number().default(0),
losses_mega_doubles: z.number().default(0),
kills_ranked_normal: z.number().default(0),
deaths_ranked_normal: z.number().default(0),
wins_ranked_normal: z.number().default(0),
losses_ranked_normal: z.number().default(0)
}) })