Esempio n. 1
0
        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());
        }
Esempio n. 2
0
        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") }));
        }
Esempio n. 5
0
        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);
        }