XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

SpaceNinjaServer

A simple server for a small space ninja game

公开
关注 0 Fork 1 Star 0
返回提交历史

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
AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
提交于

代码差异

2 个文件 +25 -6
Modified src/controllers/stats/uploadController.ts +2 -3
@@ -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
Modified src/services/statsService.ts +23 -3
@@ -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]) {