From 94f6d1b9410d29c5f1df153ffb1aeda0a39b64ab Mon Sep 17 00:00:00 2001 From: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com> Date: Thu, 27 Jun 2024 10:21:02 +0200 Subject: [PATCH] feat: gilded weapons (#410) Co-authored-by: AMelonInsideLemon --- src/controllers/api/gildWeaponController.ts | 66 +++++++++++++++++++ src/routes/api.ts | 2 + .../inventoryTypes/commonInventoryTypes.ts | 1 + 3 files changed, 69 insertions(+) create mode 100644 src/controllers/api/gildWeaponController.ts diff --git a/src/controllers/api/gildWeaponController.ts b/src/controllers/api/gildWeaponController.ts new file mode 100644 index 000000000..0b77513f8 --- /dev/null +++ b/src/controllers/api/gildWeaponController.ts @@ -0,0 +1,66 @@ +import { RequestHandler } from "express"; +import { getAccountIdForRequest } from "@/src/services/loginService"; +import { getJSONfromString } from "@/src/helpers/stringHelpers"; +import { getInventory } from "@/src/services/inventoryService"; +import { WeaponTypeInternal } from "@/src/services/itemDataService"; +import { ArtifactPolarity, EquipmentFeatures } from "@/src/types/inventoryTypes/commonInventoryTypes"; + +const modularWeaponCategory: (WeaponTypeInternal | "Hoverboards")[] = [ + "LongGuns", + "Pistols", + "Melee", + "OperatorAmps", + "Hoverboards" // Not sure about hoverboards just coppied from modual crafting +]; + +interface IGildWeaponRequest { + ItemName: string; + Recipe: string; // /Lotus/Weapons/SolarisUnited/LotusGildKitgunBlueprint + PolarizeSlot?: number; + PolarizeValue?: ArtifactPolarity; + ItemId: string; + Category: WeaponTypeInternal | "Hoverboards"; +} + +// In export there no recipes for gild action, so reputation and ressources only consumed visually + +// eslint-disable-next-line @typescript-eslint/no-misused-promises +export const gildWeaponController: RequestHandler = async (req, res) => { + const accountId = await getAccountIdForRequest(req); + const data: IGildWeaponRequest = getJSONfromString(String(req.body)); + data.ItemId = String(req.query.ItemId); + if (!modularWeaponCategory.includes(req.query.Category as WeaponTypeInternal | "Hoverboards")) { + throw new Error(`Unknown modular weapon Category: ${req.query.Category}`); + } + data.Category = req.query.Category as WeaponTypeInternal | "Hoverboards"; + + const inventory = await getInventory(accountId); + if (!inventory[data.Category]) { + throw new Error(`Category ${req.query.Category} not found in inventory`); + } + const weaponIndex = inventory[data.Category].findIndex(x => String(x._id) === data.ItemId); + if (weaponIndex === -1) { + throw new Error(`Weapon with ${data.ItemId} not found in category ${req.query.Category}`); + } + + const weapon = inventory[data.Category][weaponIndex]; + weapon.Features = EquipmentFeatures.GILDED; // maybe 9 idk if DOUBLE_CAPACITY is also given + weapon.ItemName = data.ItemName; + weapon.XP = 0; + if (data.Category != "OperatorAmps" && data.PolarizeSlot && data.PolarizeValue) { + weapon.Polarity = [ + { + Slot: data.PolarizeSlot, + Value: data.PolarizeValue + } + ]; + } + inventory[data.Category][weaponIndex] = weapon; + await inventory.save(); + + res.json({ + InventoryChanges: { + [data.Category]: [weapon] + } + }); +}; diff --git a/src/routes/api.ts b/src/routes/api.ts index 8bdddd787..9794c48f4 100644 --- a/src/routes/api.ts +++ b/src/routes/api.ts @@ -61,6 +61,7 @@ import { updateChallengeProgressController } from "@/src/controllers/api/updateC import { updateSessionGetController, updateSessionPostController } from "@/src/controllers/api/updateSessionController"; import { updateThemeController } from "../controllers/api/updateThemeController"; import { upgradesController } from "@/src/controllers/api/upgradesController"; +import { gildWeaponController } from "../controllers/api/gildWeaponController"; const apiRouter = express.Router(); @@ -106,6 +107,7 @@ apiRouter.post("/findSessions.php", findSessionsController); apiRouter.post("/focus.php", focusController); apiRouter.post("/genericUpdate.php", genericUpdateController); apiRouter.post("/getAlliance.php", getAllianceController); +apiRouter.post("/gildWeapon.php", gildWeaponController); apiRouter.post("/guildTech.php", guildTechController); apiRouter.post("/hostSession.php", hostSessionController); apiRouter.post("/infestedFoundry.php", infestedFoundryController); diff --git a/src/types/inventoryTypes/commonInventoryTypes.ts b/src/types/inventoryTypes/commonInventoryTypes.ts index b1debf7ab..f7026c0c7 100644 --- a/src/types/inventoryTypes/commonInventoryTypes.ts +++ b/src/types/inventoryTypes/commonInventoryTypes.ts @@ -86,6 +86,7 @@ export enum EquipmentFeatures { DOUBLE_CAPACITY = 1, UTILITY_SLOT = 2, GRAVIMAG_INSTALLED = 4, + GILDED = 8, ARCANE_SLOT = 32, INCARNON_GENESIS = 512 }