Esempio n. 1
0
        public CharacterDesigner(IObjectStore data)
        {
            Name = data.GetString("name");
            if (data.HasKey("type"))
            {
                DesignerType = data.GetEnum <Type>("type");
            }

            ShortLog.DebugFormat("Loading Character Creator: {0}", Name);
            designSteps = new List <ICharacterDesignStep>();

            foreach (var step in data.GetObjectList("steps"))
            {
                if (step.HasKey("step"))
                {
                    var typeName = step.GetString("step");
                    ShortLog.DebugFormat("Adding Build Step: {0}", typeName);
                    var item = typeName.Instantiate <ICharacterDesignStep>(step);
                    designSteps.Add(item);
                }
                else if (step.HasKey("designer"))
                {
                    var designer = step.GetString("designer");
                    ShortLog.DebugFormat("Adding Designer: {0}", designer);
                    var item = new DesignerExecuterStep(designer);
                    designSteps.Add(item);
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Instantiates an object and passes in IObjectStore information
        /// If no constructor with IObjectStore data is available but there is
        /// an empty Constructor it will utilize that
        /// </summary>
        /// <param name="type"></param>
        /// <param name="constructor"></param>
        /// <returns></returns>
        public static T Instantiate <T>(this System.Type type, params IObjectStore[] constructor)
        {
            if (type == null)
            {
                throw new ArgumentNullException(nameof(type));
            }

            try
            {
                if (constructor.Length > 0)
                {
                    var types = constructor.Select(x => x.GetType()).ToArray();
                    ShortLog.DebugFormat("type is {0}", type.ToString());
                    var matchConstructor = type.GetConstructor(types);

                    //Could not find a matching constructor, just try for an empty one
                    if (matchConstructor == null)
                    {
                        return((T)Activator.CreateInstance(type));
                    }
                }
                return((T)Activator.CreateInstance(type, constructor));
            }
            catch
            {
                ShortLog.ErrorFormat("Failed to created type: {0}", type.ToString());
                throw;
            }
        }
Esempio n. 3
0
        private void LoadFromObjectStore(IObjectStore data)
        {
            Name = data.GetString("name");
            ShortLog.Debug("Loading Class: " + Name);
            SkillPoints         = data.GetInteger("skillpoints");
            HitDice             = DiceStrings.ParseSides(data.GetString("hitdice"));
            BaseAttackBonusRate = data.GetFloat("baseattackbonus");
            FortitudeSaveRate   = data.GetFloat("fortitude");
            ReflexSaveRate      = data.GetFloat("reflex");
            WillSaveRate        = data.GetFloat("will");
            ClassDevelopmentAge = data.GetEnum <ClassDevelopmentAge>("developedage");
            CustomBuildStep     = data.GetStringOptional("custom-build-step");

            //Load Levels
            var levels = data.GetObjectListOptional("levels");

            if (levels != null)
            {
                foreach (var l in levels)
                {
                    var level = new Level(l);
                    Levels.Add(level);
                }
            }

            var dice = data.GetStringOptional("startingwealth");

            if (dice != null)
            {
                StartingWealthDice = DiceStrings.ParseDice(dice);
            }

            this.HitDicePerLevel = new DiceClassLevelModifier(new Cup(new Die(HitDice)), StatNames.HitDice, this.Name, 1);
        }
Esempio n. 4
0
        public string Generate(int maxLength)
        {
            var name       = "";
            var currentKey = InitialKey();

            while (name.Length < maxLength)
            {
                if (!states.ContainsKey(currentKey))
                {
                    break;
                }

                var state = states[currentKey];
                if (state.Tokens.Empty())
                {
                    break;
                }

                var next = state.ChooseOne();
                if (next == TERMINATOR)
                {
                    break;
                }

                name      += next;
                currentKey = NextKey(currentKey, next);
            }
            ShortLog.DebugFormat("Markov Name Generator: {0}", name);
            return(name.Titlize());
        }
Esempio n. 5
0
        public static T SUT <T>(this ITypeResolver resolvr) where T : ILogSource
        {
            if (!resolvr.HasLifetimeScope)
            {
                resolvr.BeginLifetimeScope();
            }

            if (_growl == null)
            {
                _growl = new GrowlListener(nameof(MustExtensions));
            }

            var obj = resolvr.Resolve <T>();

            obj.LogAdded += (s, e) =>
            {
                if (e.ShowAs == ShowLogAs.Intro)
                {
                    _lastTitle = e.Title;
                    return;
                }

                if (e.ShowAs == ShowLogAs.Outro)
                {
                    e.Title = _lastTitle;
                }

                var m = ShortLog.Format(e);
                OutputHelper.WriteLine(m);
            };

            obj.LogAdded += _growl.HandleLogEvent;

            return(obj);
        }
Esempio n. 6
0
        /// <summary>
        /// Loads from yaml.
        /// </summary>
        /// <returns>The from yaml.</returns>
        /// <param name="yaml">Yaml data to load from.</param>
        private static IList <Class> LoadFromYaml(YamlNodeWrapper yaml)
        {
            var classes = new List <Class>();

            foreach (var node in yaml.Children())
            {
                var cls = new Class();
                cls.Name = node.GetString("name");
                ShortLog.Debug("Loading Class: " + cls.Name);
                cls.SkillPoints         = node.GetInteger("skillpoints");
                cls.HitDice             = DiceStrings.ParseSides(node.GetString("hitdice"));
                cls.BaseAttackBonusRate = node.GetFloat("baseattackbonus");
                cls.FortitudeSaveRate   = node.GetFloat("fortitude");
                cls.ReflexSaveRate      = node.GetFloat("reflex");
                cls.WillSaveRate        = node.GetFloat("will");
                cls.ClassDevelopmentAge = node.GetEnum <ClassDevelopmentAge>("developedage");

                var armor = node.GetCommaStringOptional("armorproficiencies");
                cls.ArmorProficiencies.Add(armor);

                var weapons = node.GetCommaStringOptional("weaponproficiencies");
                cls.WeaponProficiencies.Add(weapons);

                // Get the Skills for this class
                var skills = node.GetNode("skills").Children();
                foreach (var s in skills)
                {
                    cls.AddClassSkill(s.Value);
                }

                classes.Add(cls);
            }

            return(classes);
        }
Esempio n. 7
0
 private void ProcessSteps(CharacterSheet character, CharacterStrategy strategy)
 {
     foreach (var step in designSteps)
     {
         ShortLog.DebugFormat("Executing Step: {0}", step);
         step.ExecuteStep(character);
     }
 }
Esempio n. 8
0
        public void Initialize(ComponentContainer components)
        {
            var sr = components.Get <SkillRanks>();

            foreach (var s in this.SkillNames)
            {
                sr.SetClassSkill(s);
            }
            ShortLog.DebugFormat("Adding Class Skills: {0}".Formatted(this.SkillNames));
        }
Esempio n. 9
0
        /// <summary>
        /// Gets all of the feats.
        /// </summary>
        /// <returns>The feats that are loaded.</returns>
        public static IList <Feat> GetFeats()
        {
            if (loadedFeats == null || loadedFeats.Count == 0)
            {
                var yaml = FileHelper.OpenYaml(TraitDataFile);
                loadedFeats = LoadFromYaml(yaml);
                ShortLog.Debug("Loaded Traits: " + loadedFeats.Count);
            }

            return(loadedFeats);
        }
Esempio n. 10
0
        public IEnumerable <IObjectStore> GetDataFiles <T>()
        {
            var type = typeof(T);

            if (!fileListMap.ContainsKey(type.FullName))
            {
                ShortLog.ErrorFormat("Could not find data file of type: {0}", type.FullName);
                throw MissingDataFileException.MissingDataFilesForType(type.FullName);
            }
            return(fileListMap[type.FullName]);
        }
Esempio n. 11
0
 private void DisableOptionsThatAlreadyHaveSkillFocus(WeightedOptionTable <string> skillTable, IEnumerable <SkillFocus> existingSkillFocuses)
 {
     foreach (var sf in existingSkillFocuses)
     {
         if (sf != this)
         {
             ShortLog.DebugFormat("Skill Focus - Disable Skill {0}", sf.CharacterSkill.Name);
             skillTable.Disable(sf.CharacterSkill.Name);
         }
     }
 }
Esempio n. 12
0
        public void Add <T>(T feature)
        {
            ShortLog.DebugFormat("Adding component: {0}", feature.ToString());
            this.Components.Add(feature);
            var statMod = feature as IModifiesStats;

            if (statMod != null)
            {
                this.ProcessStatModifier(statMod);
            }
        }
Esempio n. 13
0
 /// <summary>
 /// Adds a class skill.
 /// </summary>
 /// <param name="name">Name of the skill.</param>
 public void AddClassSkill(string name)
 {
     if (!this.IsClassSkill(name))
     {
         this.ClassSkills.Add(name);
     }
     else
     {
         ShortLog.Debug("Not adding class skill as it already is there: " + name);
     }
 }
Esempio n. 14
0
 public virtual void ExecuteStep(CharacterSheet character)
 {
     ShortLog.DebugFormat("Executing Designer: {0}", Name);
     if (DesignerType == Type.LevelUp)
     {
         ProcessLevelUp(character, character.Strategy);
     }
     else
     {
         ProcessSteps(character, character.Strategy);
     }
 }
Esempio n. 15
0
 public Armor(IObjectStore data)
 {
     ShortLog.DebugFormat("Loading Armor: {0}", data.GetString("name"));
     this.Name                     = data.GetString("name");
     this.ArmorClass               = data.GetInteger("armor_class");
     this.Weight                   = data.GetFloat("weight");
     this.MaximumDexterityBonus    = data.GetInteger("maximum_dexterity_bonus");
     this.ArmorCheckPenalty        = data.GetInteger("armor_check_penalty");
     this.ArcaneSpellFailureChance = data.GetInteger("arcane_spell_failure_chance");
     this.ArmorType                = data.GetEnum <ArmorType>("armor_type");
     this.Value                    = data.GetString("cost").ToCoinValue();
 }
Esempio n. 16
0
 /// <summary>
 /// Gets the skill.
 /// </summary>
 /// <returns>The skill.</returns>
 /// <param name="skill">Skill name to lookup.</param>
 public CharacterSkill GetSkill(string skill)
 {
     try
     {
         return(this.skills[skill]);
     }
     catch
     {
         ShortLog.ErrorFormat("Cannot find skill: {0}", skill);
         throw;
     }
 }
Esempio n. 17
0
 /// <summary>
 /// The implementing class must handle modifiers to stats under its control
 /// </summary>
 /// <param name="modifier">Modifier for stats</param>
 public void ProcessModifier(IModifiesStats modifier)
 {
     foreach (var a in modifier.Modifiers)
     {
         CharacterSkill sk;
         if (this.skills.TryGetValue(a.StatisticName, out sk))
         {
             ShortLog.DebugFormat("Modifying Skill ({0}) by {1}", a.StatisticName, a.Modifier.ToString());
             sk.AddModifier(a);
         }
     }
 }
Esempio n. 18
0
        public void ExecuteStep(CharacterSheet character)
        {
            var tokens = character.GetAll <SkillModifierToken>();

            foreach (var token in tokens)
            {
                var matchingSkills = character.SkillRanks.GetSkills().Where(x => token.Qualifies(x.Skill));
                var chosen         = matchingSkills.ChooseOne();
                ShortLog.DebugFormat("Skill Modifier Token assigned to {0}", chosen.Skill.Name);
                chosen.AddModifier(token.CreateModifier(chosen.Skill));
            }
        }
Esempio n. 19
0
 /// <summary>
 /// Gets a wrapper node based on key for traversing trees. Throws exception if not found
 /// </summary>
 /// <returns>The node from the key</returns>
 /// <param name="key">Key to lookup in YAML node</param>
 public YamlNodeWrapper GetNode(string key)
 {
     try
     {
         var item = this.mappingNode.Children[new YamlScalarNode(key)];
         return(new YamlNodeWrapper(item));
     }
     catch
     {
         ShortLog.ErrorFormat("Yaml Node not found: {0}", key);
         throw;
     }
 }
Esempio n. 20
0
        public void LoadAndRunAllDesignersToLevel20()
        {
            var strategies = GatewayProvider.All <CharacterStrategy>();

            foreach (var strat in strategies)
            {
                ShortLog.DebugFormat("Validating Strategy: {0}", strat.Name);
                strat.TargetLevel = 20;
                var gen       = GatewayProvider.Find <CharacterDesigner>(strat.Designer);
                var character = new CharacterSheet(strat);
                gen.ExecuteStep(character);
            }
        }
Esempio n. 21
0
        public static void DebugReflector()
        {
            var assemblies = GetAssemblies();

            foreach (var a in assemblies)
            {
                ShortLog.DebugFormat("Loaded Assembly: {0}", a.FullName);
                foreach (var t in a.GetExportedTypes().OrderBy(x => x.FullName))
                {
                    ShortLog.DebugFormat("Exported Type: {0}", t.FullName);
                }
            }
        }
Esempio n. 22
0
        public static T Instantiate <T>(this string typeName, params IObjectStore[] constructor)
        {
            // Search all loaded assemblies for the type name

            var type = FindType(typeName);

            if (type == null)
            {
                throw new TypeNotFoundException(typeName);
            }

            ShortLog.DebugFormat("Type is: {0}", type.ToString());
            return(type.Instantiate <T>(constructor));
        }
Esempio n. 23
0
        private void LoadObject(IObjectStore data)
        {
            Name = data.GetString("name");
            ShortLog.Debug("Loading Race: " + Name);
            SizeSetting       = (CharacterSize)System.Enum.Parse(typeof(CharacterSize), data.GetString("size"));
            HeightRange       = DiceStrings.ParseDice(data.GetString("height"));
            WeightRange       = DiceStrings.ParseDice(data.GetString("weight"));
            BaseMovementSpeed = data.GetInteger("basemovementspeed");

            var languages = data.GetObject("languages");

            KnownLanguages.Add(languages.GetListOptional("known"));
            AvailableLanguages.Add(languages.GetListOptional("available"));
        }
Esempio n. 24
0
        /// <summary>
        /// Loads from yaml.
        /// </summary>
        /// <param name="yaml">Yaml data to parse.</param>
        private void LoadFromYaml(YamlNodeWrapper yaml)
        {
            this.races = new List <Race>();

            foreach (var raceNode in yaml.Children())
            {
                var race = new Race();
                race.Name = raceNode.GetString("name");
                ShortLog.Debug("Loading Race: " + race.Name);
                race.SizeSetting = (CharacterSize)System.Enum.Parse(typeof(CharacterSize), raceNode.GetString("size"));
                race.HeightRange = DiceStrings.ParseDice(raceNode.GetString("height"));
                race.WeightRange = DiceStrings.ParseDice(raceNode.GetString("weight"));

                var abilities = raceNode.GetNode("abilities");
                foreach (var ability in abilities.ChildrenToDictionary())
                {
                    var modifier = new AbilityScoreAdjustment();
                    modifier.Reason   = "Racial Trait";
                    modifier.Modifier = int.Parse(ability.Value);

                    // Special case is races that can choose
                    if (string.Compare(ability.Key, "choose", true) == 0)
                    {
                        modifier.RacialModifier = true;
                    }
                    else
                    {
                        modifier.AbilityName = AbilityScore.GetType(ability.Key);
                    }

                    race.AbilityModifiers.Add(modifier);
                }

                var traits = raceNode.GetNode("traits");
                foreach (var trait in traits.Children())
                {
                    race.Traits.Add(trait.Value);
                }

                var languages = raceNode.GetNode("languages");
                race.KnownLanguages.Add(languages.GetCommaStringOptional("known"));
                race.AvailableLanguages.Add(languages.GetCommaStringOptional("available"));

                // Get Speed
                race.BaseMovementSpeed = raceNode.GetInteger("basemovementspeed");

                this.races.Add(race);
            }
        }
Esempio n. 25
0
        public void ExecuteStep(CharacterSheet character)
        {
            if (character.Get <ICastingPreparation>() == null)
            {
                return;
            }

            ShortLog.Debug("-- PrepareSpells --");
            var spellCastings = character.GetAll <ICastingPreparation>();

            foreach (var sc in spellCastings)
            {
                Prepare(sc);
            }
        }
Esempio n. 26
0
        private void LoadObject(IObjectStore data)
        {
            ShortLog.DebugFormat("Loading Feat: {0}", Name);
            Description   = data.GetStringOptional("description");
            AllowMultiple = data.GetBoolOptional("allow-multiple");

            // Get any prerequisites
            var prereq = data.GetObjectListOptional("prerequisites");

            if (prereq != null)
            {
                Prerequisites = new PrerequisiteList(prereq);
            }

            Tags = data.GetListOptional("tags").ToList();
        }
Esempio n. 27
0
        public static void InitializeHelpers()
        {
            //Only initialize Once TODO - Better solutions
            if (helpers.Count > 0)
            {
                return;
            }

            Handlebars.RegisterHelper("descriptor", (writer, context, parameters) => {
                ShortLog.DebugFormat("Getting descriptor: {0}", parameters[0].ToString());
                var value = context.descriptors[parameters[0].ToString()] as string[];
                writer.WriteSafeString(value.ChooseOne());
            });

            RegisterSupportedHelpers();
        }
Esempio n. 28
0
 private void FilterPreferredFeats(CharacterSheet character, WeightedOptionTable <string> preferredFeats, FeatToken token)
 {
     foreach (var entry in preferredFeats.All)
     {
         var f = feats.Find(entry.Option);
         if (FeatIsValid(f, token, character))
         {
             preferredFeats.Enable(entry.Option);
         }
         else
         {
             preferredFeats.Disable(entry.Option);
             ShortLog.DebugFormat("Preferred Feat [{0}] Token [{1}]- Not meeting requirements", f.Name, token.ToString());
         }
     }
 }
Esempio n. 29
0
        private void LoadDescriptors(IEnumerable <IObjectStore> descriptors)
        {
            if (descriptors == null)
            {
                return;
            }

            foreach (var descriptor in descriptors)
            {
                // Descriptor format in YAML is "- key: [item1, item2, item3]"
                var keyName = descriptor.Keys.First();
                ShortLog.DebugFormat("Descriptor KeyName: {0}", keyName);

                var m = descriptor.GetList(keyName);
                Descriptors.Add(keyName, m);
            }
        }
Esempio n. 30
0
 public Weapon(IObjectStore data)
 {
     ShortLog.DebugFormat("Loading Weapon: {0}", data.GetString("name"));
     this.Name             = data.GetString("name");
     this.Weight           = data.GetFloat("weight");
     this.Damage           = data.GetString("damage");
     this.DamageType       = data.GetEnum <DamageTypes>("damage_type");
     this.CriticalThreat   = data.GetIntegerOptional("critical_threat");
     this.CriticalModifier = data.GetIntegerOptional("critical_modifier");
     this.Range            = data.GetIntegerOptional("range");
     this.Type             = data.GetEnum <WeaponType>("type");
     this.Group            = data.GetEnum <WeaponGroup>("group");
     this.Level            = data.GetEnum <WeaponTrainingLevel>("training_level");
     this.Value            = data.GetStringOptional("cost").ToCoinValue();
     this.CriticalThreat   = this.CriticalThreat == 0 ? 20 : this.CriticalThreat;
     this.CriticalModifier = this.CriticalModifier == 0 ? 2 : this.CriticalModifier;
 }