mirror of
https://github.com/sp-tarkov/server.git
synced 2025-02-13 09:50:43 -05:00
Cleanup of fence offer generation, no longer errors when buying items from high level fence offer page
This commit is contained in:
parent
034ac83a10
commit
e6e77d49a5
@ -195,7 +195,7 @@ export class FenceService
|
|||||||
*/
|
*/
|
||||||
public getRawFenceAssorts(): ITraderAssort
|
public getRawFenceAssorts(): ITraderAssort
|
||||||
{
|
{
|
||||||
return this.mergeAssorts(this.jsonUtil.clone(this.fenceAssort), this.fenceDiscountAssort);
|
return this.mergeAssorts(this.jsonUtil.clone(this.fenceAssort), this.jsonUtil.clone(this.fenceDiscountAssort));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -420,25 +420,25 @@ export class FenceService
|
|||||||
protected addItemAssorts(
|
protected addItemAssorts(
|
||||||
assortCount: number,
|
assortCount: number,
|
||||||
assorts: ITraderAssort,
|
assorts: ITraderAssort,
|
||||||
fenceAssort: ITraderAssort,
|
baseFenceAssort: ITraderAssort,
|
||||||
itemTypeCounts: Record<string, { current: number; max: number; }>,
|
itemTypeCounts: Record<string, { current: number; max: number; }>,
|
||||||
loyaltyLevel: number,
|
loyaltyLevel: number,
|
||||||
): void
|
): void
|
||||||
{
|
{
|
||||||
const priceLimits = this.traderConfig.fence.itemCategoryRoublePriceLimit;
|
const priceLimits = this.traderConfig.fence.itemCategoryRoublePriceLimit;
|
||||||
const assortRootItems = fenceAssort.items.filter(x => x.parentId === "hideout" && !x.upd?.sptPresetId);
|
const assortRootItems = baseFenceAssort.items.filter(x => x.parentId === "hideout" && !x.upd?.sptPresetId);
|
||||||
for (let i = 0; i < assortCount; i++)
|
for (let i = 0; i < assortCount; i++)
|
||||||
{
|
{
|
||||||
const chosenAssortRoot = this.randomUtil.getArrayValue(assortRootItems);
|
const chosenBaseAssortRoot = this.randomUtil.getArrayValue(assortRootItems);
|
||||||
if (!chosenAssortRoot)
|
if (!chosenBaseAssortRoot)
|
||||||
{
|
{
|
||||||
this.logger.error(this.localisationService.getText("fence-unable_to_find_assort_by_id", chosenAssortRoot._id));
|
this.logger.error(this.localisationService.getText("fence-unable_to_find_assort_by_id", chosenBaseAssortRoot._id));
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const desiredAssortItemAndChildrenClone = this.jsonUtil.clone(this.itemHelper.findAndReturnChildrenAsItems(fenceAssort.items, chosenAssortRoot._id));
|
const desiredAssortItemAndChildrenClone = this.jsonUtil.clone(this.itemHelper.findAndReturnChildrenAsItems(baseFenceAssort.items, chosenBaseAssortRoot._id));
|
||||||
|
|
||||||
const itemDbDetails = this.itemHelper.getItem(chosenAssortRoot._tpl)[1];
|
const itemDbDetails = this.itemHelper.getItem(chosenBaseAssortRoot._tpl)[1];
|
||||||
const itemLimitCount = itemTypeCounts[itemDbDetails._parent];
|
const itemLimitCount = itemTypeCounts[itemDbDetails._parent];
|
||||||
if (itemLimitCount && itemLimitCount.current > itemLimitCount.max)
|
if (itemLimitCount && itemLimitCount.current > itemLimitCount.max)
|
||||||
{
|
{
|
||||||
@ -447,18 +447,19 @@ export class FenceService
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
const itemIsPreset = this.presetHelper.isPreset(chosenAssortRoot._id);
|
const itemIsPreset = this.presetHelper.isPreset(chosenBaseAssortRoot._id);
|
||||||
|
|
||||||
const price = fenceAssort.barter_scheme[chosenAssortRoot._id][0][0].count;
|
const price = baseFenceAssort.barter_scheme[chosenBaseAssortRoot._id][0][0].count;
|
||||||
if (price === 0 || (price === 1 && !itemIsPreset) || price === 100)
|
if (price === 0 || (price === 1 && !itemIsPreset) || price === 100)
|
||||||
{
|
{
|
||||||
// Don't allow "special" items
|
// Don't allow "special" items / presets
|
||||||
i--;
|
i--;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (price > priceLimits[itemDbDetails._parent])
|
if (price > priceLimits[itemDbDetails._parent])
|
||||||
{
|
{
|
||||||
|
// Too expensive for fence, try another item
|
||||||
i--;
|
i--;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -470,8 +471,8 @@ export class FenceService
|
|||||||
}
|
}
|
||||||
|
|
||||||
// MUST randomise Ids as its possible to add the same base fence assort twice = duplicate IDs = dead client
|
// MUST randomise Ids as its possible to add the same base fence assort twice = duplicate IDs = dead client
|
||||||
this.itemHelper.remapRootItemId(desiredAssortItemAndChildrenClone);
|
|
||||||
this.itemHelper.replaceIDs(null, desiredAssortItemAndChildrenClone);
|
this.itemHelper.replaceIDs(null, desiredAssortItemAndChildrenClone);
|
||||||
|
this.itemHelper.remapRootItemId(desiredAssortItemAndChildrenClone);
|
||||||
|
|
||||||
const rootItemBeingAdded = desiredAssortItemAndChildrenClone[0];
|
const rootItemBeingAdded = desiredAssortItemAndChildrenClone[0];
|
||||||
this.randomiseItemUpdProperties(itemDbDetails, rootItemBeingAdded);
|
this.randomiseItemUpdProperties(itemDbDetails, rootItemBeingAdded);
|
||||||
@ -487,7 +488,7 @@ export class FenceService
|
|||||||
}
|
}
|
||||||
|
|
||||||
assorts.items.push(...desiredAssortItemAndChildrenClone);
|
assorts.items.push(...desiredAssortItemAndChildrenClone);
|
||||||
assorts.barter_scheme[rootItemBeingAdded._id] = fenceAssort.barter_scheme[chosenAssortRoot._id];
|
assorts.barter_scheme[rootItemBeingAdded._id] = baseFenceAssort.barter_scheme[chosenBaseAssortRoot._id];
|
||||||
assorts.loyal_level_items[rootItemBeingAdded._id] = loyaltyLevel;
|
assorts.loyal_level_items[rootItemBeingAdded._id] = loyaltyLevel;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user