返回提交历史
Modified
src/controllers/stats/uploadController.ts
+3
-3
Modified
src/services/statsService.ts
+24
-1
XFEstudio/XFESpaceNinjaServer
feat: legacy global Kills leaderboard (#3449)
Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/3449 Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com> Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com> Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
b4b44b6d
代码差异
2 个文件
+27
-4
@@ -1,5 +1,5 @@
1
1
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
2
import { getAccountIdForRequest } from "../../services/loginService.ts";
2
import { getAccountForRequest } from "../../services/loginService.ts";
3
3
import { updateStats } from "../../services/statsService.ts";
4
4
import type { IStatsUpdate } from "../../types/statTypes.ts";
5
5
import type { RequestHandler } from "express";
@@ -7,8 +7,8 @@ import type { RequestHandler } from "express";
7
7
const uploadController: RequestHandler = async (req, res) => {
8
8
// eslint-disable-next-line @typescript-eslint/no-unused-vars
9
9
const { PS, ...payload } = getJSONfromString<IStatsUpdate>(String(req.body));
10
const accountId = await getAccountIdForRequest(req);
11
await updateStats(accountId, payload);
10
const account = await getAccountForRequest(req);
11
await updateStats(account._id.toString(), payload, account.BuildLabel);
12
12
res.status(200).end();
13
13
};
14
14
@@ -12,6 +12,8 @@ import type {
12
12
import { logger } from "../utils/logger.ts";
13
13
import { addEmailItem, getInventory } from "./inventoryService.ts";
14
14
import { submitLeaderboardScore } from "./leaderboardService.ts";
15
import { version_compare } from "../helpers/inventoryHelpers.ts";
16
import gameToBuildVersion from "../constants/gameToBuildVersion.ts";
15
17
16
18
export const createStats = async (accountId: string): Promise<TStatsDatabaseDocument> => {
17
19
const stats = new Stats({ accountOwnerId: accountId });
@@ -27,7 +29,11 @@ export const getStats = async (accountOwnerId: string): Promise<TStatsDatabaseDo
27
29
return stats;
28
30
};
29
31
30
export const updateStats = async (accountOwnerId: string, payload: IStatsUpdate): Promise<void> => {
32
export const updateStats = async (
33
accountOwnerId: string,
34
payload: IStatsUpdate,
35
buildLabel?: string
36
): Promise<void> => {
31
37
const unknownCategories: Record<string, string[]> = {};
32
38
const playerStats = await getStats(accountOwnerId);
33
39
@@ -454,6 +460,23 @@ export const updateStats = async (accountOwnerId: string, payload: IStatsUpdate)
454
460
logger.debug(`Unknown updateStats ${action} action categories: ${categories.join(", ")}`);
455
461
}
456
462
463
if (
464
playerStats.Enemies &&
465
buildLabel &&
466
version_compare(buildLabel, gameToBuildVersion["10.3.3"]) <= 0 // Should be 11.7.1
467
) {
468
const totalKills = playerStats.Enemies.reduce((sum, e) => sum + (e.kills ?? 0), 0);
469
if (totalKills > 0) {
470
await submitLeaderboardScore(
471
"events",
472
"Kills",
473
accountOwnerId,
474
payload.displayName,
475
totalKills,
476
payload.guildId
477
);
478
}
479
}
457
480
await playerStats.save();
458
481
};
459
482