// WingsEmu // // Developed by NosWings Team using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; namespace WingsEmu.Plugins.BasicImplementations.Algorithms.Shells; public interface IShellPerfumeConfiguration { int? GetPerfumesByLevelAndRarity(short level, byte rarity, bool isHeroic); int? GetGoldByLevel(short level, bool isHero); } public class ShellPerfumeConfiguration : IShellPerfumeConfiguration { private readonly ImmutableList _perfumes; public ShellPerfumeConfiguration(IEnumerable perfumeConfigurations) => _perfumes = perfumeConfigurations.ToImmutableList(); public int? GetPerfumesByLevelAndRarity(short level, byte rarity, bool isHeroic) { PerfumeConfiguration perfumeConfiguration = _perfumes.FirstOrDefault(s => s.IsHero == isHeroic && s.MinLevel <= level && s.MaxLevel >= level); if (perfumeConfiguration == null) { return null; } int? perfumes = perfumeConfiguration.Perfumes.FirstOrDefault(s => s.Rarity == rarity)?.Perfumes; return perfumes ?? 0; } public int? GetGoldByLevel(short level, bool isHeroic) => _perfumes .FirstOrDefault(s => s.IsHero == isHeroic && s.MinLevel <= level && s.MaxLevel >= level)?.Gold; } public class PerfumeConfiguration { public int MinLevel { get; set; } public int MaxLevel { get; set; } public int Gold { get; set; } public bool IsHero { get; set; } public List Perfumes { get; set; } } public class PerfumesByRarity { public int Rarity { get; set; } public int Perfumes { get; set; } }