Show public names in leaderboards

This commit is contained in:
Emporex committed 2026-10-04 09:02:38 +02:00
1 parent 1b5b8dc0a4
commit 31ddba0d45
8 files changed
+98 -12

No files matched your search

+11 -3
View File
@@ -1,4 +1,4 @@
var GAME_VERSION = "0.22";
var GAME_VERSION = "0.23";
var MAP_COUNT = 3;
var DIFFICULTY_COUNT = 3;
var VALID_MODES = ["mission", "endless", "coop_ai", "coop_online"];
@@ -43,8 +43,16 @@ function rpcSubmitRun(ctx, logger, nk, payload) {
var wave = clampInteger(run.wave,1,mode === "mission" ? 15 : 9999), score = clampInteger(run.score,0,1000000000);
if (score > wave*5000+100000) throw new Error("implausible score");
var id = leaderboardId(mapIndex,difficulty,mode);
var metadata = {map:mapIndex,difficulty:difficulty,mode:mode,wave:wave,clientVersion:String(run.client_version||"unknown"),submittedAt:Date.now()};
var record = nk.leaderboardRecordWrite(id,ctx.userId,ctx.username||"Pilot",score,wave,metadata,null);
var publicName = "PILOT";
try {
var account = nk.accountGetId(ctx.userId);
var storedName = account && account.user ? normalizeDisplayName(account.user.displayName) : "";
if (!validateDisplayName(storedName)) publicName = storedName;
} catch (error) {
logger.warn("Could not resolve display name for leaderboard user %s: %s", ctx.userId, error);
}
var metadata = {map:mapIndex,difficulty:difficulty,mode:mode,wave:wave,displayName:publicName,clientVersion:String(run.client_version||"unknown"),submittedAt:Date.now()};
var record = nk.leaderboardRecordWrite(id,ctx.userId,publicName,score,wave,metadata,null);
return JSON.stringify({accepted:true,leaderboard_id:id,rank:record.rank,score:Number(record.score),wave:wave});
}
+18
View File
@@ -38,6 +38,24 @@ assert.strictEqual(JSON.parse(context.rpcUpdateDisplayName({ userId: "pilot-a" }
assert.deepStrictEqual(JSON.parse(context.rpcDeleteAccount({ userId: "pilot-a" }, logger, accountNk, "{}")), { accepted: true });
assert.deepStrictEqual(deletedAccount, ["pilot-a", false]);
let leaderboardWrite = null;
const leaderboardNk = {
accountGetId() { return { user: { displayName: "Kommandant Ägir" } }; },
leaderboardRecordWrite(...args) {
leaderboardWrite = args;
return { rank: 1, score: args[3] };
}
};
const submittedRun = JSON.parse(context.rpcSubmitRun(
{ userId: "pilot-a", username: "technical_guest_id" },
{ warn() {} },
leaderboardNk,
JSON.stringify({ map: 0, difficulty: 1, mode: "mission", wave: 4, score: 4700, client_version: "test" })
));
assert.strictEqual(submittedRun.accepted, true);
assert.strictEqual(leaderboardWrite[2], "Kommandant Ägir");
assert.strictEqual(leaderboardWrite[5].displayName, "Kommandant Ägir");
let state = context.matchInit({}, logger, nk, { difficulty: 1 }).state;
state = context.matchJoin({}, logger, nk, dispatcher, 1, state, [presenceA]).state;
state = context.matchJoin({}, logger, nk, dispatcher, 2, state, [presenceB]).state;