feat: rush dojo component (#1075)
All checks were successful
Build / build (20) (push) Successful in 37s
Build / build (18) (push) Successful in 54s
Build Docker image / docker (push) Successful in 33s
Build / build (22) (push) Successful in 1m4s

Closes #1072

This whole system is a bit weird to me. It seems the RushPlatinum is not used by the client at all, so the server just adjusts the CompletionTime. We seem to be about 1% off, but I'm not quite sure why.

Reviewed-on: #1075
This commit is contained in:
Sainan 2025-03-04 10:33:38 -08:00
parent fba1808b07
commit 0869bbfb27
3 changed files with 45 additions and 1 deletions

View File

@ -0,0 +1,36 @@
import { getDojoClient, getGuildForRequestEx, scaleRequiredCount } from "@/src/services/guildService";
import { getInventory, updateCurrency } from "@/src/services/inventoryService";
import { getAccountIdForRequest } from "@/src/services/loginService";
import { RequestHandler } from "express";
import { ExportDojoRecipes } from "warframe-public-export-plus";
export const dojoComponentRushController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId);
const guild = await getGuildForRequestEx(req, inventory);
const request = JSON.parse(String(req.body)) as IDojoComponentRushRequest;
const component = guild.DojoComponents.id(request.ComponentId)!;
const componentMeta = Object.values(ExportDojoRecipes.rooms).find(x => x.resultType == component.pf)!;
const fullPlatinumCost = scaleRequiredCount(componentMeta.skipTimePrice);
const fullDurationSeconds = componentMeta.time;
const secondsPerPlatinum = fullDurationSeconds / fullPlatinumCost;
component.CompletionTime = new Date(
component.CompletionTime!.getTime() - secondsPerPlatinum * request.Amount * 1000
);
const inventoryChanges = updateCurrency(inventory, request.Amount, true);
await guild.save();
await inventory.save();
res.json({
...getDojoClient(guild, 0, component._id),
InventoryChanges: inventoryChanges
});
};
interface IDojoComponentRushRequest {
ComponentId: string;
Amount: number;
VaultAmount: number;
AllianceVaultAmount: number;
}

View File

@ -16,6 +16,7 @@ import { contributeToDojoComponentController } from "@/src/controllers/api/contr
import { createGuildController } from "@/src/controllers/api/createGuildController"; import { createGuildController } from "@/src/controllers/api/createGuildController";
import { creditsController } from "@/src/controllers/api/creditsController"; import { creditsController } from "@/src/controllers/api/creditsController";
import { deleteSessionController } from "@/src/controllers/api/deleteSessionController"; import { deleteSessionController } from "@/src/controllers/api/deleteSessionController";
import { dojoComponentRushController } from "@/src/controllers/api/dojoComponentRushController";
import { dojoController } from "@/src/controllers/api/dojoController"; import { dojoController } from "@/src/controllers/api/dojoController";
import { dronesController } from "@/src/controllers/api/dronesController"; import { dronesController } from "@/src/controllers/api/dronesController";
import { endlessXpController } from "@/src/controllers/api/endlessXpController"; import { endlessXpController } from "@/src/controllers/api/endlessXpController";
@ -149,6 +150,7 @@ apiRouter.post("/clearDialogueHistory.php", clearDialogueHistoryController);
apiRouter.post("/completeRandomModChallenge.php", completeRandomModChallengeController); apiRouter.post("/completeRandomModChallenge.php", completeRandomModChallengeController);
apiRouter.post("/contributeToDojoComponent.php", contributeToDojoComponentController); apiRouter.post("/contributeToDojoComponent.php", contributeToDojoComponentController);
apiRouter.post("/createGuild.php", createGuildController); apiRouter.post("/createGuild.php", createGuildController);
apiRouter.post("/dojoComponentRush.php", dojoComponentRushController);
apiRouter.post("/drones.php", dronesController); apiRouter.post("/drones.php", dronesController);
apiRouter.post("/endlessXp.php", endlessXpController); apiRouter.post("/endlessXp.php", endlessXpController);
apiRouter.post("/evolveWeapon.php", evolveWeaponController); apiRouter.post("/evolveWeapon.php", evolveWeaponController);

View File

@ -39,14 +39,20 @@ export interface IDojoComponentClient {
RegularCredits?: number; // "Collecting Materials" state: Number of credits that were donated. RegularCredits?: number; // "Collecting Materials" state: Number of credits that were donated.
MiscItems?: IMiscItem[]; // "Collecting Materials" state: Resources that were donated. MiscItems?: IMiscItem[]; // "Collecting Materials" state: Resources that were donated.
CompletionTime?: IMongoDate; CompletionTime?: IMongoDate;
RushPlatinum?: number;
DestructionTime?: IMongoDate;
DecoCapacity?: number; DecoCapacity?: number;
} }
export interface IDojoComponentDatabase export interface IDojoComponentDatabase
extends Omit<IDojoComponentClient, "id" | "pi" | "CompletionTime" | "DecoCapacity"> { extends Omit<
IDojoComponentClient,
"id" | "pi" | "CompletionTime" | "RushPlatinum" | "DestructionTime" | "DecoCapacity"
> {
_id: Types.ObjectId; _id: Types.ObjectId;
pi?: Types.ObjectId; pi?: Types.ObjectId;
CompletionTime?: Date; CompletionTime?: Date;
//DestructionTime?: Date;
} }
export interface ITechProjectClient { export interface ITechProjectClient {