diff --git a/src/controllers/api/playerSkillsController.ts b/src/controllers/api/playerSkillsController.ts new file mode 100644 index 00000000..a82052d0 --- /dev/null +++ b/src/controllers/api/playerSkillsController.ts @@ -0,0 +1,29 @@ +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 = (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; +} diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index 7c8d5b75..62544cd5 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -438,18 +438,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 } ); @@ -1003,7 +1002,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 4194f44c..f88b527f 100644 --- a/src/routes/api.ts +++ b/src/routes/api.ts @@ -44,6 +44,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"; @@ -130,6 +131,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 6d6dd9bc..ae311613 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -814,13 +814,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;