Beispiel #1
0
        public Cleric()
        {
            SetName("Cleric");
            HitDie = "1d8";

            ///////////////////
            // PROFICIENCIES //
            ///////////////////

            SetProficiencyBonus(2);
            var Proficiencies = new Dictionary <string, List <string> >()
            {
                { "Armor", new List <string>()
                  {
                      "Light Armor", "Medium Armor", "Shields"
                  } },
                { "Weapons", new List <string>()
                  {
                      "Simple Weapons"
                  } },
                { "Tools", new List <string>() },
                { "Saving Throws", new List <string>()
                  {
                      "Wisdom", "Charisma"
                  } },
                { "Skills", new List <string>()
                  {
                  } }
            };

            // Clerics can select two skills from the following list
            var clericSkillProfs = new List <string>()
            {
                "History",
                "Insight",
                "Medicine",
                "Persuasion",
                "Religion"
            };

            // Shuffle list and add the top two
            clericSkillProfs = Tools.ShuffleList(clericSkillProfs);
            Proficiencies["Skills"].Add(clericSkillProfs[0]);
            Proficiencies["Skills"].Add(clericSkillProfs[1]);

            // SRD Clerics can only be life domain, they are proficient in heavy armor
            Proficiencies["Armor"].Add("Heavy Armor");

            SetProficiencies(Proficiencies);

            ///////////////
            // EQUIPMENT //
            ///////////////
            // Clerics get a mace or a warhammer (if proficient)
            // Since Life domain clerics are not proficient in martial melee weapons we
            // just add a warhammer for now

            PrimaryWeapon = GetWeapons().Where(w => w.Name == "Warhammer").ToList()[0];

            // Life Clerics get either scale mail, leather armor, or chain mail (if proficient) at level 1
            // Since we are life clerics might as well get the best AC right?
            Armor = GetArmor().Where(a => a.Name == "Chain Mail").ToList()[0];

            // Clerics get either a light crossbow and 20 bolts or any simple weapon

            switch (Tools.GetRandomNumberInRange(0, 1))
            {
            default: throw new System.Exception("number not in range");

            case 0:
                // Add light crossbow and 20 bolts
                AdditionalWeapons.Add(GetWeapons().Where(w => w.Name == "Light Crossbow").ToList()[0]);
                Ammunition.Add(new Ammunition("bolt", 20, "A simple bolt"));
                break;

            case 1:
                // Add a random simple weapon
                var simpleWeapons = GetWeapons().Where(w => w.WeaponType == "Simple Melee").ToList();
                var weapon        = Tools.ShuffleList(simpleWeapons)[0];
                AdditionalWeapons.Add(weapon);
                break;
            }

            // Clerics also get either a priest’s pack or an explorer’s pack
            switch (Tools.GetRandomNumberInRange(0, 1))
            {
            default: throw new System.Exception("number not in range");

            case 0:
                EquipmentPack = GetPacks().Where(p => p.Name == "Priest's Pack").ToList()[0];
                break;

            case 1:
                EquipmentPack = GetPacks().Where(p => p.Name == "Explorer's Pack").ToList()[0];
                break;
            }

            // Clerics get a shield and a holy symbol
            Shield     = new Shield("Shield");
            HolySymbol = new HolySymbol("Holy Symbol");

            ///////////////
            //  Spells   //
            ///////////////
            // Clerics know
            // 3 cantrips
            // 2 level 1 spells

            SpellSlots = 2;

            List <string> clericCantrips = new List <string>()
            {
                "Guidance",
                "Light",
                "Mending",
                "Resistance",
                "Sacred Flame",
                "Thaumaturgy",
            };

            Cantrips = Tools.ReturnXSpellsFromList(clericCantrips, 3);

            List <string> clericLevel1Spells = new List <string>()
            {
                "Bane",
                "Bless",
                "Command",
                "Create or Destroy Water",
                "Cure Wounds",
                "Detect Evil and Good",
                "Detect Magic",
                "Detect Poison and Disease",
                "Guiding Bolt",
                "Healing Word",
                "Inflict Wounds",
                "Protection from Evil and Good",
                "Purify Food and Drink",
                "Sanctuary",
                "Shield of Faith"
            };

            Level1Spells = Tools.ReturnXSpellsFromList(clericLevel1Spells, SpellSlots);

            // Add Cleric features
            Features.Add(new Feature("Spellcasting", "", 1));
            Features.Add(new Feature("Divine Domain", "", 1));
        }
Beispiel #2
0
        public Paladin()
        {
            SetName("Paladin");
            HitDie = "1d10";

            ///////////////////
            // PROFICIENCIES //
            ///////////////////

            SetProficiencyBonus(2);
            var Proficiencies = new Dictionary <string, List <string> >()
            {
                { "Armor", new List <string>()
                  {
                      "Light Armor", "Medium Armor", "Shields"
                  } },
                { "Weapons", new List <string>()
                  {
                      "Simple Weapons", "Martial Weapons"
                  } },
                { "Tools", new List <string>() },
                { "Saving Throws", new List <string>()
                  {
                      "Wisdom", "Charisma"
                  } },
                { "Skills", new List <string>()
                  {
                  } }
            };

            // Paladins can select two skills from the following list
            var paladinSkillProfs = new List <string>()
            {
                "Athletics",
                "Insight",
                "Intimidation",
                "Medicine",
                "Persuasion",
                "Religion"
            };

            // Shuffle list and add the top two
            paladinSkillProfs = Tools.ShuffleList(paladinSkillProfs);
            Proficiencies["Skills"].Add(paladinSkillProfs[0]);
            Proficiencies["Skills"].Add(paladinSkillProfs[1]);

            SetProficiencies(Proficiencies);

            ///////////////
            // EQUIPMENT //
            ///////////////

            // Paladins start with a martial weapon and a shield or two martial weapons
            List <Weapon> martialWeapons = GetWeapons().Where(w => w.WeaponType == "Martial Melee").ToList();
            List <Weapon> simpleWeapons  = GetWeapons().Where(w => w.WeaponType == "Simple Melee").ToList();

            switch (Tools.GetRandomNumberInRange(0, 1))
            {
            default: throw new System.Exception("number not in range");

            case 0:
                Weapon weapon = Tools.ShuffleList(martialWeapons)[0];
                PrimaryWeapon = weapon;
                Shield        = new Shield("Shield");
                break;

            case 1:
                // I assume the two weapons imply duel-weilding
                List <Weapon> OneHandedMartialWeapons = martialWeapons.Where(w => w.Twohanded == false).ToList();
                Weapon        weapon1 = Tools.ShuffleList(OneHandedMartialWeapons)[0];
                Weapon        weapon2 = Tools.ShuffleList(OneHandedMartialWeapons)[0];
                PrimaryWeapon = weapon1;
                OffHandWeapon = weapon2;
                break;
            }

            // Paladins also get five javelins or any simple melee weapon
            switch (Tools.GetRandomNumberInRange(0, 1))
            {
            default: throw new System.Exception("number not in range");

            case 0:
                for (int i = 0; i <= 4; i++)
                {
                    AdditionalWeapons.Add(GetWeapons().Where(w => w.Name == "Javelin").ToList()[0]);
                }
                break;

            case 1:
                AdditionalWeapons.Add(Tools.ShuffleList(simpleWeapons)[0]);
                break;
            }

            // And a priest’s pack or an explorer’s pack
            switch (Tools.GetRandomNumberInRange(0, 1))
            {
            default: throw new System.Exception("number not in range");

            case 0:
                EquipmentPack = GetPacks().Where(p => p.Name == "Priest's Pack").ToList()[0];
                break;

            case 1:
                EquipmentPack = GetPacks().Where(p => p.Name == "Explorer's Pack").ToList()[0];
                break;
            }

            // Chain mail and a holy symbol
            Armor      = GetArmor().Where(a => a.Name == "Chain Mail").ToList()[0];
            HolySymbol = new HolySymbol("Holy Symbol");

            //////////////
            // FEATURES //
            //////////////

            Features.Add(new Feature("Divine Sense", "", 1));
            Features.Add(new Feature("Lay on Hands", "", 1));
        }