From 7e78f8b7587a072577536ff4f80b19afe94f1583 Mon Sep 17 00:00:00 2001 From: Sainan Date: Fri, 14 Mar 2025 15:13:09 +0100 Subject: [PATCH] feat: pause research --- src/controllers/api/guildTechController.ts | 9 ++++++++- src/services/guildService.ts | 14 ++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/controllers/api/guildTechController.ts b/src/controllers/api/guildTechController.ts index e30539ec..db7b2f80 100644 --- a/src/controllers/api/guildTechController.ts +++ b/src/controllers/api/guildTechController.ts @@ -4,6 +4,7 @@ import { getGuildVault, hasAccessToDojo, hasGuildPermission, + removePigmentsFromGuildMembers, scaleRequiredCount } from "@/src/services/guildService"; import { ExportDojoRecipes, IDojoResearch } from "warframe-public-export-plus"; @@ -188,6 +189,12 @@ export const guildTechController: RequestHandler = async (req, res) => { await inventory.save(); // Not a mistake: This response uses `inventoryChanges` instead of `InventoryChanges`. res.json({ inventoryChanges: inventoryChanges }); + } else if (data.Action == "Pause") { + const project = guild.TechProjects!.find(x => x.ItemType == data.RecipeType)!; + project.State = -2; + await guild.save(); + await removePigmentsFromGuildMembers(guild._id); + res.end(); } else { throw new Error(`unknown guildTech action: ${data.Action}`); } @@ -236,7 +243,7 @@ type TGuildTechRequest = | IGuildTechContributeRequest; interface IGuildTechBasicRequest { - Action: "Start" | "Fabricate"; + Action: "Start" | "Fabricate" | "Pause"; Mode: "Guild"; RecipeType: string; } diff --git a/src/services/guildService.ts b/src/services/guildService.ts index 8a7e0220..4af38962 100644 --- a/src/services/guildService.ts +++ b/src/services/guildService.ts @@ -349,3 +349,17 @@ export const hasGuildPermissionEx = ( const rank = guild.Ranks[member.rank]; return (rank.Permissions & perm) != 0; }; + +export const removePigmentsFromGuildMembers = async (guildId: string | Types.ObjectId): Promise => { + const members = await GuildMember.find({ guildId }, "accountId"); + for (const member of members) { + const inventory = await getInventory(member.accountId.toString(), "MiscItems"); + const index = inventory.MiscItems.findIndex( + x => x.ItemType == "/Lotus/Types/Items/Research/DojoColors/GenericDojoColorPigment" + ); + if (index != -1) { + inventory.MiscItems.splice(index, 1); + await inventory.save(); + } + } +};