返回提交历史
Modified
src/controllers/api/crewMembersController.ts
+32
-14
Modified
src/controllers/api/saveLoadoutController.ts
+2
-1
XFEstudio/XFESpaceNinjaServer
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
代码差异
2 个文件
+34
-15
@@ -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
};
@@ -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