private void CheckFeatPreReqInt(FeatFoundation feat)
        {
            if (feat.Int < 0)
            {
                return;
            }
            if (feat.BonusFeat)
            {
                return;
            }

            if (feat.Int > Int)
            {
                if (_sbCheckerBaseInput.CharacterClasses.HasClass("brawler"))
                {
                    if (feat.Int > 13 || feat.Type != FeatFoundational.FeatTypes.Combat)
                    {
                        _sbCheckerBaseInput.MessageXML.AddFail("Feat Pre Req", feat.Name + " needs min Int of " + feat.Int.ToString() + ", but has Int of " + Int.ToString());
                    }
                }
                else
                {
                    _sbCheckerBaseInput.MessageXML.AddFail("Feat Pre Req", feat.Name + " needs min Int of " + feat.Int.ToString() + ", but has Int of " + Int.ToString());
                }
            }
        }
        private void CheckFeatPreReqCon(FeatFoundation feat)
        {
            if (feat.Con < 0)
            {
                return;
            }
            if (feat.BonusFeat)
            {
                return;
            }

            if (_sbCheckerBaseInput.MonsterSBSearch.HasType("undead"))
            {
                if (feat.Con > Cha)
                {
                    _sbCheckerBaseInput.MessageXML.AddFail("Feat Pre Req", feat.Name + " needs min Con of " + feat.Con.ToString() + ", but has Cha(undead) of " + Cha.ToString());
                }
                return;
            }

            if (feat.Con > Con)
            {
                _sbCheckerBaseInput.MessageXML.AddFail("Feat Pre Req", feat.Name + " needs min Con of " + feat.Con.ToString() + ", but has Con of " + Con.ToString());
            }
        }
Ejemplo n.º 3
0
        public void ParseFeats(List <string> FeatList)
        {
            FeatList.RemoveAll(x => x == string.Empty);
            List <string> FailedFeats = new List <string>();
            string        hold        = string.Empty;
            string        temp        = string.Empty;
            bool          bonusFeat   = false;

            foreach (string feat in FeatList)
            {
                hold      = feat.Trim();
                hold      = hold.Replace("'", string.Empty);
                bonusFeat = false;
                if (hold.EndsWith("B"))
                {
                    hold      = hold.Substring(0, hold.Length - 1);
                    bonusFeat = true;
                }
                temp = string.Empty;
                int Pos = hold.IndexOf(PathfinderConstants.PAREN_LEFT);
                if (Pos >= 0)
                {
                    temp = hold.Substring(Pos);
                    hold = hold.Replace(temp, string.Empty).Trim();
                    temp = Utility.RemoveParentheses(temp);
                }
                hold = hold.Replace("**", string.Empty);
                hold = hold.Replace("*", string.Empty);

                Feat = ParceFeat(hold);
                if (Feat != null)
                {
                    if (temp.Length > 0)
                    {
                        Feat.SelectedItem = temp;
                    }
                    Feat.BonusFeat = bonusFeat;
                    FeatsList.Add(Feat);
                }
                else
                {
                    FailedFeats.Add(hold);
                }
            }
            if (FailedFeats.Any())
            {
                throw new Exception("Feats " + string.Join(",", FailedFeats.ToArray()) + " not defined");
            }
        }
        private void CheckFeatPreReqWis(FeatFoundation feat)
        {
            if (feat.Wis < 0)
            {
                return;
            }
            if (feat.BonusFeat)
            {
                return;
            }

            if (feat.Wis > Wis)
            {
                _sbCheckerBaseInput.MessageXML.AddFail("Feat Pre Req", feat.Name + " needs min Wis of " + feat.Wis.ToString() + ", but has Wis of " + Wis.ToString());
            }
        }
        private void CheckFeatPreReqCha(FeatFoundation feat)
        {
            if (feat.Cha < 0)
            {
                return;
            }
            if (feat.BonusFeat)
            {
                return;
            }

            if (feat.Cha > Cha)
            {
                _sbCheckerBaseInput.MessageXML.AddFail("Feat Pre Req", feat.Name + " needs min Cha of " + feat.Cha.ToString() + ", but has Cha of " + Cha.ToString());
            }
        }
        private void CheckFeatPreReqDex(FeatFoundation feat)
        {
            if (feat.Dex < 0)
            {
                return;
            }
            if (feat.BonusFeat)
            {
                return;
            }

            if (feat.Dex > Dex)
            {
                _sbCheckerBaseInput.MessageXML.AddFail("Feat Pre Req", feat.Name + " needs min Dex of " + feat.Dex.ToString() + ", but has Dex of " + Dex.ToString());
            }
        }
        private void CheckFeatPreReqBAB(FeatFoundation feat)
        {
            if (feat.BAB < 0)
            {
                return;
            }
            if (feat.BonusFeat)
            {
                return;
            }

            if (feat.BAB > BAB)
            {
                _sbCheckerBaseInput.MessageXML.AddFail("Feat Pre Req", feat.Name + " needs min BAB of " + feat.BAB.ToString() + ", but has BAB of " + BAB.ToString());
            }
        }
        private void ChechPreReqFeats(FeatFoundation feat)
        {
            List <string> preReqs = null;

            if (!feat.BonusFeat)
            {
                preReqs = feat.PreRequistFeats;
                foreach (string preReq in preReqs)
                {
                    bool          PreReqOrs = preReq.Contains("|");
                    List <string> preReqs2  = new List <string>();
                    bool          Fail      = false;
                    if (PreReqOrs)
                    {
                        preReqs2 = preReq.Split('|').ToList();
                        foreach (string preReq2 in preReqs2)
                        {
                            if (CheckOnePreReqFeat(feat, preReq2, out Fail))
                            {
                                continue;
                            }
                            if (!Fail)
                            {
                                break;
                            }
                        }
                        if (Fail)
                        {
                            _sbCheckerBaseInput.MessageXML.AddFail("Feat Pre Req", feat.Name + " is missing prereq feat " + preReq);
                        }
                    }
                    else
                    {
                        if (CheckOnePreReqFeat(feat, preReq, out Fail))
                        {
                            continue;
                        }
                        if (Fail)
                        {
                            _sbCheckerBaseInput.MessageXML.AddFail("Feat Pre Req", feat.Name + " is missing prereq feat " + preReq);
                        }
                    }
                }
            }
        }
        private void CheckFeatPreReqStr(FeatFoundation feat)
        {
            if (feat.Str < 0)
            {
                return;
            }
            if (feat.BonusFeat)
            {
                return;
            }
            if (_sbCheckerBaseInput.MonsterSBSearch.HasSubType("incorporeal"))
            {
                return;
            }

            if (feat.Str > Str)
            {
                _sbCheckerBaseInput.MessageXML.AddFail("Feat Pre Req", feat.Name + " needs min Str of " + feat.Str.ToString() + ", but has Str of " + Str.ToString());
            }
        }
        private bool CheckOnePreReqFeat(FeatFoundation feat, string preReq, out bool Fail)
        {
            Fail = false;
            string temp         = preReq.Trim();
            string selectedItem = null;
            int    Pos          = temp.IndexOf(PathfinderConstants.PAREN_LEFT);

            if (Pos >= 0)
            {
                selectedItem = temp.Substring(Pos);
                temp         = temp.Replace(selectedItem, string.Empty).Trim();
                selectedItem = Utility.RemoveParentheses(selectedItem);
            }
            if (selectedItem == null)
            {
                selectedItem = feat.SelectedItem;
            }
            if (selectedItem == "see below")
            {
                selectedItem = string.Empty;
            }
            if (selectedItem.Contains("see page"))
            {
                selectedItem = string.Empty;
            }
            if (!Feats.Exists(y => y.Name.ToLower() == temp.ToLower() && y.SelectedItem == selectedItem))
            {
                if (temp == "Weapon Focus" && Feats.Exists(y => y.Name.ToLower() == temp.ToLower()))
                {
                    return(true);
                }
                if (CheckBonusFeats(feat.Name))
                {
                    Fail = true;
                }
            }

            return(false);
        }
        private void CheckClassPreReqs(List <FeatData> Feats)
        {
            string methodName = "CheckClassPreReqs";

            foreach (ClassWrapper wrapper in _sbCheckerBaseInput.CharacterClasses.Classes)
            {
                List <string>  ClassPreReqs = _sbCheckerBaseInput.CharacterClasses.GetPrestigePreReqFeats(wrapper.Name);
                FeatFoundation tempFeat     = null;

                foreach (string oneFeat in ClassPreReqs)
                {
                    string        holdFeat    = oneFeat;
                    string        SelectdItem = string.Empty;
                    List <string> splitFeats  = oneFeat.Split(',').ToList();

                    bool Found = false;
                    foreach (string oneSplitFeat in splitFeats)
                    {
                        if (oneSplitFeat.Contains(" ("))
                        {
                            int Pos = oneSplitFeat.IndexOf(" (");
                            holdFeat    = oneSplitFeat.Substring(0, Pos).Trim();
                            SelectdItem = oneSplitFeat.Replace(holdFeat, string.Empty);
                            SelectdItem = Utility.RemoveParentheses(SelectdItem);
                        }
                        tempFeat = Feats.Find(p => p.Name == holdFeat && p.SelectedItem == SelectdItem);
                        if (tempFeat != null)
                        {
                            Found = true;
                            break;
                        }
                    }
                    if (!Found)
                    {
                        _sbCheckerBaseInput.MessageXML.AddFail(methodName, wrapper.Name + " is missing prereq feat " + oneFeat);
                    }
                }
            }
        }