diff --git a/package-lock.json b/package-lock.json index dfd8f6c9..824848de 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "copyfiles": "^2.4.1", "express": "^5", "mongoose": "^8.9.2", - "warframe-public-export-plus": "^0.5.13", + "warframe-public-export-plus": "^0.5.14", "warframe-riven-info": "^0.1.2", "winston": "^3.17.0", "winston-daily-rotate-file": "^5.0.0" @@ -3877,9 +3877,9 @@ } }, "node_modules/warframe-public-export-plus": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.13.tgz", - "integrity": "sha512-iyiaEsgZGQMU29jDag+Pq1z2q0/Zj4bCzTMtoZCSFtNUiZOPYwzjBmbYsDN0FO/yUoHu2dboW0lEYsdaofTEDQ==" + "version": "0.5.14", + "resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.14.tgz", + "integrity": "sha512-G6Jrs1PoETheYQjN2Mm6qVZeiIS5h2U8e+nHC3fPDVhLz3gZkbZShDOTCJ3JNAlP1NFrFYoBqUc6gMmN0Z9Acg==" }, "node_modules/warframe-riven-info": { "version": "0.1.2", diff --git a/package.json b/package.json index f0d7b78e..4ad256c5 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "copyfiles": "^2.4.1", "express": "^5", "mongoose": "^8.9.2", - "warframe-public-export-plus": "^0.5.13", + "warframe-public-export-plus": "^0.5.14", "warframe-riven-info": "^0.1.2", "winston": "^3.17.0", "winston-daily-rotate-file": "^5.0.0" diff --git a/src/controllers/api/getGuildDojoController.ts b/src/controllers/api/getGuildDojoController.ts index a220bb7e..e16040aa 100644 --- a/src/controllers/api/getGuildDojoController.ts +++ b/src/controllers/api/getGuildDojoController.ts @@ -33,8 +33,8 @@ export const getGuildDojoController: RequestHandler = async (req, res) => { FixedContributions: true, DojoRevision: 1, RevisionTime: Math.round(Date.now() / 1000), - Energy: 5, - Capacity: 100, + Energy: guild.DojoEnergy, + Capacity: guild.DojoCapacity, DojoRequestStatus: 0, DojoComponents: [] }; diff --git a/src/controllers/api/queueDojoComponentDestructionController.ts b/src/controllers/api/queueDojoComponentDestructionController.ts index 43671422..5c951ffc 100644 --- a/src/controllers/api/queueDojoComponentDestructionController.ts +++ b/src/controllers/api/queueDojoComponentDestructionController.ts @@ -1,13 +1,21 @@ import { getGuildForRequest } from "@/src/services/guildService"; import { RequestHandler } from "express"; +import { ExportDojoRecipes } from "warframe-public-export-plus"; export const queueDojoComponentDestructionController: RequestHandler = async (req, res) => { const guild = await getGuildForRequest(req); const componentId = req.query.componentId as string; - guild.DojoComponents!.splice( + const component = guild.DojoComponents!.splice( guild.DojoComponents!.findIndex(x => x._id.toString() === componentId), 1 - ); + )[0]; + if (component) { + const room = Object.values(ExportDojoRecipes.rooms).find(x => x.resultType == component.pf); + if (room) { + guild.DojoCapacity -= room.capacity; + guild.DojoEnergy -= room.energy; + } + } await guild.save(); res.json({ DojoRequestStatus: 1 diff --git a/src/controllers/api/startDojoRecipeController.ts b/src/controllers/api/startDojoRecipeController.ts index 42fbbd07..625912d5 100644 --- a/src/controllers/api/startDojoRecipeController.ts +++ b/src/controllers/api/startDojoRecipeController.ts @@ -2,6 +2,7 @@ import { RequestHandler } from "express"; import { IDojoComponentClient } from "@/src/types/guildTypes"; import { getGuildForRequest } from "@/src/services/guildService"; import { Types } from "mongoose"; +import { ExportDojoRecipes } from "warframe-public-export-plus"; interface IStartDojoRecipeRequest { PlacedComponent: IDojoComponentClient; @@ -12,6 +13,13 @@ export const startDojoRecipeController: RequestHandler = async (req, res) => { const guild = await getGuildForRequest(req); // At this point, we know that a member of the guild is making this request. Assuming they are allowed to start a build. const request = JSON.parse(String(req.body)) as IStartDojoRecipeRequest; + + const room = Object.values(ExportDojoRecipes.rooms).find(x => x.resultType == request.PlacedComponent.pf); + if (room) { + guild.DojoCapacity += room.capacity; + guild.DojoEnergy += room.energy; + } + guild.DojoComponents!.push({ _id: new Types.ObjectId(), pf: request.PlacedComponent.pf, diff --git a/src/models/guildModel.ts b/src/models/guildModel.ts index b83a7d42..22269ec8 100644 --- a/src/models/guildModel.ts +++ b/src/models/guildModel.ts @@ -13,7 +13,9 @@ const dojoComponentSchema = new Schema({ const guildSchema = new Schema( { Name: { type: String, required: true }, - DojoComponents: [dojoComponentSchema] + DojoComponents: [dojoComponentSchema], + DojoCapacity: { type: Number, default: 100 }, + DojoEnergy: { type: Number, default: 5 } }, { id: false } ); diff --git a/src/types/guildTypes.ts b/src/types/guildTypes.ts index fcf34713..54f87c98 100644 --- a/src/types/guildTypes.ts +++ b/src/types/guildTypes.ts @@ -9,6 +9,8 @@ export interface IGuild { export interface IGuildDatabase extends IGuild { _id: Types.ObjectId; DojoComponents?: IDojoComponentDatabase[]; + DojoCapacity: number; + DojoEnergy: number; } export interface ICreateGuildRequest { @@ -30,7 +32,7 @@ export interface IDojoClient { export interface IDojoComponentClient { id: IOid; - pf: string; + pf: string; // Prefab (.level) ppf: string; pi?: IOid; // Parent ID. N/A to root. op?: string; // "Open Portal"? N/A to root.