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