0
0
mirror of https://github.com/sp-tarkov/server.git synced 2025-02-12 16:10:43 -05:00

Fixed price discrepancy between trader and flea price for trader items, resolves #968

This commit is contained in:
Chomp 2024-12-03 11:53:22 +00:00
parent b48c1153e1
commit e5fb672579
3 changed files with 14 additions and 24 deletions

View File

@ -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);

View File

@ -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

View File

@ -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;