public static string AttackModifier(this Item item, Character charecterToUse, bool isForAttack = true)
        {
            int dex = charecterToUse.Abilities.Dexterity.Modifier();
            int str = charecterToUse.Abilities.Strength.Modifier();
            int modToUse;
            string display;
            bool isThrown = item.Thrown;
            bool isFinesse = item.Finesse;
            bool isRanged = !string.IsNullOrWhiteSpace(item.Range);
            if(isThrown || isFinesse)
            {
                if(str > dex)
                {
                    modToUse = str;
                }
                else
                {
                    modToUse = dex;
                }
            }
            else
            {
                if(isRanged)
                {
                    modToUse = dex;
                }
                else
                {
                    modToUse = str;
                }
            }
            if(isForAttack)
            {
                if (charecterToUse.SpecialOverides.ProfiencyBonus != 0)
                {
                    modToUse += charecterToUse.SpecialOverides.ProfiencyBonus;
                }
                else
                {
                    modToUse += charecterToUse.ProfiencyBonus();
                }
            }
            if (isForAttack)
            {
                display = modToUse.ToString("+#;-#;+0");
            }
            else
            {
                if(modToUse == 0)
                {
                    display = string.Empty;
                }
                else
                {
                    display = modToUse.ToString("+#;-#;+0");
                }
            }

            return display;
        }
 public ActionResult Create(Character character)
 {
     if (ModelState.IsValid)
     {
         character.Save();
         return RedirectToAction("Index");
     }
     return View(character);
 }
 // GET: Characters/Delete/5
 public ActionResult Delete(int? id)
 {
     if (id == null)
     {
         return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
     }
     Character character = new Character().Load(id.Value);
     if (character == null)
     {
         return HttpNotFound();
     }
     return View(character);
 }
 public ActionResult CharecterSheet(int? id, bool isAlt = false)
 {
     ActionResult response;
     if (id == null)
     {
         response = new HttpStatusCodeResult(HttpStatusCode.BadRequest);
     }
     else
     {
         Character character = new Character().Load(id.Value);
         if (character == null)
         {
             response = HttpNotFound();
         }
         else
         {
             string charecterSheet = character.GetPdf(isAlt);
             FileStreamResult result = new FileStreamResult(new System.IO.FileStream(charecterSheet, System.IO.FileMode.Open), "application/pdf");
             result.FileDownloadName = charecterSheet.Split('\\').Last();
             response = result;
         }
     }
     return response;
 }
 // GET: Characters/Details/5
 public ActionResult Details(int? id)
 {
     ActionResult response;
     if (id == null)
     {
         response = new HttpStatusCodeResult(HttpStatusCode.BadRequest);
     }
     else
     {
         Character character = new Character().Load(id.Value);
         if (character == null)
         {
             response = HttpNotFound();
         }
         else
         {
             string sheetLocation = CharecterExtensions.Common.folderBase
                 + "Character Sheet - Form Fillable.pdf";
             character.GetPdf(false);
             sheetLocation = CharecterExtensions.Common.folderBase
                 + "Character Sheet - Alternative - Form Fillable.pdf";
             character.GetPdf(true);
             response = View(character);
         }
     }
     return response;
 }
 public ActionResult DeleteConfirmed(int id)
 {
     Character character = new Character().Load(id);
     character.Delete();
     return RedirectToAction("Index");
 }
 public ActionResult Edit(Character character)
 {
     ActionResult returnView;
     var invalidKeys = character.ClassLevels.Keys.Where(x => string.IsNullOrWhiteSpace(x)).ToList();
     var duplicateKeys = character.ClassLevels.Keys.GroupBy(x => x).Where(x => x.Count() > 1).Select(x => x.Key).ToList();
     character.Languages = character.Languages.First().Split(new string[] { ",", Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim()).ToList();
     character.OtherProfiencies = character.OtherProfiencies.First().Split(new string[] { ",", Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim()).ToList();
     character.Items.RemoveAll(x => x.Count == 0);
     if (invalidKeys.Any())
     {
         foreach (string invalidKey in invalidKeys)
         {
             character.ClassLevels.Remove(invalidKey);
         }
         character.Save();
         returnView = View(character);
     }
     else
     {
         if (ModelState.IsValid)
         {
             character.Save();
             returnView = View(character);
         }
         else
         {
             returnView = View(character);
         }
     }
     return returnView;
 }