public void IfSkillDoesNotExistWhenProcessingAModifierJustLogIt() { var ranks = new SkillRanks(new List <Skill> (), new AbilityScores()); ranks.ProcessModifier(new MockMod()); //Should not throw exception }
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); }
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); }
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); }
private WeightedOptionTable <string> GetSkillTable(SkillRanks skills, CharacterStrategy strategy) { if (strategy.FavoredSkills.IsEmpty) { return(skills.GetSkills().Select(x => x.Name).CreateFlatTable()); } else { return(strategy.FavoredSkills); } }
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); }
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(); }
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++; } } }
private void UpdateSkills(SkillRanks skillRanks, int bardLevel) { foreach (var skill in skillRanks.GetSkills()) { if (bardLevel >= 10) { skill.CanUseWithoutTraining(); } if (bardLevel >= 16) { skill.ClassSkill = true; } } }
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)); } }
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); }
private void AssignClassSkill(SkillRanks skillRanks, CharacterStrategy strategy) { var chooseSkill = classSkillOptions.ChooseOne(); skillRanks.GetSkill(chooseSkill).ClassSkill = true; }
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()); }