From 056fb2715767667a705926b42aa043ec4902c302 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Sat, 17 May 2025 06:01:31 +0200 Subject: [PATCH] chore: handle vendor per-item count limits --- src/services/serversideVendorsService.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/services/serversideVendorsService.ts b/src/services/serversideVendorsService.ts index aa6685a6..84d283dc 100644 --- a/src/services/serversideVendorsService.ts +++ b/src/services/serversideVendorsService.ts @@ -268,11 +268,22 @@ const generateVendorManifest = (vendorInfo: IGeneratableVendorInfo): IVendorMani manifest.items.length != manifest.numItems.minValue) && !manifest.isOneBinPerCycle ) { + const remainingItemCapacity: Record = {}; + for (const item of manifest.items) { + remainingItemCapacity[item.storeItem] = 1 + item.duplicates; + } + for (const offer of info.ItemManifest) { + remainingItemCapacity[offer.StoreItem] -= 1; + } const numItemsTarget = rng.randomInt(manifest.numItems.minValue, manifest.numItems.maxValue); while (info.ItemManifest.length + offersToAdd.length < numItemsTarget) { // TODO: Consider per-bin item limits // TODO: Consider item probability weightings - offersToAdd.push(rng.randomElement(manifest.items)!); + const item = rng.randomElement(manifest.items)!; + if (remainingItemCapacity[item.storeItem] != 0) { + remainingItemCapacity[item.storeItem] -= 1; + offersToAdd.push(item); + } } } else { let binThisCycle;