diff --git a/src/controllers/api/claimCompletedRecipeController.ts b/src/controllers/api/claimCompletedRecipeController.ts index 5b4f1acb..b796b53b 100644 --- a/src/controllers/api/claimCompletedRecipeController.ts +++ b/src/controllers/api/claimCompletedRecipeController.ts @@ -118,7 +118,7 @@ export const claimCompletedRecipeController: RequestHandler = async (req, res) = } InventoryChanges = { ...InventoryChanges, - ...(await addItem(inventory, recipe.resultType, recipe.num, false)).InventoryChanges + ...(await addItem(inventory, recipe.resultType, recipe.num, false)) }; await inventory.save(); res.json({ InventoryChanges }); diff --git a/src/controllers/api/giveStartingGearController.ts b/src/controllers/api/giveStartingGearController.ts index b8b09b2e..93fa1452 100644 --- a/src/controllers/api/giveStartingGearController.ts +++ b/src/controllers/api/giveStartingGearController.ts @@ -87,7 +87,7 @@ export const addStartingGear = async ( for (const item of awakeningRewards) { const inventoryDelta = await addItem(inventory, item); - combineInventoryChanges(inventoryChanges, inventoryDelta.InventoryChanges); + combineInventoryChanges(inventoryChanges, inventoryDelta); } inventory.PlayedParkourTutorial = true; diff --git a/src/controllers/api/guildTechController.ts b/src/controllers/api/guildTechController.ts index e1e79e8f..2faf34c7 100644 --- a/src/controllers/api/guildTechController.ts +++ b/src/controllers/api/guildTechController.ts @@ -194,7 +194,7 @@ export const guildTechController: RequestHandler = async (req, res) => { ItemCount: x.ItemCount * -1 })); addMiscItems(inventory, inventoryChanges.MiscItems); - combineInventoryChanges(inventoryChanges, (await addItem(inventory, recipe.resultType)).InventoryChanges); + combineInventoryChanges(inventoryChanges, await addItem(inventory, recipe.resultType)); await inventory.save(); // Not a mistake: This response uses `inventoryChanges` instead of `InventoryChanges`. res.json({ inventoryChanges: inventoryChanges }); diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index 0f2b9ea5..158dec17 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -234,10 +234,10 @@ export const addItem = async ( typeName: string, quantity: number = 1, premiumPurchase: boolean = false -): Promise<{ InventoryChanges: IInventoryChanges }> => { +): Promise => { // Bundles are technically StoreItems but a) they don't have a normal counterpart, and b) they are used in non-StoreItem contexts, e.g. email attachments. if (typeName in ExportBundles) { - return { InventoryChanges: await handleBundleAcqusition(typeName, inventory, quantity) }; + return await handleBundleAcqusition(typeName, inventory, quantity); } // Strict typing @@ -250,9 +250,7 @@ export const addItem = async ( ]; addRecipes(inventory, recipeChanges); return { - InventoryChanges: { - Recipes: recipeChanges - } + Recipes: recipeChanges }; } if (typeName in ExportResources) { @@ -265,9 +263,7 @@ export const addItem = async ( ]; addMiscItems(inventory, miscItemChanges); return { - InventoryChanges: { - MiscItems: miscItemChanges - } + MiscItems: miscItemChanges }; } else if (ExportResources[typeName].productCategory == "FusionTreasures") { const fusionTreasureChanges = [ @@ -279,25 +275,21 @@ export const addItem = async ( ]; addFusionTreasures(inventory, fusionTreasureChanges); return { - InventoryChanges: { - FusionTreasures: fusionTreasureChanges - } + FusionTreasures: fusionTreasureChanges }; } else if (ExportResources[typeName].productCategory == "Ships") { const oid = await createShip(inventory.accountOwnerId, typeName); inventory.Ships.push(oid); return { - InventoryChanges: { - Ships: [ - { - ItemId: { $oid: oid.toString() }, - ItemType: typeName - } - ] - } + Ships: [ + { + ItemId: { $oid: oid.toString() }, + ItemType: typeName + } + ] }; } else if (ExportResources[typeName].productCategory == "CrewShips") { - const inventoryChanges = { + return { ...addCrewShip(inventory, typeName), // fix to unlock railjack modding, item bellow supposed to be obtained from archwing quest // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition @@ -305,8 +297,6 @@ export const addItem = async ( ? addCrewShipHarness(inventory, "/Lotus/Types/Game/CrewShip/RailJack/DefaultHarness") : {}) }; - - return { InventoryChanges: inventoryChanges }; } else if (ExportResources[typeName].productCategory == "ShipDecorations") { const changes = [ { @@ -316,9 +306,7 @@ export const addItem = async ( ]; addShipDecorations(inventory, changes); return { - InventoryChanges: { - ShipDecorations: changes - } + ShipDecorations: changes }; } else if (ExportResources[typeName].productCategory == "KubrowPetEggs") { const changes: IKubrowPetEggClient[] = []; @@ -339,9 +327,7 @@ export const addItem = async ( }); } return { - InventoryChanges: { - KubrowPetEggs: changes - } + KubrowPetEggs: changes }; } else { throw new Error(`unknown product category: ${ExportResources[typeName].productCategory}`); @@ -349,14 +335,14 @@ export const addItem = async ( } if (typeName in ExportCustoms) { if (ExportCustoms[typeName].productCategory == "CrewShipWeaponSkins") { - return { InventoryChanges: addCrewShipWeaponSkin(inventory, typeName) }; + return addCrewShipWeaponSkin(inventory, typeName); } else { - return { InventoryChanges: addSkin(inventory, typeName) }; + return addSkin(inventory, typeName); } } if (typeName in ExportFlavour) { const inventoryChanges = addCustomization(inventory, typeName); - return { InventoryChanges: inventoryChanges }; + return inventoryChanges; } if (typeName in ExportUpgrades || typeName in ExportArcanes) { const changes = [ @@ -367,9 +353,7 @@ export const addItem = async ( ]; addMods(inventory, changes); return { - InventoryChanges: { - RawUpgrades: changes - } + RawUpgrades: changes }; } if (typeName in ExportGear) { @@ -381,9 +365,7 @@ export const addItem = async ( ]; addConsumables(inventory, consumablesChanges); return { - InventoryChanges: { - Consumables: consumablesChanges - } + Consumables: consumablesChanges }; } if (typeName in ExportWeapons) { @@ -426,14 +408,12 @@ export const addItem = async ( ); if (weapon.additionalItems) { for (const item of weapon.additionalItems) { - combineInventoryChanges(inventoryChanges, (await addItem(inventory, item, 1)).InventoryChanges); + combineInventoryChanges(inventoryChanges, await addItem(inventory, item, 1)); } } return { - InventoryChanges: { - ...inventoryChanges, - ...occupySlot(inventory, InventorySlot.WEAPONS, premiumPurchase) - } + ...inventoryChanges, + ...occupySlot(inventory, InventorySlot.WEAPONS, premiumPurchase) }; } else { // Modular weapon parts @@ -445,36 +425,28 @@ export const addItem = async ( ]; addMiscItems(inventory, miscItemChanges); return { - InventoryChanges: { - MiscItems: miscItemChanges - } + MiscItems: miscItemChanges }; } } if (typeName in ExportRailjackWeapons) { return { - InventoryChanges: { - ...addCrewShipWeapon(inventory, typeName), - ...occupySlot(inventory, InventorySlot.RJ_COMPONENT_AND_ARMAMENTS, premiumPurchase) - } + ...addCrewShipWeapon(inventory, typeName), + ...occupySlot(inventory, InventorySlot.RJ_COMPONENT_AND_ARMAMENTS, premiumPurchase) }; } if (typeName in ExportMisc.creditBundles) { const creditsTotal = ExportMisc.creditBundles[typeName] * quantity; inventory.RegularCredits += creditsTotal; return { - InventoryChanges: { - RegularCredits: creditsTotal - } + RegularCredits: creditsTotal }; } if (typeName in ExportFusionBundles) { const fusionPointsTotal = ExportFusionBundles[typeName].fusionPoints * quantity; inventory.FusionPoints += fusionPointsTotal; return { - InventoryChanges: { - FusionPoints: fusionPointsTotal - } + FusionPoints: fusionPointsTotal }; } if (typeName in ExportKeys) { @@ -483,8 +455,8 @@ export const addItem = async ( if (key.chainStages) { const key = addQuestKey(inventory, { ItemType: typeName }); - if (!key) return { InventoryChanges: {} }; - return { InventoryChanges: { QuestKeys: [key] } }; + if (!key) return {}; + return { QuestKeys: [key] }; } else { const key = { ItemType: typeName, ItemCount: quantity }; @@ -494,19 +466,14 @@ export const addItem = async ( } else { inventory.LevelKeys.push(key); } - return { InventoryChanges: { LevelKeys: [key] } }; + return { LevelKeys: [key] }; } } if (typeName in ExportDrones) { - const inventoryChanges = addDrone(inventory, typeName); - return { - InventoryChanges: inventoryChanges - }; + return addDrone(inventory, typeName); } if (typeName in ExportEmailItems) { - return { - InventoryChanges: await addEmailItem(inventory, typeName) - }; + return await addEmailItem(inventory, typeName); } // Path-based duck typing @@ -515,42 +482,36 @@ export const addItem = async ( switch (typeName.substr(1).split("/")[2]) { default: { return { - InventoryChanges: { - ...addPowerSuit( - inventory, - typeName, - {}, - premiumPurchase ? EquipmentFeatures.DOUBLE_CAPACITY : undefined - ), - ...occupySlot(inventory, InventorySlot.SUITS, premiumPurchase) - } + ...addPowerSuit( + inventory, + typeName, + {}, + premiumPurchase ? EquipmentFeatures.DOUBLE_CAPACITY : undefined + ), + ...occupySlot(inventory, InventorySlot.SUITS, premiumPurchase) }; } case "Archwing": { inventory.ArchwingEnabled = true; return { - InventoryChanges: { - ...addSpaceSuit( - inventory, - typeName, - {}, - premiumPurchase ? EquipmentFeatures.DOUBLE_CAPACITY : undefined - ), - ...occupySlot(inventory, InventorySlot.SPACESUITS, premiumPurchase) - } + ...addSpaceSuit( + inventory, + typeName, + {}, + premiumPurchase ? EquipmentFeatures.DOUBLE_CAPACITY : undefined + ), + ...occupySlot(inventory, InventorySlot.SPACESUITS, premiumPurchase) }; } case "EntratiMech": { return { - InventoryChanges: { - ...addMechSuit( - inventory, - typeName, - {}, - premiumPurchase ? EquipmentFeatures.DOUBLE_CAPACITY : undefined - ), - ...occupySlot(inventory, InventorySlot.MECHSUITS, premiumPurchase) - } + ...addMechSuit( + inventory, + typeName, + {}, + premiumPurchase ? EquipmentFeatures.DOUBLE_CAPACITY : undefined + ), + ...occupySlot(inventory, InventorySlot.MECHSUITS, premiumPurchase) }; } } @@ -568,9 +529,7 @@ export const addItem = async ( ]; addMods(inventory, changes); return { - InventoryChanges: { - RawUpgrades: changes - } + RawUpgrades: changes }; } break; @@ -587,9 +546,7 @@ export const addItem = async ( ]; addMiscItems(inventory, miscItemChanges); return { - InventoryChanges: { - MiscItems: miscItemChanges - } + MiscItems: miscItemChanges }; } else { const changes = [ @@ -600,9 +557,7 @@ export const addItem = async ( ]; addMods(inventory, changes); return { - InventoryChanges: { - RawUpgrades: changes - } + RawUpgrades: changes }; } } @@ -613,9 +568,7 @@ export const addItem = async ( case "Types": switch (typeName.substr(1).split("/")[2]) { case "Sentinels": { - return { - InventoryChanges: addSentinel(inventory, typeName, premiumPurchase) - }; + return addSentinel(inventory, typeName, premiumPurchase); } case "Game": { if (typeName.substr(1).split("/")[3] == "Projections") { @@ -629,9 +582,7 @@ export const addItem = async ( addMiscItems(inventory, miscItemChanges); inventory.HasOwnedVoidProjectionsPreviously = true; return { - InventoryChanges: { - MiscItems: miscItemChanges - } + MiscItems: miscItemChanges }; } break; @@ -639,27 +590,23 @@ export const addItem = async ( case "NeutralCreatures": { const horseIndex = inventory.Horses.push({ ItemType: typeName }); return { - InventoryChanges: { - Horses: [inventory.Horses[horseIndex - 1].toJSON()] - } + Horses: [inventory.Horses[horseIndex - 1].toJSON()] }; } case "Recipes": { inventory.MiscItems.push({ ItemType: typeName, ItemCount: quantity }); return { - InventoryChanges: { - MiscItems: [ - { - ItemType: typeName, - ItemCount: quantity - } - ] - } + MiscItems: [ + { + ItemType: typeName, + ItemCount: quantity + } + ] }; } case "Vehicles": if (typeName == "/Lotus/Types/Vehicles/Motorcycle/MotorcyclePowerSuit") { - return { InventoryChanges: addMotorcycle(inventory, typeName) }; + return addMotorcycle(inventory, typeName); } break; } @@ -680,7 +627,7 @@ export const addItems = async ( } else { inventoryDelta = await addItem(inventory, item.ItemType, item.ItemCount, true); } - combineInventoryChanges(inventoryChanges, inventoryDelta.InventoryChanges); + combineInventoryChanges(inventoryChanges, inventoryDelta); } return inventoryChanges; }; @@ -1393,7 +1340,7 @@ export const addKeyChainItems = async ( for (const item of nonStoreItems) { const inventoryChangesDelta = await addItem(inventory, item); - combineInventoryChanges(inventoryChanges, inventoryChangesDelta.InventoryChanges); + combineInventoryChanges(inventoryChanges, inventoryChangesDelta); } return inventoryChanges; diff --git a/src/services/purchaseService.ts b/src/services/purchaseService.ts index 72e1701c..50720d6c 100644 --- a/src/services/purchaseService.ts +++ b/src/services/purchaseService.ts @@ -333,7 +333,7 @@ export const handleStoreItemAcquisition = async ( } switch (storeCategory) { default: { - purchaseResponse = await addItem(inventory, internalName, quantity, true); + purchaseResponse = { InventoryChanges: await addItem(inventory, internalName, quantity, true) }; break; } case "Types": @@ -418,10 +418,7 @@ const handleBoosterPackPurchase = async ( if (typeName == "/Lotus/Types/BoosterPacks/1999StickersPackEchoesArchimedeaFixed") { for (const result of pack.components) { purchaseResponse.BoosterPackItems += toStoreItem(result.Item) + ',{"lvl":0};'; - combineInventoryChanges( - purchaseResponse.InventoryChanges, - (await addItem(inventory, result.Item, 1)).InventoryChanges - ); + combineInventoryChanges(purchaseResponse.InventoryChanges, await addItem(inventory, result.Item, 1)); } } else { for (let i = 0; i != quantity; ++i) { @@ -432,7 +429,7 @@ const handleBoosterPackPurchase = async ( purchaseResponse.BoosterPackItems += toStoreItem(result.Item) + ',{"lvl":0};'; combineInventoryChanges( purchaseResponse.InventoryChanges, - (await addItem(inventory, result.Item, 1)).InventoryChanges + await addItem(inventory, result.Item, 1) ); } } @@ -468,7 +465,7 @@ const handleTypesPurchase = async ( logger.debug(`type category ${typeCategory}`); switch (typeCategory) { default: - return await addItem(inventory, typesName, quantity); + return { InventoryChanges: await addItem(inventory, typesName, quantity) }; case "BoosterPacks": return handleBoosterPackPurchase(typesName, inventory, quantity); case "SlotItems":