forked from phenom/healer-man
Update Healer Man server
This commit is contained in:
1 parent
ab1434a3b8
commit
e284f4fc76
60 files changed
+2704
-118
No files matched your search
@@ -7,6 +7,7 @@ import { type RaceBotSource, type RaceBotTier } from "../app/dungeonRaceBot";
|
||||
import { dungeonsByCategory, randomizedBiteSizedDungeons } from "../game/dungeonCatalog";
|
||||
import { dungeonEnabledForQueue } from "../game/dungeonQueuePolicy";
|
||||
import { formatDungeonDuration } from "../game/dungeonRunTypes";
|
||||
import { dungeonRaceAffix } from "../game/dungeonRaceAffixes";
|
||||
import { dungeonLeaderboardCatalog as leaderboardCatalog } from "../game/dungeonLeaderboardCatalog";
|
||||
import { partyRolesForClass, PARTY_ROLE_LABELS, type PartyRole } from "../game/partyStore";
|
||||
import { specializationById } from "../game/specializationCatalog";
|
||||
@@ -14,7 +15,8 @@ import { BrandMark, FrontSurface } from "./FrontSurface";
|
||||
import "./dungeonRace.css";
|
||||
|
||||
interface BoardEntry { readonly accountId: string; readonly username: string; readonly rank: number;
|
||||
readonly wins?: number; readonly losses?: number; readonly durationMs?: number }
|
||||
readonly wins?: number; readonly losses?: number; readonly durationMs?: number;
|
||||
readonly affixIds?: readonly string[] }
|
||||
interface BoardResponse { readonly entries: readonly BoardEntry[]; readonly total: number }
|
||||
|
||||
export function DungeonRaceScreen({ onClose }: { readonly onClose: () => void }) {
|
||||
@@ -76,7 +78,7 @@ export function DungeonRaceScreen({ onClose }: { readonly onClose: () => void })
|
||||
<h1>Bite-Sized Dungeon Race</h1></div><button className="front-button" type="button" onClick={() => { void race.leave(); onClose(); }}>Main menu</button></header>
|
||||
<main className="dungeon-race-screen__layout">
|
||||
<section className="dungeon-race-screen__setup">
|
||||
<p>Race another player or a full NPC party through matching short dungeons. First final boss kill wins. You can still finish and earn its card after a loss.</p>
|
||||
<p>Race another player or a full NPC party through matching short dungeons. First final boss kill wins. You can still finish and earn its card after a loss. Each race rolls one kill mechanic and one movement mechanic for both sides.</p>
|
||||
<div className="dungeon-race-screen__choices" role="group" aria-label="Race type">
|
||||
<button className="front-button" type="button" aria-pressed={!practice} disabled={!session?.accessToken || busy} onClick={() => setPractice(false)}>Online ranked</button>
|
||||
<button className="front-button" type="button" aria-pressed={practice} disabled={busy} onClick={() => setPractice(true)}>Offline practice</button>
|
||||
@@ -133,9 +135,12 @@ export function DungeonRaceScreen({ onClose }: { readonly onClose: () => void })
|
||||
{!boardError && board?.entries.length === 0 && <p>No results yet.</p>}
|
||||
{board?.entries.length ? <table><thead><tr><th>Rank</th><th>Player</th>
|
||||
<th>{boardScope === "dungeon" && boardView === "times" ? "Best time" : "Wins"}</th>
|
||||
{boardScope === "dungeon" && boardView === "times" && <th>Mechanics</th>}
|
||||
{!(boardScope === "dungeon" && boardView === "times") && <th>Losses</th>}</tr></thead><tbody>
|
||||
{board.entries.map((entry) => <tr key={entry.accountId}><td>#{entry.rank}</td><td>{entry.username}</td>
|
||||
<td>{entry.durationMs !== undefined ? formatDungeonDuration(entry.durationMs) : entry.wins}</td>
|
||||
{boardScope === "dungeon" && boardView === "times" && <td>{entry.affixIds?.length
|
||||
? entry.affixIds.map((id) => dungeonRaceAffix(id)?.name ?? id).join(" + ") : "Legacy"}</td>}
|
||||
{entry.durationMs === undefined && <td>{entry.losses}</td>}</tr>)}</tbody></table> : null}
|
||||
</section>
|
||||
</main>
|
||||
|
||||
Reference in new issue
Block a user