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

SpaceNinjaServer

A simple server for a small space ninja game

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

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

代码差异

2 个文件 +40 -23
Modified src/controllers/api/nemesisController.ts +15 -19
@@ -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 };
Modified src/helpers/nemesisHelpers.ts +25 -4
@@ -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,