返回提交历史
Modified
src/controllers/stats/uploadController.ts
+2
-3
Modified
src/services/statsService.ts
+23
-3
XFEstudio/SpaceNinjaServer
feat(stats): Ollie's Crash Course Rewards (#1260)
Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1260 Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com> Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
3c87dd56
代码差异
2 个文件
+25
-6
@@ -1,6 +1,6 @@
1
1
import { getJSONfromString } from "@/src/helpers/stringHelpers";
2
2
import { getAccountIdForRequest } from "@/src/services/loginService";
3
import { getStats, updateStats } from "@/src/services/statsService";
3
import { updateStats } from "@/src/services/statsService";
4
4
import { IStatsUpdate } from "@/src/types/statTypes";
5
5
import { RequestHandler } from "express";
6
6
@@ -8,8 +8,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
10
const accountId = await getAccountIdForRequest(req);
11
const playerStats = await getStats(accountId);
12
await updateStats(playerStats, payload);
11
await updateStats(accountId, payload);
13
12
res.status(200).end();
14
13
};
15
14
@@ -9,7 +9,8 @@ import {
9
9
IUploadEntry,
10
10
IWeapon
11
11
} from "@/src/types/statTypes";
12
import { logger } from "../utils/logger";
12
import { logger } from "@/src/utils/logger";
13
import { addEmailItem, getInventory } from "@/src/services/inventoryService";
13
14
14
15
export const createStats = async (accountId: string): Promise<TStatsDatabaseDocument> => {
15
16
const stats = new Stats({ accountOwnerId: accountId });
@@ -25,8 +26,9 @@ export const getStats = async (accountOwnerId: string): Promise<TStatsDatabaseDo
25
26
return stats;
26
27
};
27
28
28
export const updateStats = async (playerStats: TStatsDatabaseDocument, payload: IStatsUpdate): Promise<void> => {
29
export const updateStats = async (accountOwnerId: string, payload: IStatsUpdate): Promise<void> => {
29
30
const unknownCategories: Record<string, string[]> = {};
31
const playerStats = await getStats(accountOwnerId);
30
32
31
33
for (const [action, actionData] of Object.entries(payload)) {
32
34
switch (action) {
@@ -308,12 +310,30 @@ export const updateStats = async (playerStats: TStatsDatabaseDocument, payload:
308
310
case "ZephyrScore":
309
311
case "SentinelGameScore":
310
312
case "CaliberChicksScore":
311
case "OlliesCrashCourseScore":
312
313
case "DojoObstacleScore":
313
314
playerStats[category] ??= 0;
314
315
if (data > playerStats[category]) playerStats[category] = data;
315
316
break;
316
317
318
case "OlliesCrashCourseScore":
319
playerStats[category] ??= 0;
320
if (!playerStats[category]) {
321
const inventory = await getInventory(accountOwnerId, "EmailItems");
322
await addEmailItem(
323
inventory,
324
"/Lotus/Types/Items/EmailItems/PlayedOlliesCrashCourseEmailItem"
325
);
326
}
327
if (data >= 9991000 && playerStats[category] < 9991000) {
328
const inventory = await getInventory(accountOwnerId, "EmailItems");
329
await addEmailItem(
330
inventory,
331
"/Lotus/Types/Items/EmailItems/BeatOlliesCrashCourseInNinetySecEmailItem"
332
);
333
}
334
if (data > playerStats[category]) playerStats[category] = data;
335
break;
336
317
337
default:
318
338
if (!ignoredCategories.includes(category)) {
319
339
if (!unknownCategories[action]) {