返回提交历史
Added
src/controllers/api/dojoComponentRushController.ts
+36
-0
Modified
src/routes/api.ts
+2
-0
Modified
src/types/guildTypes.ts
+7
-1
XFEstudio/SpaceNinjaServer
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
代码差异
3 个文件
+45
-1
@@ -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
}
@@ -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);
@@ -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 {