forked from OpenWF/SpaceNinjaServer
		
	Endpoint for custom API: https://localhost:443/custom/addItem example request: { "type": "Weapon", "internalName": "/Lotus/Weapons/Grineer/Pistols/GrineerMicrowavegun/GrnMicrowavePistol", "accountId": "6488fd2e7bec200069ca4242" }
		
			
				
	
	
		
			109 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { Inventory } from "@/src/models/inventoryModel";
 | 
						|
import new_inventory from "@/static/fixed_responses/postTutorialInventory.json";
 | 
						|
import config from "@/config.json";
 | 
						|
import { Types } from "mongoose";
 | 
						|
import { ISuitResponse } from "@/src/types/inventoryTypes/SuitTypes";
 | 
						|
import { SlotType } from "@/src/types/purchaseTypes";
 | 
						|
import { IWeaponResponse } from "@/src/types/inventoryTypes/weaponTypes";
 | 
						|
 | 
						|
const createInventory = async (accountOwnerId: Types.ObjectId) => {
 | 
						|
    try {
 | 
						|
        const inventory = new Inventory({ ...new_inventory, accountOwnerId: accountOwnerId });
 | 
						|
        if (config.skipStoryModeChoice) {
 | 
						|
            inventory.StoryModeChoice = "WARFRAME";
 | 
						|
        }
 | 
						|
        if (config.skipTutorial) {
 | 
						|
            inventory.PlayedParkourTutorial = true;
 | 
						|
            inventory.ReceivedStartingGear = true;
 | 
						|
        }
 | 
						|
        await inventory.save();
 | 
						|
    } catch (error) {
 | 
						|
        if (error instanceof Error) {
 | 
						|
            throw new Error(`error creating inventory" ${error.message}`);
 | 
						|
        }
 | 
						|
        throw new Error("error creating inventory that is not of instance Error");
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
//const updateInventory = async (accountOwnerId: Types.ObjectId, inventoryChanges: any) => {};
 | 
						|
 | 
						|
const getInventory = async (accountOwnerId: string) => {
 | 
						|
    const inventory = await Inventory.findOne({ accountOwnerId: accountOwnerId });
 | 
						|
 | 
						|
    if (!inventory) {
 | 
						|
        throw new Error(`Didn't find an inventory for ${accountOwnerId}`);
 | 
						|
    }
 | 
						|
 | 
						|
    return inventory;
 | 
						|
};
 | 
						|
 | 
						|
const addPowerSuit = async (powersuitName: string, accountId: string): Promise<ISuitResponse> => {
 | 
						|
    const inventory = await getInventory(accountId);
 | 
						|
    const suitIndex = inventory.Suits.push({ ItemType: powersuitName, Configs: [], UpgradeVer: 101, XP: 0 });
 | 
						|
    const changedInventory = await inventory.save();
 | 
						|
    return changedInventory.Suits[suitIndex - 1].toJSON();
 | 
						|
};
 | 
						|
 | 
						|
export const updateSlots = async (slotType: SlotType, accountId: string, slots: number) => {
 | 
						|
    const inventory = await getInventory(accountId);
 | 
						|
 | 
						|
    switch (slotType) {
 | 
						|
        case SlotType.SUIT:
 | 
						|
            inventory.SuitBin.Slots += slots;
 | 
						|
            break;
 | 
						|
        case SlotType.WEAPON:
 | 
						|
            inventory.WeaponBin.Slots += slots;
 | 
						|
            break;
 | 
						|
        default:
 | 
						|
            throw new Error("invalid slot type");
 | 
						|
    }
 | 
						|
    await inventory.save();
 | 
						|
};
 | 
						|
 | 
						|
export const updateCurrency = async (price: number, usePremium: boolean, accountId: string) => {
 | 
						|
    const currencyName = usePremium ? "PremiumCredits" : "RegularCredits";
 | 
						|
 | 
						|
    const inventory = await getInventory(accountId);
 | 
						|
    inventory[currencyName] = inventory[currencyName] - price;
 | 
						|
    await inventory.save();
 | 
						|
    return { [currencyName]: -price };
 | 
						|
};
 | 
						|
 | 
						|
export type WeaponTypeInternal = "LongGuns" | "Pistols" | "Melee";
 | 
						|
 | 
						|
export const addWeapon = async (
 | 
						|
    weaponType: WeaponTypeInternal,
 | 
						|
    weaponName: string,
 | 
						|
    accountId: string
 | 
						|
): Promise<IWeaponResponse> => {
 | 
						|
    const inventory = await getInventory(accountId);
 | 
						|
 | 
						|
    let weaponIndex;
 | 
						|
    switch (weaponType) {
 | 
						|
        case "LongGuns":
 | 
						|
            weaponIndex = inventory.LongGuns.push({ ItemType: weaponName, Configs: [], XP: 0 });
 | 
						|
            break;
 | 
						|
        case "Pistols":
 | 
						|
            weaponIndex = inventory.Pistols.push({ ItemType: weaponName, Configs: [], XP: 0 });
 | 
						|
            break;
 | 
						|
        case "Melee":
 | 
						|
            weaponIndex = inventory.Melee.push({ ItemType: weaponName, Configs: [], XP: 0 });
 | 
						|
            break;
 | 
						|
        default:
 | 
						|
            throw new Error("unknown weapon type");
 | 
						|
    }
 | 
						|
 | 
						|
    const changedInventory = await inventory.save();
 | 
						|
    return changedInventory[weaponType][weaponIndex - 1].toJSON();
 | 
						|
};
 | 
						|
 | 
						|
export const addCustomization = async (customizatonName: string, accountId: string) => {
 | 
						|
    const inventory = await getInventory(accountId);
 | 
						|
 | 
						|
    const flavourItemIndex = inventory.FlavourItems.push({ ItemType: customizatonName }) - 1;
 | 
						|
    const changedInventory = await inventory.save();
 | 
						|
    return changedInventory.FlavourItems[flavourItemIndex].toJSON();
 | 
						|
};
 | 
						|
 | 
						|
export { createInventory, addPowerSuit };
 |