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,14 +109,26 @@
"5c99f98d86f7745c314214b3": 2, "5c99f98d86f7745c314214b3": 2,
"5c164d2286f774194c5e69fa": 0 "5c164d2286f774194c5e69fa": 0
}, },
"presetMaxDurabilityPercentMinMax": { "weaponDurabilityPercentMinMax": {
"min": 39, "current": {
"max": 60 "min": 1,
"max": 90
},
"max": {
"min": 89,
"max": 100
}
}, },
"chancePlateExistsInArmorPercent": 50, "chancePlateExistsInArmorPercent": 50,
"armorMaxDurabilityPercentMinMax": { "armorMaxDurabilityPercentMinMax": {
"min": 35, "current": {
"max": 75 "min": 1,
"max": 100
},
"max": {
"min": 80,
"max": 100
}
}, },
"itemStackSizeOverrideMinMax": { "itemStackSizeOverrideMinMax": {
"59e690b686f7746c9f75e848": { "59e690b686f7746c9f75e848": {
@ -217,8 +229,8 @@
"5448e54d4bdc2dcc718b4568", "5448e54d4bdc2dcc718b4568",
"5a341c4086f77401f2541505", "5a341c4086f77401f2541505",
"5422acb9af1c889c16000029", "5422acb9af1c889c16000029",
"5448e5284bdc2dcb718b4567", "64d0b40fbe2eed70e254e2d4",
"64d0b40fbe2eed70e254e2d4" "5fc22d7c187fea44d52eda44"
], ],
"coopExtractGift": { "coopExtractGift": {
"sendGift": true, "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 // Skip seasonal event items when not in seasonal event
if (this.traderConfig.fence.blacklistSeasonalItems && blockedSeasonalItems.includes(rootItemDb._id)) if (this.traderConfig.fence.blacklistSeasonalItems && blockedSeasonalItems.includes(rootItemDb._id))
{ {

View File

@ -30,8 +30,8 @@ export interface FenceConfig
equipmentPresetMinMax: MinMax; equipmentPresetMinMax: MinMax;
itemPriceMult: number; itemPriceMult: number;
presetPriceMult: number; presetPriceMult: number;
armorMaxDurabilityPercentMinMax: MinMax; armorMaxDurabilityPercentMinMax: IItemDurabilityCurrentMax;
presetMaxDurabilityPercentMinMax: MinMax; weaponDurabilityPercentMinMax: IItemDurabilityCurrentMax;
chancePlateExistsInArmorPercent: number; chancePlateExistsInArmorPercent: number;
/** Key: item tpl */ /** Key: item tpl */
itemStackSizeOverrideMinMax: Record<string, MinMax>; itemStackSizeOverrideMinMax: Record<string, MinMax>;
@ -48,6 +48,12 @@ export interface FenceConfig
btrDeliveryExpireHours: number; btrDeliveryExpireHours: number;
} }
export interface IItemDurabilityCurrentMax
{
current: MinMax;
max: MinMax;
}
export interface CoopExtractReward extends LootRequest export interface CoopExtractReward extends LootRequest
{ {
sendGift: boolean; 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 { BaseClasses } from "@spt-aki/models/enums/BaseClasses";
import { ConfigTypes } from "@spt-aki/models/enums/ConfigTypes"; import { ConfigTypes } from "@spt-aki/models/enums/ConfigTypes";
import { Traders } from "@spt-aki/models/enums/Traders"; 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 { import {
IFenceAssortGenerationValues, IFenceAssortGenerationValues,
IGenerationAssortValues, IGenerationAssortValues,
@ -998,14 +998,19 @@ export class FenceService
// Randomise Weapon durability // Randomise Weapon durability
if (this.itemHelper.isOfBaseclass(itemDetails._id, BaseClasses.WEAPON)) if (this.itemHelper.isOfBaseclass(itemDetails._id, BaseClasses.WEAPON))
{ {
const presetMaxDurabilityLimits = this.traderConfig.fence.presetMaxDurabilityPercentMinMax; const weaponDurabilityLimits = this.traderConfig.fence.weaponDurabilityPercentMinMax;
const duraMin = presetMaxDurabilityLimits.min / 100 * itemDetails._props.MaxDurability; const maxDuraMin = weaponDurabilityLimits.max.min / 100 * itemDetails._props.MaxDurability;
const duraMax = presetMaxDurabilityLimits.max / 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 currentDuraMin = weaponDurabilityLimits.current.min / 100 * itemDetails._props.MaxDurability;
const durability = this.randomUtil.getInt(1, 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; return;
} }
@ -1043,21 +1048,26 @@ export class FenceService
/** /**
* Generate a randomised current and max durabiltiy value for an armor item * Generate a randomised current and max durabiltiy value for an armor item
* @param itemDetails Item to create values for * @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 * @returns Durability + MaxDurability values
*/ */
protected getRandomisedArmorDurabilityValues( protected getRandomisedArmorDurabilityValues(
itemDetails: ITemplateItem, itemDetails: ITemplateItem,
maxDurabilityMinMaxPercent: MinMax, equipmentDurabilityLimits: IItemDurabilityCurrentMax,
): Repairable ): Repairable
{ {
const duraMin = maxDurabilityMinMaxPercent.min / 100 * itemDetails._props.MaxDurability; const maxDuraMin = equipmentDurabilityLimits.max.min / 100 * itemDetails._props.MaxDurability;
const duraMax = maxDurabilityMinMaxPercent.max / 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 currentDuraMin = equipmentDurabilityLimits.current.min / 100 * itemDetails._props.MaxDurability;
const durability = this.randomUtil.getInt(1, 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 };
} }
/** /**