返回提交历史
Modified
src/controllers/api/nemesisController.ts
+15
-19
Modified
src/helpers/nemesisHelpers.ts
+25
-4
XFEstudio/SpaceNinjaServer
fix(nemesis): subtract charge from installed mods instead of ideal mods (#2259)
Because oull might substitute one of them. Closes #2258 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2259 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
82b203e0
代码差异
2 个文件
+40
-23
@@ -8,16 +8,15 @@ import {
8
8
getKnifeUpgrade,
9
9
getNemesisManifest,
10
10
getNemesisPasscode,
11
getNemesisPasscodeModTypes,
12
11
GUESS_CORRECT,
13
12
GUESS_INCORRECT,
14
13
GUESS_NEUTRAL,
15
14
GUESS_NONE,
16
15
GUESS_WILDCARD,
17
IKnifeResponse
16
IKnifeResponse,
17
parseUpgrade
18
18
} from "@/src/helpers/nemesisHelpers";
19
19
import { getJSONfromString } from "@/src/helpers/stringHelpers";
20
import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
21
20
import { Loadout } from "@/src/models/inventoryModels/loadoutModel";
22
21
import { freeUpSlot, getInventory } from "@/src/services/inventoryService";
23
22
import { getAccountForRequest } from "@/src/services/loginService";
@@ -215,7 +214,19 @@ export const nemesisController: RequestHandler = async (req, res) => {
215
214
}
216
215
];
217
216
inventory.Nemesis!.Weakened = true;
218
await consumePasscodeModCharges(inventory, response);
217
218
// Subtract a charge from all requiem mods installed on parazon
219
const loadout = (await Loadout.findById(inventory.LoadOutPresets, "DATAKNIFE"))!;
220
const dataknifeLoadout = loadout.DATAKNIFE.id(
221
inventory.CurrentLoadOutIds[LoadoutIndex.DATAKNIFE].$oid
222
);
223
const dataknifeConfigIndex = dataknifeLoadout?.s?.mod ?? 0;
224
const dataknifeUpgrades = inventory.DataKnives[0].Configs[dataknifeConfigIndex].Upgrades!;
225
for (let i = 3; i != 6; ++i) {
226
//logger.debug(`subtracting a charge from ${dataknifeUpgrades[i]}`);
227
const upgrade = parseUpgrade(inventory, dataknifeUpgrades[i]);
228
consumeModCharge(response, inventory, upgrade, dataknifeUpgrades);
229
}
219
230
}
220
231
} else {
221
232
// Guess was incorrect, increase rank
@@ -380,18 +391,3 @@ interface IKnife {
380
391
AttachedUpgrades: IUpgradeClient[];
381
392
HiddenWhenHolstered: boolean;
382
393
}
383
384
const consumePasscodeModCharges = async (
385
inventory: TInventoryDatabaseDocument,
386
response: IKnifeResponse
387
): Promise<void> => {
388
const loadout = (await Loadout.findById(inventory.LoadOutPresets, "DATAKNIFE"))!;
389
const dataknifeLoadout = loadout.DATAKNIFE.id(inventory.CurrentLoadOutIds[LoadoutIndex.DATAKNIFE].$oid);
390
const dataknifeConfigIndex = dataknifeLoadout?.s?.mod ?? 0;
391
const dataknifeUpgrades = inventory.DataKnives[0].Configs[dataknifeConfigIndex].Upgrades!;
392
const modTypes = getNemesisPasscodeModTypes(inventory.Nemesis!);
393
for (const modType of modTypes) {
394
const upgrade = getKnifeUpgrade(inventory, dataknifeUpgrades, modType);
395
consumeModCharge(response, inventory, upgrade, dataknifeUpgrades);
396
}
397
};
@@ -237,7 +237,7 @@ export const getNemesisPasscode = (nemesis: { fp: bigint; Faction: TNemesisFacti
237
237
return passcode;
238
238
};
239
239
240
const requiemMods: readonly string[] = [
240
/*const requiemMods: readonly string[] = [
241
241
"/Lotus/Upgrades/Mods/Immortal/ImmortalOneMod",
242
242
"/Lotus/Upgrades/Mods/Immortal/ImmortalTwoMod",
243
243
"/Lotus/Upgrades/Mods/Immortal/ImmortalThreeMod",
@@ -246,7 +246,7 @@ const requiemMods: readonly string[] = [
246
246
"/Lotus/Upgrades/Mods/Immortal/ImmortalSixMod",
247
247
"/Lotus/Upgrades/Mods/Immortal/ImmortalSevenMod",
248
248
"/Lotus/Upgrades/Mods/Immortal/ImmortalEightMod"
249
];
249
];*/
250
250
251
251
export const antivirusMods: readonly string[] = [
252
252
"/Lotus/Upgrades/Mods/Immortal/AntivirusOneMod",
@@ -259,12 +259,12 @@ export const antivirusMods: readonly string[] = [
259
259
"/Lotus/Upgrades/Mods/Immortal/AntivirusEightMod"
260
260
];
261
261
262
export const getNemesisPasscodeModTypes = (nemesis: { fp: bigint; Faction: TNemesisFaction }): string[] => {
262
/*export const getNemesisPasscodeModTypes = (nemesis: { fp: bigint; Faction: TNemesisFaction }): string[] => {
263
263
const passcode = getNemesisPasscode(nemesis);
264
264
return nemesis.Faction == "FC_INFESTATION"
265
265
? passcode.map(i => antivirusMods[i])
266
266
: passcode.map(i => requiemMods[i]);
267
};
267
};*/
268
268
269
269
// Symbols; 0-7 are the normal requiem mods.
270
270
export const GUESS_NONE = 8;
@@ -343,6 +343,27 @@ export const getKnifeUpgrade = (
343
343
throw new Error(`${type} does not seem to be installed on parazon?!`);
344
344
};
345
345
346
export const parseUpgrade = (
347
inventory: TInventoryDatabaseDocument,
348
str: string
349
): { ItemId: IOid; ItemType: string } => {
350
if (str.length == 24) {
351
const upgrade = inventory.Upgrades.id(str);
352
if (upgrade) {
353
return {
354
ItemId: { $oid: str },
355
ItemType: upgrade.ItemType
356
};
357
}
358
throw new Error(`Could not resolve oid ${str}`);
359
} else {
360
return {
361
ItemId: { $oid: "000000000000000000000000" },
362
ItemType: str
363
};
364
}
365
};
366
346
367
export const consumeModCharge = (
347
368
response: IKnifeResponse,
348
369
inventory: TInventoryDatabaseDocument,