From 03adbc2420cac3cceb4486319255dffbe93ecc27 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Sun, 30 Mar 2025 00:39:11 +0100 Subject: [PATCH] adjust research costs based on new tier --- src/services/guildService.ts | 42 +++++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/src/services/guildService.ts b/src/services/guildService.ts index 0b5247a9..c537fd51 100644 --- a/src/services/guildService.ts +++ b/src/services/guildService.ts @@ -171,7 +171,7 @@ export const getDojoClient = async ( } if (newTier) { logger.debug(`clan finished building barracks, updating to tier ${newTier}`); - guild.Tier = newTier; + setGuildTier(guild, newTier); needSave = true; } } @@ -249,16 +249,16 @@ export const removeDojoRoom = (guild: TGuildDatabaseDocument, componentId: Types switch (component.pf) { case "/Lotus/Levels/ClanDojo/ClanDojoBarracksShadow.level": - guild.Tier = 1; + setGuildTier(guild, 1); break; case "/Lotus/Levels/ClanDojo/ClanDojoBarracksStorm.level": - guild.Tier = 2; + setGuildTier(guild, 2); break; case "/Lotus/Levels/ClanDojo/ClanDojoBarracksMountain.level": - guild.Tier = 3; + setGuildTier(guild, 3); break; case "/Lotus/Levels/ClanDojo/ClanDojoBarracksMoon.level": - guild.Tier = 4; + setGuildTier(guild, 4); break; } }; @@ -404,6 +404,38 @@ export const removePigmentsFromGuildMembers = async (guildId: string | Types.Obj } }; +const setGuildTier = (guild: TGuildDatabaseDocument, newTier: number): void => { + const oldTier = guild.Tier; + guild.Tier = newTier; + if (guild.TechProjects) { + for (const project of guild.TechProjects) { + const meta = ExportDojoRecipes.research[project.ItemType]; + + { + const numContributed = scaleRequiredCount(oldTier, meta.price) - project.ReqCredits; + project.ReqCredits = scaleRequiredCount(newTier, meta.price) - numContributed; + if (project.ReqCredits < 0) { + guild.VaultRegularCredits ??= 0; + guild.VaultRegularCredits += project.ReqCredits * -1; + project.ReqCredits = 0; + } + } + + for (let i = 0; i != project.ReqItems.length; ++i) { + const numContributed = + scaleRequiredCount(oldTier, meta.ingredients[i].ItemCount) - project.ReqItems[i].ItemCount; + project.ReqItems[i].ItemCount = + scaleRequiredCount(newTier, meta.ingredients[i].ItemCount) - numContributed; + if (project.ReqItems[i].ItemCount < 0) { + project.ReqItems[i].ItemCount *= -1; + addVaultMiscItems(guild, [project.ReqItems[i]]); + project.ReqItems[i].ItemCount = 0; + } + } + } + } +}; + export const deleteGuild = async (guildId: Types.ObjectId): Promise => { await Guild.deleteOne({ _id: guildId }); await GuildMember.deleteMany({ guildId });