From f56fc232f2ab4f217cb7ecdf8414ba4419c20892 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 6 Jan 2025 05:36:18 +0100 Subject: [PATCH] feat: leveling up intrinsics (#725) --- src/controllers/api/playerSkillsController.ts | 31 +++++++++++++++++++ src/models/inventoryModels/inventoryModel.ts | 25 +++++++-------- src/routes/api.ts | 2 ++ src/types/inventoryTypes/inventoryTypes.ts | 3 +- 4 files changed, 46 insertions(+), 15 deletions(-) create mode 100644 src/controllers/api/playerSkillsController.ts diff --git a/src/controllers/api/playerSkillsController.ts b/src/controllers/api/playerSkillsController.ts new file mode 100644 index 00000000..2610183f --- /dev/null +++ b/src/controllers/api/playerSkillsController.ts @@ -0,0 +1,31 @@ +import { getJSONfromString } from "@/src/helpers/stringHelpers"; +import { getInventory } from "@/src/services/inventoryService"; +import { getAccountIdForRequest } from "@/src/services/loginService"; +import { IPlayerSkills } from "@/src/types/inventoryTypes/inventoryTypes"; +import { RequestHandler } from "express"; + +export const playerSkillsController: RequestHandler = async (req, res) => { + const accountId = await getAccountIdForRequest(req); + const inventory = await getInventory(accountId); + const request = getJSONfromString(String(req.body)) as IPlayerSkillsRequest; + + const oldRank: number = inventory.PlayerSkills[request.Skill as keyof IPlayerSkills]; + const cost = (request.Pool == "LPP_DRIFTER" ? drifterCosts[oldRank] : 1 << oldRank) * 1000; + inventory.PlayerSkills[request.Pool as keyof IPlayerSkills] -= cost; + inventory.PlayerSkills[request.Skill as keyof IPlayerSkills]++; + await inventory.save(); + + res.json({ + Pool: request.Pool, + PoolInc: -cost, + Skill: request.Skill, + Rank: oldRank + 1 + }); +}; + +interface IPlayerSkillsRequest { + Pool: string; + Skill: string; +} + +const drifterCosts = [20, 25, 30, 45, 65, 90, 125, 160, 205, 255]; diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index f1e3edb6..964c89eb 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -439,18 +439,17 @@ const seasonChallengeHistorySchema = new Schema( //TODO: check whether this is complete const playerSkillsSchema = new Schema( { - LPP_SPACE: Number, - LPP_DRIFTER: Number, - LPS_NONE: Number, - LPS_PILOTING: Number, - LPS_GUNNERY: Number, - LPS_TACTICAL: Number, - LPS_ENGINEERING: Number, - LPS_COMMAND: Number, - LPS_DRIFT_COMBAT: Number, - LPS_DRIFT_RIDING: Number, - LPS_DRIFT_OPPORTUNITY: Number, - LPS_DRIFT_ENDURANCE: Number + LPP_SPACE: { type: Number, default: 0 }, + LPS_PILOTING: { type: Number, default: 0 }, + LPS_GUNNERY: { type: Number, default: 0 }, + LPS_TACTICAL: { type: Number, default: 0 }, + LPS_ENGINEERING: { type: Number, default: 0 }, + LPS_COMMAND: { type: Number, default: 0 }, + LPP_DRIFTER: { type: Number, default: 0 }, + LPS_DRIFT_COMBAT: { type: Number, default: 0 }, + LPS_DRIFT_RIDING: { type: Number, default: 0 }, + LPS_DRIFT_OPPORTUNITY: { type: Number, default: 0 }, + LPS_DRIFT_ENDURANCE: { type: Number, default: 0 } }, { _id: false } ); @@ -1018,7 +1017,7 @@ const inventorySchema = new Schema( //Modulars lvl and exp(Railjack|Duviri) //https://warframe.fandom.com/wiki/Intrinsics - PlayerSkills: playerSkillsSchema, + PlayerSkills: { type: playerSkillsSchema, default: {} }, //TradeBannedUntil data TradeBannedUntil: Schema.Types.Mixed, diff --git a/src/routes/api.ts b/src/routes/api.ts index d6a21ac7..2cc428a7 100644 --- a/src/routes/api.ts +++ b/src/routes/api.ts @@ -46,6 +46,7 @@ import { missionInventoryUpdateController } from "@/src/controllers/api/missionI import { modularWeaponCraftingController } from "@/src/controllers/api/modularWeaponCraftingController"; import { modularWeaponSaleController } from "@/src/controllers/api/modularWeaponSaleController"; import { nameWeaponController } from "@/src/controllers/api/nameWeaponController"; +import { playerSkillsController } from "@/src/controllers/api/playerSkillsController"; import { projectionManagerController } from "../controllers/api/projectionManagerController"; import { purchaseController } from "@/src/controllers/api/purchaseController"; import { queueDojoComponentDestructionController } from "@/src/controllers/api/queueDojoComponentDestructionController"; @@ -134,6 +135,7 @@ apiRouter.post("/login.php", loginController); apiRouter.post("/missionInventoryUpdate.php", missionInventoryUpdateController); apiRouter.post("/modularWeaponCrafting.php", modularWeaponCraftingController); apiRouter.post("/nameWeapon.php", nameWeaponController); +apiRouter.post("/playerSkills.php", playerSkillsController); apiRouter.post("/projectionManager.php", projectionManagerController); apiRouter.post("/purchase.php", purchaseController); apiRouter.post("/rerollRandomMod.php", rerollRandomModController); diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 81d12bff..89088da2 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -819,13 +819,12 @@ export interface IPersonalTechProject { export interface IPlayerSkills { LPP_SPACE: number; - LPP_DRIFTER: number; - LPS_NONE: number; LPS_PILOTING: number; LPS_GUNNERY: number; LPS_TACTICAL: number; LPS_ENGINEERING: number; LPS_COMMAND: number; + LPP_DRIFTER: number; LPS_DRIFT_COMBAT: number; LPS_DRIFT_RIDING: number; LPS_DRIFT_OPPORTUNITY: number;