排行榜Boss列统一显示n/11
- 所有排序(无尽/Boss/图鉴)的Boss列都显示rush击败不同Boss数/总数,不再出现累计击坠数 - 服务端endless/codex排序也返回rush去重统计;ORDER BY按排序列
This commit is contained in:
parent
4e41ee2bef
commit
f06e31238d
@ -61,7 +61,7 @@ async function buildLeaderboard(sort) {
|
||||
rows.forEach((row, i) => {
|
||||
const d = document.createElement("div");
|
||||
d.className = "lb-row" + (meName && row.username === meName ? " me" : "");
|
||||
const bossCell = sort === "boss" ? row.bossKills + "/" + bossTotal : String(row.bossKills); // boss 榜显示“击败几个/总共几个”
|
||||
const bossCell = row.bossKills + "/" + bossTotal; // 排行榜 Boss 列统一显示“击败几个/总共几个”,不再出现累计击坠数
|
||||
const cells = [String(i + 1), row.username, bossCell, row.codexN + "/" + r.data.codexTotal, String(row.endlessHigh)];
|
||||
for (const c of cells) {
|
||||
const s = document.createElement("span");
|
||||
|
||||
@ -198,20 +198,14 @@ const BOSS_TOTAL = 11; // 与 js/enemies.js BOSSES 数量同步
|
||||
function leaderboard(req, res, ctx, _body, query) {
|
||||
const sort = (query && query.get("sort")) || "";
|
||||
const bossSort = sort === "boss";
|
||||
/* boss 榜:不统计累计击坠,改为 BOSS 挑战(rush)模式下击败过几个不同 Boss(去重)/ 总共 Boss 数 */
|
||||
const rows = bossSort ? db.prepare(`
|
||||
SELECT u.username AS username,
|
||||
(SELECT COUNT(DISTINCT r.stage) FROM runs r
|
||||
WHERE r.user_id=u.id AND r.mode='rush' AND r.win=1 AND r.stage BETWEEN 0 AND 10) AS bossKills,
|
||||
s.endless_high AS endlessHigh,
|
||||
/* Boss 列一律统计 BOSS 挑战(rush)击败过的不同 Boss 数(去重,stage 0~10),不再出现累计击坠数 */
|
||||
const bossSub = `(SELECT COUNT(DISTINCT r.stage) FROM runs r
|
||||
WHERE r.user_id=u.id AND r.mode='rush' AND r.win=1 AND r.stage BETWEEN 0 AND 10)`;
|
||||
const rows = db.prepare(`
|
||||
SELECT u.username AS username, ${bossSub} AS bossKills, s.endless_high AS endlessHigh,
|
||||
(SELECT COUNT(*) FROM codex_unlocks c WHERE c.user_id=u.id) AS codexN
|
||||
FROM users u JOIN user_stats s ON s.user_id=u.id
|
||||
ORDER BY bossKills DESC, u.id ASC LIMIT 100`).all()
|
||||
: db.prepare(`
|
||||
SELECT u.username AS username, s.boss_kills AS bossKills, s.endless_high AS endlessHigh,
|
||||
(SELECT COUNT(*) FROM codex_unlocks c WHERE c.user_id=u.id) AS codexN
|
||||
FROM users u JOIN user_stats s ON s.user_id=u.id
|
||||
ORDER BY ${LB_COLS[sort] || "endless_high"} DESC, u.id ASC LIMIT 100`).all();
|
||||
ORDER BY ${bossSort ? "bossKills" : (LB_COLS[sort] || "endless_high")} DESC, u.id ASC LIMIT 100`).all();
|
||||
return ctx.ok({ rows, codexTotal: CODEX_TOTAL, bossTotal: BOSS_TOTAL, sort });
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user