public GrammarParseResult GetValue(string name) { CreatureAction action = Prototype.CreatureActions.SingleOrDefault(x => x.Name.Equals(name)); if (action != null) { return(Engine.Parsers.ParserHelper.Evaluate(action.ActionText, Controller.Instance.CurrentRuleSet)); } //Assume it's an attribute if it's not an action GrammarParseResult result = new GrammarParseResult($"{IndividualName}'s ({Prototype.EntityName}) {name}"); //Check Abilities AbilityAttr ability = AbilityScores.SingleOrDefault(x => x.Key.Name.Equals(name)).Key; if (ability != null) { result.Value = AbilityScores[ability]; result.EvaluatedText = AbilityScores[ability].ToString(); return(result); } //Check Ability Skills AbilitySkillAttr abilityskill = AbilitySkillScores.SingleOrDefault(x => x.Key.Name.Equals(name)).Key; if (ability != null) { result.Value = AbilitySkillScores[abilityskill]; result.EvaluatedText = AbilitySkillScores[abilityskill].ToString(); return(result); } //Check Counters CounterAttr counter = CounterValues.SingleOrDefault(x => x.Key.Name.Equals(name)).Key; if (ability != null) { result.Value = CounterValues[counter]; result.EvaluatedText = CounterValues[counter].Value.ToString(); return(result); } //Check Other Attributes OtherAttr otherAttr = OtherScores.SingleOrDefault(x => x.Key.Name.Equals(name)).Key; if (ability != null) { result.Value = OtherScores[otherAttr]; result.EvaluatedText = OtherScores[otherAttr].ToString(); return(result); } result.IsSuccessful = false; result.Value = 0; result.Output = $"Creatures of type \"{Prototype.EntityName}\" do not have an action or attribute with name \"{name}\""; return(result); }