fix: free slot when selling or otherwise getting rid of items #1169
@ -7,10 +7,17 @@ import { getRecipe } from "@/src/services/itemDataService";
 | 
			
		||||
import { IOid } from "@/src/types/commonTypes";
 | 
			
		||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
 | 
			
		||||
import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
			
		||||
import { getInventory, updateCurrency, addItem, addMiscItems, addRecipes } from "@/src/services/inventoryService";
 | 
			
		||||
import {
 | 
			
		||||
    getInventory,
 | 
			
		||||
    updateCurrency,
 | 
			
		||||
    addItem,
 | 
			
		||||
    addMiscItems,
 | 
			
		||||
    addRecipes,
 | 
			
		||||
    occupySlot
 | 
			
		||||
} from "@/src/services/inventoryService";
 | 
			
		||||
import { IInventoryChanges } from "@/src/types/purchaseTypes";
 | 
			
		||||
import { IEquipmentClient } from "@/src/types/inventoryTypes/commonInventoryTypes";
 | 
			
		||||
import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes";
 | 
			
		||||
import { IMiscItem, InventorySlot } from "@/src/types/inventoryTypes/inventoryTypes";
 | 
			
		||||
 | 
			
		||||
export interface IClaimCompletedRecipeRequest {
 | 
			
		||||
    RecipeIds: IOid[];
 | 
			
		||||
@ -53,6 +60,7 @@ export const claimCompletedRecipeController: RequestHandler = async (req, res) =
 | 
			
		||||
                    inventoryChanges[category].push(inventory[category][index].toJSON<IEquipmentClient>());
 | 
			
		||||
                    nonMiscItemIngredients.add(item.ItemType);
 | 
			
		||||
 | 
			
		||||
                    occupySlot(inventory, InventorySlot.WEAPONS, false);
 | 
			
		||||
                    inventoryChanges.WeaponBin ??= { Slots: 0 };
 | 
			
		||||
                    inventoryChanges.WeaponBin.Slots -= 1;
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
import { RequestHandler } from "express";
 | 
			
		||||
import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
			
		||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
 | 
			
		||||
import { getInventory, addMiscItems, updateCurrency, addRecipes } from "@/src/services/inventoryService";
 | 
			
		||||
import { getInventory, addMiscItems, updateCurrency, addRecipes, freeUpSlot } from "@/src/services/inventoryService";
 | 
			
		||||
import { IOid } from "@/src/types/commonTypes";
 | 
			
		||||
import {
 | 
			
		||||
    IConsumedSuit,
 | 
			
		||||
@ -10,6 +10,7 @@ import {
 | 
			
		||||
    IInfestedFoundryDatabase,
 | 
			
		||||
    IInventoryClient,
 | 
			
		||||
    IMiscItem,
 | 
			
		||||
    InventorySlot,
 | 
			
		||||
    ITypeCount
 | 
			
		||||
} from "@/src/types/inventoryTypes/inventoryTypes";
 | 
			
		||||
import { ExportMisc, ExportRecipes } from "warframe-public-export-plus";
 | 
			
		||||
@ -264,6 +265,7 @@ export const infestedFoundryController: RequestHandler = async (req, res) => {
 | 
			
		||||
            );
 | 
			
		||||
            const recipeChanges = addInfestedFoundryXP(inventory.InfestedFoundry!, 1600_00);
 | 
			
		||||
            addRecipes(inventory, recipeChanges);
 | 
			
		||||
            freeUpSlot(inventory, InventorySlot.SUITS);
 | 
			
		||||
            await inventory.save();
 | 
			
		||||
            const infestedFoundry = inventory.toJSON<IInventoryClient>().InfestedFoundry!;
 | 
			
		||||
            applyCheatsToInfestedFoundry(infestedFoundry);
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,14 @@
 | 
			
		||||
import { RequestHandler } from "express";
 | 
			
		||||
import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
			
		||||
import { getInventory, addMods, addRecipes, addMiscItems, addConsumables } from "@/src/services/inventoryService";
 | 
			
		||||
import {
 | 
			
		||||
    getInventory,
 | 
			
		||||
    addMods,
 | 
			
		||||
    addRecipes,
 | 
			
		||||
    addMiscItems,
 | 
			
		||||
    addConsumables,
 | 
			
		||||
    freeUpSlot
 | 
			
		||||
} from "@/src/services/inventoryService";
 | 
			
		||||
import { InventorySlot } from "@/src/types/inventoryTypes/inventoryTypes";
 | 
			
		||||
 | 
			
		||||
export const sellController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const payload = JSON.parse(String(req.body)) as ISellRequest;
 | 
			
		||||
@ -34,56 +42,67 @@ export const sellController: RequestHandler = async (req, res) => {
 | 
			
		||||
    if (payload.Items.Suits) {
 | 
			
		||||
        payload.Items.Suits.forEach(sellItem => {
 | 
			
		||||
            inventory.Suits.pull({ _id: sellItem.String });
 | 
			
		||||
            freeUpSlot(inventory, InventorySlot.SUITS);
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    if (payload.Items.LongGuns) {
 | 
			
		||||
        payload.Items.LongGuns.forEach(sellItem => {
 | 
			
		||||
            inventory.LongGuns.pull({ _id: sellItem.String });
 | 
			
		||||
            freeUpSlot(inventory, InventorySlot.WEAPONS);
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    if (payload.Items.Pistols) {
 | 
			
		||||
        payload.Items.Pistols.forEach(sellItem => {
 | 
			
		||||
            inventory.Pistols.pull({ _id: sellItem.String });
 | 
			
		||||
            freeUpSlot(inventory, InventorySlot.WEAPONS);
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    if (payload.Items.Melee) {
 | 
			
		||||
        payload.Items.Melee.forEach(sellItem => {
 | 
			
		||||
            inventory.Melee.pull({ _id: sellItem.String });
 | 
			
		||||
            freeUpSlot(inventory, InventorySlot.WEAPONS);
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    if (payload.Items.SpaceSuits) {
 | 
			
		||||
        payload.Items.SpaceSuits.forEach(sellItem => {
 | 
			
		||||
            inventory.SpaceSuits.pull({ _id: sellItem.String });
 | 
			
		||||
            freeUpSlot(inventory, InventorySlot.SPACESUITS);
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    if (payload.Items.SpaceGuns) {
 | 
			
		||||
        payload.Items.SpaceGuns.forEach(sellItem => {
 | 
			
		||||
            inventory.SpaceGuns.pull({ _id: sellItem.String });
 | 
			
		||||
            freeUpSlot(inventory, InventorySlot.SPACEWEAPONS);
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    if (payload.Items.SpaceMelee) {
 | 
			
		||||
        payload.Items.SpaceMelee.forEach(sellItem => {
 | 
			
		||||
            inventory.SpaceMelee.pull({ _id: sellItem.String });
 | 
			
		||||
            freeUpSlot(inventory, InventorySlot.SPACEWEAPONS);
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    if (payload.Items.Sentinels) {
 | 
			
		||||
        payload.Items.Sentinels.forEach(sellItem => {
 | 
			
		||||
            inventory.Sentinels.pull({ _id: sellItem.String });
 | 
			
		||||
            freeUpSlot(inventory, InventorySlot.SENTINELS);
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    if (payload.Items.SentinelWeapons) {
 | 
			
		||||
        payload.Items.SentinelWeapons.forEach(sellItem => {
 | 
			
		||||
            inventory.SentinelWeapons.pull({ _id: sellItem.String });
 | 
			
		||||
            freeUpSlot(inventory, InventorySlot.SENTINELS);
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    if (payload.Items.OperatorAmps) {
 | 
			
		||||
        payload.Items.OperatorAmps.forEach(sellItem => {
 | 
			
		||||
            inventory.OperatorAmps.pull({ _id: sellItem.String });
 | 
			
		||||
            freeUpSlot(inventory, InventorySlot.AMPS);
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    if (payload.Items.Hoverboards) {
 | 
			
		||||
        payload.Items.Hoverboards.forEach(sellItem => {
 | 
			
		||||
            inventory.Hoverboards.pull({ _id: sellItem.String });
 | 
			
		||||
            freeUpSlot(inventory, InventorySlot.SPACESUITS);
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    if (payload.Items.Drones) {
 | 
			
		||||
 | 
			
		||||
@ -3,10 +3,10 @@ import { getJSONfromString } from "@/src/helpers/stringHelpers";
 | 
			
		||||
import { logger } from "@/src/utils/logger";
 | 
			
		||||
import { RequestHandler } from "express";
 | 
			
		||||
import { getRecipe } from "@/src/services/itemDataService";
 | 
			
		||||
import { addMiscItems, getInventory, updateCurrency } from "@/src/services/inventoryService";
 | 
			
		||||
import { addMiscItems, freeUpSlot, getInventory, updateCurrency } from "@/src/services/inventoryService";
 | 
			
		||||
import { unixTimesInMs } from "@/src/constants/timeConstants";
 | 
			
		||||
import { Types } from "mongoose";
 | 
			
		||||
import { ISpectreLoadout } from "@/src/types/inventoryTypes/inventoryTypes";
 | 
			
		||||
import { InventorySlot, ISpectreLoadout } from "@/src/types/inventoryTypes/inventoryTypes";
 | 
			
		||||
import { toOid } from "@/src/helpers/inventoryHelpers";
 | 
			
		||||
import { ExportWeapons } from "warframe-public-export-plus";
 | 
			
		||||
 | 
			
		||||
@ -53,6 +53,7 @@ export const startRecipeController: RequestHandler = async (req, res) => {
 | 
			
		||||
            pr[category] ??= [];
 | 
			
		||||
            pr[category].push(inventory[category][equipmentIndex]);
 | 
			
		||||
            inventory[category].splice(equipmentIndex, 1);
 | 
			
		||||
            freeUpSlot(inventory, InventorySlot.WEAPONS);
 | 
			
		||||
        } else {
 | 
			
		||||
            addMiscItems(inventory, [
 | 
			
		||||
                {
 | 
			
		||||
 | 
			
		||||
@ -172,7 +172,7 @@ export const getInventory = async (
 | 
			
		||||
    return inventory;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const occupySlot = (
 | 
			
		||||
export const occupySlot = (
 | 
			
		||||
    inventory: TInventoryDatabaseDocument,
 | 
			
		||||
    bin: InventorySlot,
 | 
			
		||||
    premiumPurchase: boolean
 | 
			
		||||
@ -193,6 +193,11 @@ const occupySlot = (
 | 
			
		||||
    return inventoryChanges;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const freeUpSlot = (inventory: TInventoryDatabaseDocument, bin: InventorySlot): void => {
 | 
			
		||||
    // { count: -1, platinum: 0, Slots: 1 }
 | 
			
		||||
    updateSlots(inventory, bin, 1, 0);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const addItem = async (
 | 
			
		||||
    inventory: TInventoryDatabaseDocument,
 | 
			
		||||
    typeName: string,
 | 
			
		||||
 | 
			
		||||
@ -452,9 +452,11 @@ export enum InventorySlot {
 | 
			
		||||
    SUITS = "SuitBin",
 | 
			
		||||
    WEAPONS = "WeaponBin",
 | 
			
		||||
    SPACESUITS = "SpaceSuitBin",
 | 
			
		||||
    SPACEWEAPONS = "SpaceWeaponBin",
 | 
			
		||||
    MECHSUITS = "MechBin",
 | 
			
		||||
    PVE_LOADOUTS = "PveBonusLoadoutBin",
 | 
			
		||||
    SENTINELS = "SentinelBin",
 | 
			
		||||
    AMPS = "OperatorAmpBin",
 | 
			
		||||
    RJ_COMPONENT_AND_ARMAMENTS = "CrewShipSalvageBin"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user