diff --git a/project/src/controllers/TraderController.ts b/project/src/controllers/TraderController.ts index 5edeff48..f810db93 100644 --- a/project/src/controllers/TraderController.ts +++ b/project/src/controllers/TraderController.ts @@ -1,4 +1,5 @@ import { FenceBaseAssortGenerator } from "@spt/generators/FenceBaseAssortGenerator"; +import { PaymentHelper } from "@spt/helpers/PaymentHelper"; import { ProfileHelper } from "@spt/helpers/ProfileHelper"; import { TraderAssortHelper } from "@spt/helpers/TraderAssortHelper"; import { TraderHelper } from "@spt/helpers/TraderHelper"; @@ -8,7 +9,7 @@ import { ConfigTypes } from "@spt/models/enums/ConfigTypes"; import { Money } from "@spt/models/enums/Money"; import { Traders } from "@spt/models/enums/Traders"; import { ITraderConfig } from "@spt/models/spt/config/ITraderConfig"; -import { ILogger } from "@spt/models/spt/utils/ILogger"; +import type { ILogger } from "@spt/models/spt/utils/ILogger"; import { ConfigServer } from "@spt/servers/ConfigServer"; import { DatabaseService } from "@spt/services/DatabaseService"; import { FenceService } from "@spt/services/FenceService"; @@ -16,7 +17,7 @@ import { RagfairPriceService } from "@spt/services/RagfairPriceService"; import { TraderAssortService } from "@spt/services/TraderAssortService"; import { TraderPurchasePersisterService } from "@spt/services/TraderPurchasePersisterService"; import { TimeUtil } from "@spt/utils/TimeUtil"; -import { ICloner } from "@spt/utils/cloners/ICloner"; +import type { ICloner } from "@spt/utils/cloners/ICloner"; import { inject, injectable } from "tsyringe"; @injectable() @@ -30,6 +31,7 @@ export class TraderController { @inject("TraderAssortHelper") protected traderAssortHelper: TraderAssortHelper, @inject("ProfileHelper") protected profileHelper: ProfileHelper, @inject("TraderHelper") protected traderHelper: TraderHelper, + @inject("PaymentHelper") protected paymentHelper: PaymentHelper, @inject("TraderAssortService") protected traderAssortService: TraderAssortService, @inject("RagfairPriceService") protected ragfairPriceService: RagfairPriceService, @inject("TraderPurchasePersisterService") @@ -65,7 +67,20 @@ export class TraderController { const trader = traders[traderId]; - // Create dict of trader assorts on server start + // Adjust price by traderPriceMultipler config property + if (this.traderConfig.traderPriceMultipler !== 1) { + for (const barterItem of Object.values(trader.assort.barter_scheme)) { + const barterSchemeItem = barterItem[0][0]; + + if (barterSchemeItem && this.paymentHelper.isMoneyTpl(barterSchemeItem._tpl)) { + barterSchemeItem.count += +( + barterSchemeItem.count * this.traderConfig.traderPriceMultipler + ).toFixed(2); + } + } + } + + // Create dict of pristine trader assorts on server start if (!this.traderAssortService.getPristineTraderAssort(traderId)) { const assortsClone = this.cloner.clone(trader.assort); this.traderAssortService.setPristineTraderAssort(traderId, assortsClone); diff --git a/project/src/generators/RagfairOfferGenerator.ts b/project/src/generators/RagfairOfferGenerator.ts index 7ecc6ae3..bc9a806c 100644 --- a/project/src/generators/RagfairOfferGenerator.ts +++ b/project/src/generators/RagfairOfferGenerator.ts @@ -24,7 +24,7 @@ import { } 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 type { ILogger } from "@spt/models/spt/utils/ILogger"; import { ConfigServer } from "@spt/servers/ConfigServer"; import { SaveServer } from "@spt/servers/SaveServer"; import { DatabaseService } from "@spt/services/DatabaseService"; @@ -35,7 +35,7 @@ import { RagfairPriceService } from "@spt/services/RagfairPriceService"; import { HashUtil } from "@spt/utils/HashUtil"; import { RandomUtil } from "@spt/utils/RandomUtil"; import { TimeUtil } from "@spt/utils/TimeUtil"; -import { ICloner } from "@spt/utils/cloners/ICloner"; +import type { ICloner } from "@spt/utils/cloners/ICloner"; import { inject, injectable } from "tsyringe"; @injectable() @@ -539,10 +539,10 @@ export class RagfairOfferGenerator { const time = this.timeUtil.getTimestamp(); const trader = this.databaseService.getTrader(traderID); - const assorts = trader.assort; + const assortsClone = this.cloner.clone(trader.assort); // Trader assorts / assort items are missing - if (!assorts?.items?.length) { + if (!assortsClone?.items?.length) { this.logger.error( this.localisationService.getText( "ragfair-no_trader_assorts_cant_generate_flea_offers", @@ -553,7 +553,7 @@ export class RagfairOfferGenerator { } const blacklist = this.ragfairConfig.dynamic.blacklist; - for (const item of assorts.items) { + for (const item of assortsClone.items) { // We only want to process 'base/root' items, no children if (item.slotId !== "hideout") { // skip mod items @@ -577,9 +577,9 @@ export class RagfairOfferGenerator { const isPreset = this.presetHelper.isPreset(item._id); const items: IItem[] = isPreset ? this.ragfairServerHelper.getPresetItems(item) - : [...[item], ...this.itemHelper.findAndReturnChildrenByAssort(item._id, assorts.items)]; + : [...[item], ...this.itemHelper.findAndReturnChildrenByAssort(item._id, assortsClone.items)]; - const barterScheme = assorts.barter_scheme[item._id]; + const barterScheme = assortsClone.barter_scheme[item._id]; if (!barterScheme) { this.logger.warning( this.localisationService.getText("ragfair-missing_barter_scheme", { @@ -591,18 +591,8 @@ export class RagfairOfferGenerator { continue; } - 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 barterSchemeItems = assortsClone.barter_scheme[item._id][0]; + const loyalLevel = assortsClone.loyal_level_items[item._id]; const offer = this.createAndAddFleaOffer(traderID, time, items, barterSchemeItems, loyalLevel, false);