Exemple #1
0
        public string CreateFullText(MagicItemStatBlock SB)
        {
            MI_SB = SB;
            StringBuilder stringBulider = new StringBuilder();

            stringBulider.Append(CommonMethods.Get_CSS_Ref());

            Foramt_Basics_Div(stringBulider);
            stringBulider.Append(PathfinderConstants.EDIV);

            if (MI_SB.AL.Length > 0)
            {
                Foramt_Statisitcs_Div(stringBulider);
            }

            if (MI_SB.Description.Length > 0)
            {
                Format_Description_Div(stringBulider);
            }


            if (MI_SB.Destruction.Length > 0)
            {
                Format_Destruction_Div(stringBulider);
            }

            if (MI_SB.MagicItems.Length == 0 && MI_SB.Requirements.Length > 0)
            {
                Format_Construction_Div(stringBulider);
            }
            else
            {
                if (MI_SB.MagicItems.Length > 0)
                {
                    Format_Creation_Div(stringBulider);
                }
            }

            stringBulider = stringBulider.Replace("<i>fly</i>ing", "flying");
            stringBulider = stringBulider.Replace("<i>web</i>bing", "webbing");
            stringBulider = stringBulider.Replace("da<i>mage</i>", "damage");
            stringBulider = stringBulider.Replace("<i>heal</i>ing", "healing");
            stringBulider = stringBulider.Replace("<i>jump</i>ing", "jumping");
            stringBulider = stringBulider.Replace("<i>bleed</i>ing", "bleeding");
            stringBulider = stringBulider.Replace("f<i>light</i>", "flight");
            stringBulider = stringBulider.Replace("<i>light</i>ning", "lightning");
            stringBulider = stringBulider.Replace("<i><i>resist</i> energy</i>", "<i>resist energy</i>");
            stringBulider = stringBulider.Replace("<i>see <i>invisibility</i></i>", "<i>see invisibility</i>");
            stringBulider = stringBulider.Replace("<i>greater <i>magic</i> weapon</i>", "<i>greater magic weapon</i>");
            stringBulider = stringBulider.Replace("S<i>ki</i>ll", "Skill");
            stringBulider = stringBulider.Replace("channel <i>resistance</i>", "channel resistance");
            stringBulider = stringBulider.Replace("meta<i>magic</i>", "metamagic");
            stringBulider = stringBulider.Replace("<i>light</i> crossbow", "light crossbow");
            stringBulider = stringBulider.Replace("butter<i>fly</i>", "butterfly");
            stringBulider = stringBulider.Replace("<i>sleep</i>ing", "sleeping");
            stringBulider = stringBulider.Replace("<i>teleport</i>ation", "teleportation");
            stringBulider = stringBulider.Replace("<i>web</i>s", "webs");
            stringBulider = stringBulider.Replace("<i>heal</i>s", "heals");
            stringBulider = stringBulider.Replace("<i>ki</i>ng", "king");
            stringBulider = stringBulider.Replace("s<i>ki</i>ll", "skill");
            stringBulider = stringBulider.Replace("<i>heal</i>th", "health");
            stringBulider = stringBulider.Replace("moon<i>light</i>", "moonlight");

            List <string> Supers = Utility.GetSuperScripts();

            foreach (string super in Supers)
            {
                stringBulider = stringBulider.Replace(super, "<sup>" + super + "</sup>");
            }

            stringBulider = stringBulider.Replace("CONSTR<sup>UC</sup>TION", "CONSTRUCTION");
            stringBulider = stringBulider.Replace("DESTR<sup>UC</sup>TION", "DESTRUCTION");

            return(stringBulider.ToString());
        }
        public void ApplyBeforeCombatMagic()
        {
            if (!_spellsData.BeforeCombatMagic.Any())
            {
                return;
            }
            ISpellStatBlock    spell     = null;
            MagicItemStatBlock magicItem = null;

            _sbCheckerBaseInput.IndvSB.HD = _sbCheckerBaseInput.MonsterSB.HD;

            List <IndividualStatBlock_Combat> list = new List <IndividualStatBlock_Combat> {
                _sbCheckerBaseInput.IndvSB
            };
            Dictionary <string, int> Overrides = new Dictionary <string, int>();
            bool found = false;

            _spellsData.MagicInEffect = new List <string>();

            foreach (string magic in _spellsData.BeforeCombatMagic)
            {
                string search = magic;
                bool   Potion = false;
                bool   Oil    = false;
                Oil    = magic.Contains("oil");
                Potion = magic.Contains("potion");
                search = Utility.SearchMod(search);
                spell  = _spellStatBlockBusiness.GetSpellByName(search);
                if (spell != null && !Potion && !Oil)
                {
                    try
                    {
                        int CL = FindSpellCasterLevel(magic);
                        if (magic == "effortless armor")
                        {
                            int ACPmod = 1;
                            if (CL >= 5)
                            {
                                ACPmod++;
                            }
                            if (CL >= 10)
                            {
                                ACPmod++;
                            }
                            if (CL >= 15)
                            {
                                ACPmod++;
                            }
                            if (CL >= 20)
                            {
                                ACPmod++;
                            }
                            _armorClassData.TotalArmorCheckPenalty += ACPmod;
                            _sbCheckerBaseInput.MessageXML.AddInfo("effortless armor mod " + ACPmod.ToString());
                        }
                        _sbCheckerBaseInput.IndvSB.CastSpell(spell.name, CL, list);
                        found = true;
                        _spellsData.MagicInEffect.Add(spell.name + " CL: " + CL.ToString());
                    }
                    catch (Exception ex)
                    {
                        _sbCheckerBaseInput.MessageXML.AddFail("ApplyBeforeCombatMagic", "ApplyBeforeCombatMagic: Issue with " + magic + "-- " + ex.Message);
                    }
                }
                else
                {
                    magicItem = _magicItemStatBlockBusiness.GetMagicItemByName(magic);
                    if (magicItem != null)
                    {
                        found = true;
                    }
                    else
                    {
                        if (spell != null)
                        {
                            int CL = 0;
                            try
                            {
                                found = UseMagicalEquipment(ref spell, list, Overrides, magic, ref CL);
                            }
                            catch (Exception ex)
                            {
                                _sbCheckerBaseInput.MessageXML.AddInfo("Before Combat Magic: Issue with " + magic + " --" + ex.Message);
                            }
                            if (found)
                            {
                                _spellsData.MagicInEffect.Add(spell.name + " CL: " + CL.ToString());
                            }
                        }
                    }
                }

                if (!found)
                {
                    _sbCheckerBaseInput.MessageXML.AddInfo("Before Combat Magic: Issue with " + magic);
                }

                found = false;
            }


            if (_sbCheckerBaseInput.IndvSB.GetOnGoingStatBlockModsCount() > 0)
            {
                List <OnGoingStatBlockModifier> mods = _sbCheckerBaseInput.IndvSB.GetOnGoingStatBlockMods();

                if (Overrides.Any())
                {
                    foreach (KeyValuePair <string, int> kvp in Overrides)
                    {
                        for (int a = mods.Count - 1; a > 0; a--)
                        {
                            if (mods[a].Name.ToLower().Contains(kvp.Key.ToString()))
                            {
                                mods[a].Modifier = kvp.Value;
                            }
                        }
                    }
                }

                foreach (OnGoingStatBlockModifier mod in mods)
                {
                    //if (mod.ModType == OnGoingStatBlockModifier.StatBlockModifierTypes.AC)
                    //{
                    //    ACMods_Computed.AddModEffect(mod);
                    //}
                    if (mod.ModType == OnGoingStatBlockModifier.StatBlockModifierTypes.Attack)
                    {
                        _onGoingAttackMod += mod.Modifier;
                    }
                }
            }

            List <OnGoingStatBlockModifier> onGoingMods = _sbCheckerBaseInput.IndvSB.GetOnGoingStatBlockMods();

            //remove all ability mods since they have been already incorperated into the SB and we don't want to add them twice
            for (int a = onGoingMods.Count - 1; a >= 0; a--)
            {
                if (onGoingMods[a].ModType == OnGoingStatBlockModifier.StatBlockModifierTypes.Ability)
                {
                    onGoingMods.RemoveAt(a);
                }
            }

            if (_spellsData.MagicInEffect.Any())
            {
                string temp = string.Join(", ", _spellsData.MagicInEffect.ToArray());
                _sbCheckerBaseInput.MessageXML.AddInfo("Magic In Effect: " + temp);
            }
        }