fix: refund personal decos when destroying dojo room (#2522)
All checks were successful
Build Docker image / docker-arm64 (push) Successful in 1m1s
Build / build (push) Successful in 1m19s
Build Docker image / docker-amd64 (push) Successful in 51s

Closes #2521

Reviewed-on: #2522
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
This commit is contained in:
Sainan 2025-07-20 10:35:14 -07:00 committed by Sainan
parent 56aa3e3331
commit 62314e89c7

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 => {