返回提交历史
Modified
src/models/inventoryModels/inventoryModel.ts
+25
-2
Modified
src/services/missionInventoryUpdateService.ts
+32
-1
Modified
src/types/inventoryTypes/inventoryTypes.ts
+19
-0
Modified
src/types/requestTypes.ts
+9
-1
XFEstudio/SpaceNinjaServer
feat: zanuka capture (#1416)
Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1416 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
3a26d788
代码差异
4 个文件
+85
-4
@@ -83,7 +83,8 @@ import {
83
83
INemesisClient,
84
84
IInfNode,
85
85
IDiscoveredMarker,
86
IWeeklyMission
86
IWeeklyMission,
87
ILockedWeaponGroupDatabase
87
88
} from "../../types/inventoryTypes/inventoryTypes";
88
89
import { IOid } from "../../types/commonTypes";
89
90
import {
@@ -1147,6 +1148,17 @@ const alignmentSchema = new Schema<IAlignment>(
1147
1148
{ _id: false }
1148
1149
);
1149
1150
1151
const lockedWeaponGroupSchema = new Schema<ILockedWeaponGroupDatabase>(
1152
{
1153
s: Schema.Types.ObjectId,
1154
p: Schema.Types.ObjectId,
1155
l: Schema.Types.ObjectId,
1156
m: Schema.Types.ObjectId,
1157
sn: Schema.Types.ObjectId
1158
},
1159
{ _id: false }
1160
);
1161
1150
1162
const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
1151
1163
{
1152
1164
accountOwnerId: Schema.Types.ObjectId,
@@ -1488,7 +1500,9 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
1488
1500
EchoesHexConquestActiveFrameVariants: { type: [String], default: undefined },
1489
1501
EchoesHexConquestActiveStickers: { type: [String], default: undefined },
1490
1502
1491
BrandedSuits: { type: [Schema.Types.ObjectId], default: undefined }
1503
// G3 + Zanuka
1504
BrandedSuits: { type: [Schema.Types.ObjectId], default: undefined },
1505
LockedWeaponGroup: { type: lockedWeaponGroupSchema, default: undefined }
1492
1506
},
1493
1507
{ timestamps: { createdAt: "Created", updatedAt: false } }
1494
1508
);
@@ -1523,6 +1537,15 @@ inventorySchema.set("toJSON", {
1523
1537
if (inventoryDatabase.BrandedSuits) {
1524
1538
inventoryResponse.BrandedSuits = inventoryDatabase.BrandedSuits.map(toOid);
1525
1539
}
1540
if (inventoryDatabase.LockedWeaponGroup) {
1541
inventoryResponse.LockedWeaponGroup = {
1542
s: toOid(inventoryDatabase.LockedWeaponGroup.s),
1543
l: inventoryDatabase.LockedWeaponGroup.l ? toOid(inventoryDatabase.LockedWeaponGroup.l) : undefined,
1544
p: inventoryDatabase.LockedWeaponGroup.p ? toOid(inventoryDatabase.LockedWeaponGroup.p) : undefined,
1545
m: inventoryDatabase.LockedWeaponGroup.m ? toOid(inventoryDatabase.LockedWeaponGroup.m) : undefined,
1546
sn: inventoryDatabase.LockedWeaponGroup.sn ? toOid(inventoryDatabase.LockedWeaponGroup.sn) : undefined
1547
};
1548
}
1526
1549
}
1527
1550
});
1528
1551
@@ -47,6 +47,7 @@ import kuriaMessage100 from "@/static/fixed_responses/kuriaMessages/oneHundredPe
47
47
import conservationAnimals from "@/static/fixed_responses/conservationAnimals.json";
48
48
import { getInfNodes } from "@/src/helpers/nemesisHelpers";
49
49
import { Loadout } from "../models/inventoryModels/loadoutModel";
50
import { ILoadoutConfigDatabase } from "../types/saveLoadoutTypes";
50
51
51
52
const getRotations = (rotationCount: number): number[] => {
52
53
if (rotationCount === 0) return [0];
@@ -95,7 +96,8 @@ export const addMissionInventoryUpdates = async (
95
96
inventoryUpdates.MissionFailed &&
96
97
inventoryUpdates.MissionStatus == "GS_FAILURE" &&
97
98
inventoryUpdates.EndOfMatchUpload &&
98
inventoryUpdates.ObjectiveReached
99
inventoryUpdates.ObjectiveReached &&
100
!inventoryUpdates.LockedWeaponGroup
99
101
) {
100
102
const loadout = (await Loadout.findById(inventory.LoadOutPresets, "NORMAL"))!;
101
103
const config = loadout.NORMAL.id(inventory.CurrentLoadOutIds[0].$oid)!;
@@ -397,6 +399,35 @@ export const addMissionInventoryUpdates = async (
397
399
}
398
400
break;
399
401
}
402
case "LockedWeaponGroup": {
403
inventory.LockedWeaponGroup = {
404
s: new Types.ObjectId(value.s.$oid),
405
l: value.l ? new Types.ObjectId(value.l.$oid) : undefined,
406
p: value.p ? new Types.ObjectId(value.p.$oid) : undefined,
407
m: value.m ? new Types.ObjectId(value.m.$oid) : undefined,
408
sn: value.sn ? new Types.ObjectId(value.sn.$oid) : undefined
409
};
410
break;
411
}
412
case "UnlockWeapons": {
413
inventory.LockedWeaponGroup = undefined;
414
break;
415
}
416
case "CurrentLoadOutIds": {
417
const loadout = await Loadout.findOne({ loadoutOwnerId: inventory.accountOwnerId });
418
if (loadout) {
419
for (const [loadoutId, loadoutConfig] of Object.entries(value.LoadOuts.NORMAL)) {
420
const { ItemId, ...loadoutConfigItemIdRemoved } = loadoutConfig;
421
const loadoutConfigDatabase: ILoadoutConfigDatabase = {
422
_id: new Types.ObjectId(ItemId.$oid),
423
...loadoutConfigItemIdRemoved
424
};
425
loadout.NORMAL.id(loadoutId)!.overwrite(loadoutConfigDatabase);
426
}
427
await loadout.save();
428
}
429
break;
430
}
400
431
default:
401
432
// Equipment XP updates
402
433
if (equipmentKeys.includes(key as TEquipmentKey)) {
@@ -45,6 +45,7 @@ export interface IInventoryDatabase
45
45
| "Nemesis"
46
46
| "EntratiVaultCountResetDate"
47
47
| "BrandedSuits"
48
| "LockedWeaponGroup"
48
49
| TEquipmentKey
49
50
>,
50
51
InventoryDatabaseEquipment {
@@ -75,6 +76,7 @@ export interface IInventoryDatabase
75
76
Nemesis?: INemesisDatabase;
76
77
EntratiVaultCountResetDate?: Date;
77
78
BrandedSuits?: Types.ObjectId[];
79
LockedWeaponGroup?: ILockedWeaponGroupDatabase;
78
80
}
79
81
80
82
export interface IQuestKeyDatabase {
@@ -349,6 +351,7 @@ export interface IInventoryClient extends IDailyAffiliations, InventoryClientEqu
349
351
EchoesHexConquestActiveFrameVariants?: string[];
350
352
EchoesHexConquestActiveStickers?: string[];
351
353
BrandedSuits?: IOid[];
354
LockedWeaponGroup?: ILockedWeaponGroupClient;
352
355
}
353
356
354
357
export interface IAffiliation {
@@ -1149,3 +1152,19 @@ export interface ISongChallenge {
1149
1152
Song: string;
1150
1153
Difficulties: number[];
1151
1154
}
1155
1156
export interface ILockedWeaponGroupClient {
1157
s: IOid;
1158
p?: IOid;
1159
l?: IOid;
1160
m?: IOid;
1161
sn?: IOid;
1162
}
1163
1164
export interface ILockedWeaponGroupDatabase {
1165
s: Types.ObjectId;
1166
p?: Types.ObjectId;
1167
l?: Types.ObjectId;
1168
m?: Types.ObjectId;
1169
sn?: Types.ObjectId;
1170
}
@@ -17,7 +17,9 @@ import {
17
17
ILoreFragmentScan,
18
18
IUpgradeClient,
19
19
ICollectibleEntry,
20
IDiscoveredMarker
20
IDiscoveredMarker,
21
ILockedWeaponGroupClient,
22
ILoadOutPresets
21
23
} from "./inventoryTypes/inventoryTypes";
22
24
23
25
export interface IAffiliationChange {
@@ -108,6 +110,12 @@ export type IMissionInventoryUpdateRequest = {
108
110
Count: number;
109
111
}[];
110
112
DiscoveredMarkers?: IDiscoveredMarker[];
113
LockedWeaponGroup?: ILockedWeaponGroupClient; // sent when captured by zanuka
114
UnlockWeapons?: boolean; // sent when recovered weapons from zanuka capture
115
IncHarvester?: boolean; // sent when recovered weapons from zanuka capture
116
CurrentLoadOutIds?: {
117
LoadOuts: ILoadOutPresets; // sent when recovered weapons from zanuka capture
118
};
111
119
} & {
112
120
[K in TEquipmentKey]?: IEquipmentClient[];
113
121
};