From e5fb6725796933abebc58c45c17130da3ce6bb76 Mon Sep 17 00:00:00 2001 From: Chomp Date: Tue, 3 Dec 2024 11:53:22 +0000 Subject: [PATCH] Fixed price discrepancy between trader and flea price for trader items, resolves #968 --- .../src/generators/RagfairOfferGenerator.ts | 13 +++++++++++ project/src/helpers/TraderAssortHelper.ts | 23 ------------------- .../src/models/spt/config/ITraderConfig.ts | 2 +- 3 files changed, 14 insertions(+), 24 deletions(-) diff --git a/project/src/generators/RagfairOfferGenerator.ts b/project/src/generators/RagfairOfferGenerator.ts index 2adea4f0..c0f56e7b 100644 --- a/project/src/generators/RagfairOfferGenerator.ts +++ b/project/src/generators/RagfairOfferGenerator.ts @@ -22,6 +22,7 @@ import { IDynamic, IRagfairConfig, } from "@spt/models/spt/config/IRagfairConfig"; +import { ITraderConfig } from "@spt/models/spt/config/ITraderConfig"; import { ITplWithFleaPrice } from "@spt/models/spt/ragfair/ITplWithFleaPrice"; import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ConfigServer } from "@spt/servers/ConfigServer"; @@ -40,6 +41,7 @@ import { inject, injectable } from "tsyringe"; @injectable() export class RagfairOfferGenerator { protected ragfairConfig: IRagfairConfig; + protected traderConfig: ITraderConfig; protected botConfig: IBotConfig; protected allowedFleaPriceItemsForBarter: { tpl: string; price: number }[]; @@ -69,6 +71,7 @@ export class RagfairOfferGenerator { @inject("PrimaryCloner") protected cloner: ICloner, ) { this.ragfairConfig = this.configServer.getConfig(ConfigTypes.RAGFAIR); + this.traderConfig = this.configServer.getConfig(ConfigTypes.TRADER); this.botConfig = this.configServer.getConfig(ConfigTypes.BOT); } @@ -589,6 +592,16 @@ export class RagfairOfferGenerator { } const barterSchemeItems = assorts.barter_scheme[item._id][0]; + + // Adjust price by traderPriceMultipler config property + if (this.traderConfig.traderPriceMultipler > 0) { + if (barterSchemeItems.length === 1 && this.paymentHelper.isMoneyTpl(barterSchemeItems[0]._tpl)) { + barterSchemeItems[0].count = Math.ceil( + barterSchemeItems[0].count * this.traderConfig.traderPriceMultipler, + ); + } + } + const loyalLevel = assorts.loyal_level_items[item._id]; const offer = this.createAndAddFleaOffer(traderID, time, items, barterSchemeItems, loyalLevel, false); diff --git a/project/src/helpers/TraderAssortHelper.ts b/project/src/helpers/TraderAssortHelper.ts index c7700a72..c07e44db 100644 --- a/project/src/helpers/TraderAssortHelper.ts +++ b/project/src/helpers/TraderAssortHelper.ts @@ -122,11 +122,6 @@ export class TraderAssortHelper { this.removeItemsFromAssort(traderClone.assort, fullProfile.spt.blacklistedItemTpls); } - // Multiply price if multiplier is other than 1 - if (this.traderConfig.traderPriceMultipler !== 1) { - this.multiplyItemPricesByConfigMultiplier(traderClone.assort); - } - return traderClone.assort; } @@ -218,24 +213,6 @@ export class TraderAssortHelper { return trader.base.nextResupply <= time; } - /** - * Iterate over all assorts barter_scheme values, find barters selling for money and multiply by multipler in config - * @param traderAssort Assorts to multiple price of - */ - protected multiplyItemPricesByConfigMultiplier(traderAssort: ITraderAssort): void { - if (!this.traderConfig.traderPriceMultipler || this.traderConfig.traderPriceMultipler <= 0) { - this.traderConfig.traderPriceMultipler = 0.01; - this.logger.warning(this.localisationService.getText("trader-price_multipler_is_zero_use_default")); - } - - for (const assortId in traderAssort.barter_scheme) { - const schemeDetails = traderAssort.barter_scheme[assortId][0]; - if (schemeDetails.length === 1 && this.paymentHelper.isMoneyTpl(schemeDetails[0]._tpl)) { - schemeDetails[0].count = Math.ceil(schemeDetails[0].count * this.traderConfig.traderPriceMultipler); - } - } - } - /** * Get an array of pristine trader items prior to any alteration by player (as they were on server start) * @param traderId trader id diff --git a/project/src/models/spt/config/ITraderConfig.ts b/project/src/models/spt/config/ITraderConfig.ts index b17ecb39..30ffd28a 100644 --- a/project/src/models/spt/config/ITraderConfig.ts +++ b/project/src/models/spt/config/ITraderConfig.ts @@ -5,10 +5,10 @@ import { ILootRequest } from "@spt/models/spt/services/ILootRequest"; export interface ITraderConfig extends IBaseConfig { kind: "spt-trader"; updateTime: IUpdateTime[]; + updateTimeDefault: number; purchasesAreFoundInRaid: boolean; /** Should trader reset times be set based on server start time (false = bsg time - on the hour) */ tradersResetFromServerStart: boolean; - updateTimeDefault: number; traderPriceMultipler: number; fence: IFenceConfig; moddedTraders: IModdedTraders;