From 676c3b1616d77adfcd254dba0aa8ef267b20cca3 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 6 May 2024 15:08:56 +0200 Subject: [PATCH] feat: potatoes & exilus adapters (#163) --- src/controllers/api/upgradesController.ts | 44 ++++++++++++++++++++++ src/routes/api.ts | 2 + src/services/inventoryService.ts | 2 +- src/types/inventoryTypes/inventoryTypes.ts | 6 +++ src/types/requestTypes.ts | 17 +++++++++ 5 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 src/controllers/api/upgradesController.ts diff --git a/src/controllers/api/upgradesController.ts b/src/controllers/api/upgradesController.ts new file mode 100644 index 00000000..50791d53 --- /dev/null +++ b/src/controllers/api/upgradesController.ts @@ -0,0 +1,44 @@ +import { RequestHandler } from "express"; +import { IUpgradesRequest } from "@/src/types/requestTypes"; +import { IGenericItemDatabase, IMiscItem, TGenericItemKey } from "@/src/types/inventoryTypes/inventoryTypes"; +import { addMiscItems, getInventory } from "@/src/services/inventoryService"; + +export const upgradesController: RequestHandler = async (req, res) => { + const accountId = req.query.accountId as string; + const payload = JSON.parse(req.body.toString()) as IUpgradesRequest; + const inventory = await getInventory(accountId); + for (const operation of payload.Operations) { + addMiscItems(inventory, [ + { + ItemType: operation.UpgradeRequirement, + ItemCount: -1 + } satisfies IMiscItem + ]); + switch (operation.UpgradeRequirement) { + case "/Lotus/Types/Items/MiscItems/OrokinReactor": + case "/Lotus/Types/Items/MiscItems/OrokinCatalyst": + for (const item of inventory[payload.ItemCategory as TGenericItemKey] as IGenericItemDatabase[]) { + if (item._id.toString() == payload.ItemId.$oid) { + item.Features ??= 0; + item.Features |= 1; + break; + } + } + break; + case "/Lotus/Types/Items/MiscItems/UtilityUnlocker": + case "/Lotus/Types/Items/MiscItems/WeaponUtilityUnlocker": + for (const item of inventory[payload.ItemCategory as TGenericItemKey] as IGenericItemDatabase[]) { + if (item._id.toString() == payload.ItemId.$oid) { + item.Features ??= 0; + item.Features |= 2; + break; + } + } + break; + default: + throw new Error("Unsupported upgrade: " + operation.UpgradeRequirement); + } + } + await inventory.save(); + res.end(); +}; diff --git a/src/routes/api.ts b/src/routes/api.ts index df15ab9b..c8fa928e 100644 --- a/src/routes/api.ts +++ b/src/routes/api.ts @@ -45,6 +45,7 @@ import { getGuildController } from "@/src/controllers/api/getGuildController"; import { addFriendImageController } from "@/src/controllers/api/addFriendImageController"; import { createGuildController } from "@/src/controllers/api/createGuildController"; import { sellController } from "@/src/controllers/api/sellController"; +import { upgradesController } from "@/src/controllers/api/upgradesController"; const apiRouter = express.Router(); @@ -100,5 +101,6 @@ apiRouter.post("/updateTheme.php", updateThemeController); apiRouter.post("/addFriendImage.php", addFriendImageController); apiRouter.post("/createGuild.php", createGuildController); apiRouter.post("/sell.php", sellController); +apiRouter.post("/upgrades.php", upgradesController); export { apiRouter }; diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index fc4fbe41..43675663 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -211,7 +211,7 @@ const addGearExpByCategory = ( }); }; -const addMiscItems = (inventory: IInventoryDatabaseDocument, itemsArray: IMiscItem[] | undefined) => { +export const addMiscItems = (inventory: IInventoryDatabaseDocument, itemsArray: IMiscItem[] | undefined) => { const { MiscItems } = inventory; itemsArray?.forEach(({ ItemCount, ItemType }) => { diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 0bec69da..99792a20 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -95,6 +95,12 @@ export interface IGenericItem { Features?: number; //space suit has this } +export interface IGenericItemDatabase extends Omit { + _id: Types.ItemId; +} + +export type TGenericItemKey = "Suits" | "LongGuns" | "Pistols" | "Melee"; + export interface IDuviriInfo { Seed: number; NumCompletions: number; diff --git a/src/types/requestTypes.ts b/src/types/requestTypes.ts index 7b7dd7ac..dc99d658 100644 --- a/src/types/requestTypes.ts +++ b/src/types/requestTypes.ts @@ -1,3 +1,4 @@ +import { IOid } from "./commonTypes"; import { IBooster, IChallengeProgress, @@ -64,3 +65,19 @@ export interface IUpdateGlyphRequest { AvatarImageType: string; AvatarImage: string; } + +export interface IUpgradesRequest { + ItemCategory: string; + ItemId: IOid; + ItemFeatures: number; + UpgradeVersion: number; + Operations: IUpgradeOperation[]; +} + +export interface IUpgradeOperation { + OperationType: string; + UpgradeRequirement: string; // uniqueName of item being consumed + PolarizeSlot: number; + PolarizeValue: string; // polarity + PolarityRemap: {}[]; +}