forked from OpenWF/SpaceNinjaServer
chore: do addItem on inventory document, not accountId (#699)
This commit is contained in:
parent
7a6ffd94dc
commit
74ed098692
@ -80,11 +80,12 @@ export const claimCompletedRecipeController: RequestHandler = async (req, res) =
|
||||
...(await updateCurrencyByAccountId(recipe.skipBuildTimePrice, true, accountId))
|
||||
};
|
||||
}
|
||||
res.json({
|
||||
InventoryChanges: {
|
||||
const inventory = await getInventory(accountId);
|
||||
InventoryChanges = {
|
||||
...InventoryChanges,
|
||||
...(await addItem(accountId, recipe.resultType, recipe.num)).InventoryChanges
|
||||
}
|
||||
});
|
||||
...(await addItem(inventory, recipe.resultType, recipe.num)).InventoryChanges
|
||||
};
|
||||
await inventory.save();
|
||||
res.json({ InventoryChanges });
|
||||
}
|
||||
};
|
||||
|
@ -4,6 +4,7 @@ import { getInventory, addMiscItems, addEquipment } from "@/src/services/invento
|
||||
import { IMiscItem, TFocusPolarity, TEquipmentKey } 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";
|
||||
|
||||
export const focusController: RequestHandler = async (req, res) => {
|
||||
const accountId = await getAccountIdForRequest(req);
|
||||
@ -102,8 +103,10 @@ export const focusController: RequestHandler = async (req, res) => {
|
||||
"/Lotus/Weapons/Sentients/OperatorAmplifiers/SentTrainingAmplifier/SentAmpTrainingChassis",
|
||||
"/Lotus/Weapons/Sentients/OperatorAmplifiers/SentTrainingAmplifier/SentAmpTrainingBarrel"
|
||||
];
|
||||
const result = await addEquipment("OperatorAmps", request.StartingWeaponType, accountId, parts);
|
||||
res.json(result);
|
||||
const inventory = await getInventory(accountId);
|
||||
const inventoryChanges = addEquipment(inventory, "OperatorAmps", request.StartingWeaponType, parts);
|
||||
await inventory.save();
|
||||
res.json((inventoryChanges.OperatorAmps as IEquipmentClient[])[0]);
|
||||
break;
|
||||
}
|
||||
case FocusOperation.UnbindUpgrade: {
|
||||
|
@ -1,5 +1,5 @@
|
||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
||||
import { updateCurrencyByAccountId } from "@/src/services/inventoryService";
|
||||
import { getInventory, updateCurrency } from "@/src/services/inventoryService";
|
||||
import { RequestHandler } from "express";
|
||||
import { updateSlots } from "@/src/services/inventoryService";
|
||||
import { InventorySlot } from "@/src/types/inventoryTypes/inventoryTypes";
|
||||
@ -26,8 +26,10 @@ export const inventorySlotsController: RequestHandler = async (req, res) => {
|
||||
|
||||
//TODO: check which slot was purchased because pvpBonus is also possible
|
||||
|
||||
const currencyChanges = await updateCurrencyByAccountId(20, true, accountId);
|
||||
await updateSlots(accountId, InventorySlot.PVE_LOADOUTS, 1, 1);
|
||||
const inventory = await getInventory(accountId);
|
||||
const currencyChanges = updateCurrency(inventory, 20, true);
|
||||
updateSlots(inventory, InventorySlot.PVE_LOADOUTS, 1, 1);
|
||||
await inventory.save();
|
||||
|
||||
//console.log({ InventoryChanges: currencyChanges }, " added loadout changes:");
|
||||
|
||||
|
@ -34,9 +34,10 @@ export const modularWeaponCraftingController: RequestHandler = async (req, res)
|
||||
throw new Error(`unknown modular weapon type: ${data.WeaponType}`);
|
||||
}
|
||||
const category = modularWeaponTypes[data.WeaponType];
|
||||
const inventory = await getInventory(accountId);
|
||||
|
||||
// Give weapon
|
||||
const weapon = await addEquipment(category, data.WeaponType, accountId, data.Parts);
|
||||
const weapon = addEquipment(inventory, category, data.WeaponType, data.Parts);
|
||||
|
||||
// Remove credits & parts
|
||||
const miscItemChanges = [];
|
||||
@ -46,7 +47,6 @@ export const modularWeaponCraftingController: RequestHandler = async (req, res)
|
||||
ItemCount: -1
|
||||
});
|
||||
}
|
||||
const inventory = await getInventory(accountId);
|
||||
const currencyChanges = updateCurrency(
|
||||
inventory,
|
||||
category == "Hoverboards" || category == "MoaPets" ? 5000 : 4000,
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
||||
import { ItemType, toAddItemRequest } from "@/src/helpers/customHelpers/addItemHelpers";
|
||||
import { getWeaponType } from "@/src/services/itemDataService";
|
||||
import { addPowerSuit, addEquipment } from "@/src/services/inventoryService";
|
||||
import { addPowerSuit, addEquipment, getInventory } from "@/src/services/inventoryService";
|
||||
import { RequestHandler } from "express";
|
||||
|
||||
const addItemController: RequestHandler = async (req, res) => {
|
||||
@ -10,14 +10,18 @@ const addItemController: RequestHandler = async (req, res) => {
|
||||
|
||||
switch (request.type) {
|
||||
case ItemType.Powersuit: {
|
||||
const powersuit = await addPowerSuit(request.InternalName, accountId);
|
||||
res.json(powersuit);
|
||||
const inventory = await getInventory(accountId);
|
||||
const inventoryChanges = addPowerSuit(inventory, request.InternalName);
|
||||
await inventory.save();
|
||||
res.json(inventoryChanges);
|
||||
return;
|
||||
}
|
||||
case ItemType.Weapon: {
|
||||
const inventory = await getInventory(accountId);
|
||||
const weaponType = getWeaponType(request.InternalName);
|
||||
const weapon = await addEquipment(weaponType, request.InternalName, accountId);
|
||||
res.json(weapon);
|
||||
const inventoryChanges = addEquipment(inventory, weaponType, request.InternalName);
|
||||
await inventory.save();
|
||||
res.json(inventoryChanges);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
@ -105,13 +105,12 @@ export const getInventory = async (accountOwnerId: string): Promise<TInventoryDa
|
||||
};
|
||||
|
||||
export const addItem = async (
|
||||
accountId: string,
|
||||
inventory: TInventoryDatabaseDocument,
|
||||
typeName: string,
|
||||
quantity: number = 1
|
||||
): Promise<{ InventoryChanges: IInventoryChanges }> => {
|
||||
// Strict typing
|
||||
if (typeName in ExportRecipes) {
|
||||
const inventory = await getInventory(accountId);
|
||||
const recipeChanges = [
|
||||
{
|
||||
ItemType: typeName,
|
||||
@ -119,7 +118,6 @@ export const addItem = async (
|
||||
} satisfies ITypeCount
|
||||
];
|
||||
addRecipes(inventory, recipeChanges);
|
||||
await inventory.save();
|
||||
return {
|
||||
InventoryChanges: {
|
||||
Recipes: recipeChanges
|
||||
@ -127,11 +125,9 @@ export const addItem = async (
|
||||
};
|
||||
}
|
||||
if (typeName in ExportResources) {
|
||||
const inventory = await getInventory(accountId);
|
||||
if (ExportResources[typeName].productCategory == "Ships") {
|
||||
const oid = await createShip(new Types.ObjectId(accountId), typeName);
|
||||
const oid = await createShip(inventory.accountOwnerId, typeName);
|
||||
inventory.Ships.push(oid);
|
||||
await inventory.save();
|
||||
return {
|
||||
InventoryChanges: {
|
||||
Ships: [
|
||||
@ -143,11 +139,8 @@ export const addItem = async (
|
||||
}
|
||||
};
|
||||
} else if (ExportResources[typeName].productCategory == "CrewShips") {
|
||||
return {
|
||||
InventoryChanges: {
|
||||
CrewShips: [await addCrewShip(typeName, accountId)]
|
||||
}
|
||||
};
|
||||
const inventoryChanges = addCrewShip(inventory, typeName);
|
||||
return { InventoryChanges: inventoryChanges };
|
||||
} else {
|
||||
const miscItemChanges = [
|
||||
{
|
||||
@ -156,7 +149,6 @@ export const addItem = async (
|
||||
} satisfies IMiscItem
|
||||
];
|
||||
addMiscItems(inventory, miscItemChanges);
|
||||
await inventory.save();
|
||||
return {
|
||||
InventoryChanges: {
|
||||
MiscItems: miscItemChanges
|
||||
@ -165,21 +157,14 @@ export const addItem = async (
|
||||
}
|
||||
}
|
||||
if (typeName in ExportCustoms) {
|
||||
return {
|
||||
InventoryChanges: {
|
||||
WeaponSkins: [await addSkin(typeName, accountId)]
|
||||
}
|
||||
};
|
||||
const inventoryChanges = addSkin(inventory, typeName);
|
||||
return { InventoryChanges: inventoryChanges };
|
||||
}
|
||||
if (typeName in ExportFlavour) {
|
||||
return {
|
||||
InventoryChanges: {
|
||||
FlavourItems: [await addCustomization(typeName, accountId)]
|
||||
}
|
||||
};
|
||||
const inventoryChanges = addCustomization(inventory, typeName);
|
||||
return { InventoryChanges: inventoryChanges };
|
||||
}
|
||||
if (typeName in ExportUpgrades || typeName in ExportArcanes) {
|
||||
const inventory = await getInventory(accountId);
|
||||
const changes = [
|
||||
{
|
||||
ItemType: typeName,
|
||||
@ -187,7 +172,6 @@ export const addItem = async (
|
||||
}
|
||||
];
|
||||
addMods(inventory, changes);
|
||||
await inventory.save();
|
||||
return {
|
||||
InventoryChanges: {
|
||||
RawUpgrades: changes
|
||||
@ -195,7 +179,6 @@ export const addItem = async (
|
||||
};
|
||||
}
|
||||
if (typeName in ExportGear) {
|
||||
const inventory = await getInventory(accountId);
|
||||
const consumablesChanges = [
|
||||
{
|
||||
ItemType: typeName,
|
||||
@ -203,7 +186,6 @@ export const addItem = async (
|
||||
} satisfies IConsumable
|
||||
];
|
||||
addConsumables(inventory, consumablesChanges);
|
||||
await inventory.save();
|
||||
return {
|
||||
InventoryChanges: {
|
||||
Consumables: consumablesChanges
|
||||
@ -216,8 +198,8 @@ export const addItem = async (
|
||||
case "Powersuits":
|
||||
switch (typeName.substr(1).split("/")[2]) {
|
||||
default: {
|
||||
const inventoryChanges = await addPowerSuit(typeName, accountId);
|
||||
await updateSlots(accountId, InventorySlot.SUITS, 0, 1);
|
||||
const inventoryChanges = addPowerSuit(inventory, typeName);
|
||||
updateSlots(inventory, InventorySlot.SUITS, 0, 1);
|
||||
return {
|
||||
InventoryChanges: {
|
||||
...inventoryChanges,
|
||||
@ -230,22 +212,22 @@ export const addItem = async (
|
||||
};
|
||||
}
|
||||
case "Archwing": {
|
||||
const spaceSuit = await addSpaceSuit(typeName, accountId);
|
||||
await updateSlots(accountId, InventorySlot.SPACESUITS, 0, 1);
|
||||
const inventoryChanges = addSpaceSuit(inventory, typeName);
|
||||
updateSlots(inventory, InventorySlot.SPACESUITS, 0, 1);
|
||||
return {
|
||||
InventoryChanges: {
|
||||
...inventoryChanges,
|
||||
SpaceSuitBin: {
|
||||
count: 1,
|
||||
platinum: 0,
|
||||
Slots: -1
|
||||
},
|
||||
SpaceSuits: [spaceSuit]
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
case "EntratiMech": {
|
||||
const inventoryChanges = await addMechSuit(typeName, accountId);
|
||||
await updateSlots(accountId, InventorySlot.MECHSUITS, 0, 1);
|
||||
const inventoryChanges = addMechSuit(inventory, typeName);
|
||||
updateSlots(inventory, InventorySlot.MECHSUITS, 0, 1);
|
||||
return {
|
||||
InventoryChanges: {
|
||||
...inventoryChanges,
|
||||
@ -261,18 +243,17 @@ export const addItem = async (
|
||||
break;
|
||||
case "Weapons": {
|
||||
const weaponType = getWeaponType(typeName);
|
||||
const weapon = await addEquipment(weaponType, typeName, accountId);
|
||||
await updateSlots(accountId, InventorySlot.WEAPONS, 0, 1);
|
||||
const inventoryChanges = addEquipment(inventory, weaponType, typeName);
|
||||
updateSlots(inventory, InventorySlot.WEAPONS, 0, 1);
|
||||
return {
|
||||
InventoryChanges: {
|
||||
WeaponBin: { count: 1, platinum: 0, Slots: -1 },
|
||||
[weaponType]: [weapon]
|
||||
...inventoryChanges,
|
||||
WeaponBin: { count: 1, platinum: 0, Slots: -1 }
|
||||
}
|
||||
};
|
||||
}
|
||||
case "Objects": {
|
||||
// /Lotus/Objects/Tenno/Props/TnoLisetTextProjector (Note Beacon)
|
||||
const inventory = await getInventory(accountId);
|
||||
const changes = [
|
||||
{
|
||||
ItemType: typeName,
|
||||
@ -280,7 +261,6 @@ export const addItem = async (
|
||||
} satisfies IMiscItem
|
||||
];
|
||||
addShipDecorations(inventory, changes);
|
||||
await inventory.save();
|
||||
return {
|
||||
InventoryChanges: {
|
||||
ShipDecorations: changes
|
||||
@ -290,8 +270,8 @@ export const addItem = async (
|
||||
case "Types":
|
||||
switch (typeName.substr(1).split("/")[2]) {
|
||||
case "Sentinels": {
|
||||
const inventoryChanges = await addSentinel(typeName, accountId);
|
||||
await updateSlots(accountId, InventorySlot.SENTINELS, 0, 1);
|
||||
const inventoryChanges = addSentinel(inventory, typeName);
|
||||
updateSlots(inventory, InventorySlot.SENTINELS, 0, 1);
|
||||
return {
|
||||
InventoryChanges: {
|
||||
...inventoryChanges,
|
||||
@ -302,7 +282,6 @@ export const addItem = async (
|
||||
case "Items": {
|
||||
switch (typeName.substr(1).split("/")[3]) {
|
||||
case "ShipDecos": {
|
||||
const inventory = await getInventory(accountId);
|
||||
const changes = [
|
||||
{
|
||||
ItemType: typeName,
|
||||
@ -310,7 +289,6 @@ export const addItem = async (
|
||||
} satisfies IMiscItem
|
||||
];
|
||||
addShipDecorations(inventory, changes);
|
||||
await inventory.save();
|
||||
return {
|
||||
InventoryChanges: {
|
||||
ShipDecorations: changes
|
||||
@ -318,7 +296,6 @@ export const addItem = async (
|
||||
};
|
||||
}
|
||||
default: {
|
||||
const inventory = await getInventory(accountId);
|
||||
const miscItemChanges = [
|
||||
{
|
||||
ItemType: typeName,
|
||||
@ -326,7 +303,6 @@ export const addItem = async (
|
||||
} satisfies IMiscItem
|
||||
];
|
||||
addMiscItems(inventory, miscItemChanges);
|
||||
await inventory.save();
|
||||
return {
|
||||
InventoryChanges: {
|
||||
MiscItems: miscItemChanges
|
||||
@ -338,7 +314,6 @@ export const addItem = async (
|
||||
case "Game":
|
||||
if (typeName.substr(1).split("/")[3] == "Projections") {
|
||||
// Void Relics, e.g. /Lotus/Types/Game/Projections/T2VoidProjectionGaussPrimeDBronze
|
||||
const inventory = await getInventory(accountId);
|
||||
const miscItemChanges = [
|
||||
{
|
||||
ItemType: typeName,
|
||||
@ -346,7 +321,6 @@ export const addItem = async (
|
||||
} satisfies IMiscItem
|
||||
];
|
||||
addMiscItems(inventory, miscItemChanges);
|
||||
await inventory.save();
|
||||
return {
|
||||
InventoryChanges: {
|
||||
MiscItems: miscItemChanges
|
||||
@ -363,13 +337,13 @@ export const addItem = async (
|
||||
};
|
||||
|
||||
//TODO: maybe genericMethod for all the add methods, they share a lot of logic
|
||||
export const addSentinel = async (sentinelName: string, accountId: string): Promise<IInventoryChanges> => {
|
||||
const inventoryChanges: IInventoryChanges = {};
|
||||
|
||||
export const addSentinel = (
|
||||
inventory: TInventoryDatabaseDocument,
|
||||
sentinelName: string,
|
||||
inventoryChanges: IInventoryChanges = {}
|
||||
): IInventoryChanges => {
|
||||
if (ExportSentinels[sentinelName]?.defaultWeapon) {
|
||||
inventoryChanges.SentinelWeapons = [
|
||||
await addSentinelWeapon(ExportSentinels[sentinelName].defaultWeapon, accountId)
|
||||
];
|
||||
addSentinelWeapon(inventory, ExportSentinels[sentinelName].defaultWeapon, inventoryChanges);
|
||||
}
|
||||
|
||||
const modsToGive: IRawUpgrade[] = [];
|
||||
@ -387,96 +361,109 @@ export const addSentinel = async (sentinelName: string, accountId: string): Prom
|
||||
}
|
||||
}
|
||||
|
||||
const inventory = await getInventory(accountId);
|
||||
addMods(inventory, modsToGive);
|
||||
const sentinelIndex = inventory.Sentinels.push({ ItemType: sentinelName, Configs: configs, XP: 0 });
|
||||
const changedInventory = await inventory.save();
|
||||
inventoryChanges.Sentinels = [changedInventory.Sentinels[sentinelIndex - 1].toJSON()];
|
||||
const sentinelIndex = inventory.Sentinels.push({ ItemType: sentinelName, Configs: configs, XP: 0 }) - 1;
|
||||
inventoryChanges.Sentinels ??= [];
|
||||
(inventoryChanges.Sentinels as IEquipmentClient[]).push(
|
||||
inventory.Sentinels[sentinelIndex].toJSON<IEquipmentClient>()
|
||||
);
|
||||
|
||||
return inventoryChanges;
|
||||
};
|
||||
|
||||
export const addSentinelWeapon = async (typeName: string, accountId: string): Promise<IEquipmentClient> => {
|
||||
const inventory = await getInventory(accountId);
|
||||
const sentinelIndex = inventory.SentinelWeapons.push({ ItemType: typeName });
|
||||
const changedInventory = await inventory.save();
|
||||
return changedInventory.SentinelWeapons[sentinelIndex - 1].toJSON<IEquipmentClient>();
|
||||
export const addSentinelWeapon = (
|
||||
inventory: TInventoryDatabaseDocument,
|
||||
typeName: string,
|
||||
inventoryChanges: IInventoryChanges
|
||||
): void => {
|
||||
const index = inventory.SentinelWeapons.push({ ItemType: typeName }) - 1;
|
||||
inventoryChanges.SentinelWeapons ??= [];
|
||||
(inventoryChanges.SentinelWeapons as IEquipmentClient[]).push(
|
||||
inventory.SentinelWeapons[index].toJSON<IEquipmentClient>()
|
||||
);
|
||||
};
|
||||
|
||||
export const addPowerSuit = async (powersuitName: string, accountId: string): Promise<IInventoryChanges> => {
|
||||
const inventoryChanges: IInventoryChanges = {};
|
||||
export const addPowerSuit = (
|
||||
inventory: TInventoryDatabaseDocument,
|
||||
powersuitName: string,
|
||||
inventoryChanges: IInventoryChanges = {}
|
||||
): IInventoryChanges => {
|
||||
const specialItems = getExalted(powersuitName);
|
||||
if (specialItems) {
|
||||
for await (const specialItem of specialItems) {
|
||||
await addSpecialItem(specialItem, accountId, inventoryChanges);
|
||||
for (const specialItem of specialItems) {
|
||||
addSpecialItem(inventory, specialItem, inventoryChanges);
|
||||
}
|
||||
}
|
||||
const inventory = await getInventory(accountId);
|
||||
const suitIndex = inventory.Suits.push({ ItemType: powersuitName, Configs: [], UpgradeVer: 101, XP: 0 });
|
||||
const changedInventory = await inventory.save();
|
||||
inventoryChanges.Suits = [changedInventory.Suits[suitIndex - 1].toJSON()];
|
||||
const suitIndex = inventory.Suits.push({ ItemType: powersuitName, Configs: [], UpgradeVer: 101, XP: 0 }) - 1;
|
||||
inventoryChanges.Suits ??= [];
|
||||
(inventoryChanges.Suits as IEquipmentClient[]).push(inventory.Suits[suitIndex].toJSON<IEquipmentClient>());
|
||||
return inventoryChanges;
|
||||
};
|
||||
|
||||
export const addMechSuit = async (mechsuitName: string, accountId: string): Promise<IInventoryChanges> => {
|
||||
const inventoryChanges: IInventoryChanges = {};
|
||||
export const addMechSuit = (
|
||||
inventory: TInventoryDatabaseDocument,
|
||||
mechsuitName: string,
|
||||
inventoryChanges: IInventoryChanges = {}
|
||||
): IInventoryChanges => {
|
||||
const specialItems = getExalted(mechsuitName);
|
||||
if (specialItems) {
|
||||
for await (const specialItem of specialItems) {
|
||||
await addSpecialItem(specialItem, accountId, inventoryChanges);
|
||||
for (const specialItem of specialItems) {
|
||||
addSpecialItem(inventory, specialItem, inventoryChanges);
|
||||
}
|
||||
}
|
||||
const inventory = await getInventory(accountId);
|
||||
const suitIndex = inventory.MechSuits.push({ ItemType: mechsuitName, Configs: [], UpgradeVer: 101, XP: 0 });
|
||||
const changedInventory = await inventory.save();
|
||||
inventoryChanges.MechSuits = [changedInventory.MechSuits[suitIndex - 1].toJSON()];
|
||||
const suitIndex = inventory.MechSuits.push({ ItemType: mechsuitName, Configs: [], UpgradeVer: 101, XP: 0 }) - 1;
|
||||
inventoryChanges.MechSuits ??= [];
|
||||
(inventoryChanges.MechSuits as IEquipmentClient[]).push(inventory.MechSuits[suitIndex].toJSON<IEquipmentClient>());
|
||||
return inventoryChanges;
|
||||
};
|
||||
|
||||
export const addSpecialItem = async (
|
||||
export const addSpecialItem = (
|
||||
inventory: TInventoryDatabaseDocument,
|
||||
itemName: string,
|
||||
accountId: string,
|
||||
inventoryChanges: IInventoryChanges
|
||||
): Promise<void> => {
|
||||
const inventory = await getInventory(accountId);
|
||||
): void => {
|
||||
if (inventory.SpecialItems.find(x => x.ItemType == itemName)) {
|
||||
return;
|
||||
}
|
||||
const specialItemIndex = inventory.SpecialItems.push({
|
||||
const specialItemIndex =
|
||||
inventory.SpecialItems.push({
|
||||
ItemType: itemName,
|
||||
Configs: [],
|
||||
Features: 1,
|
||||
UpgradeVer: 101,
|
||||
XP: 0
|
||||
});
|
||||
const changedInventory = await inventory.save();
|
||||
}) - 1;
|
||||
inventoryChanges.SpecialItems ??= [];
|
||||
(inventoryChanges.SpecialItems as object[]).push(changedInventory.SpecialItems[specialItemIndex - 1].toJSON());
|
||||
(inventoryChanges.SpecialItems as IEquipmentClient[]).push(
|
||||
inventory.SpecialItems[specialItemIndex].toJSON<IEquipmentClient>()
|
||||
);
|
||||
};
|
||||
|
||||
export const addSpaceSuit = async (spacesuitName: string, accountId: string): Promise<IEquipmentClient> => {
|
||||
const inventory = await getInventory(accountId);
|
||||
const suitIndex = inventory.SpaceSuits.push({ ItemType: spacesuitName, Configs: [], UpgradeVer: 101, XP: 0 });
|
||||
const changedInventory = await inventory.save();
|
||||
return changedInventory.SpaceSuits[suitIndex - 1].toJSON<IEquipmentClient>();
|
||||
export const addSpaceSuit = (
|
||||
inventory: TInventoryDatabaseDocument,
|
||||
spacesuitName: string,
|
||||
inventoryChanges: IInventoryChanges = {}
|
||||
): IInventoryChanges => {
|
||||
const suitIndex = inventory.SpaceSuits.push({ ItemType: spacesuitName, Configs: [], UpgradeVer: 101, XP: 0 }) - 1;
|
||||
inventoryChanges.SpaceSuits ??= [];
|
||||
(inventoryChanges.SpaceSuits as IEquipmentClient[]).push(
|
||||
inventory.SpaceSuits[suitIndex].toJSON<IEquipmentClient>()
|
||||
);
|
||||
return inventoryChanges;
|
||||
};
|
||||
|
||||
export const updateSlots = async (
|
||||
accountId: string,
|
||||
export const updateSlots = (
|
||||
inventory: TInventoryDatabaseDocument,
|
||||
slotName: SlotNames,
|
||||
slotAmount: number,
|
||||
extraAmount: number
|
||||
): Promise<void> => {
|
||||
const inventory = await getInventory(accountId);
|
||||
|
||||
): void => {
|
||||
inventory[slotName].Slots += slotAmount;
|
||||
if (inventory[slotName].Extra === undefined) {
|
||||
inventory[slotName].Extra = extraAmount;
|
||||
} else {
|
||||
inventory[slotName].Extra += extraAmount;
|
||||
}
|
||||
|
||||
await inventory.save();
|
||||
};
|
||||
|
||||
const isCurrencyTracked = (usePremium: boolean): boolean => {
|
||||
@ -548,44 +535,61 @@ export const updateTheme = async (data: IThemeUpdateRequest, accountId: string):
|
||||
await inventory.save();
|
||||
};
|
||||
|
||||
export const addEquipment = async (
|
||||
export const addEquipment = (
|
||||
inventory: TInventoryDatabaseDocument,
|
||||
category: TEquipmentKey,
|
||||
type: string,
|
||||
accountId: string,
|
||||
modularParts: string[] | undefined = undefined
|
||||
): Promise<IEquipmentClient> => {
|
||||
const inventory = await getInventory(accountId);
|
||||
|
||||
const index = inventory[category].push({
|
||||
modularParts: string[] | undefined = undefined,
|
||||
inventoryChanges: IInventoryChanges = {}
|
||||
): IInventoryChanges => {
|
||||
const index =
|
||||
inventory[category].push({
|
||||
ItemType: type,
|
||||
Configs: [],
|
||||
XP: 0,
|
||||
ModularParts: modularParts
|
||||
});
|
||||
}) - 1;
|
||||
|
||||
const changedInventory = await inventory.save();
|
||||
return changedInventory[category][index - 1].toJSON() as object as IEquipmentClient;
|
||||
inventoryChanges[category] ??= [];
|
||||
(inventoryChanges[category] as IEquipmentClient[]).push(inventory[category][index].toJSON<IEquipmentClient>());
|
||||
return inventoryChanges;
|
||||
};
|
||||
|
||||
export const addCustomization = async (customizatonName: string, accountId: string): Promise<IFlavourItem> => {
|
||||
const inventory = await getInventory(accountId);
|
||||
const flavourItemIndex = inventory.FlavourItems.push({ ItemType: customizatonName }) - 1;
|
||||
const changedInventory = await inventory.save();
|
||||
return changedInventory.FlavourItems[flavourItemIndex].toJSON();
|
||||
export const addCustomization = (
|
||||
inventory: TInventoryDatabaseDocument,
|
||||
customizationName: string,
|
||||
inventoryChanges: IInventoryChanges = {}
|
||||
): IInventoryChanges => {
|
||||
const flavourItemIndex = inventory.FlavourItems.push({ ItemType: customizationName }) - 1;
|
||||
inventoryChanges.FlavourItems ??= [];
|
||||
(inventoryChanges.FlavourItems as IFlavourItem[]).push(
|
||||
inventory.FlavourItems[flavourItemIndex].toJSON<IFlavourItem>()
|
||||
);
|
||||
return inventoryChanges;
|
||||
};
|
||||
|
||||
export const addSkin = async (typeName: string, accountId: string): Promise<IWeaponSkinClient> => {
|
||||
const inventory = await getInventory(accountId);
|
||||
export const addSkin = (
|
||||
inventory: TInventoryDatabaseDocument,
|
||||
typeName: string,
|
||||
inventoryChanges: IInventoryChanges = {}
|
||||
): IInventoryChanges => {
|
||||
const index = inventory.WeaponSkins.push({ ItemType: typeName }) - 1;
|
||||
const changedInventory = await inventory.save();
|
||||
return changedInventory.WeaponSkins[index].toJSON() as object as IWeaponSkinClient;
|
||||
inventoryChanges.WeaponSkins ??= [];
|
||||
(inventoryChanges.WeaponSkins as IWeaponSkinClient[]).push(
|
||||
inventory.WeaponSkins[index].toJSON<IWeaponSkinClient>()
|
||||
);
|
||||
return inventoryChanges;
|
||||
};
|
||||
|
||||
const addCrewShip = async (typeName: string, accountId: string) => {
|
||||
const inventory = await getInventory(accountId);
|
||||
const addCrewShip = (
|
||||
inventory: TInventoryDatabaseDocument,
|
||||
typeName: string,
|
||||
inventoryChanges: IInventoryChanges = {}
|
||||
): IInventoryChanges => {
|
||||
const index = inventory.CrewShips.push({ ItemType: typeName }) - 1;
|
||||
const changedInventory = await inventory.save();
|
||||
return changedInventory.CrewShips[index].toJSON();
|
||||
inventoryChanges.CrewShips ??= [];
|
||||
(inventoryChanges.CrewShips as object[]).push(inventory.CrewShips[index].toJSON());
|
||||
return inventoryChanges;
|
||||
};
|
||||
|
||||
const addGearExpByCategory = (
|
||||
@ -864,7 +868,7 @@ export const addBooster = async (ItemType: string, time: number, accountId: stri
|
||||
existingBooster.ExpiryDate = Math.max(existingBooster.ExpiryDate, currentTime) + time;
|
||||
inventory.markModified(`Boosters.${itemIndex}.ExpiryDate`);
|
||||
} else {
|
||||
Boosters.push({ ItemType, ExpiryDate: currentTime + time }) - 1;
|
||||
Boosters.push({ ItemType, ExpiryDate: currentTime + time });
|
||||
}
|
||||
|
||||
await inventory.save();
|
||||
|
@ -204,9 +204,12 @@ export const handleStoreItemAcquisition = async (
|
||||
}
|
||||
}
|
||||
switch (storeCategory) {
|
||||
default:
|
||||
purchaseResponse = await addItem(accountId, internalName, quantity);
|
||||
default: {
|
||||
const inventory = await getInventory(accountId);
|
||||
purchaseResponse = await addItem(inventory, internalName, quantity);
|
||||
await inventory.save();
|
||||
break;
|
||||
}
|
||||
case "Types":
|
||||
purchaseResponse = await handleTypesPurchase(internalName, accountId, quantity);
|
||||
break;
|
||||
@ -248,7 +251,9 @@ const handleSlotPurchase = async (
|
||||
const slotName = slotPurchaseNameToSlotName[slotPurchaseName].name;
|
||||
const slotsPerPurchase = slotPurchaseNameToSlotName[slotPurchaseName].slotsPerPurchase;
|
||||
|
||||
await updateSlots(accountId, slotName, slotsPerPurchase, slotsPerPurchase);
|
||||
const inventory = await getInventory(accountId);
|
||||
updateSlots(inventory, slotName, slotsPerPurchase, slotsPerPurchase);
|
||||
await inventory.save();
|
||||
|
||||
logger.debug(`added ${slotsPerPurchase} slot ${slotName}`);
|
||||
|
||||
@ -277,6 +282,7 @@ const handleBoosterPackPurchase = async (
|
||||
BoosterPackItems: "",
|
||||
InventoryChanges: {}
|
||||
};
|
||||
const inventory = await getInventory(accountId);
|
||||
for (let i = 0; i != quantity; ++i) {
|
||||
for (const weights of pack.rarityWeightsPerRoll) {
|
||||
const result = getRandomWeightedReward(pack.components, weights);
|
||||
@ -286,11 +292,12 @@ const handleBoosterPackPurchase = async (
|
||||
result.type.split("/Lotus/").join("/Lotus/StoreItems/") + ',{"lvl":0};';
|
||||
combineInventoryChanges(
|
||||
purchaseResponse.InventoryChanges,
|
||||
(await addItem(accountId, result.type, result.itemCount)).InventoryChanges
|
||||
(await addItem(inventory, result.type, result.itemCount)).InventoryChanges
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
await inventory.save();
|
||||
return purchaseResponse;
|
||||
};
|
||||
|
||||
@ -303,8 +310,12 @@ const handleTypesPurchase = async (
|
||||
const typeCategory = getStoreItemTypesCategory(typesName);
|
||||
logger.debug(`type category ${typeCategory}`);
|
||||
switch (typeCategory) {
|
||||
default:
|
||||
return await addItem(accountId, typesName, quantity);
|
||||
default: {
|
||||
const inventory = await getInventory(accountId);
|
||||
const resp = await addItem(inventory, typesName, quantity);
|
||||
await inventory.save();
|
||||
return resp;
|
||||
}
|
||||
case "BoosterPacks":
|
||||
return await handleBoosterPackPurchase(typesName, accountId, quantity);
|
||||
case "SlotItems":
|
||||
|
Loading…
x
Reference in New Issue
Block a user