public double GetEffectDuration(Effect ef) { switch (ef.Name) { case "Invisibility": case "Paralysis": case "Slow": case "Waterbreathing": return ef.Dur * 4 * Math.Pow(1.5, Convert.ToDouble(spinAlchemyLevel.Value) / 100) * (1 + Convert.ToDouble(spinAlchemistPerk.Value) / 100) * (1 + (chkPhysicianPerk.Checked && ef.Name.Contains("Restore") ? 0.25 : 0)) * (1 + (chkPoisonerPerk.Checked && ef.IsBeneficial == 0 ? 0.25 : 0) + (chkBenefactorPerk.Checked && ef.IsBeneficial == 1 ? 0.25 : 0)); default: return ef.Dur; } }
public int GetEffectValue(Effect ef, double mag, double dur) { var coef = 0.0794328; if (mag == 0.0 && dur == 0.0) mag = ef.Mag; return (int)Math.Floor(ef.Cost * (mag != 0.0 ? Math.Pow(mag, 1.1) : 1) * coef * (dur != 0.0 ? Math.Pow(dur, 1.1) : 1)); }
public Effect[] BuildEffects() { var web = new HtmlWeb(); var doc = web.Load(UrlEffects); var rows = doc.DocumentNode.SelectSingleNode("//table[@class='wikitable sortable']").SelectNodes("tr"); var headings = (from HtmlNode cell in rows.First().SelectNodes("th|td") select cell.InnerText).ToArray(); var reNum = new Regex(@"^\d+"); var efs = new List<Effect>(); foreach (var row in rows.Skip(1)) { var colIndex = 0; var ef = new Effect(); foreach (HtmlNode cell in row.SelectNodes("th|td")) { var text = cell.InnerText; switch (headings[colIndex]) { case "Effect (ID)": var _class = cell.Attributes["class"].Value; ef.IsBeneficial = _class.Equals("EffectPos") ? 1 : 0; var parts = text.Split(new[] { "\n(", ")" }, StringSplitOptions.None); ef.Name = parts[0]; ef.ID = parts[1]; break; case "Description": ef.Description = text.Replace("<", "<") .Replace(">", ">"); break; case "Base_Cost": ef.Cost = Single.Parse(text); break; case "Base_Mag": ef.Mag = Int32.Parse(reNum.Match(text).Groups[0].Value); ef.Description = ef.Description.Replace("<mag>", ef.Mag.ToString()); break; case "Base_Dur": ef.Dur = Int32.Parse(reNum.Match(text).Groups[0].Value); ef.Description = ef.Description.Replace("<dur>", ef.Dur.ToString()); break; case "": ef.Value = Int32.Parse(reNum.Match(text).Groups[0].Value); break; case "Ingredients": default: break; } colIndex++; } efs.Add(ef); } return efs.ToArray(); }