Resolve fence selling helmets that lack inserts
This commit is contained in:
parent
3ac64a3245
commit
cff4a45291
@ -143,6 +143,13 @@ export class ItemHelper
|
||||
return true;
|
||||
}
|
||||
|
||||
// Also classified as BUILT_IN_INSERTS
|
||||
const helmetInsertSlotIds = ["helmet_top", "helmet_back", "helmet_ears"]
|
||||
if (itemDbDetails[1]._props.Slots.find(slot => helmetInsertSlotIds.includes(slot._name.toLowerCase())))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -403,7 +403,6 @@ export class FenceService
|
||||
protected createAssorts(assortCount: number, assorts: ITraderAssort, loyaltyLevel: number): void
|
||||
{
|
||||
const fenceAssort = this.databaseServer.getTables().traders[Traders.FENCE].assort;
|
||||
const defaultPresets = this.presetHelper.getDefaultPresets();
|
||||
const fenceAssortIds = Object.keys(fenceAssort.loyal_level_items);
|
||||
const itemTypeCounts = this.initItemLimitCounter(this.traderConfig.fence.itemTypeLimits);
|
||||
|
||||
@ -412,6 +411,7 @@ export class FenceService
|
||||
// Add presets
|
||||
const maxPresetCount = Math.round(assortCount * (this.traderConfig.fence.maxPresetsPercent / 100));
|
||||
const randomisedPresetCount = this.randomUtil.getInt(0, maxPresetCount);
|
||||
const defaultPresets = this.presetHelper.getDefaultPresets();
|
||||
this.addPresets(randomisedPresetCount, defaultPresets, assorts, loyaltyLevel);
|
||||
}
|
||||
|
||||
@ -615,7 +615,7 @@ export class FenceService
|
||||
* Add weapon/armor presets to fence
|
||||
* @param assortCount how many assorts to add to assorts
|
||||
* @param defaultPresets a dictionary of default weapon presets
|
||||
* @param assorts object to add presets to
|
||||
* @param assorts Trader assort object to add preset to
|
||||
* @param loyaltyLevel loyalty level to requre item at
|
||||
*/
|
||||
protected addPresets(
|
||||
@ -645,19 +645,19 @@ export class FenceService
|
||||
}
|
||||
|
||||
// Construct preset + mods
|
||||
const weaponAndMods: Item[] = this.itemHelper.replaceIDs(
|
||||
const presetAndMods: Item[] = this.itemHelper.replaceIDs(
|
||||
null,
|
||||
this.jsonUtil.clone(defaultPresets[preset._id]._items),
|
||||
this.jsonUtil.clone(preset._items),
|
||||
);
|
||||
this.removeRandomModsOfItem(weaponAndMods);
|
||||
for (let i = 0; i < weaponAndMods.length; i++)
|
||||
this.removeRandomModsOfItem(presetAndMods);
|
||||
for (let i = 0; i < presetAndMods.length; i++)
|
||||
{
|
||||
const mod = weaponAndMods[i];
|
||||
const mod = presetAndMods[i];
|
||||
|
||||
// build root Item info
|
||||
// Build root Item info
|
||||
if (!("parentId" in mod))
|
||||
{
|
||||
mod._id = weaponAndMods[0]._id;
|
||||
mod._id = presetAndMods[0]._id;
|
||||
mod.parentId = "hideout";
|
||||
mod.slotId = "hideout";
|
||||
mod.upd = {
|
||||
@ -666,27 +666,30 @@ export class FenceService
|
||||
BuyRestrictionCurrent: 0,
|
||||
sptPresetId: preset._id, // Store preset id here so we can check it later to prevent preset dupes
|
||||
};
|
||||
|
||||
// Updated root item, exit loop
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const weaponItemDb = this.itemHelper.getItem(weaponAndMods[0]._tpl)[1];
|
||||
this.randomiseItemUpdProperties(weaponItemDb, weaponAndMods[0]);
|
||||
const presetDbItem = this.itemHelper.getItem(presetAndMods[0]._tpl)[1];
|
||||
this.randomiseItemUpdProperties(presetDbItem, presetAndMods[0]);
|
||||
|
||||
// Add weapon preset to assorts
|
||||
assorts.items.push(...weaponAndMods);
|
||||
// Add constructed preset to assorts
|
||||
assorts.items.push(...presetAndMods);
|
||||
|
||||
// Calculate preset price
|
||||
let rub = 0;
|
||||
for (const it of weaponAndMods)
|
||||
for (const it of presetAndMods)
|
||||
{
|
||||
rub += this.handbookHelper.getTemplatePrice(it._tpl);
|
||||
}
|
||||
|
||||
// Multiply weapon+mods rouble price by multipler in config
|
||||
assorts.barter_scheme[weaponAndMods[0]._id] = [[]];
|
||||
assorts.barter_scheme[weaponAndMods[0]._id][0][0] = { _tpl: Money.ROUBLES, count: Math.round(rub) };
|
||||
assorts.barter_scheme[presetAndMods[0]._id] = [[]];
|
||||
assorts.barter_scheme[presetAndMods[0]._id][0][0] = { _tpl: Money.ROUBLES, count: Math.round(rub) };
|
||||
|
||||
assorts.loyal_level_items[weaponAndMods[0]._id] = loyaltyLevel;
|
||||
assorts.loyal_level_items[presetAndMods[0]._id] = loyaltyLevel;
|
||||
|
||||
presetCount++;
|
||||
}
|
||||
@ -778,7 +781,8 @@ export class FenceService
|
||||
|| itemDetails._parent === BaseClasses.VEST
|
||||
|| itemDetails._parent === BaseClasses.ARMORED_EQUIPMENT
|
||||
|| itemDetails._parent === BaseClasses.FACECOVER
|
||||
|| itemDetails._parent === BaseClasses.ARMOR_PLATE) && itemDetails._props.MaxDurability > 0
|
||||
|| itemDetails._parent === BaseClasses.ARMOR_PLATE
|
||||
) && itemDetails._props.MaxDurability > 0
|
||||
)
|
||||
{
|
||||
const values = this.getRandomisedArmorDurabilityValues(itemDetails, this.traderConfig.fence.armorMaxDurabilityPercentMinMax);
|
||||
@ -832,6 +836,12 @@ export class FenceService
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a randomised current and max durabiltiy value for an armor item
|
||||
* @param itemDetails Item to create values for
|
||||
* @param maxDurabilityMinMaxPercent Max durabiltiy percent min/max values
|
||||
* @returns Durability + MaxDurability values
|
||||
*/
|
||||
protected getRandomisedArmorDurabilityValues(itemDetails: ITemplateItem, maxDurabilityMinMaxPercent: MinMax): Repairable
|
||||
{
|
||||
const duraMin = maxDurabilityMinMaxPercent.min / 100 * itemDetails._props.MaxDurability;
|
||||
@ -873,6 +883,7 @@ export class FenceService
|
||||
|
||||
/**
|
||||
* Get fence refresh time in seconds
|
||||
* @returns Refresh time in seconds
|
||||
*/
|
||||
protected getFenceRefreshTime(): number
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user