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

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

代码差异

1 个文件 +43 -16
Modified src/controllers/api/nemesisController.ts +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 };