Add ability to control weapon/equipment current durability

Fixed non-armored rigs not showing
Blacklist mk-18
This commit is contained in:
Dev 2024-02-10 09:57:44 +00:00
parent 9573290778
commit 973b74bd98
4 changed files with 58 additions and 24 deletions

View File

@ -109,21 +109,33 @@
"5c99f98d86f7745c314214b3": 2,
"5c164d2286f774194c5e69fa": 0
},
"presetMaxDurabilityPercentMinMax": {
"min": 39,
"max": 60
"weaponDurabilityPercentMinMax": {
"current": {
"min": 1,
"max": 90
},
"max": {
"min": 89,
"max": 100
}
},
"chancePlateExistsInArmorPercent": 50,
"armorMaxDurabilityPercentMinMax": {
"min": 35,
"max": 75
"current": {
"min": 1,
"max": 100
},
"max": {
"min": 80,
"max": 100
}
},
"itemStackSizeOverrideMinMax": {
"59e690b686f7746c9f75e848": {
"min": 5,
"max": 15
},
"5485a8684bdc2da71d8b4567": {
"5485a8684bdc2da71d8b4567": {
"min": 80,
"max": 7000
}
@ -217,8 +229,8 @@
"5448e54d4bdc2dcc718b4568",
"5a341c4086f77401f2541505",
"5422acb9af1c889c16000029",
"5448e5284bdc2dcb718b4567",
"64d0b40fbe2eed70e254e2d4"
"64d0b40fbe2eed70e254e2d4",
"5fc22d7c187fea44d52eda44"
],
"coopExtractGift": {
"sendGift": true,

View File

@ -74,6 +74,12 @@ export class FenceBaseAssortGenerator
}
}
// Only allow rigs with no slots (carrier rigs)
if (this.itemHelper.isOfBaseclass(rootItemDb._id, BaseClasses.VEST) && rootItemDb._props.Slots.length > 0)
{
continue;
}
// Skip seasonal event items when not in seasonal event
if (this.traderConfig.fence.blacklistSeasonalItems && blockedSeasonalItems.includes(rootItemDb._id))
{

View File

@ -30,8 +30,8 @@ export interface FenceConfig
equipmentPresetMinMax: MinMax;
itemPriceMult: number;
presetPriceMult: number;
armorMaxDurabilityPercentMinMax: MinMax;
presetMaxDurabilityPercentMinMax: MinMax;
armorMaxDurabilityPercentMinMax: IItemDurabilityCurrentMax;
weaponDurabilityPercentMinMax: IItemDurabilityCurrentMax;
chancePlateExistsInArmorPercent: number;
/** Key: item tpl */
itemStackSizeOverrideMinMax: Record<string, MinMax>;
@ -48,6 +48,12 @@ export interface FenceConfig
btrDeliveryExpireHours: number;
}
export interface IItemDurabilityCurrentMax
{
current: MinMax;
max: MinMax;
}
export interface CoopExtractReward extends LootRequest
{
sendGift: boolean;

View File

@ -12,7 +12,7 @@ import { ITraderAssort } from "@spt-aki/models/eft/common/tables/ITrader";
import { BaseClasses } from "@spt-aki/models/enums/BaseClasses";
import { ConfigTypes } from "@spt-aki/models/enums/ConfigTypes";
import { Traders } from "@spt-aki/models/enums/Traders";
import { ITraderConfig } from "@spt-aki/models/spt/config/ITraderConfig";
import { IItemDurabilityCurrentMax, ITraderConfig } from "@spt-aki/models/spt/config/ITraderConfig";
import {
IFenceAssortGenerationValues,
IGenerationAssortValues,
@ -998,14 +998,19 @@ export class FenceService
// Randomise Weapon durability
if (this.itemHelper.isOfBaseclass(itemDetails._id, BaseClasses.WEAPON))
{
const presetMaxDurabilityLimits = this.traderConfig.fence.presetMaxDurabilityPercentMinMax;
const duraMin = presetMaxDurabilityLimits.min / 100 * itemDetails._props.MaxDurability;
const duraMax = presetMaxDurabilityLimits.max / 100 * itemDetails._props.MaxDurability;
const weaponDurabilityLimits = this.traderConfig.fence.weaponDurabilityPercentMinMax;
const maxDuraMin = weaponDurabilityLimits.max.min / 100 * itemDetails._props.MaxDurability;
const maxDuraMax = weaponDurabilityLimits.max.max / 100 * itemDetails._props.MaxDurability;
const chosenMaxDurability = this.randomUtil.getInt(maxDuraMin, maxDuraMax);
const maxDurability = this.randomUtil.getInt(duraMin, duraMax);
const durability = this.randomUtil.getInt(1, maxDurability);
const currentDuraMin = weaponDurabilityLimits.current.min / 100 * itemDetails._props.MaxDurability;
const currentDuraMax = weaponDurabilityLimits.current.max / 100 * itemDetails._props.MaxDurability;
const currentDurability = Math.min(
this.randomUtil.getInt(currentDuraMin, currentDuraMax),
chosenMaxDurability,
);
itemToAdjust.upd.Repairable = { Durability: durability, MaxDurability: maxDurability };
itemToAdjust.upd.Repairable = { Durability: currentDurability, MaxDurability: chosenMaxDurability };
return;
}
@ -1043,21 +1048,26 @@ 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
* @param equipmentDurabilityLimits Max durabiltiy percent min/max values
* @returns Durability + MaxDurability values
*/
protected getRandomisedArmorDurabilityValues(
itemDetails: ITemplateItem,
maxDurabilityMinMaxPercent: MinMax,
equipmentDurabilityLimits: IItemDurabilityCurrentMax,
): Repairable
{
const duraMin = maxDurabilityMinMaxPercent.min / 100 * itemDetails._props.MaxDurability;
const duraMax = maxDurabilityMinMaxPercent.max / 100 * itemDetails._props.MaxDurability;
const maxDuraMin = equipmentDurabilityLimits.max.min / 100 * itemDetails._props.MaxDurability;
const maxDuraMax = equipmentDurabilityLimits.max.max / 100 * itemDetails._props.MaxDurability;
const chosenMaxDurability = this.randomUtil.getInt(maxDuraMin, maxDuraMax);
const maxDurability = this.randomUtil.getInt(duraMin, duraMax);
const durability = this.randomUtil.getInt(1, maxDurability);
const currentDuraMin = equipmentDurabilityLimits.current.min / 100 * itemDetails._props.MaxDurability;
const currentDuraMax = equipmentDurabilityLimits.current.max / 100 * itemDetails._props.MaxDurability;
const chosenCurrentDurability = Math.min(
this.randomUtil.getInt(currentDuraMin, currentDuraMax),
chosenMaxDurability,
);
return { Durability: durability, MaxDurability: maxDurability };
return { Durability: chosenCurrentDurability, MaxDurability: chosenMaxDurability };
}
/**