diff --git a/src/controllers/api/gildWeaponController.ts b/src/controllers/api/gildWeaponController.ts new file mode 100644 index 00000000..0b77513f --- /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 8bdddd78..9794c48f 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 b1debf7a..f7026c0c 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 }