SpaceNinjaServer/src/controllers/api/modularWeaponCraftingController.ts

85 lines
3.5 KiB
TypeScript
Raw Normal View History

2024-06-18 02:03:07 +02:00
import { RequestHandler } from "express";
import { getAccountIdForRequest } from "@/src/services/loginService";
import { getJSONfromString } from "@/src/helpers/stringHelpers";
2024-06-29 15:11:12 +02:00
import { TEquipmentKey } from "@/src/types/inventoryTypes/inventoryTypes";
import {
getInventory,
updateCurrency,
addEquipment,
addMiscItems,
applyDefaultUpgrades,
occupySlot,
productCategoryToInventoryBin
} from "@/src/services/inventoryService";
import { ExportWeapons } from "warframe-public-export-plus";
import { IInventoryChanges } from "@/src/types/purchaseTypes";
2024-06-18 02:03:07 +02:00
2024-06-29 15:11:12 +02:00
const modularWeaponTypes: Record<string, TEquipmentKey> = {
"/Lotus/Weapons/SolarisUnited/Primary/LotusModularPrimary": "LongGuns",
2024-06-18 02:03:07 +02:00
"/Lotus/Weapons/SolarisUnited/Primary/LotusModularPrimaryBeam": "LongGuns",
"/Lotus/Weapons/SolarisUnited/Primary/LotusModularPrimaryLauncher": "LongGuns",
"/Lotus/Weapons/SolarisUnited/Primary/LotusModularPrimaryShotgun": "LongGuns",
"/Lotus/Weapons/SolarisUnited/Primary/LotusModularPrimarySniper": "LongGuns",
2024-06-18 02:03:07 +02:00
"/Lotus/Weapons/SolarisUnited/Secondary/LotusModularSecondary": "Pistols",
"/Lotus/Weapons/SolarisUnited/Secondary/LotusModularSecondaryBeam": "Pistols",
"/Lotus/Weapons/SolarisUnited/Secondary/LotusModularSecondaryShotgun": "Pistols",
"/Lotus/Weapons/Ostron/Melee/LotusModularWeapon": "Melee",
"/Lotus/Weapons/Sentients/OperatorAmplifiers/OperatorAmpWeapon": "OperatorAmps",
2024-06-29 15:11:12 +02:00
"/Lotus/Types/Vehicles/Hoverboard/HoverboardSuit": "Hoverboards",
2024-06-30 13:12:27 +02:00
"/Lotus/Types/Friendly/Pets/MoaPets/MoaPetPowerSuit": "MoaPets",
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetAPowerSuit": "MoaPets",
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetBPowerSuit": "MoaPets",
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetCPowerSuit": "MoaPets"
2024-06-18 02:03:07 +02:00
};
interface IModularCraftRequest {
WeaponType: string;
Parts: string[];
}
export const modularWeaponCraftingController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const data = getJSONfromString<IModularCraftRequest>(String(req.body));
2024-06-18 02:03:07 +02:00
if (!(data.WeaponType in modularWeaponTypes)) {
throw new Error(`unknown modular weapon type: ${data.WeaponType}`);
}
const category = modularWeaponTypes[data.WeaponType];
const inventory = await getInventory(accountId);
2024-06-18 02:03:07 +02:00
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
const configs = applyDefaultUpgrades(inventory, ExportWeapons[data.Parts[0]]?.defaultUpgrades);
2024-06-18 02:03:07 +02:00
// Give weapon
const inventoryChanges: IInventoryChanges = {
...addEquipment(inventory, category, data.WeaponType, data.Parts, {}, { Configs: configs }),
...occupySlot(inventory, productCategoryToInventoryBin(category)!, false)
};
2024-06-18 02:03:07 +02:00
// Remove credits & parts
2024-06-18 02:03:07 +02:00
const miscItemChanges = [];
for (const part of data.Parts) {
miscItemChanges.push({
ItemType: part,
ItemCount: -1
});
}
const currencyChanges = updateCurrency(
inventory,
category == "Hoverboards" || category == "MoaPets" || category == "LongGuns" || category == "Pistols"
? 5000
: 4000, // Definitely correct for Melee & OperatorAmps
false
);
2024-06-18 02:03:07 +02:00
addMiscItems(inventory, miscItemChanges);
await inventory.save();
// Tell client what we did
res.json({
InventoryChanges: {
...inventoryChanges,
2024-06-18 02:03:07 +02:00
...currencyChanges,
MiscItems: miscItemChanges
}
});
};