Example #1
0
 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;
     }
 }
Example #2
0
 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));
 }
Example #3
0
        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("&lt;", "<")
                                                 .Replace("&gt;", ">");
                            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();
        }