public static int GetUnitPrice(Item item, Character character, out UnitPriceMethod methodUsed) { int marketPrice = MarketPriceCalculator.GetMarketPrice(item); int craftCost = item.MadeFrom.Any() ? CraftCostCalculator.CostToCraft(item, character) : -1; var price = DetermineUnitPrice(item, craftCost, marketPrice, out methodUsed); return(price); }
static int DetermineUnitPrice(Item item, int craftCost, int marketPrice, out UnitPriceMethod methodUsed) { if (item.HasSpecialPricing && !OverideSpecialPricing) { methodUsed = UnitPriceMethod.SpecialPricing; return(item.SpecialPricing); } if (item.Craft && !OverideDoCraftSetting) { methodUsed = UnitPriceMethod.Craft; return(craftCost); } Dictionary <UnitPriceMethod, int> values = new Dictionary <UnitPriceMethod, int>(); values.Add(UnitPriceMethod.Market, marketPrice); if (craftCost > 0 && !item.Craft && OverideDoCraftSetting) { values.Add(UnitPriceMethod.Craft, craftCost); } if (item.HasSpecialPricing) { values.Add(UnitPriceMethod.SpecialPricing, item.SpecialPricing); } if (item.VendorSells) { values.Add(UnitPriceMethod.Vendor, item.VendorCost); } var min = values.Min(p => p.Value); var kvp = values.FirstOrDefault(p => p.Value == min); methodUsed = kvp.Key; return(kvp.Value); }