diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index d6bdae51..ef7401ed 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -42,7 +42,6 @@ import { ICrewShipCustomization, ICrewShipWeapon, ICrewShipMembersClient, - ICrewShip, ICrewShipPilotWeapon, IShipExterior, IHelminthFoodRecord, @@ -52,7 +51,8 @@ import { IDialogueGift, ICompletedDialogue, IDialogueClient, - IUpgradeDatabase + IUpgradeDatabase, + ICrewShipDatabase } from "../../types/inventoryTypes/inventoryTypes"; import { IOid } from "../../types/commonTypes"; import { @@ -694,7 +694,7 @@ crewShipMembersSchema.set("toJSON", { } }); -const crewShipSchema = new Schema({ +const crewShipSchema = new Schema({ ItemType: { type: String, required: true }, Configs: { type: [ItemConfigSchema], default: [] }, Weapon: { type: crewShipWeaponSchema, default: undefined }, @@ -1184,7 +1184,7 @@ type InventoryDocumentProps = { Hoverboards: Types.DocumentArray; MoaPets: Types.DocumentArray; WeaponSkins: Types.DocumentArray; - CrewShips: Types.DocumentArray; + CrewShips: Types.DocumentArray; CrewShipHarnesses: Types.DocumentArray; }; diff --git a/src/services/importService.ts b/src/services/importService.ts index c9d2f6ee..91857653 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -8,6 +8,10 @@ import { import { IMongoDate } from "../types/commonTypes"; import { equipmentKeys, + ICrewShipClient, + ICrewShipDatabase, + ICrewShipMembersClient, + ICrewShipMembersDatabase, IDialogueClient, IDialogueDatabase, IDialogueHistoryClient, @@ -81,6 +85,23 @@ const replaceSlots = (db: ISlots, client: ISlots): void => { db.Slots = client.Slots; }; +const convertCrewShipMembers = (client: ICrewShipMembersClient): ICrewShipMembersDatabase => { + return { + SLOT_A: client.SLOT_A ? new Types.ObjectId(client.SLOT_A.ItemId.$oid) : undefined, + SLOT_B: client.SLOT_B ? new Types.ObjectId(client.SLOT_B.ItemId.$oid) : undefined, + SLOT_C: client.SLOT_C ? new Types.ObjectId(client.SLOT_C.ItemId.$oid) : undefined + }; +}; + +const convertCrewShip = (client: ICrewShipClient): ICrewShipDatabase => { + const { ItemId, ...rest } = client; + return { + ...rest, + _id: new Types.ObjectId(ItemId.$oid), + CrewMembers: client.CrewMembers ? convertCrewShipMembers(client.CrewMembers) : undefined + }; +}; + const convertInfestedFoundry = (client: IInfestedFoundryClient): IInfestedFoundryDatabase => { return { ...client, @@ -192,6 +213,9 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial< if (client.FocusUpgrades) { db.FocusUpgrades = client.FocusUpgrades; } + if (client.CrewShips) { + replaceArray(db.CrewShips, client.CrewShips.map(convertCrewShip)); + } if (client.InfestedFoundry) { db.InfestedFoundry = convertInfestedFoundry(client.InfestedFoundry); } diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index f2181474..d5af0066 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -30,6 +30,7 @@ export interface IInventoryDatabase | "CrewShipWeaponSkins" | "OperatorLoadOuts" | "AdultOperatorLoadOuts" + | "CrewShips" | "InfestedFoundry" | "DialogueHistory" | TEquipmentKey @@ -50,6 +51,7 @@ export interface IInventoryDatabase CrewShipWeaponSkins: IUpgradeDatabase[]; OperatorLoadOuts: IOperatorConfigDatabase[]; AdultOperatorLoadOuts: IOperatorConfigDatabase[]; + CrewShips: ICrewShipDatabase[]; InfestedFoundry?: IInfestedFoundryDatabase; DialogueHistory?: IDialogueHistoryDatabase; @@ -292,7 +294,7 @@ export interface IInventoryClient extends IDailyAffiliations { LastNemesisAllySpawnTime?: IMongoDate; Settings: ISettings; PersonalTechProjects: IPersonalTechProject[]; - CrewShips: ICrewShip[]; + CrewShips: ICrewShipClient[]; PlayerSkills: IPlayerSkills; CrewShipAmmo: IConsumable[]; CrewShipSalvagedWeaponSkins: IUpgradeClient[]; @@ -452,7 +454,7 @@ export interface IUpgradeDatabase extends Omit { _id: Types.ObjectId; } -export interface ICrewShip { +export interface ICrewShipClient { ItemType: string; Configs: IItemConfig[]; Weapon?: ICrewShipWeapon; @@ -461,6 +463,10 @@ export interface ICrewShip { RailjackImage?: IFlavourItem; CrewMembers?: ICrewShipMembersClient; ItemId: IOid; +} + +export interface ICrewShipDatabase extends Omit { + CrewMembers?: ICrewShipMembersDatabase; _id: Types.ObjectId; }