From b4061b3e41cdbe3e7b4ed0438efa308702bb0ae7 Mon Sep 17 00:00:00 2001 From: Chomp <27521899+chompDev@users.noreply.github.com> Date: Mon, 9 Dec 2024 23:26:23 +0000 Subject: [PATCH] Better handle cultist rewards not fitting the container (#979) Better handle rewards not fitting (they shouldn't just poof) by instead trimming the rewards amount until they fit. (cherry picked from commit 8d05bf0069b22968d7e4fcdc4901ae0babd948c3) --- .../src/services/CircleOfCultistService.ts | 43 ++++++++++--------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/project/src/services/CircleOfCultistService.ts b/project/src/services/CircleOfCultistService.ts index 8db79f8e..6b2254aa 100644 --- a/project/src/services/CircleOfCultistService.ts +++ b/project/src/services/CircleOfCultistService.ts @@ -124,7 +124,7 @@ export class CircleOfCultistService { } } - const rewards = hasDirectReward + let rewards = hasDirectReward ? this.getDirectRewards(sessionId, directRewardSettings, cultistCircleStashId) : this.getRewardsWithinBudget( this.getCultistCircleRewardPool(sessionId, pmcData, craftingInfo, this.hideoutConfig.cultistCircle), @@ -138,27 +138,28 @@ export class CircleOfCultistService { // Ensure rewards fit into container const containerGrid = this.inventoryHelper.getContainerSlotMap(cultistStashDbItem[1]._id); - const canAddToContainer = this.inventoryHelper.canPlaceItemsInContainer( - this.cloner.clone(containerGrid), // MUST clone grid before passing in as function modifies grid - rewards, - ); - - if (canAddToContainer) { - for (const itemToAdd of rewards) { - this.inventoryHelper.placeItemInContainer( - containerGrid, - itemToAdd, - cultistCircleStashId, - CircleOfCultistService.circleOfCultistSlotId, - ); - // Add item + mods to output and profile inventory - output.profileChanges[sessionId].items.new.push(...itemToAdd); - pmcData.Inventory.items.push(...itemToAdd); - } - } else { - this.logger.error( - `Unable to fit all: ${rewards.length} reward items into sacrifice grid, nothing will be returned (rewards so valuable cultists stole it)`, + let canAddToContainer = false; + while (!canAddToContainer && rewards.length > 0) { + canAddToContainer = this.inventoryHelper.canPlaceItemsInContainer( + this.cloner.clone(containerGrid), // MUST clone grid before passing in as function modifies grid + rewards, ); + + if (canAddToContainer) { + for (const itemToAdd of rewards) { + this.inventoryHelper.placeItemInContainer( + containerGrid, + itemToAdd, + cultistCircleStashId, + CircleOfCultistService.circleOfCultistSlotId, + ); + // Add item + mods to output and profile inventory + output.profileChanges[sessionId].items.new.push(...itemToAdd); + pmcData.Inventory.items.push(...itemToAdd); + } + } else { + rewards.pop(); + } } return output;