返回提交历史
Modified
src/controllers/api/nemesisController.ts
+43
-16
XFEstudio/XFESpaceNinjaServer
fix: weaken classic lich when getting all 3 mods correct (#2186)
Fixes #2185 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2186 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
3dcd2663
代码差异
1 个文件
+43
-16
@@ -17,6 +17,7 @@ import {
17
17
IKnifeResponse
18
18
} from "@/src/helpers/nemesisHelpers";
19
19
import { getJSONfromString } from "@/src/helpers/stringHelpers";
20
import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
20
21
import { Loadout } from "@/src/models/inventoryModels/loadoutModel";
21
22
import { freeUpSlot, getInventory } from "@/src/services/inventoryService";
22
23
import { getAccountForRequest } from "@/src/services/loginService";
@@ -202,16 +203,28 @@ export const nemesisController: RequestHandler = async (req, res) => {
202
203
guess[body.position].result = correct ? GUESS_CORRECT : GUESS_INCORRECT;
203
204
inventory.Nemesis!.GuessHistory[inventory.Nemesis!.GuessHistory.length - 1] = encodeNemesisGuess(guess);
204
205
205
// Increase rank if incorrect
206
let RankIncrease: number | undefined;
207
if (!correct) {
208
RankIncrease = 1;
206
const response: INemesisRequiemResponse = {};
207
if (correct) {
208
if (body.position == 2) {
209
// That was all 3 guesses correct, nemesis is now weakened.
210
inventory.Nemesis!.InfNodes = [
211
{
212
Node: getNemesisManifest(inventory.Nemesis!.manifest).showdownNode,
213
Influence: 1
214
}
215
];
216
inventory.Nemesis!.Weakened = true;
217
await consumePasscodeModCharges(inventory, response);
218
}
219
} else {
220
// Guess was incorrect, increase rank
221
response.RankIncrease = 1;
209
222
const manifest = getNemesisManifest(inventory.Nemesis!.manifest);
210
223
inventory.Nemesis!.Rank = Math.min(inventory.Nemesis!.Rank + 1, manifest.systemIndexes.length - 1);
211
224
inventory.Nemesis!.InfNodes = getInfNodes(manifest, inventory.Nemesis!.Rank);
212
225
}
213
226
await inventory.save();
214
res.json({ RankIncrease });
227
res.json(response);
215
228
}
216
229
} else if ((req.query.mode as string) == "rs") {
217
230
// report spawn; POST but no application data in body
@@ -299,20 +312,11 @@ export const nemesisController: RequestHandler = async (req, res) => {
299
312
];
300
313
inventory.Nemesis!.Weakened = true;
301
314
302
const response: IKnifeResponse & { target: INemesisClient } = {
315
const response: INemesisWeakenResponse = {
303
316
target: inventory.toJSON<IInventoryClient>().Nemesis!
304
317
};
305
318
306
// Consume charge of the correct requiem mod(s)
307
const loadout = (await Loadout.findById(inventory.LoadOutPresets, "DATAKNIFE"))!;
308
const dataknifeLoadout = loadout.DATAKNIFE.id(inventory.CurrentLoadOutIds[LoadoutIndex.DATAKNIFE].$oid);
309
const dataknifeConfigIndex = dataknifeLoadout?.s?.mod ?? 0;
310
const dataknifeUpgrades = inventory.DataKnives[0].Configs[dataknifeConfigIndex].Upgrades!;
311
const modTypes = getNemesisPasscodeModTypes(inventory.Nemesis!);
312
for (const modType of modTypes) {
313
const upgrade = getKnifeUpgrade(inventory, dataknifeUpgrades, modType);
314
consumeModCharge(response, inventory, upgrade, dataknifeUpgrades);
315
}
319
await consumePasscodeModCharges(inventory, response);
316
320
317
321
await inventory.save();
318
322
res.json(response);
@@ -370,11 +374,19 @@ interface INemesisRequiemRequest {
370
374
knife?: IKnife;
371
375
}
372
376
377
interface INemesisRequiemResponse extends IKnifeResponse {
378
RankIncrease?: number;
379
}
380
373
381
// interface INemesisWeakenRequest {
374
382
// target: INemesisClient;
375
383
// knife: IKnife;
376
384
// }
377
385
386
interface INemesisWeakenResponse extends IKnifeResponse {
387
target: INemesisClient;
388
}
389
378
390
interface IKnife {
379
391
Item: IEquipmentClient;
380
392
Skins: IWeaponSkinClient[];
@@ -383,3 +395,18 @@ interface IKnife {
383
395
AttachedUpgrades: IUpgradeClient[];
384
396
HiddenWhenHolstered: boolean;
385
397
}
398
399
const consumePasscodeModCharges = async (
400
inventory: TInventoryDatabaseDocument,
401
response: IKnifeResponse
402
): Promise<void> => {
403
const loadout = (await Loadout.findById(inventory.LoadOutPresets, "DATAKNIFE"))!;
404
const dataknifeLoadout = loadout.DATAKNIFE.id(inventory.CurrentLoadOutIds[LoadoutIndex.DATAKNIFE].$oid);
405
const dataknifeConfigIndex = dataknifeLoadout?.s?.mod ?? 0;
406
const dataknifeUpgrades = inventory.DataKnives[0].Configs[dataknifeConfigIndex].Upgrades!;
407
const modTypes = getNemesisPasscodeModTypes(inventory.Nemesis!);
408
for (const modType of modTypes) {
409
const upgrade = getKnifeUpgrade(inventory, dataknifeUpgrades, modType);
410
consumeModCharge(response, inventory, upgrade, dataknifeUpgrades);
411
}
412
};