fix: refund personal decos when destroying dojo room #2522

Merged
Sainan merged 1 commits from refund-fix into main 2025-07-20 10:35:15 -07:00

View File

@ -13,6 +13,7 @@ import {
IDojoComponentDatabase, IDojoComponentDatabase,
IDojoContributable, IDojoContributable,
IDojoDecoClient, IDojoDecoClient,
IDojoDecoDatabase,
IGuildClient, IGuildClient,
IGuildMemberClient, IGuildMemberClient,
IGuildMemberDatabase, IGuildMemberDatabase,
@ -309,7 +310,7 @@ export const removeDojoRoom = async (
guild.DojoEnergy -= meta.energy; guild.DojoEnergy -= meta.energy;
} }
moveResourcesToVault(guild, component); moveResourcesToVault(guild, component);
component.Decos?.forEach(deco => moveResourcesToVault(guild, deco)); component.Decos?.forEach(deco => refundDojoDeco(guild, component, deco));
if (guild.RoomChanges) { if (guild.RoomChanges) {
const index = guild.RoomChanges.findIndex(x => x.componentId.equals(component._id)); const index = guild.RoomChanges.findIndex(x => x.componentId.equals(component._id));
@ -344,6 +345,14 @@ export const removeDojoDeco = (
component.Decos!.findIndex(x => x._id.equals(decoId)), component.Decos!.findIndex(x => x._id.equals(decoId)),
1 1
)[0]; )[0];
refundDojoDeco(guild, component, deco);
};
export const refundDojoDeco = (
guild: TGuildDatabaseDocument,
component: IDojoComponentDatabase,
deco: IDojoDecoDatabase
): void => {
const meta = Object.values(ExportDojoRecipes.decos).find(x => x.resultType == deco.Type); const meta = Object.values(ExportDojoRecipes.decos).find(x => x.resultType == deco.Type);
if (meta) { if (meta) {
if (meta.capacityCost) { if (meta.capacityCost) {
@ -369,7 +378,7 @@ export const removeDojoDeco = (
]); ]);
} }
} }
moveResourcesToVault(guild, deco); moveResourcesToVault(guild, deco); // Refund resources spent on construction
}; };
const moveResourcesToVault = (guild: TGuildDatabaseDocument, component: IDojoContributable): void => { const moveResourcesToVault = (guild: TGuildDatabaseDocument, component: IDojoContributable): void => {