private async Task<Decryptor> CheckDecryptor(Decryptor decryptor, Domains.IndustryJob job, BlueprintInfo t2Print, decimal costOfInvention, int baseRuns, IEnumerable<MarketPrice> materialPrices) { try { var probability = await job.GetInventionSuccessProbability(5, 5, 5, decryptor.ProbabilityModifier); if (decryptor.TypeId > 0) costOfInvention += decryptor.Price; var runs = baseRuns + decryptor.MaxRunModifier; var t2Job = new Domains.IndustryJob(t2Print, new Blueprint { MaterialEfficiency = 2 + decryptor.MaterialEfficiencyModifier }); var materials = await _manufacturingService.GetRawMaterials(t2Job, 1); var itemCost = materials.Sum(mat => materialPrices.First(p => p.TypeId == mat.TypeId).Buy * mat.Quantity); var inventionCostPerRun = costOfInvention / runs * probability * (decimal)t2Print.Manufacturing.Products.First().Quantity; var dec = new Decryptor(decryptor.TypeId, decryptor.TypeName, decryptor.ProbabilityModifier, decryptor.MaxRunModifier, decryptor.MaterialEfficiencyModifier, decryptor.TimeEfficiencyModifier, decryptor.Price); dec.ProfitPerInvention = materialPrices.First(p => p.TypeId == t2Print.Manufacturing.Products.First().TypeId).Buy - inventionCostPerRun - itemCost; dec.ME = 2 + decryptor.MaterialEfficiencyModifier; dec.TE = 4 + decryptor.TimeEfficiencyModifier; dec.Runs = runs; return dec; } catch (Exception e) { throw new Exception($"{t2Print.Manufacturing.Products.First().TypeName} Failed with {decryptor.TypeName} with message: {e.Message}"); } }