protected override IEnumerable <Suggestion> SuggestReplacements(TokenizationContext context) { (string before, string token, string after, Creature creature) = context; var type = token.Split(' ')[0]; return(new Suggestion(token, $"{{type:{type}}} damage") .ToEnumerable()); }
protected override IEnumerable <Suggestion> SuggestReplacements(TokenizationContext context) { (string before, string token, string after, Creature creature) = context; var value = Regex.Match(token, @"[0-9]+").Value; return(new Suggestion(token, $"reach {{reach:{value}}} ft") .ToEnumerable()); }
protected override IEnumerable <Suggestion> SuggestReplacements(TokenizationContext context) { (string before, string token, string after, Creature creature) = context; var area = Regex.Match(token, @"[0-9]+").Value; var replacement = $"{{area:{area}}} feet"; return(new Suggestion(token, replacement) .ToEnumerable()); }
protected override IEnumerable <Suggestion> SuggestReplacements(TokenizationContext context) { (string before, string token, string after, Creature creature) = context; var bonus = Convert.ToInt32(Regex.Match(token, @"[0-9]+").Value); var output = creature.FindMatchingStatisticsWithProficiency(bonus); return(output .Select(o => (combo: o, modString: o.ToModString())) .Where(o => !string.IsNullOrWhiteSpace(o.modString)) .Select(o => (combo: o.combo, value: o.modString == default(string) ? token : $"{{attack:{o.modString}}} to hit")) .Select(o => new Suggestion(token, o.value)) .Concat(new[] { new Suggestion(token, $"{{attack:{bonus}}} to hit") })); }
protected override IEnumerable <Suggestion> SuggestReplacements(TokenizationContext context) { (string before, string token, string after, Creature creature) = context; var matches = Regex.Matches(token, @"[0-9]+").Cast <Match>().Select(f => f.Value).Skip(1); var dieCount = matches.First(); var dieSize = matches.Skip(1).First(); var bonusString = matches.Skip(2).FirstOrDefault(); var suggestSeparateGroup = context.Before.Contains(" or "); var baseString = $"{dieCount}d{dieSize}"; var modifierStrings = new List <string> (); var bonus = default(int); if (Int32.TryParse(bonusString, out bonus)) { foreach (var statistic in creature.FindMatchingStatistics(bonus)) { modifierStrings.Add($"+{statistic}"); } modifierStrings.Add($"+{bonusString}"); } else { modifierStrings.Add(string.Empty); } if (suggestSeparateGroup) { context.Grouper.CreateNextGroup(); modifierStrings = modifierStrings.Select(f => $"{f}:{context.Grouper.Current}").Concat(modifierStrings).ToList(); } else if (context.Grouper.Current > 0) { var groups = Enumerable.Range(0, context.Grouper.Current + 1).Select(f => f.ToString()).Stitch(","); modifierStrings = modifierStrings.Select(f => $"{f}:{groups}").Concat(modifierStrings).ToList(); } var outcome = modifierStrings.Select(f => new Suggestion(token, $"{{dmg:{baseString}{f}}}")); return(outcome); }