Example #1
0
        public RuntimeResult RollVsStatistic(Character character1, Character character2, Statistic stat1, Statistic stat2, bool useEffects = false)
        {
            var stats1 = character1.Statistics;
            var stats2 = character2.Statistics;

            if (useEffects)
            {
                stats1 = _effectsService.GetEffectiveStatistics(character1);
                stats2 = _effectsService.GetEffectiveStatistics(character2);
            }

            if ((stat1 is Skill skill1 && _statService.GetStatistic(stats1, stat1) < skill1.MinimumValue) ||
                (stat2 is Skill skill2 && _statService.GetStatistic(stats2, stat2) < skill2.MinimumValue))
            {
                return(StatisticResult.SkillNotHighEnough());
            }

            string message = "";

            if (_roleplayOptions.UsePercentage)
            {
                var result1 = GetOldRollResult(stats1, stat1);
                var result2 = GetOldRollResult(stats2, stat2);

                message = $"*{character1.Name}* rolls `{stat1.Name}` against *{character2.Name}'s* `{stat2.Name}`!\n\n" +
                          $"{GetOldRollMessage(character1.Name, stat1.Name, result1)}\n" +
                          $"{GetOldRollMessage(character2.Name, stat2.Name, result2)}\n\n";

                if (result1 < 0 && result2 < 0)
                {
                    message += "Nobody wins!";
                }
                else
                {
                    if (result1 > result2)
                    {
                        message += $"{character1.Name} wins!";
                    }
                    else
                    {
                        message += $"{character2.Name} wins!";
                    }
                }

                if (useEffects)
                {
                    message = Messages.MUSCLE_EMOJI + message;
                }

                return(RollResult.PercentageRoll(message));
            }
            else
            {
                var result1 = GetRollResult(stats1, stat1);
                var result2 = GetRollResult(stats2, stat2);

                message = $"*{character1.Name}* rolls `{stat1.Name}` against *{character2.Name}'s* `{stat2.Name}`!\n\n" +
                          $"__{character1.Name}__: {GetRollMessage(character1.Name, stat1.Name, result1)}\n\n" +
                          $"__{character2.Name}__: {GetRollMessage(character2.Name, stat2.Name, result2)}";

                if (useEffects)
                {
                    return(RollResult.DiceRoll(EmbedHelper.BuildBasicEmbed($"{Messages.MUSCLE_EMOJI}{stat1.Name} Vs. {stat2.Name} Buffed Roll", message)));
                }

                return(RollResult.DiceRoll(EmbedHelper.BuildBasicEmbed($"{stat1.Name} Vs. {stat2.Name} Roll", message)));
            }
        }
Example #2
0
        public RuntimeResult RollStatistic(Character character, Statistic stat, bool useEffects = false)
        {
            var stats = character.Statistics;

            if (useEffects)
            {
                stats = _effectsService.GetEffectiveStatistics(character);
            }

            if (stat is Skill skill && _statService.GetStatistic(stats, stat) < skill.MinimumValue)
            {
                return(StatisticResult.SkillNotHighEnough());
            }

            string message = "";
            Color  color   = new Color(200, 45, 0);

            if (_roleplayOptions.UsePercentage)
            {
                var result = GetOldRollResult(stats, stat);

                message = GetOldRollMessage(character.Name, stat.Name, result);

                if (result >= 95)
                {
                    color = new Color(210, 170, 0);
                }
                else if (result >= 0)
                {
                    color = new Color(60, 210, 0);
                }

                if (useEffects)
                {
                    message = Messages.MUSCLE_EMOJI + message;
                }

                return(RollResult.PercentageRoll(message));
            }
            else
            {
                var result    = GetRollResult(stats, stat);
                var successes = result.Count(x => x >= SUCCESS_ROLL);

                message = $"*{character.Name}* rolls `{stat.Name}`!\n" + GetRollMessage(character.Name, stat.Name, result);

                if (successes > 7)
                {
                    color = new Color(210, 170, 0);
                }
                else if (successes > 0)
                {
                    color = new Color(60, 210, 0);
                }

                if (useEffects)
                {
                    return(RollResult.DiceRoll(EmbedHelper.BuildBasicEmbed($"{Messages.MUSCLE_EMOJI}{stat.Name} Buffed Roll", message, color)));
                }

                return(RollResult.DiceRoll(EmbedHelper.BuildBasicEmbed($"{stat.Name} Roll", message, color)));
            }
        }