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

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

代码差异

1 个文件 +35 -19
Modified src/controllers/api/syndicateStandingBonusController.ts +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 };