From 6e6df221e7e43835a66b638ec66fddcde7d9216a Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Tue, 1 Apr 2025 01:37:21 +0200 Subject: [PATCH 1/3] fix getting captured by zanuka triggering G3 logic --- src/services/missionInventoryUpdateService.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/services/missionInventoryUpdateService.ts b/src/services/missionInventoryUpdateService.ts index f4fe1164..69cc74a9 100644 --- a/src/services/missionInventoryUpdateService.ts +++ b/src/services/missionInventoryUpdateService.ts @@ -95,7 +95,8 @@ export const addMissionInventoryUpdates = async ( inventoryUpdates.MissionFailed && inventoryUpdates.MissionStatus == "GS_FAILURE" && inventoryUpdates.EndOfMatchUpload && - inventoryUpdates.ObjectiveReached + inventoryUpdates.ObjectiveReached && + !inventoryUpdates.LockedWeaponGroup ) { const loadout = (await Loadout.findById(inventory.LoadOutPresets, "NORMAL"))!; const config = loadout.NORMAL.id(inventory.CurrentLoadOutIds[0].$oid)!; -- 2.47.2 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 2/3] 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[]; }; -- 2.47.2 From 381ab49cad16c7e303dfc4b14e28ba511c894502 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Tue, 1 Apr 2025 02:19:34 +0200 Subject: [PATCH 3/3] handle in CurrentLoadOutIds in missionInventoryUpdate just for correctness' sake (at least for NORMAL config) --- src/services/missionInventoryUpdateService.ts | 16 ++++++++++++++++ src/types/requestTypes.ts | 6 +++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/services/missionInventoryUpdateService.ts b/src/services/missionInventoryUpdateService.ts index a17a82d5..8fbfd41e 100644 --- a/src/services/missionInventoryUpdateService.ts +++ b/src/services/missionInventoryUpdateService.ts @@ -47,6 +47,7 @@ import kuriaMessage100 from "@/static/fixed_responses/kuriaMessages/oneHundredPe import conservationAnimals from "@/static/fixed_responses/conservationAnimals.json"; import { getInfNodes } from "@/src/helpers/nemesisHelpers"; import { Loadout } from "../models/inventoryModels/loadoutModel"; +import { ILoadoutConfigDatabase } from "../types/saveLoadoutTypes"; const getRotations = (rotationCount: number): number[] => { if (rotationCount === 0) return [0]; @@ -412,6 +413,21 @@ export const addMissionInventoryUpdates = async ( inventory.LockedWeaponGroup = undefined; break; } + case "CurrentLoadOutIds": { + const loadout = await Loadout.findOne({ loadoutOwnerId: inventory.accountOwnerId }); + if (loadout) { + for (const [loadoutId, loadoutConfig] of Object.entries(value.LoadOuts.NORMAL)) { + const { ItemId, ...loadoutConfigItemIdRemoved } = loadoutConfig; + const loadoutConfigDatabase: ILoadoutConfigDatabase = { + _id: new Types.ObjectId(ItemId.$oid), + ...loadoutConfigItemIdRemoved + }; + loadout.NORMAL.id(loadoutId)!.overwrite(loadoutConfigDatabase); + } + await loadout.save(); + } + break; + } default: // Equipment XP updates if (equipmentKeys.includes(key as TEquipmentKey)) { diff --git a/src/types/requestTypes.ts b/src/types/requestTypes.ts index e30fce9a..299760df 100644 --- a/src/types/requestTypes.ts +++ b/src/types/requestTypes.ts @@ -18,7 +18,8 @@ import { IUpgradeClient, ICollectibleEntry, IDiscoveredMarker, - ILockedWeaponGroupClient + ILockedWeaponGroupClient, + ILoadOutPresets } from "./inventoryTypes/inventoryTypes"; export interface IAffiliationChange { @@ -112,6 +113,9 @@ export type IMissionInventoryUpdateRequest = { 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 + CurrentLoadOutIds?: { + LoadOuts: ILoadOutPresets; // sent when recovered weapons from zanuka capture + }; } & { [K in TEquipmentKey]?: IEquipmentClient[]; }; -- 2.47.2