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