Finished bw stats table
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"
|
||||
import { formatNumber } from "@/lib/formatters"
|
||||
import { concatStatArrays } from "@/lib/funcs"
|
||||
import { _BedwarsStats, getBedwarsModeStats } from "@/lib/hypixel/bedwars"
|
||||
import { Player } from "@/lib/schema/player"
|
||||
|
||||
@@ -27,6 +28,7 @@ export default function BedwarsStatTable({ stats }: { stats: Player["player"]["s
|
||||
<Swap4sStats stats={stats} />
|
||||
<Underworld4sStats stats={stats} />
|
||||
<CastleStats stats={stats} />
|
||||
<AllModeStats stats={stats} />
|
||||
</TableBody>
|
||||
</Table>
|
||||
)
|
||||
@@ -132,17 +134,7 @@ function CoreModeStats({ stats }: { stats: Player["player"]["stats"]["Bedwars"]
|
||||
const threesStats = getBedwarsModeStats("3s", stats as _BedwarsStats, true)
|
||||
const foursStats = getBedwarsModeStats("4s", stats as _BedwarsStats, true)
|
||||
|
||||
const fraction = [2, 5, 8]
|
||||
|
||||
const combinedStats = soloStats.map((v, i) => {
|
||||
if (v < 0) return "?"
|
||||
|
||||
if (fraction.includes(i) || i === soloStats.length - 1) {
|
||||
return ((v + doublesStats[i] + threesStats[i] + foursStats[i]) / 4).toFixed(2)
|
||||
}
|
||||
|
||||
return v + doublesStats[i] + threesStats[i] + foursStats[i]
|
||||
})
|
||||
const combinedStats = concatStatArrays(soloStats, doublesStats, threesStats, foursStats)
|
||||
|
||||
return (
|
||||
<TableRow className="font-bold">
|
||||
@@ -363,3 +355,54 @@ function CastleStats({ stats }: { stats: Player["player"]["stats"]["Bedwars"] })
|
||||
</TableRow>
|
||||
)
|
||||
}
|
||||
|
||||
function AllModeStats({ stats }: { stats: Player["player"]["stats"]["Bedwars"] }) {
|
||||
const soloStats = getBedwarsModeStats("solo", stats as _BedwarsStats, true)
|
||||
const doublesStats = getBedwarsModeStats("doubles", stats as _BedwarsStats, true)
|
||||
const threesStats = getBedwarsModeStats("3s", stats as _BedwarsStats, true)
|
||||
const foursStats = getBedwarsModeStats("4s", stats as _BedwarsStats, true)
|
||||
const fourVFourStats = getBedwarsModeStats("4v4", stats as _BedwarsStats, true)
|
||||
const rushDoublesStats = getBedwarsModeStats("rush_2s", stats as _BedwarsStats, true)
|
||||
const rush4sStats = getBedwarsModeStats("rush_4s", stats as _BedwarsStats, true)
|
||||
const ultimateDoublesStats = getBedwarsModeStats("ultimate_2s", stats as _BedwarsStats, true)
|
||||
const ultimate4sStats = getBedwarsModeStats("ultimate_4s", stats as _BedwarsStats, true)
|
||||
const luckyDoublesStats = getBedwarsModeStats("lucky_2s", stats as _BedwarsStats, true)
|
||||
const lucky4sStats = getBedwarsModeStats("lucky_4s", stats as _BedwarsStats, true)
|
||||
const voidlessDoublesStats = getBedwarsModeStats("voidless_2s", stats as _BedwarsStats, true)
|
||||
const voidless4sStats = getBedwarsModeStats("voidless_4s", stats as _BedwarsStats, true)
|
||||
const armedDoublesStats = getBedwarsModeStats("armed_2s", stats as _BedwarsStats, true)
|
||||
const armed4sStats = getBedwarsModeStats("armed_4s", stats as _BedwarsStats, true)
|
||||
const swap4sStats = getBedwarsModeStats("swap_4s", stats as _BedwarsStats, true)
|
||||
const underworld4sStats = getBedwarsModeStats("underworld_4s", stats as _BedwarsStats, true)
|
||||
const castleStats = getBedwarsModeStats("castle", stats as _BedwarsStats, true)
|
||||
|
||||
const finalStats = concatStatArrays(
|
||||
soloStats,
|
||||
doublesStats,
|
||||
threesStats,
|
||||
foursStats,
|
||||
fourVFourStats,
|
||||
rushDoublesStats,
|
||||
rush4sStats,
|
||||
ultimateDoublesStats,
|
||||
ultimate4sStats,
|
||||
luckyDoublesStats,
|
||||
lucky4sStats,
|
||||
voidlessDoublesStats,
|
||||
voidless4sStats,
|
||||
armedDoublesStats,
|
||||
armed4sStats,
|
||||
swap4sStats,
|
||||
underworld4sStats,
|
||||
castleStats
|
||||
)
|
||||
|
||||
return (
|
||||
<TableRow className="font-bold">
|
||||
<TableCell>All Modes</TableCell>
|
||||
{finalStats.map((v, i) => {
|
||||
return <TableCell key={i}>{typeof v === "number" ? formatNumber(v) : v}</TableCell>
|
||||
})}
|
||||
</TableRow>
|
||||
)
|
||||
}
|
||||
|
||||
17
src/lib/funcs.ts
Normal file
17
src/lib/funcs.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
export function concatStatArrays(...arrays: number[][]) {
|
||||
if (arrays.length === 0) return []
|
||||
|
||||
const indexes = [2, 5, 8]
|
||||
|
||||
const result = arrays[0].map((v, index) => {
|
||||
if (v < 0) return "?"
|
||||
|
||||
if (indexes.includes(index) || index === arrays[0].length - 1) {
|
||||
return arrays.reduce((sum, array) => sum + array[index], 0) / arrays.length
|
||||
}
|
||||
|
||||
return arrays.reduce((sum, array) => sum + array[index], 0)
|
||||
})
|
||||
|
||||
return result
|
||||
}
|
||||
@@ -127,38 +127,44 @@ 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) {
|
||||
if (raw) {
|
||||
return [
|
||||
stats[`${prefix}_kills_bedwars`],
|
||||
stats[`${prefix}_deaths_bedwars`],
|
||||
stats[`${prefix}_kills_bedwars`] / stats[`${prefix}_deaths_bedwars`],
|
||||
devide(stats[`${prefix}_kills_bedwars`], stats[`${prefix}_deaths_bedwars`]),
|
||||
stats[`${prefix}_final_kills_bedwars`],
|
||||
stats[`${prefix}_final_deaths_bedwars`],
|
||||
stats[`${prefix}_final_kills_bedwars`] / stats[`${prefix}_final_deaths_bedwars`],
|
||||
devide(stats[`${prefix}_final_kills_bedwars`], stats[`${prefix}_final_deaths_bedwars`]),
|
||||
stats[`${prefix}_wins_bedwars`],
|
||||
stats[`${prefix}_losses_bedwars`],
|
||||
stats[`${prefix}_wins_bedwars`] / stats[`${prefix}_losses_bedwars`],
|
||||
devide(stats[`${prefix}_wins_bedwars`], stats[`${prefix}_losses_bedwars`]),
|
||||
stats[`${prefix}_winstreak`] ?? -1,
|
||||
stats[`${prefix}_beds_broken_bedwars`],
|
||||
stats[`${prefix}_beds_lost_bedwars`],
|
||||
stats[`${prefix}_beds_broken_bedwars`] / stats[`${prefix}_beds_lost_bedwars`]
|
||||
devide(stats[`${prefix}_beds_broken_bedwars`], stats[`${prefix}_beds_lost_bedwars`])
|
||||
]
|
||||
}
|
||||
|
||||
return [
|
||||
stats[`${prefix}_kills_bedwars`],
|
||||
stats[`${prefix}_deaths_bedwars`],
|
||||
(stats[`${prefix}_kills_bedwars`] / stats[`${prefix}_deaths_bedwars`]).toFixed(2),
|
||||
devide(stats[`${prefix}_kills_bedwars`], stats[`${prefix}_deaths_bedwars`]).toFixed(2),
|
||||
stats[`${prefix}_final_kills_bedwars`],
|
||||
stats[`${prefix}_final_deaths_bedwars`],
|
||||
(stats[`${prefix}_final_kills_bedwars`] / stats[`${prefix}_final_deaths_bedwars`]).toFixed(2),
|
||||
devide(stats[`${prefix}_final_kills_bedwars`], stats[`${prefix}_final_deaths_bedwars`]).toFixed(2),
|
||||
stats[`${prefix}_wins_bedwars`],
|
||||
stats[`${prefix}_losses_bedwars`],
|
||||
(stats[`${prefix}_wins_bedwars`] / stats[`${prefix}_losses_bedwars`]).toFixed(2),
|
||||
devide(stats[`${prefix}_wins_bedwars`], stats[`${prefix}_losses_bedwars`]).toFixed(2),
|
||||
stats[`${prefix}_winstreak`] ?? "?",
|
||||
stats[`${prefix}_beds_broken_bedwars`],
|
||||
stats[`${prefix}_beds_lost_bedwars`],
|
||||
(stats[`${prefix}_beds_broken_bedwars`] / stats[`${prefix}_beds_lost_bedwars`]).toFixed(2)
|
||||
devide(stats[`${prefix}_beds_broken_bedwars`], stats[`${prefix}_beds_lost_bedwars`]).toFixed(2)
|
||||
]
|
||||
}
|
||||
|
||||
@@ -36,7 +36,169 @@ export const playerSchema = z.looseObject({
|
||||
total_tickets_earned: z.number(),
|
||||
doublers: z.number(),
|
||||
room: z.record(z.string(), z.boolean())
|
||||
}).optional()
|
||||
}).optional(),
|
||||
eight_one_winstreak: z.number().optional(),
|
||||
eight_one_kills_bedwars: z.number().default(0),
|
||||
eight_one_deaths_bedwars: z.number().default(0),
|
||||
eight_one_final_kills_bedwars: z.number().default(0),
|
||||
eight_one_final_deaths_bedwars: z.number().default(0),
|
||||
eight_one_wins_bedwars: z.number().default(0),
|
||||
eight_one_losses_bedwars: z.number().default(0),
|
||||
eight_one_beds_broken_bedwars: z.number().default(0),
|
||||
eight_one_beds_lost_bedwars: z.number().default(0),
|
||||
eight_two_winstreak: z.number().optional(),
|
||||
eight_two_kills_bedwars: z.number().default(0),
|
||||
eight_two_deaths_bedwars: z.number().default(0),
|
||||
eight_two_final_kills_bedwars: z.number().default(0),
|
||||
eight_two_final_deaths_bedwars: z.number().default(0),
|
||||
eight_two_wins_bedwars: z.number().default(0),
|
||||
eight_two_losses_bedwars: z.number().default(0),
|
||||
eight_two_beds_broken_bedwars: z.number().default(0),
|
||||
eight_two_beds_lost_bedwars: z.number().default(0),
|
||||
four_three_winstreak: z.number().optional(),
|
||||
four_three_kills_bedwars: z.number().default(0),
|
||||
four_three_deaths_bedwars: z.number().default(0),
|
||||
four_three_final_kills_bedwars: z.number().default(0),
|
||||
four_three_final_deaths_bedwars: z.number().default(0),
|
||||
four_three_wins_bedwars: z.number().default(0),
|
||||
four_three_losses_bedwars: z.number().default(0),
|
||||
four_three_beds_broken_bedwars: z.number().default(0),
|
||||
four_three_beds_lost_bedwars: z.number().default(0),
|
||||
four_four_winstreak: z.number().optional(),
|
||||
four_four_kills_bedwars: z.number().default(0),
|
||||
four_four_deaths_bedwars: z.number().default(0),
|
||||
four_four_final_kills_bedwars: z.number().default(0),
|
||||
four_four_final_deaths_bedwars: z.number().default(0),
|
||||
four_four_wins_bedwars: z.number().default(0),
|
||||
four_four_losses_bedwars: z.number().default(0),
|
||||
four_four_beds_broken_bedwars: z.number().default(0),
|
||||
four_four_beds_lost_bedwars: z.number().default(0),
|
||||
two_four_winstreak: z.number().optional(),
|
||||
two_four_kills_bedwars: z.number().default(0),
|
||||
two_four_deaths_bedwars: z.number().default(0),
|
||||
two_four_final_kills_bedwars: z.number().default(0),
|
||||
two_four_final_deaths_bedwars: z.number().default(0),
|
||||
two_four_wins_bedwars: z.number().default(0),
|
||||
two_four_losses_bedwars: z.number().default(0),
|
||||
two_four_beds_broken_bedwars: z.number().default(0),
|
||||
two_four_beds_lost_bedwars: z.number().default(0),
|
||||
eight_two_rush_winstreak: z.number().optional(),
|
||||
eight_two_rush_kills_bedwars: z.number().default(0),
|
||||
eight_two_rush_deaths_bedwars: z.number().default(0),
|
||||
eight_two_rush_final_kills_bedwars: z.number().default(0),
|
||||
eight_two_rush_final_deaths_bedwars: z.number().default(0),
|
||||
eight_two_rush_wins_bedwars: z.number().default(0),
|
||||
eight_two_rush_losses_bedwars: z.number().default(0),
|
||||
eight_two_rush_beds_broken_bedwars: z.number().default(0),
|
||||
eight_two_rush_beds_lost_bedwars: z.number().default(0),
|
||||
four_four_rush_winstreak: z.number().optional(),
|
||||
four_four_rush_kills_bedwars: z.number().default(0),
|
||||
four_four_rush_deaths_bedwars: z.number().default(0),
|
||||
four_four_rush_final_kills_bedwars: z.number().default(0),
|
||||
four_four_rush_final_deaths_bedwars: z.number().default(0),
|
||||
four_four_rush_wins_bedwars: z.number().default(0),
|
||||
four_four_rush_losses_bedwars: z.number().default(0),
|
||||
four_four_rush_beds_broken_bedwars: z.number().default(0),
|
||||
four_four_rush_beds_lost_bedwars: z.number().default(0),
|
||||
eight_two_ultimate_winstreak: z.number().optional(),
|
||||
eight_two_ultimate_kills_bedwars: z.number().default(0),
|
||||
eight_two_ultimate_deaths_bedwars: z.number().default(0),
|
||||
eight_two_ultimate_final_kills_bedwars: z.number().default(0),
|
||||
eight_two_ultimate_final_deaths_bedwars: z.number().default(0),
|
||||
eight_two_ultimate_wins_bedwars: z.number().default(0),
|
||||
eight_two_ultimate_losses_bedwars: z.number().default(0),
|
||||
eight_two_ultimate_beds_broken_bedwars: z.number().default(0),
|
||||
eight_two_ultimate_beds_lost_bedwars: z.number().default(0),
|
||||
four_four_ultimate_winstreak: z.number().optional(),
|
||||
four_four_ultimate_kills_bedwars: z.number().default(0),
|
||||
four_four_ultimate_deaths_bedwars: z.number().default(0),
|
||||
four_four_ultimate_final_kills_bedwars: z.number().default(0),
|
||||
four_four_ultimate_final_deaths_bedwars: z.number().default(0),
|
||||
four_four_ultimate_wins_bedwars: z.number().default(0),
|
||||
four_four_ultimate_losses_bedwars: z.number().default(0),
|
||||
four_four_ultimate_beds_broken_bedwars: z.number().default(0),
|
||||
four_four_ultimate_beds_lost_bedwars: z.number().default(0),
|
||||
eight_two_lucky_winstreak: z.number().optional(),
|
||||
eight_two_lucky_kills_bedwars: z.number().default(0),
|
||||
eight_two_lucky_deaths_bedwars: z.number().default(0),
|
||||
eight_two_lucky_final_kills_bedwars: z.number().default(0),
|
||||
eight_two_lucky_final_deaths_bedwars: z.number().default(0),
|
||||
eight_two_lucky_wins_bedwars: z.number().default(0),
|
||||
eight_two_lucky_losses_bedwars: z.number().default(0),
|
||||
eight_two_lucky_beds_broken_bedwars: z.number().default(0),
|
||||
eight_two_lucky_beds_lost_bedwars: z.number().default(0),
|
||||
four_four_lucky_winstreak: z.number().optional(),
|
||||
four_four_lucky_kills_bedwars: z.number().default(0),
|
||||
four_four_lucky_deaths_bedwars: z.number().default(0),
|
||||
four_four_lucky_final_kills_bedwars: z.number().default(0),
|
||||
four_four_lucky_final_deaths_bedwars: z.number().default(0),
|
||||
four_four_lucky_wins_bedwars: z.number().default(0),
|
||||
four_four_lucky_losses_bedwars: z.number().default(0),
|
||||
four_four_lucky_beds_broken_bedwars: z.number().default(0),
|
||||
four_four_lucky_beds_lost_bedwars: z.number().default(0),
|
||||
eight_two_voidless_winstreak: z.number().optional(),
|
||||
eight_two_voidless_kills_bedwars: z.number().default(0),
|
||||
eight_two_voidless_deaths_bedwars: z.number().default(0),
|
||||
eight_two_voidless_final_kills_bedwars: z.number().default(0),
|
||||
eight_two_voidless_final_deaths_bedwars: z.number().default(0),
|
||||
eight_two_voidless_wins_bedwars: z.number().default(0),
|
||||
eight_two_voidless_losses_bedwars: z.number().default(0),
|
||||
eight_two_voidless_beds_broken_bedwars: z.number().default(0),
|
||||
eight_two_voidless_beds_lost_bedwars: z.number().default(0),
|
||||
four_four_voidless_winstreak: z.number().optional(),
|
||||
four_four_voidless_kills_bedwars: z.number().default(0),
|
||||
four_four_voidless_deaths_bedwars: z.number().default(0),
|
||||
four_four_voidless_final_kills_bedwars: z.number().default(0),
|
||||
four_four_voidless_final_deaths_bedwars: z.number().default(0),
|
||||
four_four_voidless_wins_bedwars: z.number().default(0),
|
||||
four_four_voidless_losses_bedwars: z.number().default(0),
|
||||
four_four_voidless_beds_broken_bedwars: z.number().default(0),
|
||||
four_four_voidless_beds_lost_bedwars: z.number().default(0),
|
||||
eight_two_armed_winstreak: z.number().optional(),
|
||||
eight_two_armed_kills_bedwars: z.number().default(0),
|
||||
eight_two_armed_deaths_bedwars: z.number().default(0),
|
||||
eight_two_armed_final_kills_bedwars: z.number().default(0),
|
||||
eight_two_armed_final_deaths_bedwars: z.number().default(0),
|
||||
eight_two_armed_wins_bedwars: z.number().default(0),
|
||||
eight_two_armed_losses_bedwars: z.number().default(0),
|
||||
eight_two_armed_beds_broken_bedwars: z.number().default(0),
|
||||
eight_two_armed_beds_lost_bedwars: z.number().default(0),
|
||||
four_four_armed_winstreak: z.number().optional(),
|
||||
four_four_armed_kills_bedwars: z.number().default(0),
|
||||
four_four_armed_deaths_bedwars: z.number().default(0),
|
||||
four_four_armed_final_kills_bedwars: z.number().default(0),
|
||||
four_four_armed_final_deaths_bedwars: z.number().default(0),
|
||||
four_four_armed_wins_bedwars: z.number().default(0),
|
||||
four_four_armed_losses_bedwars: z.number().default(0),
|
||||
four_four_armed_beds_broken_bedwars: z.number().default(0),
|
||||
four_four_armed_beds_lost_bedwars: z.number().default(0),
|
||||
four_four_swap_winstreak: z.number().optional(),
|
||||
four_four_swap_kills_bedwars: z.number().default(0),
|
||||
four_four_swap_deaths_bedwars: z.number().default(0),
|
||||
four_four_swap_final_kills_bedwars: z.number().default(0),
|
||||
four_four_swap_final_deaths_bedwars: z.number().default(0),
|
||||
four_four_swap_wins_bedwars: z.number().default(0),
|
||||
four_four_swap_losses_bedwars: z.number().default(0),
|
||||
four_four_swap_beds_broken_bedwars: z.number().default(0),
|
||||
four_four_swap_beds_lost_bedwars: z.number().default(0),
|
||||
four_four_underworld_winstreak: z.number().optional(),
|
||||
four_four_underworld_kills_bedwars: z.number().default(0),
|
||||
four_four_underworld_deaths_bedwars: z.number().default(0),
|
||||
four_four_underworld_final_kills_bedwars: z.number().default(0),
|
||||
four_four_underworld_final_deaths_bedwars: z.number().default(0),
|
||||
four_four_underworld_wins_bedwars: z.number().default(0),
|
||||
four_four_underworld_losses_bedwars: z.number().default(0),
|
||||
four_four_underworld_beds_broken_bedwars: z.number().default(0),
|
||||
four_four_underworld_beds_lost_bedwars: z.number().default(0),
|
||||
castle_winstreak: z.number().optional(),
|
||||
castle_kills_bedwars: z.number().default(0),
|
||||
castle_deaths_bedwars: z.number().default(0),
|
||||
castle_final_kills_bedwars: z.number().default(0),
|
||||
castle_final_deaths_bedwars: z.number().default(0),
|
||||
castle_wins_bedwars: z.number().default(0),
|
||||
castle_losses_bedwars: z.number().default(0),
|
||||
castle_beds_broken_bedwars: z.number().default(0),
|
||||
castle_beds_lost_bedwars: z.number().default(0)
|
||||
}).optional()
|
||||
}),
|
||||
quests: z.record(
|
||||
|
||||
Reference in New Issue
Block a user