diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index 52db89c0..958ac984 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -997,7 +997,7 @@ const inventorySchema = new Schema( ShipDecorations: [typeCountSchema], //Railjack/Components(https://warframe.fandom.com/wiki/Railjack/Components) - CrewShipRawSalvage: [Schema.Types.Mixed], + CrewShipRawSalvage: [typeCountSchema], //Default RailJack CrewShipAmmo: [typeCountSchema], diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index 289b0e6d..59174b5b 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -928,6 +928,37 @@ export const addConsumables = (inventory: TInventoryDatabaseDocument, itemsArray }); }; +export const addCrewShipRawSalvage = ( + inventory: TInventoryDatabaseDocument, + itemsArray: ITypeCount[] | undefined +): void => { + const { CrewShipRawSalvage } = inventory; + + itemsArray?.forEach(({ ItemCount, ItemType }) => { + const itemIndex = CrewShipRawSalvage.findIndex(i => i.ItemType === ItemType); + + if (itemIndex !== -1) { + CrewShipRawSalvage[itemIndex].ItemCount += ItemCount; + } else { + CrewShipRawSalvage.push({ ItemCount, ItemType }); + } + }); +}; + +export const addCrewShipAmmo = (inventory: TInventoryDatabaseDocument, itemsArray: ITypeCount[] | undefined): void => { + const { CrewShipAmmo } = inventory; + + itemsArray?.forEach(({ ItemCount, ItemType }) => { + const itemIndex = CrewShipAmmo.findIndex(i => i.ItemType === ItemType); + + if (itemIndex !== -1) { + CrewShipAmmo[itemIndex].ItemCount += ItemCount; + } else { + CrewShipAmmo.push({ ItemCount, ItemType }); + } + }); +}; + export const addRecipes = (inventory: TInventoryDatabaseDocument, itemsArray: ITypeCount[] | undefined): void => { const { Recipes } = inventory; diff --git a/src/services/missionInventoryUpdateService.ts b/src/services/missionInventoryUpdateService.ts index 3e9a944e..f69416db 100644 --- a/src/services/missionInventoryUpdateService.ts +++ b/src/services/missionInventoryUpdateService.ts @@ -6,6 +6,8 @@ import { equipmentKeys, IInventoryDatabase, TEquipmentKey } from "@/src/types/in import { addChallenges, addConsumables, + addCrewShipAmmo, + addCrewShipRawSalvage, addFocusXpIncreases, addFusionTreasures, addGearExpByCategory, @@ -122,6 +124,7 @@ export const addMissionInventoryUpdates = ( addMods(inventory, value); break; case "MiscItems": + case "BonusMiscItems": addMiscItems(inventory, value); break; case "Consumables": @@ -136,6 +139,12 @@ export const addMissionInventoryUpdates = ( case "FusionTreasures": addFusionTreasures(inventory, value); break; + case "CrewShipRawSalvage": + addCrewShipRawSalvage(inventory, value); + break; + case "CrewShipAmmo": + addCrewShipAmmo(inventory, value); + break; case "FusionBundles": { let fusionPoints = 0; for (const fusionBundle of value) { @@ -195,7 +204,6 @@ export const addMissionRewards = async ( ) => { if (!rewardInfo) { logger.warn("no reward info provided"); - return; } //TODO: check double reward merging @@ -287,9 +295,9 @@ function getLevelCreditRewards(nodeName: string): number { //TODO: get dark sektor fixed credit rewards and railjack bonus } -function getRandomMissionDrops(RewardInfo: IRewardInfo): IRngResult[] { +function getRandomMissionDrops(RewardInfo: IRewardInfo | undefined): IRngResult[] { const drops: IRngResult[] = []; - if (RewardInfo.node in ExportRegions) { + if (RewardInfo && RewardInfo.node in ExportRegions) { const region = ExportRegions[RewardInfo.node]; const rewardManifests = region.rewardManifests ?? []; diff --git a/src/types/requestTypes.ts b/src/types/requestTypes.ts index 73fb8d73..19653e02 100644 --- a/src/types/requestTypes.ts +++ b/src/types/requestTypes.ts @@ -35,18 +35,23 @@ export interface IUpdateChallengeProgressRequest { } export type IMissionInventoryUpdateRequest = { + MiscItems?: ITypeCount[]; + Recipes?: ITypeCount[]; + FusionBundles?: ITypeCount[]; + Consumables?: ITypeCount[]; + FusionBundels?: ITypeCount[]; + CrewShipRawSalvage?: ITypeCount[]; + CrewShipAmmo?: ITypeCount[]; + BonusMiscItems?: ITypeCount[]; + AffiliationChanges?: IAffiliationChange[]; crossPlaySetting?: string; rewardsMultiplier?: number; GoalTag: string; LevelKeyName: string; ActiveBoosters?: IBooster[]; - FusionBundles?: ITypeCount[]; RawUpgrades?: IRawUpgrade[]; - MiscItems?: ITypeCount[]; - Consumables?: ITypeCount[]; FusionTreasures?: IFusionTreasure[]; - Recipes?: ITypeCount[]; QuestKeys?: Omit[]; RegularCredits?: number; MissionFailed: boolean;