返回提交历史
Modified
src/controllers/api/placeDecoInComponentController.ts
+39
-1
Added
src/controllers/api/saveVaultAutoContributeController.ts
+25
-0
Modified
src/models/guildModel.ts
+1
-0
Modified
src/routes/api.ts
+2
-0
Modified
src/types/guildTypes.ts
+1
-0
XFEstudio/SpaceNinjaServer
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
代码差异
5 个文件
+68
-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
@@ -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
}
@@ -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 },
@@ -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);
@@ -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[];