2024-06-18 13:02:29 +02:00
|
|
|
import { RequestHandler } from "express";
|
|
|
|
import { getAccountIdForRequest } from "@/src/services/loginService";
|
|
|
|
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
|
|
|
import { getInventory, addMiscItems } from "@/src/services/inventoryService";
|
|
|
|
import { IOid } from "@/src/types/commonTypes";
|
|
|
|
|
2024-06-20 11:47:21 +02:00
|
|
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
2024-06-18 13:02:29 +02:00
|
|
|
export const infestedFoundryController: RequestHandler = async (req, res) => {
|
|
|
|
const accountId = await getAccountIdForRequest(req);
|
|
|
|
switch (req.query.mode) {
|
|
|
|
case "s": {
|
|
|
|
// shard installation
|
2024-06-24 12:37:28 +02:00
|
|
|
const request = getJSONfromString(String(req.body)) as IShardInstallRequest;
|
2024-06-18 13:02:29 +02:00
|
|
|
const inventory = await getInventory(accountId);
|
|
|
|
const suit = inventory.Suits.find(suit => suit._id.toString() == request.SuitId.$oid)!;
|
|
|
|
if (
|
|
|
|
!suit.ArchonCrystalUpgrades ||
|
|
|
|
suit.ArchonCrystalUpgrades.length != 5 // we shouldn't have an array like this, but older inventories may disagree...
|
|
|
|
) {
|
|
|
|
suit.ArchonCrystalUpgrades = [{}, {}, {}, {}, {}];
|
|
|
|
}
|
|
|
|
suit.ArchonCrystalUpgrades[request.Slot] = {
|
|
|
|
UpgradeType: request.UpgradeType,
|
|
|
|
Color: request.Color
|
|
|
|
};
|
|
|
|
const miscItemChanges = [
|
|
|
|
{
|
|
|
|
ItemType: colorToShard[request.Color],
|
|
|
|
ItemCount: -1
|
|
|
|
}
|
|
|
|
];
|
|
|
|
addMiscItems(inventory, miscItemChanges);
|
|
|
|
await inventory.save();
|
|
|
|
res.json({
|
|
|
|
InventoryChanges: {
|
|
|
|
MiscItems: miscItemChanges
|
|
|
|
}
|
|
|
|
});
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case "n": {
|
|
|
|
// name the beast
|
2024-06-24 12:37:28 +02:00
|
|
|
const request = getJSONfromString(String(req.body)) as IHelminthNameRequest;
|
2024-06-18 13:02:29 +02:00
|
|
|
const inventory = await getInventory(accountId);
|
|
|
|
inventory.InfestedFoundry ??= {};
|
2024-06-24 12:37:28 +02:00
|
|
|
inventory.InfestedFoundry.Name = request.newName;
|
2024-06-18 13:02:29 +02:00
|
|
|
await inventory.save();
|
|
|
|
res.json({
|
|
|
|
InventoryChanges: {
|
|
|
|
InfestedFoundry: {
|
|
|
|
Name: inventory.InfestedFoundry.Name
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case "o": // offerings update
|
|
|
|
// {"OfferingsIndex":540,"SuitTypes":["/Lotus/Powersuits/PaxDuviricus/PaxDuviricusBaseSuit","/Lotus/Powersuits/Nezha/NezhaBaseSuit","/Lotus/Powersuits/Devourer/DevourerBaseSuit"],"Extra":false}
|
|
|
|
res.status(404).end();
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
throw new Error(`unhandled infestedFoundry mode: ${req.query.mode}`);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
interface IShardInstallRequest {
|
|
|
|
SuitId: IOid;
|
|
|
|
Slot: number;
|
|
|
|
UpgradeType: string;
|
|
|
|
Color: string;
|
|
|
|
}
|
|
|
|
|
2024-06-24 12:37:28 +02:00
|
|
|
interface IHelminthNameRequest {
|
|
|
|
newName: string;
|
|
|
|
}
|
|
|
|
|
2024-06-18 13:02:29 +02:00
|
|
|
const colorToShard: Record<string, string> = {
|
|
|
|
ACC_RED: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalAmar",
|
|
|
|
ACC_RED_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalAmarMythic",
|
|
|
|
ACC_YELLOW: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalNira",
|
|
|
|
ACC_YELLOW_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalNiraMythic",
|
|
|
|
ACC_BLUE: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalBoreal",
|
|
|
|
ACC_BLUE_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalBorealMythic",
|
|
|
|
ACC_GREEN: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalGreen",
|
|
|
|
ACC_GREEN_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalGreenMythic",
|
|
|
|
ACC_ORANGE: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalOrange",
|
|
|
|
ACC_ORANGE_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalOrangeMythic",
|
|
|
|
ACC_PURPLE: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalViolet",
|
|
|
|
ACC_PURPLE_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalVioletMythic"
|
|
|
|
};
|