Updated sidebar to be ok like fr
This commit is contained in:
@@ -14,9 +14,17 @@ type SidebarProps = {
|
|||||||
ign: string
|
ign: string
|
||||||
player: Player["player"]
|
player: Player["player"]
|
||||||
guild: Guild["guild"] | undefined
|
guild: Guild["guild"] | undefined
|
||||||
|
rank: string | undefined
|
||||||
|
specialRank: string | undefined
|
||||||
|
eulaCoins: boolean | undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function Sidebar({ level, ign, player, guild }: SidebarProps) {
|
export default function Sidebar({ level, ign, player, guild, rank, specialRank, eulaCoins }: SidebarProps) {
|
||||||
|
const levelMultiplier = getCoinMultiplier(level, rank, specialRank, eulaCoins)
|
||||||
|
|
||||||
|
const levelMultiplierVal = levelMultiplier.value
|
||||||
|
const levelMultiplierText = levelMultiplier.level === true ? `(Level ${level.toFixed(1).split(".")[0]})` : `(${levelMultiplier.name})`
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Card className="w-1/4">
|
<Card className="w-1/4">
|
||||||
<CardContent>
|
<CardContent>
|
||||||
@@ -34,7 +42,7 @@ export default function Sidebar({ level, ign, player, guild }: SidebarProps) {
|
|||||||
<div>
|
<div>
|
||||||
<p>
|
<p>
|
||||||
<span className="font-bold">{"Coin multiplier: "}</span>
|
<span className="font-bold">{"Coin multiplier: "}</span>
|
||||||
<span>{`x${getCoinMultiplier(level)} (Level ${level.toFixed(1).split(".")[0]})`}</span>
|
<span>{`x${levelMultiplierVal} ${levelMultiplierText}`}</span>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<span className="font-bold">{"Total coins: "}</span>
|
<span className="font-bold">{"Total coins: "}</span>
|
||||||
|
|||||||
@@ -52,7 +52,6 @@ async function SuspendedPage({ ign: pign }: { ign: string }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const guild = await getGuild(uuid)
|
const guild = await getGuild(uuid)
|
||||||
|
|
||||||
const level = getExactLevel(player.networkExp)
|
const level = getExactLevel(player.networkExp)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -73,7 +72,15 @@ async function SuspendedPage({ ign: pign }: { ign: string }) {
|
|||||||
{player.uuid}
|
{player.uuid}
|
||||||
</h1>
|
</h1>
|
||||||
<div className="flex gap-6 px-6 mt-8 w-full max-w-7xl">
|
<div className="flex gap-6 px-6 mt-8 w-full max-w-7xl">
|
||||||
<Sidebar level={level} ign={pign} player={player} guild={guild ?? undefined} />
|
<Sidebar
|
||||||
|
level={level}
|
||||||
|
ign={pign}
|
||||||
|
player={player}
|
||||||
|
guild={guild ?? undefined}
|
||||||
|
rank={player.newPackageRank}
|
||||||
|
specialRank={player.rank}
|
||||||
|
eulaCoins={player.eulaCoins}
|
||||||
|
/>
|
||||||
{player.stats !== undefined ?
|
{player.stats !== undefined ?
|
||||||
(
|
(
|
||||||
<div className="pb-4 space-y-4 w-3/4">
|
<div className="pb-4 space-y-4 w-3/4">
|
||||||
|
|||||||
@@ -12,5 +12,14 @@ export const MULTIPLIER = [
|
|||||||
{ level: 125, value: 6 },
|
{ level: 125, value: 6 },
|
||||||
{ level: 150, value: 6.5 },
|
{ level: 150, value: 6.5 },
|
||||||
{ level: 200, value: 7 },
|
{ level: 200, value: 7 },
|
||||||
{ level: 250, value: 8 },
|
{ level: 250, value: 8 }
|
||||||
]
|
]
|
||||||
|
|
||||||
|
export const RANKMULTIPLIER = {
|
||||||
|
VIP: { value: 2, name: "VIP" },
|
||||||
|
VIP_PLUS: { value: 3, name: "VIP+" },
|
||||||
|
MVP: { value: 4, name: "MVP" },
|
||||||
|
MVP_PLUS: { value: 5, name: "MVP+" },
|
||||||
|
YOUTUBER: { value: 7, name: "YouTuber" }
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,18 +1,69 @@
|
|||||||
import { MULTIPLIER } from "@/data/hypixel/general"
|
import { MULTIPLIER, RANKMULTIPLIER } from "@/data/hypixel/general"
|
||||||
import { Player } from "@/lib/schema/player"
|
import { Player } from "@/lib/schema/player"
|
||||||
|
|
||||||
export function getCoinMultiplier(level: number) {
|
type ReturnType = {
|
||||||
|
level: true
|
||||||
|
value: number
|
||||||
|
} | {
|
||||||
|
level: false
|
||||||
|
value: number
|
||||||
|
name: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getCoinMultiplier(level: number, rank?: string, specialRank?: string, eulaCoins?: boolean): ReturnType {
|
||||||
if (level > MULTIPLIER[MULTIPLIER.length - 1].level) {
|
if (level > MULTIPLIER[MULTIPLIER.length - 1].level) {
|
||||||
return MULTIPLIER[MULTIPLIER.length - 1].value
|
return {
|
||||||
|
value: MULTIPLIER.at(-1)!.value,
|
||||||
|
level: true
|
||||||
|
} as const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getLevelMultiplier() {
|
||||||
for (let i = MULTIPLIER.length - 1; i >= 0; i--) {
|
for (let i = MULTIPLIER.length - 1; i >= 0; i--) {
|
||||||
if (level >= MULTIPLIER[i].level) {
|
if (level >= MULTIPLIER[i].level) {
|
||||||
return MULTIPLIER[i].value
|
return {
|
||||||
|
value: MULTIPLIER.at(i)!.value,
|
||||||
|
level: true
|
||||||
|
} as const
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
value: MULTIPLIER.at(0)!.value,
|
||||||
|
level: true
|
||||||
|
} as const
|
||||||
|
}
|
||||||
|
|
||||||
|
function getSpecialMultiplier() {
|
||||||
|
if (specialRank === "YOUTUBER") return RANKMULTIPLIER.YOUTUBER
|
||||||
|
if (!eulaCoins) return null
|
||||||
|
switch (rank) {
|
||||||
|
case "VIP":
|
||||||
|
return RANKMULTIPLIER.VIP
|
||||||
|
case "VIP_PLUS":
|
||||||
|
return RANKMULTIPLIER.VIP_PLUS
|
||||||
|
case "MVP":
|
||||||
|
return RANKMULTIPLIER.MVP
|
||||||
|
case "MVP_PLUS":
|
||||||
|
return RANKMULTIPLIER.MVP_PLUS
|
||||||
|
default:
|
||||||
|
return null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return MULTIPLIER[0].value
|
const specialMulti = getSpecialMultiplier()
|
||||||
|
const levelMulti = getLevelMultiplier()
|
||||||
|
|
||||||
|
if (!specialMulti) {
|
||||||
|
return levelMulti
|
||||||
|
}
|
||||||
|
|
||||||
|
const max = Math.max(specialMulti.value, levelMulti.value)
|
||||||
|
|
||||||
|
if (max === specialMulti.value) {
|
||||||
|
return { ...specialMulti, level: false }
|
||||||
|
} else {
|
||||||
|
return levelMulti
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getTotalCoins(stats: Record<string, Record<"coins", number | undefined>> | undefined) {
|
export function getTotalCoins(stats: Record<string, Record<"coins", number | undefined>> | undefined) {
|
||||||
|
|||||||
@@ -48,7 +48,8 @@ export const playerSchema = z.looseObject({
|
|||||||
YOUTUBE: z.string().optional()
|
YOUTUBE: z.string().optional()
|
||||||
}).optional()
|
}).optional()
|
||||||
}).optional(),
|
}).optional(),
|
||||||
rank: z.string().optional()
|
rank: z.string().optional(),
|
||||||
|
eulaCoins: z.boolean().optional()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user