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

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

代码差异

4 个文件 +85 -4
Modified src/models/inventoryModels/inventoryModel.ts +25 -2
@@ -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
Modified src/services/missionInventoryUpdateService.ts +32 -1
@@ -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)) {
Modified src/types/inventoryTypes/inventoryTypes.ts +19 -0
@@ -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 }
Modified src/types/requestTypes.ts +9 -1
@@ -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 };