返回提交历史
Modified
src/controllers/api/inventoryController.ts
+34
-7
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
代码差异
1 个文件
+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