class BCDice::GameSystem::ToshiakiHolyGrailWar
Constants
- HELP_MESSAGE
ダイスボットの使い方
- ID
ゲームシステムの識別子
- NAME
ゲームシステム名
- SORT_KEY
ゲームシステム名の読みがな
Public Instance Methods
eval_game_system_specific_command(command)
click to toggle source
# File lib/bcdice/game_system/ToshiakiHolyGrailWar.rb, line 28 def eval_game_system_specific_command(command) roll_f(command) end
Private Instance Methods
negative_modifier_bonus(modifier)
click to toggle source
# File lib/bcdice/game_system/ToshiakiHolyGrailWar.rb, line 87 def negative_modifier_bonus(modifier) modifier <= -5 ? 1 : 0 end
positive_modifier_penalty(modifier)
click to toggle source
# File lib/bcdice/game_system/ToshiakiHolyGrailWar.rb, line 79 def positive_modifier_penalty(modifier) if modifier <= 10 0 else modifier / 10 end end
roll_f(command)
click to toggle source
# File lib/bcdice/game_system/ToshiakiHolyGrailWar.rb, line 34 def roll_f(command) parser = Command::Parser.new(/F(\d+)(\+\d+)*(-\d+)*/, round_type: RoundType::CEIL) .disable_modifier .enable_critical cmd = parser.parse(command) unless cmd return nil end m = cmd.command.match(/^F(\d+)((?:\+\d+)+)?((?:-\d+)+)?$/) unless m return nil end status = m[1].to_i positive_modifier = m[2] ? Arithmetic.eval(m[2], RoundType::CEIL) : 0 negative_modifier = m[3] ? Arithmetic.eval(m[3], RoundType::CEIL) : 0 side_bonus = cmd.critical || 0 times = [status + positive_modifier + negative_modifier, 0].max sides = (6 - positive_modifier_penalty(positive_modifier) + negative_modifier_bonus(negative_modifier) + side_bonus).clamp(2, 10) list = @randomizer.roll_barabara(times, sides) total = list.sum() result = if cmd.cmp_op.nil? Result.new elsif total.send(cmd.cmp_op, cmd.target_number) Result.success("成功") else Result.failure("失敗") end sequence = [ cmd, "(#{times}D#{sides}#{cmd.cmp_op}#{cmd.target_number})", "#{total}[#{list.join(',')}]", total, result.text, ].compact result.text = sequence.join(" > ") return result end