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))); } }
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))); } }