From f78b75083be9aff53048b736a1dcde51e1f2bd02 Mon Sep 17 00:00:00 2001 From: dutlist <166175391+AMelonInsideLemon@users.noreply.github.com> Date: Wed, 26 Jun 2024 15:24:08 +0200 Subject: [PATCH 1/4] implement weapon gilding --- src/controllers/api/gildWeaponController.ts | 64 +++++++++++++++++++ src/routes/api.ts | 2 + .../inventoryTypes/commonInventoryTypes.ts | 2 + 3 files changed, 68 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 00000000..cfb5b889 --- /dev/null +++ b/src/controllers/api/gildWeaponController.ts @@ -0,0 +1,64 @@ +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; + Caterogy: 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.Caterogy = req.query.Category as WeaponTypeInternal | "Hoverboards"; + + const inventory = await getInventory(accountId); + if(!inventory[data.Caterogy]){ + throw new Error(`Category ${req.query.Category} dont foudn in inventory`); + } + const weaponIndex = inventory[data.Caterogy].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.Caterogy][weaponIndex]; + weapon.Features = EquipmentFeatures.GILDING; // maybe 9 idk if DOUBLE_CAPACITY is also given + weapon.ItemName = data.ItemName + weapon.XP = 0; + if(data.Caterogy != "OperatorAmps" && (data.PolarizeSlot && data.PolarizeValue)){ + weapon.Polarity= [{ + Slot: data.PolarizeSlot, + Value: data.PolarizeValue + }] + } + inventory[data.Caterogy][weaponIndex] = weapon + await inventory.save(); + + res.json({ + InventoryChanges: { + [data.Caterogy]: [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..2fb86566 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, + GILDING = 8, ARCANE_SLOT = 32, INCARNON_GENESIS = 512 } @@ -112,6 +113,7 @@ export interface IEquipmentDatabase { Expiry?: IMongoDate; SkillTree?: string; ArchonCrystalUpgrades?: IArchonCrystalUpgrade[]; + ItemId: IOid; _id: Types.ObjectId; } -- 2.47.2 From 3c9da532a8bc00b765b2446cd5ef986c4351e7fc Mon Sep 17 00:00:00 2001 From: AMelonInsideLemon Date: Wed, 26 Jun 2024 13:28:33 +0000 Subject: [PATCH 2/4] Apply prettier changes --- src/controllers/api/gildWeaponController.ts | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/controllers/api/gildWeaponController.ts b/src/controllers/api/gildWeaponController.ts index cfb5b889..b05e61ce 100644 --- a/src/controllers/api/gildWeaponController.ts +++ b/src/controllers/api/gildWeaponController.ts @@ -35,25 +35,27 @@ export const gildWeaponController: RequestHandler = async (req, res) => { data.Caterogy = req.query.Category as WeaponTypeInternal | "Hoverboards"; const inventory = await getInventory(accountId); - if(!inventory[data.Caterogy]){ + if (!inventory[data.Caterogy]) { throw new Error(`Category ${req.query.Category} dont foudn in inventory`); } const weaponIndex = inventory[data.Caterogy].findIndex(x => String(x._id) === data.ItemId); - if(weaponIndex === -1){ + if (weaponIndex === -1) { throw new Error(`Weapon with ${data.ItemId} not found in category ${req.query.Category}`); } const weapon = inventory[data.Caterogy][weaponIndex]; weapon.Features = EquipmentFeatures.GILDING; // maybe 9 idk if DOUBLE_CAPACITY is also given - weapon.ItemName = data.ItemName + weapon.ItemName = data.ItemName; weapon.XP = 0; - if(data.Caterogy != "OperatorAmps" && (data.PolarizeSlot && data.PolarizeValue)){ - weapon.Polarity= [{ - Slot: data.PolarizeSlot, - Value: data.PolarizeValue - }] + if (data.Caterogy != "OperatorAmps" && data.PolarizeSlot && data.PolarizeValue) { + weapon.Polarity = [ + { + Slot: data.PolarizeSlot, + Value: data.PolarizeValue + } + ]; } - inventory[data.Caterogy][weaponIndex] = weapon + inventory[data.Caterogy][weaponIndex] = weapon; await inventory.save(); res.json({ -- 2.47.2 From 22d8b378d283d2d378024ce161ea901f7124d73d Mon Sep 17 00:00:00 2001 From: dutlist <166175391+AMelonInsideLemon@users.noreply.github.com> Date: Wed, 26 Jun 2024 17:10:17 +0200 Subject: [PATCH 3/4] typo --- src/controllers/api/gildWeaponController.ts | 22 +++++++++---------- .../inventoryTypes/commonInventoryTypes.ts | 3 +-- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/controllers/api/gildWeaponController.ts b/src/controllers/api/gildWeaponController.ts index b05e61ce..99b7a2d7 100644 --- a/src/controllers/api/gildWeaponController.ts +++ b/src/controllers/api/gildWeaponController.ts @@ -19,7 +19,7 @@ interface IGildWeaponRequest { PolarizeSlot?: number; PolarizeValue?: ArtifactPolarity; ItemId: string; - Caterogy: WeaponTypeInternal | "Hoverboards"; + Category: WeaponTypeInternal | "Hoverboards"; } // In export there no recipes for gild action, so reputation and ressources only consumed visually @@ -30,24 +30,24 @@ export const gildWeaponController: RequestHandler = async (req, res) => { 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}`); + throw new Error(`Unknown modular weapon Category: ${req.query.Category}`); } - data.Caterogy = req.query.Category as WeaponTypeInternal | "Hoverboards"; + data.Category = req.query.Category as WeaponTypeInternal | "Hoverboards"; const inventory = await getInventory(accountId); - if (!inventory[data.Caterogy]) { - throw new Error(`Category ${req.query.Category} dont foudn in inventory`); + if(!inventory[data.Category]) { + throw new Error(`Category ${req.query.Category} not found in inventory`); } - const weaponIndex = inventory[data.Caterogy].findIndex(x => String(x._id) === data.ItemId); + 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.Caterogy][weaponIndex]; - weapon.Features = EquipmentFeatures.GILDING; // maybe 9 idk if DOUBLE_CAPACITY is also given + 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.Caterogy != "OperatorAmps" && data.PolarizeSlot && data.PolarizeValue) { + if (data.Category != "OperatorAmps" && data.PolarizeSlot && data.PolarizeValue) { weapon.Polarity = [ { Slot: data.PolarizeSlot, @@ -55,12 +55,12 @@ export const gildWeaponController: RequestHandler = async (req, res) => { } ]; } - inventory[data.Caterogy][weaponIndex] = weapon; + inventory[data.Category][weaponIndex] = weapon; await inventory.save(); res.json({ InventoryChanges: { - [data.Caterogy]: [weapon] + [data.Category]: [weapon] } }); }; diff --git a/src/types/inventoryTypes/commonInventoryTypes.ts b/src/types/inventoryTypes/commonInventoryTypes.ts index 2fb86566..f7026c0c 100644 --- a/src/types/inventoryTypes/commonInventoryTypes.ts +++ b/src/types/inventoryTypes/commonInventoryTypes.ts @@ -86,7 +86,7 @@ export enum EquipmentFeatures { DOUBLE_CAPACITY = 1, UTILITY_SLOT = 2, GRAVIMAG_INSTALLED = 4, - GILDING = 8, + GILDED = 8, ARCANE_SLOT = 32, INCARNON_GENESIS = 512 } @@ -113,7 +113,6 @@ export interface IEquipmentDatabase { Expiry?: IMongoDate; SkillTree?: string; ArchonCrystalUpgrades?: IArchonCrystalUpgrade[]; - ItemId: IOid; _id: Types.ObjectId; } -- 2.47.2 From b8864d43995d2ef02a2af367943da2e4aff5e2bd Mon Sep 17 00:00:00 2001 From: AMelonInsideLemon Date: Wed, 26 Jun 2024 15:10:52 +0000 Subject: [PATCH 4/4] Apply prettier changes --- src/controllers/api/gildWeaponController.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/api/gildWeaponController.ts b/src/controllers/api/gildWeaponController.ts index 99b7a2d7..0b77513f 100644 --- a/src/controllers/api/gildWeaponController.ts +++ b/src/controllers/api/gildWeaponController.ts @@ -35,7 +35,7 @@ export const gildWeaponController: RequestHandler = async (req, res) => { data.Category = req.query.Category as WeaponTypeInternal | "Hoverboards"; const inventory = await getInventory(accountId); - if(!inventory[data.Category]) { + 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); -- 2.47.2