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: auto-contribute from clan vault (#1435)

The wiki says this is also supposed to do partial fills, but didn't see that in my testing on live. Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1435 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>

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

代码差异

5 个文件 +68 -1
Modified src/controllers/api/placeDecoInComponentController.ts +39 -1
@@ -1,4 +1,12 @@
1 import { getDojoClient, getGuildForRequestEx, hasAccessToDojo, hasGuildPermission } from "@/src/services/guildService";
1 import {
2 getDojoClient,
3 getGuildForRequestEx,
4 getVaultMiscItemCount,
5 hasAccessToDojo,
6 hasGuildPermission,
7 processDojoBuildMaterialsGathered,
8 scaleRequiredCount
9 } from "@/src/services/guildService";
2 10 import { getInventory } from "@/src/services/inventoryService";
3 11 import { getAccountIdForRequest } from "@/src/services/loginService";
4 12 import { GuildPermission } from "@/src/types/guildTypes";
@@ -42,6 +50,36 @@ export const placeDecoInComponentController: RequestHandler = async (req, res) =
42 50 }
43 51 if (meta.price == 0 && meta.ingredients.length == 0) {
44 52 deco.CompletionTime = new Date();
53 } else if (guild.AutoContributeFromVault && guild.VaultRegularCredits && guild.VaultMiscItems) {
54 if (guild.VaultRegularCredits >= scaleRequiredCount(guild.Tier, meta.price)) {
55 let enoughMiscItems = true;
56 for (const ingredient of meta.ingredients) {
57 if (
58 getVaultMiscItemCount(guild, ingredient.ItemType) <
59 scaleRequiredCount(guild.Tier, ingredient.ItemCount)
60 ) {
61 enoughMiscItems = false;
62 break;
63 }
64 }
65 if (enoughMiscItems) {
66 guild.VaultRegularCredits -= meta.price;
67 deco.RegularCredits = meta.price;
68
69 deco.MiscItems = [];
70 for (const ingredient of meta.ingredients) {
71 guild.VaultMiscItems.find(x => x.ItemType == ingredient.ItemType)!.ItemCount -=
72 scaleRequiredCount(guild.Tier, ingredient.ItemCount);
73 deco.MiscItems.push({
74 ItemType: ingredient.ItemType,
75 ItemCount: scaleRequiredCount(guild.Tier, ingredient.ItemCount)
76 });
77 }
78
79 deco.CompletionTime = new Date(Date.now() + meta.time * 1000);
80 processDojoBuildMaterialsGathered(guild, meta);
81 }
82 }
45 83 }
46 84 }
47 85
Added src/controllers/api/saveVaultAutoContributeController.ts +25 -0
@@ -0,0 +1,25 @@
1 import { getJSONfromString } from "@/src/helpers/stringHelpers";
2 import { Guild } from "@/src/models/guildModel";
3 import { hasGuildPermission } from "@/src/services/guildService";
4 import { getInventory } from "@/src/services/inventoryService";
5 import { getAccountIdForRequest } from "@/src/services/loginService";
6 import { GuildPermission } from "@/src/types/guildTypes";
7 import { RequestHandler } from "express";
8
9 export const saveVaultAutoContributeController: RequestHandler = async (req, res) => {
10 const accountId = await getAccountIdForRequest(req);
11 const inventory = await getInventory(accountId, "GuildId");
12 const guild = (await Guild.findById(inventory.GuildId!, "Ranks AutoContributeFromVault"))!;
13 if (!(await hasGuildPermission(guild, accountId, GuildPermission.Treasurer))) {
14 res.status(400).send("Invalid permission").end();
15 return;
16 }
17 const data = getJSONfromString<ISetVaultAutoContributeRequest>(String(req.body));
18 guild.AutoContributeFromVault = data.autoContributeFromVault;
19 await guild.save();
20 res.end();
21 };
22
23 interface ISetVaultAutoContributeRequest {
24 autoContributeFromVault: boolean;
25 }
Modified src/models/guildModel.ts +1 -0
@@ -170,6 +170,7 @@ const guildSchema = new Schema<IGuildDatabase>(
170 170 TradeTax: { type: Number, default: 0 },
171 171 Tier: { type: Number, default: 1 },
172 172 Emblem: { type: Boolean },
173 AutoContributeFromVault: { type: Boolean },
173 174 AllianceId: { type: Types.ObjectId },
174 175 DojoComponents: { type: [dojoComponentSchema], default: [] },
175 176 DojoCapacity: { type: Number, default: 100 },
Modified src/routes/api.ts +2 -0
@@ -94,6 +94,7 @@ import { retrievePetFromStasisController } from "@/src/controllers/api/retrieveP
94 94 import { saveDialogueController } from "@/src/controllers/api/saveDialogueController";
95 95 import { saveLoadoutController } from "@/src/controllers/api/saveLoadout";
96 96 import { saveSettingsController } from "@/src/controllers/api/saveSettingsController";
97 import { saveVaultAutoContributeController } from "@/src/controllers/api/saveVaultAutoContributeController";
97 98 import { sellController } from "@/src/controllers/api/sellController";
98 99 import { setActiveQuestController } from "@/src/controllers/api/setActiveQuestController";
99 100 import { setActiveShipController } from "@/src/controllers/api/setActiveShipController";
@@ -246,6 +247,7 @@ apiRouter.post("/retrievePetFromStasis.php", retrievePetFromStasisController);
246 247 apiRouter.post("/saveDialogue.php", saveDialogueController);
247 248 apiRouter.post("/saveLoadout.php", saveLoadoutController);
248 249 apiRouter.post("/saveSettings.php", saveSettingsController);
250 apiRouter.post("/saveVaultAutoContribute.php", saveVaultAutoContributeController);
249 251 apiRouter.post("/sell.php", sellController);
250 252 apiRouter.post("/setDojoComponentMessage.php", setDojoComponentMessageController);
251 253 apiRouter.post("/setEquippedInstrument.php", setEquippedInstrumentController);
Modified src/types/guildTypes.ts +1 -0
@@ -32,6 +32,7 @@ export interface IGuildDatabase {
32 32 TradeTax: number;
33 33 Tier: number;
34 34 Emblem?: boolean;
35 AutoContributeFromVault?: boolean;
35 36 AllianceId?: Types.ObjectId;
36 37
37 38 DojoComponents: IDojoComponentDatabase[];