chore: retroactively populate vendor to hide that it was just generated
For example, debt-bonds at ticker always expire in at least 2 hours so visiting him, you'd never see an offer with an expiry less than that. The solution here is simply generating offers for the last few hours.
This commit is contained in:
parent
3053112428
commit
705bbe9de5
@ -222,6 +222,22 @@ const toRange = (value: IRange | number): IRange => {
|
||||
return value;
|
||||
};
|
||||
|
||||
const getCycleDurationRange = (manifest: IVendor): IRange | undefined => {
|
||||
const res: IRange = { minValue: Number.MAX_SAFE_INTEGER, maxValue: 0 };
|
||||
for (const offer of manifest.items) {
|
||||
if (offer.durationHours) {
|
||||
const range = toRange(offer.durationHours);
|
||||
if (res.minValue > range.minValue) {
|
||||
res.minValue = range.minValue;
|
||||
}
|
||||
if (res.maxValue < range.maxValue) {
|
||||
res.maxValue = range.maxValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
return res.maxValue != 0 ? res : undefined;
|
||||
};
|
||||
|
||||
const vendorManifestCache: Record<string, IVendorManifest> = {};
|
||||
|
||||
const generateVendorManifest = (vendorInfo: IGeneratableVendorInfo): IVendorManifest => {
|
||||
@ -238,10 +254,16 @@ const generateVendorManifest = (vendorInfo: IGeneratableVendorInfo): IVendorMani
|
||||
}
|
||||
const cacheEntry = vendorManifestCache[vendorInfo.TypeName];
|
||||
const info = cacheEntry.VendorInfo;
|
||||
if (Date.now() >= parseInt(info.Expiry.$date.$numberLong)) {
|
||||
const manifest = ExportVendors[vendorInfo.TypeName];
|
||||
const cycleDurationRange = getCycleDurationRange(manifest);
|
||||
let now = Date.now();
|
||||
if (cycleDurationRange && cycleDurationRange.minValue != cycleDurationRange.maxValue) {
|
||||
now -= (cycleDurationRange.maxValue - 1) * unixTimesInMs.hour;
|
||||
}
|
||||
while (Date.now() >= parseInt(info.Expiry.$date.$numberLong)) {
|
||||
// Remove expired offers
|
||||
for (let i = 0; i != info.ItemManifest.length; ) {
|
||||
if (Date.now() >= parseInt(info.ItemManifest[i].Expiry.$date.$numberLong)) {
|
||||
if (now >= parseInt(info.ItemManifest[i].Expiry.$date.$numberLong)) {
|
||||
info.ItemManifest.splice(i, 1);
|
||||
} else {
|
||||
++i;
|
||||
@ -252,9 +274,8 @@ const generateVendorManifest = (vendorInfo: IGeneratableVendorInfo): IVendorMani
|
||||
const vendorSeed = parseInt(vendorInfo._id.$oid.substring(16), 16);
|
||||
const cycleOffset = vendorInfo.cycleOffset ?? 1734307200_000;
|
||||
const cycleDuration = vendorInfo.cycleDuration;
|
||||
const cycleIndex = Math.trunc((Date.now() - cycleOffset) / cycleDuration);
|
||||
const cycleIndex = Math.trunc((now - cycleOffset) / cycleDuration);
|
||||
const rng = new SRng(mixSeeds(vendorSeed, cycleIndex));
|
||||
const manifest = ExportVendors[vendorInfo.TypeName];
|
||||
const offersToAdd: IVendorOffer[] = [];
|
||||
if (!manifest.isOneBinPerCycle) {
|
||||
const remainingItemCapacity: Record<string, number> = {};
|
||||
@ -377,6 +398,8 @@ const generateVendorManifest = (vendorInfo: IGeneratableVendorInfo): IVendorMani
|
||||
}
|
||||
}
|
||||
info.Expiry.$date.$numberLong = soonestOfferExpiry.toString();
|
||||
|
||||
now += unixTimesInMs.hour;
|
||||
}
|
||||
return cacheEntry;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user