From e8897886d2eae33ed413fb1e71b0d2fc175786bb Mon Sep 17 00:00:00 2001 From: Chomp Date: Thu, 18 Sep 2025 14:03:28 +0100 Subject: [PATCH] Added an item type price multiplier override to `GetFleaBasePriceMultiplier` All keycards now use a `2.5` multiplier, not just the red keycard --- .../SPT_Data/configs/ragfair.json | 6 ++-- .../Models/Spt/Config/RagfairConfig.cs | 3 ++ .../Services/RagfairPriceService.cs | 33 +++++++++++++++---- 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/Libraries/SPTarkov.Server.Assets/SPT_Data/configs/ragfair.json b/Libraries/SPTarkov.Server.Assets/SPT_Data/configs/ragfair.json index 0a025b1b..c34460c3 100644 --- a/Libraries/SPTarkov.Server.Assets/SPT_Data/configs/ragfair.json +++ b/Libraries/SPTarkov.Server.Assets/SPT_Data/configs/ragfair.json @@ -348,9 +348,11 @@ "useHandbookPrice": true, "priceMultiplier": 1.5, "itemTplMultiplierOverride": { - "5780cf7f2459777de4559322": 1.8, - "5c1d0efb86f7744baf2e7b7b": 2.5 + "5780cf7f2459777de4559322": 1.8 }, + "itemTypeMultiplierOverride": { + "5c164d2286f774194c5e69fa": 2.5 + }, "preventPriceBeingBelowTraderBuyPrice": true } }, diff --git a/Libraries/SPTarkov.Server.Core/Models/Spt/Config/RagfairConfig.cs b/Libraries/SPTarkov.Server.Core/Models/Spt/Config/RagfairConfig.cs index ce2190bb..d53888da 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Spt/Config/RagfairConfig.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Spt/Config/RagfairConfig.cs @@ -254,6 +254,9 @@ public record GenerateFleaPrices [JsonPropertyName("itemTplMultiplierOverride")] public Dictionary ItemTplMultiplierOverride { get; set; } + + [JsonPropertyName("itemTypeMultiplierOverride")] + public Dictionary ItemTypeMultiplierOverride { get; set; } } public record PriceRanges diff --git a/Libraries/SPTarkov.Server.Core/Services/RagfairPriceService.cs b/Libraries/SPTarkov.Server.Core/Services/RagfairPriceService.cs index 5f4e9506..7da77b5c 100644 --- a/Libraries/SPTarkov.Server.Core/Services/RagfairPriceService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/RagfairPriceService.cs @@ -76,18 +76,12 @@ public class RagfairPriceService( foreach (var (itemTpl, handbookPrice) in StaticPrices) { // Get new price to use - var newBasePrice = handbookPrice * RagfairConfig.Dynamic.GenerateBaseFleaPrices.PriceMultiplier; + var newBasePrice = handbookPrice * GetFleaBasePriceMultiplier(itemTpl); if (newBasePrice == 0) { continue; } - // Specific item multiplier may exist, check for it - if (RagfairConfig.Dynamic.GenerateBaseFleaPrices.ItemTplMultiplierOverride.TryGetValue(itemTpl, out var specificItemMultiplier)) - { - newBasePrice = handbookPrice * specificItemMultiplier; - } - if (RagfairConfig.Dynamic.GenerateBaseFleaPrices.PreventPriceBeingBelowTraderBuyPrice) { // Check if item can be sold to trader for a higher price than what we're going to set @@ -103,6 +97,31 @@ public class RagfairPriceService( } } + /// + /// Get the multiplier to apply to a handbook price to create the base flea price of an item + /// + /// Item to look up multiplier of + /// Multiplier value + protected double GetFleaBasePriceMultiplier(MongoId itemTpl) + { + // Specific item multiplier may exist, check for it + if (RagfairConfig.Dynamic.GenerateBaseFleaPrices.ItemTplMultiplierOverride.TryGetValue(itemTpl, out var specificItemMultiplier)) + { + return specificItemMultiplier; + } + + // Check if tpl is of each time, if it is, use that multi + foreach (var (itemType, multiplier) in RagfairConfig.Dynamic.GenerateBaseFleaPrices.ItemTypeMultiplierOverride) + { + if (itemHelper.IsOfBaseclass(itemTpl, itemType)) + { + return multiplier; + } + } + + return RagfairConfig.Dynamic.GenerateBaseFleaPrices.PriceMultiplier; + } + /// /// Get the dynamic price for an item. If value doesn't exist, use static (handbook) value. /// if no static value, return 1