Рейтинг: топ, профиль и справка под новую шкалу
Общий топ: столбец «Поб» и сортировка по победам убраны, чтобы четырёхзначный рейтинг помещался в строку; «Очки» → «Рейтинг» (и в карточке профиля). Справка переписана под Elo: шкала 1500/400, ожидание и формула ΔR, K новичка, вес стола, множитель отрыва и близость по типу победы, необязательность раунда, целей и миров, «последний выживший», лимит 8/9 раундов, примеры из документа, общий и групповой рейтинг, лучшая партия по приросту. В документе рейтинга статус — утверждено и реализовано. #23 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LqSoRj99iwVEH5U5fnZgsd
This commit is contained in:
@@ -6,7 +6,9 @@ import { Spinner } from "../components/Spinner";
|
||||
import type { LeaderboardEntry } from "../domain/types";
|
||||
import { useLeaderboard } from "../hooks/stats";
|
||||
|
||||
type SortKey = "rank" | "games" | "wins" | "win_rate" | "score";
|
||||
// Столбца побед нет: четырёхзначный рейтинг иначе не помещается в строку, а доля побед
|
||||
// уже есть в WR.
|
||||
type SortKey = "rank" | "games" | "win_rate" | "score";
|
||||
|
||||
function pct(v: number | null | undefined): string {
|
||||
return v == null ? "—" : `${Math.round(v * 100)}%`;
|
||||
@@ -50,7 +52,6 @@ export function OverallStatsPage() {
|
||||
<span className="nick">{e.nickname}</span>
|
||||
</span>
|
||||
<span className="st-num">{e.games}</span>
|
||||
<span className="st-num">{e.wins}</span>
|
||||
<span className="st-num">{pct(e.win_rate)}</span>
|
||||
<span className={"st-num lb-score" + (isProvisional || e.score == null ? " provisional" : "")}>
|
||||
{e.score ?? "—"}
|
||||
@@ -70,9 +71,8 @@ export function OverallStatsPage() {
|
||||
<button onClick={() => toggleSort("rank")}>#{arrow("rank")}</button>
|
||||
<span>Игрок</span>
|
||||
<button onClick={() => toggleSort("games")}>Игр{arrow("games")}</button>
|
||||
<button onClick={() => toggleSort("wins")}>Поб{arrow("wins")}</button>
|
||||
<button onClick={() => toggleSort("win_rate")}>WR{arrow("win_rate")}</button>
|
||||
<button onClick={() => toggleSort("score")}>Очки{arrow("score")}</button>
|
||||
<button onClick={() => toggleSort("score")}>Рейтинг{arrow("score")}</button>
|
||||
</div>
|
||||
{entries.length === 0 ? (
|
||||
<div className="muted small" style={{ paddingTop: 8 }}>
|
||||
|
||||
Reference in New Issue
Block a user