"use strict"; /* ================= 飞行员大厅(主页):排行榜 + 图鉴展柜背景 ================= */ let LB_SORT = "endless"; /* 图鉴已收集数(只统计合法 key) */ function codexCount() { let n = 0; for (const k in SAVE.codex) if (SAVE.codex[k] && (WEAPONS[k] || SUBS[k] || DRONES[k] || PASSIVES[k])) n++; return n; } async function enterHome() { G = null; // 触发主循环看门狗重建实战模拟背景 UI = "home"; show("o-home"); /* 刷新账号数据(stats/codex),再渲染面板与排行榜 */ const r = await NET.api("/api/me", "GET"); if (r.ok && r.data.user) NET._apply(r.data); else if (r.ok) { NET.user = null; UI = "auth"; show("o-auth"); return; } // 会话失效 /* status===0 网络抖动:沿用现有数据,不踢出 */ buildHomeStats(); buildLeaderboard(LB_SORT); } function buildHomeStats() { const s = NET.stats || { bossKills: 0, endlessHigh: 0 }; const nm = NET.user ? NET.user.username : "--"; $("home-stats").textContent = `${nm} · 击坠Boss ${s.bossKills} · 图鉴 ${codexCount()}/${NET.codexTotal} · 无尽最高 ${s.endlessHigh}`; } /* ---------- 排行榜 ---------- */ document.querySelectorAll(".lb-tabs button").forEach((b) => { b.onclick = () => { LB_SORT = b.dataset.s; document.querySelectorAll(".lb-tabs button").forEach((x) => x.classList.toggle("on", x === b)); SFX.pick(); buildLeaderboard(LB_SORT); }; }); async function buildLeaderboard(sort) { const list = $("lb-list"); list.innerHTML = '
载入中...
'; const r = await NET.api("/api/leaderboard?sort=" + sort, "GET"); if (!r.ok) { list.innerHTML = '
载入失败
'; return; } const rows = r.data.rows || []; list.innerHTML = ""; if (!rows.length) { list.innerHTML = '
虚位以待
'; return; } const meName = NET.user && NET.user.username; rows.forEach((row, i) => { const d = document.createElement("div"); d.className = "lb-row" + (meName && row.username === meName ? " me" : ""); const cells = [String(i + 1), row.username, String(row.bossKills), row.codexN + "/" + r.data.codexTotal, String(row.endlessHigh)]; for (const c of cells) { const s = document.createElement("span"); s.textContent = c; // textContent 防注入 d.appendChild(s); } list.appendChild(d); }); } /* ---------- 大厅/基地背景:实战模拟 ---------- 复用真实战斗引擎:随机 3主武Lv3 + 3副武Lv3 + 2僚机Lv2,自动驾驶,随机刷怪。 与图鉴演示同源(G.demoSim 真值→自动走位/无HUD/demoSpawn),G.homeSim 标记用于静音与渲染门控 */ function startHomeSim() { newRun("stage", "falcon", 0); const build = rollRushBuild(); // 与BOSS挑战同款随机武装 G.weapons = {}; build.m.forEach((k) => (G.weapons[k] = 3)); G.loadout = build.m.slice(); G.subs = {}; build.s.forEach((k) => (G.subs[k] = 3)); G.subLoadout = build.s.slice(); G.drones = {}; build.d.forEach((k) => (G.drones[k] = 2)); G.droneLoadout = build.d.slice(); G.xpNeed = 1e9; // 不升级打断 G.p.inv = 999999; // 背景模拟:玩家无伤 G.demoSim = { home: true }; G.homeSim = true; }