XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESpaceNinjaServer

A simple server for a small space ninja game

公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/XFESpaceNinjaServer

feat: rush dojo component (#1075)

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: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1075

0869bbfb
Sainan <sainan@calamity.inc>
提交于

代码差异

3 个文件 +45 -1
Added src/controllers/api/dojoComponentRushController.ts +36 -0
@@ -0,0 +1,36 @@
1 import { getDojoClient, getGuildForRequestEx, scaleRequiredCount } from "@/src/services/guildService";
2 import { getInventory, updateCurrency } from "@/src/services/inventoryService";
3 import { getAccountIdForRequest } from "@/src/services/loginService";
4 import { RequestHandler } from "express";
5 import { ExportDojoRecipes } from "warframe-public-export-plus";
6
7 export const dojoComponentRushController: RequestHandler = async (req, res) => {
8 const accountId = await getAccountIdForRequest(req);
9 const inventory = await getInventory(accountId);
10 const guild = await getGuildForRequestEx(req, inventory);
11 const request = JSON.parse(String(req.body)) as IDojoComponentRushRequest;
12 const component = guild.DojoComponents.id(request.ComponentId)!;
13 const componentMeta = Object.values(ExportDojoRecipes.rooms).find(x => x.resultType == component.pf)!;
14
15 const fullPlatinumCost = scaleRequiredCount(componentMeta.skipTimePrice);
16 const fullDurationSeconds = componentMeta.time;
17 const secondsPerPlatinum = fullDurationSeconds / fullPlatinumCost;
18 component.CompletionTime = new Date(
19 component.CompletionTime!.getTime() - secondsPerPlatinum * request.Amount * 1000
20 );
21 const inventoryChanges = updateCurrency(inventory, request.Amount, true);
22
23 await guild.save();
24 await inventory.save();
25 res.json({
26 ...getDojoClient(guild, 0, component._id),
27 InventoryChanges: inventoryChanges
28 });
29 };
30
31 interface IDojoComponentRushRequest {
32 ComponentId: string;
33 Amount: number;
34 VaultAmount: number;
35 AllianceVaultAmount: number;
36 }
Modified src/routes/api.ts +2 -0
@@ -16,6 +16,7 @@ import { contributeToDojoComponentController } from "@/src/controllers/api/contr
16 16 import { createGuildController } from "@/src/controllers/api/createGuildController";
17 17 import { creditsController } from "@/src/controllers/api/creditsController";
18 18 import { deleteSessionController } from "@/src/controllers/api/deleteSessionController";
19 import { dojoComponentRushController } from "@/src/controllers/api/dojoComponentRushController";
19 20 import { dojoController } from "@/src/controllers/api/dojoController";
20 21 import { dronesController } from "@/src/controllers/api/dronesController";
21 22 import { endlessXpController } from "@/src/controllers/api/endlessXpController";
@@ -149,6 +150,7 @@ apiRouter.post("/clearDialogueHistory.php", clearDialogueHistoryController);
149 150 apiRouter.post("/completeRandomModChallenge.php", completeRandomModChallengeController);
150 151 apiRouter.post("/contributeToDojoComponent.php", contributeToDojoComponentController);
151 152 apiRouter.post("/createGuild.php", createGuildController);
153 apiRouter.post("/dojoComponentRush.php", dojoComponentRushController);
152 154 apiRouter.post("/drones.php", dronesController);
153 155 apiRouter.post("/endlessXp.php", endlessXpController);
154 156 apiRouter.post("/evolveWeapon.php", evolveWeaponController);
Modified src/types/guildTypes.ts +7 -1
@@ -39,14 +39,20 @@ export interface IDojoComponentClient {
39 39 RegularCredits?: number; // "Collecting Materials" state: Number of credits that were donated.
40 40 MiscItems?: IMiscItem[]; // "Collecting Materials" state: Resources that were donated.
41 41 CompletionTime?: IMongoDate;
42 RushPlatinum?: number;
43 DestructionTime?: IMongoDate;
42 44 DecoCapacity?: number;
43 45 }
44 46
45 47 export interface IDojoComponentDatabase
46 extends Omit<IDojoComponentClient, "id" | "pi" | "CompletionTime" | "DecoCapacity"> {
48 extends Omit<
49 IDojoComponentClient,
50 "id" | "pi" | "CompletionTime" | "RushPlatinum" | "DestructionTime" | "DecoCapacity"
51 > {
47 52 _id: Types.ObjectId;
48 53 pi?: Types.ObjectId;
49 54 CompletionTime?: Date;
55 //DestructionTime?: Date;
50 56 }
51 57
52 58 export interface ITechProjectClient {