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

XFESpaceNinjaServer

A simple server for a small space ninja game

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

XFEstudio/XFESpaceNinjaServer

chore: add missing ability mods for old versions (#4199)

Closes #3975 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/4199 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>

40a2d3f5
AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
提交于

代码差异

1 个文件 +34 -7
Modified src/controllers/api/inventoryController.ts +34 -7
@@ -27,6 +27,7 @@ import {
27 27 addEmailItem,
28 28 addItem,
29 29 addMiscItems,
30 addMods,
30 31 allDailyAffiliationKeys,
31 32 checkCalendarAutoAdvance,
32 33 cleanupInventory,
@@ -71,11 +72,15 @@ import gameToBuildVersion from "../../constants/gameToBuildVersion.ts";
71 72 import { PendingTrade } from "../../models/tradingModel.ts";
72 73 import { exportTrade } from "../../services/tradingService.ts";
73 74 import { supplementalSuits } from "../../services/itemDataService.ts";
75 import suitDefaultUpgrades from "../../constants/suitDefaultUpgrades.ts";
76 import type { ITypeCount } from "../../types/commonTypes.ts";
77 import { sendWsBroadcastToWebui } from "../../services/wsService.ts";
74 78
75 79 export const inventoryController: RequestHandler = async (request, response) => {
76 80 const account = await getAccountForRequest(request);
77 81 const buildLabel = getBuildLabel(request, account);
78 82 const inventory = await getInventory(account._id, undefined);
83 let sendUpdateForWebui = false;
79 84
80 85 // Handle daily reset
81 86 if (!inventory.NextRefill || Date.now() >= inventory.NextRefill.getTime()) {
@@ -343,18 +348,40 @@ export const inventoryController: RequestHandler = async (request, response) =>
343 348 }
344 349 await handleTauMemories(inventory);
345 350
351 if (version_compare(buildLabel, gameToBuildVersion["15.0.0"]) < 0) {
352 const suitTypes = inventory.Suits.map(s => s.ItemType);
353 const rawUpgradeTypes = inventory.RawUpgrades.map(s => s.ItemType);
354 const upgradeTypes = inventory.Upgrades.map(s => s.ItemType);
355 const blacklist = new Set([...rawUpgradeTypes, ...upgradeTypes]);
356 const seen = new Set<string>();
357
358 const modsToAdd: ITypeCount[] = suitTypes.flatMap(suit =>
359 (suitDefaultUpgrades[suit] ?? []).flatMap(u => {
360 const itemType = u.ItemType;
361 if (blacklist.has(itemType) || seen.has(itemType)) return [];
362 seen.add(itemType);
363 return [
364 {
365 ItemType: itemType,
366 ItemCount: 1
367 }
368 ];
369 })
370 );
371 if (modsToAdd.length > 0) {
372 logger.debug(`adding ${modsToAdd.length} missing legacy ability mods`);
373 addMods(inventory, modsToAdd);
374 sendUpdateForWebui = true;
375 }
376 }
377
346 378 if (inventory.isModified()) {
347 379 await inventory.save();
380 if (sendUpdateForWebui) sendWsBroadcastToWebui({ update_inventory: true }, account._id.toString());
348 381 }
349 382
350 383 response.json(
351 await getInventoryResponse(
352 request,
353 inventory,
354 "xpBasedLevelCapDisabled" in request.query,
355 getBuildLabel(request, account),
356 forWebui
357 )
384 await getInventoryResponse(request, inventory, "xpBasedLevelCapDisabled" in request.query, buildLabel, forWebui)
358 385 );
359 386 };
360 387