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: handle converted lich as crew member (#2071)

saveLoadout was missing bigint support to properly store NemesisFingerprint, and crewMembers was missing handling for liches being set on-call (the only option available for them) Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2071 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>

2ce5cc45
Sainan <63328889+Sainan@users.noreply.github.com>
提交于

代码差异

2 个文件 +34 -15
Modified src/controllers/api/crewMembersController.ts +32 -14
@@ -1,4 +1,5 @@
1 1 import { getJSONfromString } from "@/src/helpers/stringHelpers";
2 import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
2 3 import { getInventory } from "@/src/services/inventoryService";
3 4 import { getAccountIdForRequest } from "@/src/services/loginService";
4 5 import { ICrewMemberClient } from "@/src/types/inventoryTypes/inventoryTypes";
@@ -7,23 +8,23 @@ import { Types } from "mongoose";
7 8
8 9 export const crewMembersController: RequestHandler = async (req, res) => {
9 10 const accountId = await getAccountIdForRequest(req);
10 const inventory = await getInventory(accountId, "CrewMembers");
11 const inventory = await getInventory(accountId, "CrewMembers NemesisHistory");
11 12 const data = getJSONfromString<ICrewMembersRequest>(String(req.body));
12 const dbCrewMember = inventory.CrewMembers.id(data.crewMember.ItemId.$oid)!;
13 dbCrewMember.AssignedRole = data.crewMember.AssignedRole;
14 dbCrewMember.SkillEfficiency = data.crewMember.SkillEfficiency;
15 dbCrewMember.WeaponConfigIdx = data.crewMember.WeaponConfigIdx;
16 dbCrewMember.WeaponId = new Types.ObjectId(data.crewMember.WeaponId.$oid);
17 dbCrewMember.Configs = data.crewMember.Configs;
18 13 if (data.crewMember.SecondInCommand) {
19 for (const cm of inventory.CrewMembers) {
20 if (cm.SecondInCommand) {
21 cm.SecondInCommand = false;
22 break;
23 }
24 }
14 clearOnCall(inventory);
15 }
16 if (data.crewMember.ItemId.$oid == "000000000000000000000000") {
17 const convertedNemesis = inventory.NemesisHistory!.find(x => x.fp == data.crewMember.NemesisFingerprint)!;
18 convertedNemesis.SecondInCommand = data.crewMember.SecondInCommand;
19 } else {
20 const dbCrewMember = inventory.CrewMembers.id(data.crewMember.ItemId.$oid)!;
21 dbCrewMember.AssignedRole = data.crewMember.AssignedRole;
22 dbCrewMember.SkillEfficiency = data.crewMember.SkillEfficiency;
23 dbCrewMember.WeaponConfigIdx = data.crewMember.WeaponConfigIdx;
24 dbCrewMember.WeaponId = new Types.ObjectId(data.crewMember.WeaponId.$oid);
25 dbCrewMember.Configs = data.crewMember.Configs;
26 dbCrewMember.SecondInCommand = data.crewMember.SecondInCommand;
25 27 }
26 dbCrewMember.SecondInCommand = data.crewMember.SecondInCommand;
27 28 await inventory.save();
28 29 res.json({
29 30 crewMemberId: data.crewMember.ItemId.$oid,
@@ -34,3 +35,20 @@ export const crewMembersController: RequestHandler = async (req, res) => {
34 35 interface ICrewMembersRequest {
35 36 crewMember: ICrewMemberClient;
36 37 }
38
39 const clearOnCall = (inventory: TInventoryDatabaseDocument): void => {
40 for (const cm of inventory.CrewMembers) {
41 if (cm.SecondInCommand) {
42 cm.SecondInCommand = false;
43 return;
44 }
45 }
46 if (inventory.NemesisHistory) {
47 for (const cm of inventory.NemesisHistory) {
48 if (cm.SecondInCommand) {
49 cm.SecondInCommand = false;
50 return;
51 }
52 }
53 }
54 };
Modified src/controllers/api/saveLoadoutController.ts +2 -1
@@ -2,11 +2,12 @@ import { RequestHandler } from "express";
2 2 import { ISaveLoadoutRequest } from "@/src/types/saveLoadoutTypes";
3 3 import { handleInventoryItemConfigChange } from "@/src/services/saveLoadoutService";
4 4 import { getAccountIdForRequest } from "@/src/services/loginService";
5 import { getJSONfromString } from "@/src/helpers/stringHelpers";
5 6
6 7 export const saveLoadoutController: RequestHandler = async (req, res) => {
7 8 const accountId = await getAccountIdForRequest(req);
8 9
9 const body: ISaveLoadoutRequest = JSON.parse(req.body as string) as ISaveLoadoutRequest;
10 const body: ISaveLoadoutRequest = getJSONfromString<ISaveLoadoutRequest>(String(req.body));
10 11 // console.log(util.inspect(body, { showHidden: false, depth: null, colors: true }));
11 12
12 13 // eslint-disable-next-line @typescript-eslint/no-unused-vars