Added first part of duel stats
This commit is contained in:
33
src/lib/hypixel/duels/duels.ts
Normal file
33
src/lib/hypixel/duels/duels.ts
Normal file
@@ -0,0 +1,33 @@
|
||||
import { DIVISIONS, MODES } from "@/data/hypixel/duels"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
|
||||
type DuelType = "all_modes"
|
||||
|
||||
export function getDivision(duelType: DuelType, stats: NonNullable<NonNullStats["Duels"]>) {
|
||||
for (const div of DIVISIONS.slice().reverse()) {
|
||||
const index = `${duelType}_${div.id}_title_prestige` as const
|
||||
const val = stats[index]
|
||||
if (val > 0) {
|
||||
return {
|
||||
name: div.name,
|
||||
level: val,
|
||||
color: div.color
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
export function getMostPlayed(stats: NonNullable<NonNullStats["Duels"]>) {
|
||||
let mostPlayed: typeof MODES[number] | null = null
|
||||
let mostPlays = 0
|
||||
for (const mode of MODES) {
|
||||
const plays = stats[`${mode.id}_wins`] + stats[`${mode.id}_losses`]
|
||||
if (plays > mostPlays && mode.id) {
|
||||
mostPlays = plays
|
||||
mostPlayed = mode
|
||||
}
|
||||
}
|
||||
return mostPlayed
|
||||
}
|
||||
@@ -33,13 +33,40 @@ export function concatStatsArray<T extends Record<string, number>>(keys: (keyof
|
||||
return base as T
|
||||
}
|
||||
|
||||
export function romanize(num: number): string {
|
||||
export function romanize(num: number) {
|
||||
if (!Number.isFinite(num)) return "NaN"
|
||||
const digits = Math.trunc(num).toString().split("")
|
||||
const key = [
|
||||
"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM",
|
||||
"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC",
|
||||
"","I","II","III","IV","V","VI","VII","VIII","IX"
|
||||
"",
|
||||
"C",
|
||||
"CC",
|
||||
"CCC",
|
||||
"CD",
|
||||
"D",
|
||||
"DC",
|
||||
"DCC",
|
||||
"DCCC",
|
||||
"CM",
|
||||
"",
|
||||
"X",
|
||||
"XX",
|
||||
"XXX",
|
||||
"XL",
|
||||
"L",
|
||||
"LX",
|
||||
"LXX",
|
||||
"LXXX",
|
||||
"XC",
|
||||
"",
|
||||
"I",
|
||||
"II",
|
||||
"III",
|
||||
"IV",
|
||||
"V",
|
||||
"VI",
|
||||
"VII",
|
||||
"VIII",
|
||||
"IX"
|
||||
] as const
|
||||
|
||||
let roman = ""
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import z from "zod"
|
||||
import { bedwarsStatsSchema, skywarsStatsSchema } from "./stats"
|
||||
import { bedwarsStatsSchema, duelsStatsSchema, skywarsStatsSchema } from "./stats"
|
||||
|
||||
export const playerSchema = z.looseObject({
|
||||
player: z.looseObject({
|
||||
@@ -15,7 +15,8 @@ export const playerSchema = z.looseObject({
|
||||
achievements: z.record(z.string(), z.number()).optional(),
|
||||
stats: z.looseObject({
|
||||
Bedwars: bedwarsStatsSchema.optional(),
|
||||
SkyWars: skywarsStatsSchema.optional()
|
||||
SkyWars: skywarsStatsSchema.optional(),
|
||||
Duels: duelsStatsSchema.optional()
|
||||
}).optional(),
|
||||
quests: z.record(
|
||||
z.string(),
|
||||
|
||||
@@ -268,3 +268,73 @@ export const skywarsStatsSchema = z.looseObject({
|
||||
}))
|
||||
}).optional()
|
||||
})
|
||||
|
||||
export const duelsStatsSchema = z.looseObject({
|
||||
wins: z.number().default(0),
|
||||
losses: z.number().default(0),
|
||||
all_modes_rookie_title_prestige: z.number().default(-1),
|
||||
all_modes_iron_title_prestige: z.number().default(-1),
|
||||
all_modes_gold_title_prestige: z.number().default(-1),
|
||||
all_modes_diamond_title_prestige: z.number().default(-1),
|
||||
all_modes_master_title_prestige: z.number().default(-1),
|
||||
all_modes_legend_title_prestige: z.number().default(-1),
|
||||
all_modes_grandmaster_title_prestige: z.number().default(-1),
|
||||
all_modes_godlike_title_prestige: z.number().default(-1),
|
||||
all_modes_celestial_title_prestige: z.number().default(-1),
|
||||
all_modes_divine_title_prestige: z.number().default(-1),
|
||||
all_modes_ascended_title_prestige: z.number().default(-1),
|
||||
uhc_duel_wins: z.number().default(0),
|
||||
uhc_doubles_wins: z.number().default(0),
|
||||
uhc_four_wins: z.number().default(0),
|
||||
uhc_meetup_wins: z.number().default(0),
|
||||
op_duel_wins: z.number().default(0),
|
||||
op_doubles_wins: z.number().default(0),
|
||||
sw_duel_wins: z.number().default(0),
|
||||
sw_doubles_wins: z.number().default(0),
|
||||
bow_duel_wins: z.number().default(0),
|
||||
blitz_duel_wins: z.number().default(0),
|
||||
mw_duel_wins: z.number().default(0),
|
||||
mw_doubles_wins: z.number().default(0),
|
||||
sumo_duel_wins: z.number().default(0),
|
||||
bowspleef_duel_wins: z.number().default(0),
|
||||
parkour_eight_wins: z.number().default(0),
|
||||
boxing_duel_wins: z.number().default(0),
|
||||
classic_duel_wins: z.number().default(0),
|
||||
potion_duel_wins: z.number().default(0),
|
||||
combo_duel_wins: z.number().default(0),
|
||||
bridge_duel_wins: z.number().default(0),
|
||||
bridge_doubles_wins: z.number().default(0),
|
||||
bridge_threes_wins: z.number().default(0),
|
||||
bridge_four_wins: z.number().default(0),
|
||||
bridge_2v2v2v2_wins: z.number().default(0),
|
||||
bridge_3v3v3v3_wins: z.number().default(0),
|
||||
capture_threes_wins: z.number().default(0),
|
||||
duel_arena_wins: z.number().default(0),
|
||||
uhc_duel_losses: z.number().default(0),
|
||||
uhc_doubles_losses: z.number().default(0),
|
||||
uhc_four_losses: z.number().default(0),
|
||||
uhc_meetup_losses: z.number().default(0),
|
||||
op_duel_losses: z.number().default(0),
|
||||
op_doubles_losses: z.number().default(0),
|
||||
sw_duel_losses: z.number().default(0),
|
||||
sw_doubles_losses: z.number().default(0),
|
||||
bow_duel_losses: z.number().default(0),
|
||||
blitz_duel_losses: z.number().default(0),
|
||||
mw_duel_losses: z.number().default(0),
|
||||
mw_doubles_losses: z.number().default(0),
|
||||
sumo_duel_losses: z.number().default(0),
|
||||
bowspleef_duel_losses: z.number().default(0),
|
||||
parkour_eight_losses: z.number().default(0),
|
||||
boxing_duel_losses: z.number().default(0),
|
||||
classic_duel_losses: z.number().default(0),
|
||||
potion_duel_losses: z.number().default(0),
|
||||
combo_duel_losses: z.number().default(0),
|
||||
bridge_duel_losses: z.number().default(0),
|
||||
bridge_doubles_losses: z.number().default(0),
|
||||
bridge_threes_losses: z.number().default(0),
|
||||
bridge_four_losses: z.number().default(0),
|
||||
bridge_2v2v2v2_losses: z.number().default(0),
|
||||
bridge_3v3v3v3_losses: z.number().default(0),
|
||||
capture_threes_losses: z.number().default(0),
|
||||
duel_arena_losses: z.number().default(0)
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user