返回提交历史
Modified
src/controllers/api/syndicateStandingBonusController.ts
+35
-19
XFEstudio/XFESpaceNinjaServer
feat: syndicateStandingBonus for older versions (#3247)
Closes #3243 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/3247 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
10676d9a
代码差异
1 个文件
+35
-19
@@ -8,16 +8,22 @@ import { ExportSyndicates, ExportWeapons } from "warframe-public-export-plus";
8
8
import { logger } from "../../utils/logger.ts";
9
9
import type { IAffiliationMods, IInventoryChanges } from "../../types/purchaseTypes.ts";
10
10
import { EquipmentFeatures } from "../../types/equipmentTypes.ts";
11
import { fromOid } from "../../helpers/inventoryHelpers.ts";
11
12
12
13
export const syndicateStandingBonusController: RequestHandler = async (req, res) => {
13
14
const accountId = await getAccountIdForRequest(req);
14
15
const request = JSON.parse(String(req.body)) as ISyndicateStandingBonusRequest;
15
16
16
const syndicateMeta = ExportSyndicates[request.Operation.AffiliationTag];
17
const affiliationTag = "Operation" in request ? request.Operation.AffiliationTag : request.AffiliationTag;
18
const items = "Operation" in request ? request.Operation.Items : request.Items;
19
const modularWeaponIdRaw = "Operation" in request ? request.Operation.ModularWeaponId : request.ModularWeaponId;
20
const modularWeaponId = fromOid(modularWeaponIdRaw);
21
22
const syndicateMeta = ExportSyndicates[affiliationTag];
17
23
18
24
// Process items
19
25
let gainedStanding = 0;
20
request.Operation.Items.forEach(item => {
26
items.forEach(item => {
21
27
const medallion = (syndicateMeta.medallions ?? []).find(medallion => medallion.itemType == item.ItemType);
22
28
if (medallion) {
23
29
gainedStanding += medallion.standing * item.ItemCount;
@@ -26,14 +32,14 @@ export const syndicateStandingBonusController: RequestHandler = async (req, res)
26
32
item.ItemCount *= -1;
27
33
});
28
34
const inventory = await getInventory(accountId);
29
addMiscItems(inventory, request.Operation.Items);
35
addMiscItems(inventory, items);
30
36
const inventoryChanges: IInventoryChanges = {};
31
inventoryChanges.MiscItems = request.Operation.Items;
37
inventoryChanges.MiscItems = items;
32
38
33
39
// Process modular weapon
34
if (request.Operation.ModularWeaponId.$oid != "000000000000000000000000") {
40
if (modularWeaponId != "" && modularWeaponId != "000000000000000000000000") {
35
41
const category = req.query.Category as "LongGuns" | "Pistols" | "Melee" | "OperatorAmps";
36
const weapon = inventory[category].id(request.Operation.ModularWeaponId.$oid)!;
42
const weapon = inventory[category].id(modularWeaponId)!;
37
43
if (gainedStanding !== 0) {
38
44
throw new Error(`modular weapon standing bonus should be mutually exclusive`);
39
45
}
@@ -48,29 +54,39 @@ export const syndicateStandingBonusController: RequestHandler = async (req, res)
48
54
if (weapon.Features && (weapon.Features & EquipmentFeatures.GILDED) != 0) {
49
55
gainedStanding *= 2;
50
56
}
51
inventoryChanges.RemovedIdItems = [{ ItemId: request.Operation.ModularWeaponId }];
52
inventory[category].pull({ _id: request.Operation.ModularWeaponId.$oid });
57
inventoryChanges.RemovedIdItems = [{ ItemId: modularWeaponIdRaw }];
58
inventory[category].pull({ _id: modularWeaponId });
53
59
const slotBin = category == "OperatorAmps" ? InventorySlot.AMPS : InventorySlot.WEAPONS;
54
60
freeUpSlot(inventory, slotBin);
55
61
inventoryChanges[slotBin] = { count: -1, platinum: 0, Slots: 1 };
56
62
}
57
63
58
64
const affiliationMods: IAffiliationMods[] = [];
59
addStanding(inventory, request.Operation.AffiliationTag, gainedStanding, affiliationMods, true);
65
addStanding(inventory, affiliationTag, gainedStanding, affiliationMods, true);
60
66
61
67
await inventory.save();
62
68
63
69
res.json({
64
InventoryChanges: inventoryChanges,
65
AffiliationMods: affiliationMods
70
AffiliationTag: affiliationTag, // Older versions
71
StandingChange: gainedStanding, // Older versions
72
InventoryChanges: inventoryChanges, // Newer versions
73
AffiliationMods: affiliationMods // Newer versions
66
74
});
67
75
};
68
76
69
interface ISyndicateStandingBonusRequest {
70
Operation: {
71
AffiliationTag: string;
72
AlternateBonusReward: ""; // ???
73
Items: IMiscItem[];
74
ModularWeaponId: IOid;
75
};
76
}
77
type ISyndicateStandingBonusRequest =
78
| {
79
// Newer versions
80
Operation: {
81
AffiliationTag: string;
82
AlternateBonusReward: ""; // ???
83
Items: IMiscItem[];
84
ModularWeaponId: IOid;
85
};
86
}
87
| {
88
// Older versions
89
AffiliationTag: string;
90
Items: IMiscItem[];
91
ModularWeaponId: IOid;
92
};