Example #1
0
        public void IfSkillDoesNotExistWhenProcessingAModifierJustLogIt()
        {
            var ranks = new SkillRanks(new List <Skill> (), new AbilityScores());

            ranks.ProcessModifier(new MockMod());
            //Should not throw exception
        }
Example #2
0
        public void SettingACraftSkillAsClassSkillSetsAllCraftSkills()
        {
            _skillList.Add(new Skill("Craft (Shoes)", AbilityScoreTypes.Intelligence, false));
            _skillList.Add(new Skill("Craft (Jewelry)", AbilityScoreTypes.Intelligence, false));
            var ranks = new SkillRanks(_skillList, new AbilityScores());

            ranks.SetClassSkill("Craft");
            Assert.True(ranks.GetSkill("Craft (Shoes)").ClassSkill);
            Assert.True(ranks.GetSkill("Craft (Jewelry)").ClassSkill);
        }
Example #3
0
        public void SettingAProfessionsSkillAsClassSkillSetsAllProfessionsSkills()
        {
            _skillList.Add(new Skill("Profession (Bouncer)", AbilityScoreTypes.Intelligence, false));
            _skillList.Add(new Skill("Profession (Turnip Farmer)", AbilityScoreTypes.Intelligence, false));
            var ranks = new SkillRanks(_skillList, new AbilityScores());

            ranks.SetClassSkill("Profession");
            Assert.True(ranks.GetSkill("Profession (Bouncer)").ClassSkill);
            Assert.True(ranks.GetSkill("Profession (Turnip Farmer)").ClassSkill);
        }
Example #4
0
        public void SettingAPerformSkillAsClassSkillSetsAllPerformSkills()
        {
            _skillList.Add(new Skill("Perform (Debate)", AbilityScoreTypes.Intelligence, false));
            _skillList.Add(new Skill("Perform (Art)", AbilityScoreTypes.Intelligence, false));
            var ranks = new SkillRanks(_skillList, new AbilityScores());

            ranks.SetClassSkill("Perform");
            Assert.True(ranks.GetSkill("Perform (Debate)").ClassSkill);
            Assert.True(ranks.GetSkill("Perform (Art)").ClassSkill);
        }
Example #5
0
 private WeightedOptionTable <string> GetSkillTable(SkillRanks skills, CharacterStrategy strategy)
 {
     if (strategy.FavoredSkills.IsEmpty)
     {
         return(skills.GetSkills().Select(x => x.Name).CreateFlatTable());
     }
     else
     {
         return(strategy.FavoredSkills);
     }
 }
Example #6
0
        public void SetupCharacter()
        {
            _skillList = new List <Skill> ();
            _skillList.Add(new Skill("Climb", AbilityScoreTypes.Strength, false));
            _skillList.Add(new Skill("Disable Device", AbilityScoreTypes.Dexterity, true));
            _skillList.Add(new Skill("Stealth", AbilityScoreTypes.Dexterity, false));

            _abilityScores = new AbilityScores();
            _abilityScores.SetScore(AbilityScoreTypes.Strength, 14);
            _abilityScores.SetScore(AbilityScoreTypes.Dexterity, 12);

            Subject = new SkillRanks(_skillList, _abilityScores);
        }
Example #7
0
        public SkillPointDistributorTests()
        {
            availableSkills = new List <Skill>();
            var climb     = new Skill("Climb", AbilityScoreTypes.Strength, false);
            var acrobat   = new Skill("Acrobatics", AbilityScoreTypes.Dexterity, false);
            var knowledge = new Skill("Knowledge (Arcana)", AbilityScoreTypes.Intelligence, true);

            availableSkills.Add(climb);
            availableSkills.Add(acrobat);
            availableSkills.Add(knowledge);
            skills      = new SkillRanks(availableSkills, new AbilityScores());
            distributor = new SkillPointDistributor();
        }
Example #8
0
        public void AssignSkillPoints(SkillRanks skills, WeightedOptionTable <string> preferredSkills, int skillPoints, int maxLevel)
        {
            int assigned = 0;

            while (assigned < skillPoints)
            {
                var selectedSkill = ChooseSkill(skills, preferredSkills, maxLevel);
                if (selectedSkill != null)
                {
                    selectedSkill.AddRank();
                    assigned++;
                }
            }
        }
Example #9
0
        private void UpdateSkills(SkillRanks skillRanks, int bardLevel)
        {
            foreach (var skill in skillRanks.GetSkills())
            {
                if (bardLevel >= 10)
                {
                    skill.CanUseWithoutTraining();
                }

                if (bardLevel >= 16)
                {
                    skill.ClassSkill = true;
                }
            }
        }
Example #10
0
        public void IfAssigningToClassSkillsOnlyUseOneCraftSkill()
        {
            var strategy = new WeightedOptionTable <string>();

            //Set Knowledge (Arcana) as a class skill
            availableSkills.Add(new Skill("Craft (Pottery)", AbilityScoreTypes.Intelligence, false));
            availableSkills.Add(new Skill("Craft (Jewelry)", AbilityScoreTypes.Intelligence, false));

            //Assign two points, should go all to one skill
            for (int i = 0; i < 1000; i++)
            {
                var skillRanks = new SkillRanks(availableSkills, new AbilityScores());
                skillRanks.SetClassSkill("Craft (Pottery)");
                skillRanks.SetClassSkill("Craft (Jewelry)");

                distributor.AssignSkillPoints(skillRanks, strategy, 2, 2);
                Assert.True(skillRanks.GetSkills().Any(x => x.Ranks == 2));
            }
        }
Example #11
0
        private CharacterSkill ChooseSkill(SkillRanks skills, WeightedOptionTable <string> preferredSkills, int maxLevel)
        {
            if (!preferredSkills.IsEmpty)
            {
                var option = preferredSkills.ChooseRandomly();
                var skill  = skills.GetSkill(option);

                if (skill.Ranks < maxLevel)
                {
                    return(skill);
                }
                else
                {
                    preferredSkills.Disable(option);
                }
            }
            else
            {
                // no preferred skills so just pick class skills
                var skill = skills.GetSkills().Where(
                    x => x.ClassSkill &&
                    x.Ranks < maxLevel
                    ).ToList().ChooseOne();

                // Background skills require special attention
                // In general just take one background skill
                if (skill.Skill.IsBackgroundSkill)
                {
                    if (skill.Ranks > 0 || skills.GetSkills().Where(x => x.Skill.IsBackgroundSkill).All(x => x.Ranks == 0))
                    {
                        return(skill);
                    }
                }
                else
                {
                    return(skill);
                }
            }
            return(null);
        }
Example #12
0
        private void AssignClassSkill(SkillRanks skillRanks, CharacterStrategy strategy)
        {
            var chooseSkill = classSkillOptions.ChooseOne();

            skillRanks.GetSkill(chooseSkill).ClassSkill = true;
        }
Example #13
0
        public List <CalculatedSkill> GetSkills()
        {
            var calcedSkills = new List <CalculatedSkill>();

            var shieldPenelty = GetShieldPenelty(_bonusDto);

            foreach (var currentSkills in SkillRanks)
            {
                var skillAbi = _bonusDto.Abilities.First(y => y.Ability.ID == currentSkills.Skill.SkillModifier.ID).Ability;
                var result   = new CalculatedSkill
                {
                    Ability = skillAbi.Name,
                    //AbilityBonues =
                    //    _bonusDto.Abilities.First(y => y.Ability.ID == currentSkills.Skill.SkillModifier.ID)
                    //        .GetCurrentModifier(_bonusDto),
                    SkillRanks   = currentSkills.Ranks,
                    IsClassSkill = CurrentClasses.Any(y => y.Class.ClassSkills.Any(z => z.ID == currentSkills.Skill.ID)),
                    Name         = currentSkills.Skill.Name,
                    UseUntrained = currentSkills.Skill.UseUntrained,
                };
                var skillBonuses = _bonusDto.Bonuses.Where(y => y.ShouldApplyTo(currentSkills, typeof(SkillRank)) && y.ShouldApplyToSubType(skillAbi.ID));

                result.Ranks = new CalculatedString();
                var abiScore = _bonusDto.Abilities.First(y => y.Ability.ID == currentSkills.Skill.SkillModifier.ID);
                result.Ranks.AddIfNotZero(abiScore.Ability.Name, null, abiScore.GetCurrentModifier(_bonusDto));
                result.Ranks.AddIfNotZero("Ranks", null, currentSkills.Ranks);
                result.Ranks.AddPartsByRef(skillBonuses.ToList(), _bonusDto);


                if (currentSkills.Skill.SynergiApplyTo != null && currentSkills.Skill.SynergiApplyTo.Count != 0)
                {
                    foreach (var skillSynergi in currentSkills.Skill.SynergiApplyTo)
                    {
                        var skillRanksForSynergi = SkillRanks.FirstOrDefault(x => x.Skill.ID == skillSynergi.SynergiFrom.ID);
                        if (skillRanksForSynergi != null && skillRanksForSynergi.Ranks >= 5)
                        {
                            result.Ranks.AddIfNotZero(string.Format("Synergi ({0})", skillRanksForSynergi.Skill.Name), skillSynergi.Condition, 2);
                        }
                    }
                }

                if (currentSkills.Skill.ArmorCheckPeneltyApply)
                {
                    foreach (var equippedItem in _bonusDto.EquippedItems)
                    {
                        var localcalcstr      = equippedItem.GetArmorCheckPenelty(_bonusDto);
                        var totalCheckPenelty = Math.Min(localcalcstr.GetValueAsInt(), 0);
                        if (currentSkills.Skill.ArmorCheckPeneltyApplyDouble)
                        {
                            totalCheckPenelty = totalCheckPenelty * 2;
                        }
                        result.Ranks.AddIfNotZero(string.Format("Armor check penelty({0})", equippedItem.Item.Name), null, totalCheckPenelty);
                    }
                }

                if (currentSkills.Skill.RequiresMovement)
                {
                    result.Ranks.AddIfNotZero("Shield proficiency penelty", null, shieldPenelty);
                }

                calcedSkills.Add(result);
            }

            return(calcedSkills.Where(x => x.SkillRanks > 0 || x.UseUntrained).ToList());
        }