public void PerkUpgrateRarity(int unitId, int perkId) { var(data, unit) = _units.GetUnit(unitId); var perk = _units.Static.Perks[perkId]; if (!data.PerkStars.ContainsKey(perkId)) { throw new Exception($"Perk missing. Unit id = {unitId} perk id = {perkId}"); } var rarity = perk.Rarities.Values.FirstOrDefault(x => x.Stars == data.PerkStars[perkId]); foreach (var price in rarity.Prices?.Values ?? new IPrice[0]) { _scorers.Spend(price, _formuls); } data.PerkStars[perkId]++; LogicLog.UpgradePerkLevel(unitId, perkId, data.PerkStars[perkId]); _impact.ExecuteContextImpact(unit.ImpactUpdrade, unitId); }