From c3a9b42fa2443f83bc7a7050b8c371317d60bd5f Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 16 Mar 2025 04:33:48 -0700 Subject: [PATCH] fix: update slots where addEquipment is used (#1207) Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1207 --- src/controllers/api/focusController.ts | 5 +-- .../api/modularWeaponCraftingController.ts | 10 ++++-- src/services/inventoryService.ts | 32 +++++++++++++++++++ src/types/inventoryTypes/inventoryTypes.ts | 3 +- 4 files changed, 45 insertions(+), 5 deletions(-) diff --git a/src/controllers/api/focusController.ts b/src/controllers/api/focusController.ts index 29c92bf2..d65e60aa 100644 --- a/src/controllers/api/focusController.ts +++ b/src/controllers/api/focusController.ts @@ -1,7 +1,7 @@ import { RequestHandler } from "express"; import { getAccountIdForRequest } from "@/src/services/loginService"; -import { getInventory, addMiscItems, addEquipment } from "@/src/services/inventoryService"; -import { IMiscItem, TFocusPolarity, TEquipmentKey } from "@/src/types/inventoryTypes/inventoryTypes"; +import { getInventory, addMiscItems, addEquipment, occupySlot } from "@/src/services/inventoryService"; +import { IMiscItem, TFocusPolarity, TEquipmentKey, InventorySlot } from "@/src/types/inventoryTypes/inventoryTypes"; import { logger } from "@/src/utils/logger"; import { ExportFocusUpgrades } from "warframe-public-export-plus"; import { IEquipmentClient } from "@/src/types/inventoryTypes/commonInventoryTypes"; @@ -105,6 +105,7 @@ export const focusController: RequestHandler = async (req, res) => { ]; const inventory = await getInventory(accountId); const inventoryChanges = addEquipment(inventory, "OperatorAmps", request.StartingWeaponType, parts); + occupySlot(inventory, InventorySlot.AMPS, false); await inventory.save(); res.json((inventoryChanges.OperatorAmps as IEquipmentClient[])[0]); break; diff --git a/src/controllers/api/modularWeaponCraftingController.ts b/src/controllers/api/modularWeaponCraftingController.ts index 1f041f12..37b400fb 100644 --- a/src/controllers/api/modularWeaponCraftingController.ts +++ b/src/controllers/api/modularWeaponCraftingController.ts @@ -7,9 +7,12 @@ import { updateCurrency, addEquipment, addMiscItems, - applyDefaultUpgrades + applyDefaultUpgrades, + occupySlot, + productCategoryToInventoryBin } from "@/src/services/inventoryService"; import { ExportWeapons } from "warframe-public-export-plus"; +import { IInventoryChanges } from "@/src/types/purchaseTypes"; const modularWeaponTypes: Record = { "/Lotus/Weapons/SolarisUnited/Primary/LotusModularPrimary": "LongGuns", @@ -47,7 +50,10 @@ export const modularWeaponCraftingController: RequestHandler = async (req, res) const configs = applyDefaultUpgrades(inventory, ExportWeapons[data.Parts[0]]?.defaultUpgrades); // Give weapon - const inventoryChanges = addEquipment(inventory, category, data.WeaponType, data.Parts, {}, { Configs: configs }); + const inventoryChanges: IInventoryChanges = { + ...addEquipment(inventory, category, data.WeaponType, data.Parts, {}, { Configs: configs }), + ...occupySlot(inventory, productCategoryToInventoryBin(category)!, false) + }; // Remove credits & parts const miscItemChanges = []; diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index 0408115c..9c087f89 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -172,6 +172,38 @@ export const getInventory = async ( return inventory; }; +export const productCategoryToInventoryBin = (productCategory: string): InventorySlot | undefined => { + switch (productCategory) { + case "Suits": + return InventorySlot.SUITS; + case "Pistols": + case "LongGuns": + case "Melee": + return InventorySlot.WEAPONS; + case "Sentinels": + case "SentinelWeapons": + case "KubrowPets": + case "MoaPets": + return InventorySlot.SENTINELS; + case "SpaceSuits": + case "Hoverboards": + return InventorySlot.SPACESUITS; + case "SpaceGuns": + case "SpaceMelee": + return InventorySlot.SPACEWEAPONS; + case "OperatorAmps": + return InventorySlot.AMPS; + case "CrewShipWeapons": + case "CrewShipWeaponSkins": + return InventorySlot.RJ_COMPONENT_AND_ARMAMENTS; + case "MechSuits": + return InventorySlot.MECHSUITS; + case "CrewMembers": + return InventorySlot.CREWMEMBERS; + } + return undefined; +}; + export const occupySlot = ( inventory: TInventoryDatabaseDocument, bin: InventorySlot, diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 2aee2a67..4a06de67 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -459,7 +459,8 @@ export enum InventorySlot { PVE_LOADOUTS = "PveBonusLoadoutBin", SENTINELS = "SentinelBin", AMPS = "OperatorAmpBin", - RJ_COMPONENT_AND_ARMAMENTS = "CrewShipSalvageBin" + RJ_COMPONENT_AND_ARMAMENTS = "CrewShipSalvageBin", + CREWMEMBERS = "CrewMemberBin" } export interface ISlots {