chore: handle vendor per-item count limits
All checks were successful
Build / build (push) Successful in 1m45s
Build / build (pull_request) Successful in 50s

This commit is contained in:
Sainan 2025-05-17 06:01:31 +02:00
parent 870ff2dd2c
commit 056fb27157

View File

@ -268,11 +268,22 @@ const generateVendorManifest = (vendorInfo: IGeneratableVendorInfo): IVendorMani
manifest.items.length != manifest.numItems.minValue) && manifest.items.length != manifest.numItems.minValue) &&
!manifest.isOneBinPerCycle !manifest.isOneBinPerCycle
) { ) {
const remainingItemCapacity: Record<string, number> = {};
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); const numItemsTarget = rng.randomInt(manifest.numItems.minValue, manifest.numItems.maxValue);
while (info.ItemManifest.length + offersToAdd.length < numItemsTarget) { while (info.ItemManifest.length + offersToAdd.length < numItemsTarget) {
// TODO: Consider per-bin item limits // TODO: Consider per-bin item limits
// TODO: Consider item probability weightings // 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 { } else {
let binThisCycle; let binThisCycle;