From d0df003eeeeacd8149ec96e5fcaa1a37595f844f Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Tue, 1 Apr 2025 01:41:08 +0200 Subject: [PATCH] feat: zanuka capture --- src/models/inventoryModels/inventoryModel.ts | 27 +++++++++++++++++-- src/services/missionInventoryUpdateService.ts | 14 ++++++++++ src/types/inventoryTypes/inventoryTypes.ts | 19 +++++++++++++ src/types/requestTypes.ts | 6 ++++- 4 files changed, 63 insertions(+), 3 deletions(-) diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index ecd007be..8d298d5d 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -83,7 +83,8 @@ import { INemesisClient, IInfNode, IDiscoveredMarker, - IWeeklyMission + IWeeklyMission, + ILockedWeaponGroupDatabase } from "../../types/inventoryTypes/inventoryTypes"; import { IOid } from "../../types/commonTypes"; import { @@ -1147,6 +1148,17 @@ const alignmentSchema = new Schema( { _id: false } ); +const lockedWeaponGroupSchema = new Schema( + { + s: Schema.Types.ObjectId, + p: Schema.Types.ObjectId, + l: Schema.Types.ObjectId, + m: Schema.Types.ObjectId, + sn: Schema.Types.ObjectId + }, + { _id: false } +); + const inventorySchema = new Schema( { accountOwnerId: Schema.Types.ObjectId, @@ -1488,7 +1500,9 @@ const inventorySchema = new Schema( EchoesHexConquestActiveFrameVariants: { type: [String], default: undefined }, EchoesHexConquestActiveStickers: { type: [String], default: undefined }, - BrandedSuits: { type: [Schema.Types.ObjectId], default: undefined } + // G3 + Zanuka + BrandedSuits: { type: [Schema.Types.ObjectId], default: undefined }, + LockedWeaponGroup: { type: lockedWeaponGroupSchema, default: undefined } }, { timestamps: { createdAt: "Created", updatedAt: false } } ); @@ -1523,6 +1537,15 @@ inventorySchema.set("toJSON", { if (inventoryDatabase.BrandedSuits) { inventoryResponse.BrandedSuits = inventoryDatabase.BrandedSuits.map(toOid); } + if (inventoryDatabase.LockedWeaponGroup) { + inventoryResponse.LockedWeaponGroup = { + s: toOid(inventoryDatabase.LockedWeaponGroup.s), + l: inventoryDatabase.LockedWeaponGroup.l ? toOid(inventoryDatabase.LockedWeaponGroup.l) : undefined, + p: inventoryDatabase.LockedWeaponGroup.p ? toOid(inventoryDatabase.LockedWeaponGroup.p) : undefined, + m: inventoryDatabase.LockedWeaponGroup.m ? toOid(inventoryDatabase.LockedWeaponGroup.m) : undefined, + sn: inventoryDatabase.LockedWeaponGroup.sn ? toOid(inventoryDatabase.LockedWeaponGroup.sn) : undefined + }; + } } }); diff --git a/src/services/missionInventoryUpdateService.ts b/src/services/missionInventoryUpdateService.ts index 69cc74a9..a17a82d5 100644 --- a/src/services/missionInventoryUpdateService.ts +++ b/src/services/missionInventoryUpdateService.ts @@ -398,6 +398,20 @@ export const addMissionInventoryUpdates = async ( } break; } + case "LockedWeaponGroup": { + inventory.LockedWeaponGroup = { + s: new Types.ObjectId(value.s.$oid), + l: value.l ? new Types.ObjectId(value.l.$oid) : undefined, + p: value.p ? new Types.ObjectId(value.p.$oid) : undefined, + m: value.m ? new Types.ObjectId(value.m.$oid) : undefined, + sn: value.sn ? new Types.ObjectId(value.sn.$oid) : undefined + }; + break; + } + case "UnlockWeapons": { + inventory.LockedWeaponGroup = undefined; + break; + } default: // Equipment XP updates if (equipmentKeys.includes(key as TEquipmentKey)) { diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index b4d60f20..4eee21b6 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -45,6 +45,7 @@ export interface IInventoryDatabase | "Nemesis" | "EntratiVaultCountResetDate" | "BrandedSuits" + | "LockedWeaponGroup" | TEquipmentKey >, InventoryDatabaseEquipment { @@ -75,6 +76,7 @@ export interface IInventoryDatabase Nemesis?: INemesisDatabase; EntratiVaultCountResetDate?: Date; BrandedSuits?: Types.ObjectId[]; + LockedWeaponGroup?: ILockedWeaponGroupDatabase; } export interface IQuestKeyDatabase { @@ -349,6 +351,7 @@ export interface IInventoryClient extends IDailyAffiliations, InventoryClientEqu EchoesHexConquestActiveFrameVariants?: string[]; EchoesHexConquestActiveStickers?: string[]; BrandedSuits?: IOid[]; + LockedWeaponGroup?: ILockedWeaponGroupClient; } export interface IAffiliation { @@ -1149,3 +1152,19 @@ export interface ISongChallenge { Song: string; Difficulties: number[]; } + +export interface ILockedWeaponGroupClient { + s: IOid; + p?: IOid; + l?: IOid; + m?: IOid; + sn?: IOid; +} + +export interface ILockedWeaponGroupDatabase { + s: Types.ObjectId; + p?: Types.ObjectId; + l?: Types.ObjectId; + m?: Types.ObjectId; + sn?: Types.ObjectId; +} diff --git a/src/types/requestTypes.ts b/src/types/requestTypes.ts index 25158f20..e30fce9a 100644 --- a/src/types/requestTypes.ts +++ b/src/types/requestTypes.ts @@ -17,7 +17,8 @@ import { ILoreFragmentScan, IUpgradeClient, ICollectibleEntry, - IDiscoveredMarker + IDiscoveredMarker, + ILockedWeaponGroupClient } from "./inventoryTypes/inventoryTypes"; export interface IAffiliationChange { @@ -108,6 +109,9 @@ export type IMissionInventoryUpdateRequest = { Count: number; }[]; DiscoveredMarkers?: IDiscoveredMarker[]; + LockedWeaponGroup?: ILockedWeaponGroupClient; // sent when captured by zanuka + UnlockWeapons?: boolean; // sent when recovered weapons from zanuka capture + IncHarvester?: boolean; // sent when recovered weapons from zanuka capture } & { [K in TEquipmentKey]?: IEquipmentClient[]; };