adjust research costs based on new tier

This commit is contained in:
Sainan 2025-03-30 00:39:11 +01:00
parent da89f38b42
commit 03adbc2420

View File

@ -171,7 +171,7 @@ export const getDojoClient = async (
} }
if (newTier) { if (newTier) {
logger.debug(`clan finished building barracks, updating to tier ${newTier}`); logger.debug(`clan finished building barracks, updating to tier ${newTier}`);
guild.Tier = newTier; setGuildTier(guild, newTier);
needSave = true; needSave = true;
} }
} }
@ -249,16 +249,16 @@ export const removeDojoRoom = (guild: TGuildDatabaseDocument, componentId: Types
switch (component.pf) { switch (component.pf) {
case "/Lotus/Levels/ClanDojo/ClanDojoBarracksShadow.level": case "/Lotus/Levels/ClanDojo/ClanDojoBarracksShadow.level":
guild.Tier = 1; setGuildTier(guild, 1);
break; break;
case "/Lotus/Levels/ClanDojo/ClanDojoBarracksStorm.level": case "/Lotus/Levels/ClanDojo/ClanDojoBarracksStorm.level":
guild.Tier = 2; setGuildTier(guild, 2);
break; break;
case "/Lotus/Levels/ClanDojo/ClanDojoBarracksMountain.level": case "/Lotus/Levels/ClanDojo/ClanDojoBarracksMountain.level":
guild.Tier = 3; setGuildTier(guild, 3);
break; break;
case "/Lotus/Levels/ClanDojo/ClanDojoBarracksMoon.level": case "/Lotus/Levels/ClanDojo/ClanDojoBarracksMoon.level":
guild.Tier = 4; setGuildTier(guild, 4);
break; 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<void> => { export const deleteGuild = async (guildId: Types.ObjectId): Promise<void> => {
await Guild.deleteOne({ _id: guildId }); await Guild.deleteOne({ _id: guildId });
await GuildMember.deleteMany({ guildId }); await GuildMember.deleteMany({ guildId });