Skip to content

Commit

Permalink
Moved reward fitting code into its own function, moved logic around
Browse files Browse the repository at this point in the history
  • Loading branch information
Chomp committed Dec 10, 2024
1 parent b4061b3 commit be31f72
Showing 1 changed file with 36 additions and 15 deletions.
51 changes: 36 additions & 15 deletions project/src/services/CircleOfCultistService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ export class CircleOfCultistService {
}
}

let rewards = hasDirectReward
const rewards = hasDirectReward
? this.getDirectRewards(sessionId, directRewardSettings, cultistCircleStashId)
: this.getRewardsWithinBudget(
this.getCultistCircleRewardPool(sessionId, pmcData, craftingInfo, this.hideoutConfig.cultistCircle),
Expand All @@ -138,31 +138,52 @@ export class CircleOfCultistService {

// Ensure rewards fit into container
const containerGrid = this.inventoryHelper.getContainerSlotMap(cultistStashDbItem[1]._id);
this.addRewardsToCircleContainer(sessionId, pmcData, rewards, containerGrid, cultistCircleStashId, output);

return output;
}

/**
* Attempt to add all rewards to cultist circle, if they dont fit remove one and try again until they fit
* @param sessionId Session id
* @param pmcData Player profile
* @param rewards Rewards to send to player
* @param containerGrid Cultist grid to add rewards to
* @param cultistCircleStashId Stash id
* @param output Client output
*/
protected addRewardsToCircleContainer(
sessionId: string,
pmcData: IPmcData,
rewards: IItem[][],
containerGrid: number[][],
cultistCircleStashId: string,
output: IItemEventRouterResponse,
): void {
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 {
// Doesn't fit, remove one item
if (!canAddToContainer) {
rewards.pop();
}
}

return output;
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);
}
}

/**
Expand Down

0 comments on commit be31f72

Please sign in to comment.