forked from OpenWF/SpaceNinjaServer
chore: handle vendor per-item count limits (#2084)
Reviewed-on: OpenWF/SpaceNinjaServer#2084 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
This commit is contained in:
parent
9b0989f1df
commit
ce59086f7d
@ -270,11 +270,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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user