Removed GetItemRarityMultiplier, the values in items.json are garbage and should not be used

Added system to add multiplier to items that are used to craft in the hideout
This commit is contained in:
Chomp
2025-09-18 23:35:27 +01:00
parent 35b595cff0
commit 55b819e1ec
3 changed files with 55 additions and 22 deletions
@@ -353,7 +353,9 @@
"itemTypeMultiplierOverride": {
"5c164d2286f774194c5e69fa": 2.5
},
"preventPriceBeingBelowTraderBuyPrice": true
"preventPriceBeingBelowTraderBuyPrice": true,
"useHideoutCraftMultiplier": true,
"hideoutCraftMultiplier": 0.5
}
},
"runIntervalSeconds": 8,
@@ -257,6 +257,12 @@ public record GenerateFleaPrices
[JsonPropertyName("itemTypeMultiplierOverride")]
public Dictionary<MongoId, double> ItemTypeMultiplierOverride { get; set; }
[JsonPropertyName("useHideoutCraftMultiplier")]
public bool UseHideoutCraftMultiplier { get; set; }
[JsonPropertyName("hideoutCraftMultiplier")]
public double HideoutCraftMultiplier { get; set; }
}
public record PriceRanges
@@ -72,17 +72,22 @@ public class RagfairPriceService(
/// </summary>
public void ReplaceFleaBasePrices()
{
var config = RagfairConfig.Dynamic.GenerateBaseFleaPrices;
var pricePool = databaseServer.GetTables().Templates.Prices;
var hideoutCraftItems = GetHideoutCraftItemTpls();
foreach (var (itemTpl, handbookPrice) in StaticPrices)
{
// Get new price to use
var newBasePrice = handbookPrice * (GetFleaBasePriceMultiplier(itemTpl) + GetItemRarityMultiplier(itemTpl));
var newBasePrice =
handbookPrice
* (GetFleaBasePriceMultiplier(itemTpl, config) + GetHideoutCraftMultiplier(itemTpl, config, hideoutCraftItems));
if (newBasePrice == 0)
{
continue;
}
if (RagfairConfig.Dynamic.GenerateBaseFleaPrices.PreventPriceBeingBelowTraderBuyPrice)
if (config.PreventPriceBeingBelowTraderBuyPrice)
{
// Check if item can be sold to trader for a higher price than what we're going to set
var highestSellToTraderPrice = traderHelper.GetHighestSellToTraderPrice(itemTpl);
@@ -97,12 +102,50 @@ public class RagfairPriceService(
}
}
/// <summary>
/// Get the multiplier to apply to items used in hideout crafts
/// If not hideout craft item, return 0
/// </summary>
/// <param name="itemTpl">Item to get multiplier for</param>
/// <param name="config">Ragfair config</param>
/// <param name="hideoutCraftItems">Craft item tpls</param>
/// <returns>Multiplier</returns>
protected double GetHideoutCraftMultiplier(MongoId itemTpl, GenerateFleaPrices config, HashSet<MongoId?> hideoutCraftItems)
{
if (!config.UseHideoutCraftMultiplier || !hideoutCraftItems.Contains(itemTpl))
{
return 0;
}
return config.HideoutCraftMultiplier;
}
/// <summary>
/// Get a set of item tpls used by hideout crafts as requirements
/// </summary>
/// <returns>Set</returns>
protected HashSet<MongoId?> GetHideoutCraftItemTpls()
{
var results = new HashSet<MongoId?>();
foreach (
var itemRequirements in databaseService
.GetHideout()
.Production.Recipes.Select(recipe => recipe.Requirements.Where(x => x.Type == "Item").Select(x => x.TemplateId))
)
{
results.UnionWith(itemRequirements);
}
return results;
}
/// <summary>
/// Get the multiplier to apply to a handbook price to create the base flea price of an item
/// </summary>
/// <param name="itemTpl">Item to look up multiplier of</param>
/// <param name="config"></param>
/// <returns>Multiplier value</returns>
protected double GetFleaBasePriceMultiplier(MongoId itemTpl)
protected double GetFleaBasePriceMultiplier(MongoId itemTpl, GenerateFleaPrices config)
{
// Specific item multiplier may exist, check for it
if (RagfairConfig.Dynamic.GenerateBaseFleaPrices.ItemTplMultiplierOverride.TryGetValue(itemTpl, out var specificItemMultiplier))
@@ -122,24 +165,6 @@ public class RagfairPriceService(
return RagfairConfig.Dynamic.GenerateBaseFleaPrices.PriceMultiplier;
}
protected double GetItemRarityMultiplier(MongoId itemTpl)
{
var itemDetails = itemHelper.GetItem(itemTpl);
switch (itemDetails.Value?.Properties?.RarityPvE ?? string.Empty)
{
case "Common":
return 0;
case "Rare":
return 0.2;
case "Superrare":
return 0.5;
case "Not_exist":
return 1;
default:
return 0;
}
}
/// <summary>
/// Get the dynamic price for an item. If value doesn't exist, use static (handbook) value.
/// if no static value, return 1