diff --git a/star-raid/js/home.js b/star-raid/js/home.js index 7882348..eeda959 100644 --- a/star-raid/js/home.js +++ b/star-raid/js/home.js @@ -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"); diff --git a/star-raid/server/api.js b/star-raid/server/api.js index 9c60ddf..f76288d 100644 --- a/star-raid/server/api.js +++ b/star-raid/server/api.js @@ -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 }); }