Updated bestmodes

This commit is contained in:
2025-09-14 22:58:49 +02:00
parent a6b4b6efad
commit 3db30213e0
9 changed files with 48 additions and 5 deletions

View File

@@ -1,11 +1,12 @@
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"
import { formatNumber, formatSecondsToTime } from "@/lib/formatters"
import { getAllBlitzKitStats, getBlitzKitLevel, getBlitzKitName, getBlitzMostPlayedKit } from "@/lib/hypixel/blitz/general"
import { getAllBlitzKitStats, getBlitzBestMode, getBlitzKitLevel, getBlitzKitName, getBlitzMostPlayedKit } from "@/lib/hypixel/blitz/general"
import { romanize } from "@/lib/hypixel/general"
import { NonNullStats } from "@/lib/schema/player"
import { cn } from "@/lib/utils"
export function BlitzModeStatsTable({ stats }: { stats: NonNullable<NonNullStats["Blitz"]> }) {
const best = getBlitzBestMode(stats)
return (
<Table>
<TableHeader>
@@ -16,12 +17,12 @@ export function BlitzModeStatsTable({ stats }: { stats: NonNullable<NonNullStats
</TableRow>
</TableHeader>
<TableBody>
<TableRow>
<TableRow className={cn(best === "solo_normal" && "text-mc-light-purple")}>
<TableCell>Solo Normal</TableCell>
<TableCell>{formatNumber(stats.kills_solo_normal)}</TableCell>
<TableCell>{formatNumber(stats.wins_solo_normal)}</TableCell>
</TableRow>
<TableRow>
<TableRow className={cn(best === "teams_normal" && "text-mc-light-purple")}>
<TableCell>Teams Normal</TableCell>
<TableCell>{formatNumber(stats.kills_teams_normal)}</TableCell>
<TableCell>{formatNumber(stats.wins_teams_normal)}</TableCell>

View File

@@ -1,8 +1,9 @@
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"
import { MODES } from "@/data/hypixel/build-battle"
import { formatNumber } from "@/lib/formatters"
import { getBuildBattleModeName as getBuildBattleMode } from "@/lib/hypixel/build-battle/general"
import { getBuildBattleBestMode, getBuildBattleModeName as getBuildBattleMode } from "@/lib/hypixel/build-battle/general"
import { NonNullStats } from "@/lib/schema/player"
import { cn } from "@/lib/utils"
export default function BuildBattleStatsTable({ stats }: { stats: NonNullable<NonNullStats["BuildBattle"]> }) {
return (
@@ -37,8 +38,10 @@ function TableStat({ modeId, stats }: { modeId: typeof MODES[number]["id"], stat
)
}
const isBest = getBuildBattleBestMode(stats) === modeId
return (
<TableRow>
<TableRow className={cn(isBest && "text-mc-light-purple")}>
<TableCell>{mode.name}</TableCell>
<TableCell>{formatNumber(stats[`wins_${modeId}`])}</TableCell>
</TableRow>

View File

@@ -53,6 +53,8 @@ export function getArcadeMostPlayedPixelPartyMode(stats: NonNullable<NonNullStat
{ games: stats.games_played_hyper, modeId: "hyper" as const }
]
if (played[0].games === 0 && played[1].games === 0) return null
const mostPlayed = played.reduce((max, current) => current.games > max.games ? current : max)
return mostPlayed.modeId

View File

@@ -163,6 +163,8 @@ export function getBestMode(stats: NonNullable<NonNullStats["Bedwars"]>): "solo"
const max = Math.max(solo, doubles, threes, fours)
if (max === 0) return null
switch (max) {
case solo:
return "solo"

View File

@@ -2,6 +2,16 @@ import { KITEXP, KITS } from "@/data/hypixel/blitz"
import { NonNullStats } from "@/lib/schema/player"
import { devide } from "../general"
export function getBlitzBestMode(stats: NonNullable<NonNullStats["Blitz"]>) {
if (stats.wins_solo_normal === 0 && stats.wins_teams_normal === 0) return null
if (stats.wins_solo_normal > stats.wins_teams_normal) {
return "solo_normal"
} else {
return "teams_normal"
}
}
export function getBlitzKitLevel(kitId: typeof KITS[number]["id"], stats: NonNullable<NonNullStats["Blitz"]>) {
let level = stats[kitId]
if (level === -1) {

View File

@@ -1,4 +1,5 @@
import { MODES, STARS } from "@/data/hypixel/build-battle"
import { NonNullStats } from "@/lib/schema/player"
export function getBuildBattleRank(score: number) {
for (let i = STARS.length - 1; i >= 0; i--) {
@@ -18,3 +19,21 @@ export function getBuildBattleRankNext(score: number) {
export function getBuildBattleModeName(id: typeof MODES[number]["id"]) {
return MODES.find(m => m.id === id)!
}
export function getBuildBattleBestMode(stats: NonNullable<NonNullStats["BuildBattle"]>): typeof MODES[number]["id"] | null {
let bestMode: typeof MODES[number]["id"] | null = null
let maxWins = 0
for (const mode of MODES) {
if (mode.id === "") continue
const wins = stats[`wins_${mode.id}` as keyof typeof stats] as number
if (wins > maxWins) {
maxWins = wins
bestMode = mode.id
}
}
return bestMode
}

View File

@@ -53,6 +53,8 @@ export function getCopsAndCrimsBestMode(stats: NonNullable<NonNullStats["CopsAnd
wins: mode.id === "" ? stats["game_wins"] : stats[`game_wins_${mode.id}`] || 0
}))
if (modeWins.map(m => m.wins).reduce((a, b) => a + b) === 0) return null
const best = modeWins.reduce((best, current) => current.wins > best.wins ? current : best).mode
return best === "" ? "regular" : best

View File

@@ -92,6 +92,8 @@ export function getMegaWallsMostPlayedMode(stats: NonNullable<NonNullStats["Mega
}
]
if (modes.map(m => m.games).reduce((a, b) => a + b) === 0) return null
const mostPlayed = modes.reduce((max, current) => current.games > max.games ? current : max)
return mostPlayed.id

View File

@@ -80,6 +80,8 @@ export function getBestSkywarsMode(stats: NonNullable<NonNullStats["SkyWars"]>):
const max = Math.max(normal, insane, teams_normal, teams_insane, mega, mega_doubles, ranked)
if (max === 0) return null
switch (max) {
case normal:
return "normal"