From ce59086f7d882438fda0a7b1f8a634dd24064388 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Sat, 17 May 2025 23:29:16 -0700 Subject: [PATCH] chore: handle vendor per-item count limits (#2084) Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2084 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com> --- 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 08f19b3e..f6917d7d 100644 --- a/src/services/serversideVendorsService.ts +++ b/src/services/serversideVendorsService.ts @@ -270,11 +270,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;