feat: rushing decos

This commit is contained in:
Sainan 2025-03-04 19:15:35 +01:00
parent ca4fce8a46
commit 0b07efa1b0
3 changed files with 35 additions and 20 deletions

View File

@ -2,6 +2,7 @@ import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/invento
import { getDojoClient, getGuildForRequestEx, scaleRequiredCount } from "@/src/services/guildService"; import { getDojoClient, getGuildForRequestEx, scaleRequiredCount } from "@/src/services/guildService";
import { addMiscItems, getInventory, updateCurrency } from "@/src/services/inventoryService"; import { addMiscItems, getInventory, updateCurrency } from "@/src/services/inventoryService";
import { getAccountIdForRequest } from "@/src/services/loginService"; import { getAccountIdForRequest } from "@/src/services/loginService";
import { IDojoContributable } from "@/src/types/guildTypes";
import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes";
import { IInventoryChanges } from "@/src/types/purchaseTypes"; import { IInventoryChanges } from "@/src/types/purchaseTypes";
import { RequestHandler } from "express"; import { RequestHandler } from "express";
@ -53,12 +54,6 @@ export const contributeToDojoComponentController: RequestHandler = async (req, r
}); });
}; };
interface IDojoContributable {
RegularCredits?: number;
MiscItems?: IMiscItem[];
CompletionTime?: Date;
}
const processContribution = ( const processContribution = (
request: IContributeToDojoComponentRequest, request: IContributeToDojoComponentRequest,
inventory: TInventoryDatabaseDocument, inventory: TInventoryDatabaseDocument,

View File

@ -1,8 +1,18 @@
import { getDojoClient, getGuildForRequestEx, scaleRequiredCount } from "@/src/services/guildService"; import { getDojoClient, getGuildForRequestEx, scaleRequiredCount } from "@/src/services/guildService";
import { getInventory, updateCurrency } from "@/src/services/inventoryService"; import { getInventory, updateCurrency } from "@/src/services/inventoryService";
import { getAccountIdForRequest } from "@/src/services/loginService"; import { getAccountIdForRequest } from "@/src/services/loginService";
import { IDojoContributable } from "@/src/types/guildTypes";
import { RequestHandler } from "express"; import { RequestHandler } from "express";
import { ExportDojoRecipes } from "warframe-public-export-plus"; import { ExportDojoRecipes, IDojoRecipe } from "warframe-public-export-plus";
interface IDojoComponentRushRequest {
DecoType?: string;
DecoId?: string;
ComponentId: string;
Amount: number;
VaultAmount: number;
AllianceVaultAmount: number;
}
export const dojoComponentRushController: RequestHandler = async (req, res) => { export const dojoComponentRushController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req); const accountId = await getAccountIdForRequest(req);
@ -10,14 +20,16 @@ export const dojoComponentRushController: RequestHandler = async (req, res) => {
const guild = await getGuildForRequestEx(req, inventory); const guild = await getGuildForRequestEx(req, inventory);
const request = JSON.parse(String(req.body)) as IDojoComponentRushRequest; const request = JSON.parse(String(req.body)) as IDojoComponentRushRequest;
const component = guild.DojoComponents.id(request.ComponentId)!; const component = guild.DojoComponents.id(request.ComponentId)!;
const componentMeta = Object.values(ExportDojoRecipes.rooms).find(x => x.resultType == component.pf)!;
const fullPlatinumCost = scaleRequiredCount(componentMeta.skipTimePrice); if (request.DecoId) {
const fullDurationSeconds = componentMeta.time; const deco = component.Decos!.find(x => x._id.equals(request.DecoId))!;
const secondsPerPlatinum = fullDurationSeconds / fullPlatinumCost; const meta = Object.values(ExportDojoRecipes.decos).find(x => x.resultType == deco.Type)!;
component.CompletionTime = new Date( processContribution(deco, meta, request.Amount);
component.CompletionTime!.getTime() - secondsPerPlatinum * request.Amount * 1000 } else {
); const meta = Object.values(ExportDojoRecipes.rooms).find(x => x.resultType == component.pf)!;
processContribution(component, meta, request.Amount);
}
const inventoryChanges = updateCurrency(inventory, request.Amount, true); const inventoryChanges = updateCurrency(inventory, request.Amount, true);
await guild.save(); await guild.save();
@ -28,9 +40,11 @@ export const dojoComponentRushController: RequestHandler = async (req, res) => {
}); });
}; };
interface IDojoComponentRushRequest { const processContribution = (component: IDojoContributable, meta: IDojoRecipe, platinumDonated: number): void => {
ComponentId: string; const fullPlatinumCost = scaleRequiredCount(meta.skipTimePrice);
Amount: number; const fullDurationSeconds = meta.time;
VaultAmount: number; const secondsPerPlatinum = fullDurationSeconds / fullPlatinumCost;
AllianceVaultAmount: number; component.CompletionTime = new Date(
} component.CompletionTime!.getTime() - secondsPerPlatinum * platinumDonated * 1000
);
};

View File

@ -81,3 +81,9 @@ export interface ITechProjectClient {
export interface ITechProjectDatabase extends Omit<ITechProjectClient, "CompletionDate"> { export interface ITechProjectDatabase extends Omit<ITechProjectClient, "CompletionDate"> {
CompletionDate?: Date; CompletionDate?: Date;
} }
export interface IDojoContributable {
RegularCredits?: number;
MiscItems?: IMiscItem[];
CompletionTime?: Date;
}