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: handle dojoComponentRush requests from ~U10 + respect buildLabel (#3494)

Closes #3477 Closes #3485 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/3494 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>

c4ed85a9
Sainan <63328889+Sainan@users.noreply.github.com>
提交于

代码差异

1 个文件 +36 -22
Modified src/controllers/api/dojoComponentRushController.ts +36 -22
@@ -7,41 +7,52 @@ import {
7 7 scaleRequiredCount
8 8 } from "../../services/guildService.ts";
9 9 import { getInventory, updateCurrency } from "../../services/inventoryService.ts";
10 import { getAccountIdForRequest } from "../../services/loginService.ts";
10 import { getAccountForRequest } from "../../services/loginService.ts";
11 11 import type { IDojoContributable } from "../../types/guildTypes.ts";
12 12 import type { RequestHandler } from "express";
13 13 import type { IDojoBuild } from "warframe-public-export-plus";
14 14 import { ExportDojoRecipes } from "warframe-public-export-plus";
15 15
16 interface IDojoComponentRushRequest {
17 DecoType?: string;
18 DecoId?: string;
19 ComponentId: string;
20 Amount: number;
21 VaultAmount: number;
22 AllianceVaultAmount: number;
23 }
16 type IDojoComponentRushRequest =
17 | {
18 DecoType?: string;
19 DecoId?: string;
20 ComponentId: string;
21 Amount: number;
22 VaultAmount: number;
23 AllianceVaultAmount: number;
24 }
25 | {
26 decoId?: string;
27 componentId: string;
28 amount: number;
29 vaultAmount: number;
30 };
24 31
25 32 export const dojoComponentRushController: RequestHandler = async (req, res) => {
26 const accountId = await getAccountIdForRequest(req);
27 const inventory = await getInventory(accountId);
33 const account = await getAccountForRequest(req);
34 const inventory = await getInventory(account._id.toString());
28 35 if (!hasAccessToDojo(inventory)) {
29 36 res.json({ DojoRequestStatus: -1 });
30 37 return;
31 38 }
32 39 const guild = await getGuildForRequestEx(req, inventory);
33 40 const request = JSON.parse(String(req.body)) as IDojoComponentRushRequest;
34 const component = guild.DojoComponents.id(request.ComponentId)!;
41 const component = guild.DojoComponents.id("ComponentId" in request ? request.ComponentId : request.componentId)!;
35 42
36 let platinumDonated = request.Amount;
37 const inventoryChanges = updateCurrency(inventory, request.Amount, true);
38 if (request.VaultAmount) {
39 platinumDonated += request.VaultAmount;
40 guild.VaultPremiumCredits! -= request.VaultAmount;
43 const amount = "Amount" in request ? request.Amount : request.amount;
44 let platinumDonated = amount;
45 const inventoryChanges = updateCurrency(inventory, amount, true);
46
47 const vaultAmount = "VaultAmount" in request ? request.VaultAmount : request.vaultAmount;
48 if (vaultAmount) {
49 platinumDonated += vaultAmount;
50 guild.VaultPremiumCredits! -= vaultAmount;
41 51 }
42 52
43 if (request.DecoId) {
44 const deco = component.Decos!.find(x => x._id.equals(request.DecoId))!;
53 const decoId = "DecoId" in request ? request.DecoId : "decoId" in request ? request.decoId : undefined;
54 if (decoId) {
55 const deco = component.Decos!.find(x => x._id.equals(decoId))!;
45 56 const meta = Object.values(ExportDojoRecipes.decos).find(x => x.resultType == deco.Type)!;
46 57 processContribution(guild, deco, meta, platinumDonated);
47 58 } else {
@@ -54,14 +65,17 @@ export const dojoComponentRushController: RequestHandler = async (req, res) => {
54 65 }
55 66 }
56 67
57 const guildMember = (await GuildMember.findOne({ accountId, guildId: guild._id }, "PremiumCreditsContributed"))!;
68 const guildMember = (await GuildMember.findOne(
69 { accountId: account._id, guildId: guild._id },
70 "PremiumCreditsContributed"
71 ))!;
58 72 guildMember.PremiumCreditsContributed ??= 0;
59 guildMember.PremiumCreditsContributed += request.Amount;
73 guildMember.PremiumCreditsContributed += amount;
60 74
61 75 await Promise.all([guild.save(), inventory.save(), guildMember.save()]);
62 76
63 77 res.json({
64 ...(await getDojoClient(guild, 0, component._id)),
78 ...(await getDojoClient(guild, 0, component._id, account.BuildLabel)),
65 79 InventoryChanges: inventoryChanges
66 80 });
67 81 };