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