From 47d3008a6cc776a0a7861ed4e775e0b28d81dddc Mon Sep 17 00:00:00 2001 From: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com> Date: Sun, 23 Mar 2025 16:42:14 +0100 Subject: [PATCH 1/3] feat(import): additional fields --- src/models/inventoryModels/inventoryModel.ts | 8 +- src/services/importService.ts | 153 ++++++++++++++++++- 2 files changed, 149 insertions(+), 12 deletions(-) diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index ec0e1778..7edee742 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -1264,15 +1264,15 @@ const inventorySchema = new Schema( //NPC Crew and weapon CrewMembers: [Schema.Types.Mixed], - CrewShipSalvagedWeaponSkins: [Schema.Types.Mixed], - CrewShipSalvagedWeapons: [Schema.Types.Mixed], + CrewShipSalvagedWeaponSkins: [upgradeSchema], + CrewShipSalvagedWeapons: [upgradeSchema], //Complete Mission\Quests Missions: [missionSchema], QuestKeys: [questKeysSchema], ActiveQuest: { type: String, default: "" }, //item like DojoKey or Boss missions key - LevelKeys: [Schema.Types.Mixed], + LevelKeys: [typeCountSchema], //Active quests Quests: [Schema.Types.Mixed], @@ -1333,7 +1333,7 @@ const inventorySchema = new Schema( SpectreLoadouts: { type: [spectreLoadoutsSchema], default: undefined }, //New Quest Email - EmailItems: [TypeXPItemSchema], + EmailItems: [typeCountSchema], //Profile->Wishlist Wishlist: [String], diff --git a/src/services/importService.ts b/src/services/importService.ts index 535b67b7..ae16e86d 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -23,6 +23,12 @@ import { IKubrowPetDetailsDatabase, ILoadoutConfigClient, ILoadOutPresets, + INemesisClient, + INemesisDatabase, + IPendingRecipeClient, + IPendingRecipeDatabase, + IQuestKeyClient, + IQuestKeyDatabase, ISlots, IUpgradeClient, IUpgradeDatabase, @@ -144,6 +150,27 @@ const convertKubrowDetails = (client: IKubrowPetDetailsClient): IKubrowPetDetail }; }; +const convertQuestKey = (client: IQuestKeyClient): IQuestKeyDatabase => { + return { + ...client, + CompletionDate: convertOptionalDate(client.CompletionDate) + }; +}; + +const convertPendingRecipe = (client: IPendingRecipeClient): IPendingRecipeDatabase => { + return { + ...client, + CompletionDate: convertDate(client.CompletionDate) + }; +}; + +const convertNemesis = (client: INemesisClient): INemesisDatabase => { + return { + ...client, + d: convertDate(client.d) + }; +}; + export const importInventory = (db: TInventoryDatabaseDocument, client: Partial): void => { for (const key of equipmentKeys) { if (client[key] !== undefined) { @@ -153,10 +180,22 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial< if (client.WeaponSkins !== undefined) { replaceArray(db.WeaponSkins, client.WeaponSkins.map(convertWeaponSkin)); } - if (client.Upgrades !== undefined) { - replaceArray(db.Upgrades, client.Upgrades.map(convertUpgrade)); + for (const key of ["Upgrades", "CrewShipSalvagedWeaponSkins", "CrewShipWeaponSkins"] as const) { + if (client[key] !== undefined) { + replaceArray(db[key], client[key].map(convertUpgrade)); + } } - for (const key of ["RawUpgrades", "MiscItems", "Consumables"] as const) { + for (const key of [ + "RawUpgrades", + "MiscItems", + "Consumables", + "Recipes", + "LevelKeys", + "EmailItems", + "ShipDecorations", + "CrewShipAmmo", + "CrewShipRawSalvage" + ] as const) { if (client[key] !== undefined) { db[key].splice(0, db[key].length); client[key].forEach(x => { @@ -190,8 +229,16 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial< replaceSlots(db[key], client[key]); } } - if (client.UseAdultOperatorLoadout !== undefined) { - db.UseAdultOperatorLoadout = client.UseAdultOperatorLoadout; + for (const key of [ + "UseAdultOperatorLoadout", + "HasOwnedVoidProjectionsPreviously", + "ReceivedStartingGear", + "ArchwingEnabled", + "PlayedParkourTutorial" + ] as const) { + if (client[key] !== undefined) { + db[key] = client[key]; + } } for (const key of [ "PlayerLevel", @@ -199,18 +246,37 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial< "PremiumCredits", "PremiumCreditsFree", "FusionPoints", - "PrimeTokens" + "PrimeTokens", + "TradesRemaining", + "GiftsRemaining", + "ChallengesFixVersion" ] as const) { if (client[key] !== undefined) { db[key] = client[key]; } } - for (const key of ["ThemeStyle", "ThemeBackground", "ThemeSounds", "EquippedInstrument", "FocusAbility"] as const) { + for (const key of [ + "ThemeStyle", + "ThemeBackground", + "ThemeSounds", + "EquippedInstrument", + "FocusAbility", + "ActiveQuest", + "SupportedSyndicate", + "ActiveAvatarImageType" + ] as const) { if (client[key] !== undefined) { db[key] = client[key]; } } - for (const key of ["EquippedGear", "EquippedEmotes", "NodeIntrosCompleted"] as const) { + for (const key of [ + "EquippedGear", + "EquippedEmotes", + "NodeIntrosCompleted", + "DeathMarks", + "Wishlist", + "NemesisAbandonedRewards" + ] as const) { if (client[key] !== undefined) { db[key] = client[key]; } @@ -242,6 +308,77 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial< if (client.CustomMarkers !== undefined) { db.CustomMarkers = client.CustomMarkers; } + if (client.ChallengeProgress !== undefined) { + db.ChallengeProgress = client.ChallengeProgress; + } + if (client.QuestKeys !== undefined) { + replaceArray(db.QuestKeys, client.QuestKeys.map(convertQuestKey)); + } + if (client.LastRegionPlayed !== undefined) { + db.LastRegionPlayed = client.LastRegionPlayed; + } + if (client.PendingRecipes !== undefined) { + replaceArray(db.PendingRecipes, client.PendingRecipes.map(convertPendingRecipe)); + } + if (client.TauntHistory !== undefined) { + db.TauntHistory = client.TauntHistory; + } + if (client.LoreFragmentScans !== undefined) { + db.LoreFragmentScans = client.LoreFragmentScans; + } + for (const key of ["PendingSpectreLoadouts", "SpectreLoadouts"] as const) { + if (client[key] !== undefined) { + db[key] = client[key]; + } + } + if (client.FocusXP !== undefined) { + db.FocusXP = client.FocusXP; + } + for (const key of ["Alignment", "AlignmentReplay"] as const) { + if (client[key] !== undefined) { + db[key] = client[key]; + } + } + if (client.StepSequencers !== undefined) { + db.StepSequencers = client.StepSequencers; + } + if (client.CompletedJobChains !== undefined) { + db.CompletedJobChains = client.CompletedJobChains; + } + if (client.Nemesis !== undefined) { + db.Nemesis = convertNemesis(client.Nemesis); + } + if (client.PlayerSkills !== undefined) { + db.PlayerSkills = client.PlayerSkills; + } + if (client.LotusCustomization !== undefined) { + db.LotusCustomization = client.LotusCustomization; + } + if (client.CollectibleSeries !== undefined) { + db.CollectibleSeries = client.CollectibleSeries; + } + for (const key of ["LibraryAvailableDailyTaskInfo", "LibraryActiveDailyTaskInfo"] as const) { + if (client[key] !== undefined) { + db[key] = client[key]; + } + } + if (client.EndlessXP !== undefined) { + db.EndlessXP = client.EndlessXP; + } + if (client.SongChallenges !== undefined) { + db.SongChallenges = client.SongChallenges; + } + if (client.Missions !== undefined) { + db.Missions = client.Missions; + } + if (client.FlavourItems !== undefined) { + db.FlavourItems.splice(0, db.FlavourItems.length); + client.FlavourItems.forEach(x => { + db.FlavourItems.push({ + ItemType: x.ItemType + }); + }); + } }; const convertLoadOutConfig = (client: ILoadoutConfigClient): ILoadoutConfigDatabase => { -- 2.47.2 From 095dc9fd9ec8988ed950e6e5e3d49d22d532662f Mon Sep 17 00:00:00 2001 From: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com> Date: Sun, 23 Mar 2025 17:51:56 +0100 Subject: [PATCH 2/3] schema for CrewShipSalvagedWeapons --- src/models/inventoryModels/inventoryModel.ts | 17 ++++++++++---- src/services/importService.ts | 23 +++++++++++++++++++ src/types/inventoryTypes/inventoryTypes.ts | 24 ++++++++++++-------- 3 files changed, 50 insertions(+), 14 deletions(-) diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index 7edee742..23503fb6 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -1120,7 +1120,12 @@ const alignmentSchema = new Schema( const crewShipWeaponSchema2 = new Schema( { - ItemType: String + ItemType: String, + Configs: { type: [ItemConfigSchema], default: undefined }, + UpgradeVer: { type: Number, default: undefined }, + UpgradeType: { type: Number, default: undefined }, + UpgradeFingerprint: { type: String, default: undefined }, + IsNew: { type: Boolean, default: undefined } }, { id: false } ); @@ -1261,11 +1266,11 @@ const inventorySchema = new Schema( CrewShipAmmo: [typeCountSchema], CrewShipWeapons: [crewShipWeaponSchema2], CrewShipWeaponSkins: [upgradeSchema], - - //NPC Crew and weapon - CrewMembers: [Schema.Types.Mixed], + CrewShipSalvagedWeapons: [crewShipWeaponSchema2], CrewShipSalvagedWeaponSkins: [upgradeSchema], - CrewShipSalvagedWeapons: [upgradeSchema], + + //RailJack Crew + CrewMembers: [Schema.Types.Mixed], //Complete Mission\Quests Missions: [missionSchema], @@ -1526,6 +1531,8 @@ export type InventoryDocumentProps = { Drones: Types.DocumentArray; CrewShipWeapons: Types.DocumentArray; CrewShipWeaponSkins: Types.DocumentArray; + CrewShipSalvagedWeapons: Types.DocumentArray; + CrewShipSalvagedWeaponsSkins: Types.DocumentArray; } & { [K in TEquipmentKey]: Types.DocumentArray }; // eslint-disable-next-line @typescript-eslint/ban-types diff --git a/src/services/importService.ts b/src/services/importService.ts index ae16e86d..7033803f 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -12,6 +12,8 @@ import { ICrewShipMemberDatabase, ICrewShipMembersClient, ICrewShipMembersDatabase, + ICrewShipWeaponClient, + ICrewShipWeaponDatabase, IDialogueClient, IDialogueDatabase, IDialogueHistoryClient, @@ -67,6 +69,22 @@ const convertEquipment = (client: IEquipmentClient): IEquipmentDatabase => { }; }; +const convertCrewShipWeapon = (client: ICrewShipWeaponClient): ICrewShipWeaponDatabase => { + const { ItemId, ...rest } = client; + return { + ...rest, + _id: new Types.ObjectId(ItemId.$oid), + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + Configs: client.Configs + ? client.Configs.map(obj => + Object.fromEntries( + Object.entries(obj).filter(([_, value]) => !Array.isArray(value) || value.length > 0) + ) + ) + : [] + }; +}; + const convertWeaponSkin = (client: IWeaponSkinClient): IWeaponSkinDatabase => { const { ItemId, ...rest } = client; return { @@ -185,6 +203,11 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial< replaceArray(db[key], client[key].map(convertUpgrade)); } } + for (const key of ["CrewShipWeapons", "CrewShipSalvagedWeapons"] as const) { + if (client[key] !== undefined) { + replaceArray(db[key], client[key].map(convertCrewShipWeapon)); + } + } for (const key of [ "RawUpgrades", "MiscItems", diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 27758acb..325de479 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -30,9 +30,10 @@ export interface IInventoryDatabase | "Ships" | "WeaponSkins" | "Upgrades" - | "CrewShipSalvagedWeaponSkins" | "CrewShipWeapons" | "CrewShipWeaponSkins" + | "CrewShipSalvagedWeapons" + | "CrewShipSalvagedWeaponSkins" | "AdultOperatorLoadOuts" | "OperatorLoadOuts" | "KahlLoadOuts" @@ -59,9 +60,10 @@ export interface IInventoryDatabase Ships: Types.ObjectId[]; WeaponSkins: IWeaponSkinDatabase[]; Upgrades: IUpgradeDatabase[]; - CrewShipSalvagedWeaponSkins: IUpgradeDatabase[]; CrewShipWeapons: ICrewShipWeaponDatabase[]; CrewShipWeaponSkins: IUpgradeDatabase[]; + CrewShipSalvagedWeapons: ICrewShipWeaponDatabase[]; + CrewShipSalvagedWeaponSkins: IUpgradeDatabase[]; AdultOperatorLoadOuts: IOperatorConfigDatabase[]; OperatorLoadOuts: IOperatorConfigDatabase[]; KahlLoadOuts: IOperatorConfigDatabase[]; @@ -297,10 +299,10 @@ export interface IInventoryClient extends IDailyAffiliations, InventoryClientEqu PersonalTechProjects: IPersonalTechProject[]; PlayerSkills: IPlayerSkills; CrewShipAmmo: ITypeCount[]; - CrewShipSalvagedWeaponSkins: IUpgradeClient[]; CrewShipWeapons: ICrewShipWeaponClient[]; - CrewShipSalvagedWeapons: IEquipmentClient[]; CrewShipWeaponSkins: IUpgradeClient[]; + CrewShipSalvagedWeapons: ICrewShipWeaponClient[]; + CrewShipSalvagedWeaponSkins: IUpgradeClient[]; TradeBannedUntil?: IMongoDate; PlayedParkourTutorial: boolean; SubscribedToEmailsPersonalized: number; @@ -537,16 +539,20 @@ export interface ICrewShipWeapon { } // inventory.CrewShipWeapons -export interface ICrewShipWeaponClient { - ItemType: string; - ItemId: IOid; -} - export interface ICrewShipWeaponDatabase { ItemType: string; + Configs?: IItemConfig[]; + UpgradeVer?: number; + UpgradeType?: string; + UpgradeFingerprint?: string; + IsNew?: boolean; _id: Types.ObjectId; } +export interface ICrewShipWeaponClient extends Omit { + ItemId: IOid; +} + export interface ICrewShipPilotWeapon { PRIMARY_A: IEquipmentSelection; SECONDARY_A: IEquipmentSelection; -- 2.47.2 From 45db693c8ce805669c12a773e2555383c7dd4c40 Mon Sep 17 00:00:00 2001 From: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com> Date: Sun, 23 Mar 2025 19:43:05 +0100 Subject: [PATCH 3/3] CrewShipWeapon is now Equipment --- src/models/inventoryModels/inventoryModel.ts | 31 ++------------------ src/services/importService.ts | 23 --------------- src/services/inventoryService.ts | 19 ++---------- src/types/inventoryTypes/inventoryTypes.ts | 25 ++-------------- 4 files changed, 7 insertions(+), 91 deletions(-) diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index 23503fb6..0ec5b2ea 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -76,7 +76,6 @@ import { IIncentiveState, ISongChallenge, ILibraryPersonalProgress, - ICrewShipWeaponDatabase, IRecentVendorPurchaseDatabase, IVendorPurchaseHistoryEntryDatabase, IVendorPurchaseHistoryEntryClient, @@ -1118,30 +1117,6 @@ const alignmentSchema = new Schema( { _id: false } ); -const crewShipWeaponSchema2 = new Schema( - { - ItemType: String, - Configs: { type: [ItemConfigSchema], default: undefined }, - UpgradeVer: { type: Number, default: undefined }, - UpgradeType: { type: Number, default: undefined }, - UpgradeFingerprint: { type: String, default: undefined }, - IsNew: { type: Boolean, default: undefined } - }, - { id: false } -); - -crewShipWeaponSchema2.virtual("ItemId").get(function () { - return { $oid: this._id.toString() } satisfies IOid; -}); - -crewShipWeaponSchema2.set("toJSON", { - virtuals: true, - transform(_document, returnedObject) { - delete returnedObject._id; - delete returnedObject.__v; - } -}); - const inventorySchema = new Schema( { accountOwnerId: Schema.Types.ObjectId, @@ -1264,9 +1239,9 @@ const inventorySchema = new Schema( //Default RailJack CrewShipAmmo: [typeCountSchema], - CrewShipWeapons: [crewShipWeaponSchema2], + CrewShipWeapons: [EquipmentSchema], CrewShipWeaponSkins: [upgradeSchema], - CrewShipSalvagedWeapons: [crewShipWeaponSchema2], + CrewShipSalvagedWeapons: [EquipmentSchema], CrewShipSalvagedWeaponSkins: [upgradeSchema], //RailJack Crew @@ -1529,9 +1504,7 @@ export type InventoryDocumentProps = { WeaponSkins: Types.DocumentArray; QuestKeys: Types.DocumentArray; Drones: Types.DocumentArray; - CrewShipWeapons: Types.DocumentArray; CrewShipWeaponSkins: Types.DocumentArray; - CrewShipSalvagedWeapons: Types.DocumentArray; CrewShipSalvagedWeaponsSkins: Types.DocumentArray; } & { [K in TEquipmentKey]: Types.DocumentArray }; diff --git a/src/services/importService.ts b/src/services/importService.ts index 7033803f..ae16e86d 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -12,8 +12,6 @@ import { ICrewShipMemberDatabase, ICrewShipMembersClient, ICrewShipMembersDatabase, - ICrewShipWeaponClient, - ICrewShipWeaponDatabase, IDialogueClient, IDialogueDatabase, IDialogueHistoryClient, @@ -69,22 +67,6 @@ const convertEquipment = (client: IEquipmentClient): IEquipmentDatabase => { }; }; -const convertCrewShipWeapon = (client: ICrewShipWeaponClient): ICrewShipWeaponDatabase => { - const { ItemId, ...rest } = client; - return { - ...rest, - _id: new Types.ObjectId(ItemId.$oid), - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - Configs: client.Configs - ? client.Configs.map(obj => - Object.fromEntries( - Object.entries(obj).filter(([_, value]) => !Array.isArray(value) || value.length > 0) - ) - ) - : [] - }; -}; - const convertWeaponSkin = (client: IWeaponSkinClient): IWeaponSkinDatabase => { const { ItemId, ...rest } = client; return { @@ -203,11 +185,6 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial< replaceArray(db[key], client[key].map(convertUpgrade)); } } - for (const key of ["CrewShipWeapons", "CrewShipSalvagedWeapons"] as const) { - if (client[key] !== undefined) { - replaceArray(db[key], client[key].map(convertCrewShipWeapon)); - } - } for (const key of [ "RawUpgrades", "MiscItems", diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index ffa18484..2195f845 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -25,8 +25,7 @@ import { ILibraryDailyTaskInfo, ICalendarProgress, IDroneClient, - IUpgradeClient, - ICrewShipWeaponClient + IUpgradeClient } from "@/src/types/inventoryTypes/inventoryTypes"; import { IGenericUpdate, IUpdateNodeIntrosResponse } from "../types/genericUpdate"; import { IMissionInventoryUpdateRequest, IUpdateChallengeProgressRequest } from "../types/requestTypes"; @@ -426,7 +425,7 @@ export const addItem = async ( } if (typeName in ExportRailjackWeapons) { return { - ...addCrewShipWeapon(inventory, typeName), + ...addEquipment(inventory, ExportRailjackWeapons[typeName].productCategory, typeName), ...occupySlot(inventory, InventorySlot.RJ_COMPONENT_AND_ARMAMENTS, premiumPurchase) }; } @@ -939,20 +938,6 @@ export const addSkin = ( return inventoryChanges; }; -const addCrewShipWeapon = ( - inventory: TInventoryDatabaseDocument, - typeName: string, - inventoryChanges: IInventoryChanges = {} -): IInventoryChanges => { - const index = inventory.CrewShipWeapons.push({ ItemType: typeName, _id: new Types.ObjectId() }) - 1; - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - inventoryChanges.CrewShipWeapons ??= []; - (inventoryChanges.CrewShipWeapons as ICrewShipWeaponClient[]).push( - inventory.CrewShipWeapons[index].toJSON() - ); - return inventoryChanges; -}; - const addCrewShipWeaponSkin = ( inventory: TInventoryDatabaseDocument, typeName: string, diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 325de479..c8b4e3dd 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -30,9 +30,7 @@ export interface IInventoryDatabase | "Ships" | "WeaponSkins" | "Upgrades" - | "CrewShipWeapons" | "CrewShipWeaponSkins" - | "CrewShipSalvagedWeapons" | "CrewShipSalvagedWeaponSkins" | "AdultOperatorLoadOuts" | "OperatorLoadOuts" @@ -60,9 +58,7 @@ export interface IInventoryDatabase Ships: Types.ObjectId[]; WeaponSkins: IWeaponSkinDatabase[]; Upgrades: IUpgradeDatabase[]; - CrewShipWeapons: ICrewShipWeaponDatabase[]; CrewShipWeaponSkins: IUpgradeDatabase[]; - CrewShipSalvagedWeapons: ICrewShipWeaponDatabase[]; CrewShipSalvagedWeaponSkins: IUpgradeDatabase[]; AdultOperatorLoadOuts: IOperatorConfigDatabase[]; OperatorLoadOuts: IOperatorConfigDatabase[]; @@ -114,7 +110,9 @@ export const equipmentKeys = [ "DataKnives", "MechSuits", "CrewShipHarnesses", - "KubrowPets" + "KubrowPets", + "CrewShipWeapons", + "CrewShipSalvagedWeapons" ] as const; export type TEquipmentKey = (typeof equipmentKeys)[number]; @@ -299,9 +297,7 @@ export interface IInventoryClient extends IDailyAffiliations, InventoryClientEqu PersonalTechProjects: IPersonalTechProject[]; PlayerSkills: IPlayerSkills; CrewShipAmmo: ITypeCount[]; - CrewShipWeapons: ICrewShipWeaponClient[]; CrewShipWeaponSkins: IUpgradeClient[]; - CrewShipSalvagedWeapons: ICrewShipWeaponClient[]; CrewShipSalvagedWeaponSkins: IUpgradeClient[]; TradeBannedUntil?: IMongoDate; PlayedParkourTutorial: boolean; @@ -538,21 +534,6 @@ export interface ICrewShipWeapon { PORT_GUNS: ICrewShipPortGuns; } -// inventory.CrewShipWeapons -export interface ICrewShipWeaponDatabase { - ItemType: string; - Configs?: IItemConfig[]; - UpgradeVer?: number; - UpgradeType?: string; - UpgradeFingerprint?: string; - IsNew?: boolean; - _id: Types.ObjectId; -} - -export interface ICrewShipWeaponClient extends Omit { - ItemId: IOid; -} - export interface ICrewShipPilotWeapon { PRIMARY_A: IEquipmentSelection; SECONDARY_A: IEquipmentSelection; -- 2.47.2