class BCDice::GameSystem::Cthulhu7th
Constants
- FAILED_CASTING_L_TABLE
キャスティング・ロールのプッシュに失敗した場合(小)
- FAILED_CASTING_M_TABLE
キャスティング・ロールのプッシュに失敗した場合(大)
- HELP_MESSAGE
ダイスボットの使い方
- ID
ゲームシステムの識別子
- MADNESS_REAL_TIME_TABLE
- MADNESS_SUMMARY_TABLE
- MANIAS_TABLE
マニア表
- NAME
ゲームシステム名
- PHOBIAS_TABLE
恐怖症表
- SORT_KEY
ゲームシステム名の読みがな
Public Instance Methods
eval_game_system_specific_command(command)
click to toggle source
# File lib/bcdice/game_system/Cthulhu7th.rb, line 59 def eval_game_system_specific_command(command) case command when /^CC/i skill_roll(command) when /^CBR/i combine_roll(command) when /^FAR/i getFullAutoResult(command) when /^BMR/i # 狂気の発作(リアルタイム) roll_bmr_table() when /^BMS/i # 狂気の発作(サマリー) roll_bms_table() when /^FCL/i # キャスティング・ロールのプッシュに失敗した場合(小) roll_1d8_table("キャスティング・ロール失敗(小)表", FAILED_CASTING_L_TABLE) when /^FCM/i # キャスティング・ロールのプッシュに失敗した場合(大) roll_1d8_table("キャスティング・ロール失敗(大)表", FAILED_CASTING_M_TABLE) when /^PH/i # 恐怖症表 roll_1d100_table("恐怖症表", PHOBIAS_TABLE) when /^MA/i # マニア表 roll_1d100_table("マニア表", MANIAS_TABLE) end end
Private Instance Methods
combine_roll(command)
click to toggle source
# File lib/bcdice/game_system/Cthulhu7th.rb, line 244 def combine_roll(command) m = /^CBR\((\d+),(\d+)\)$/.match(command) return nil unless m difficulty_1 = m[1].to_i difficulty_2 = m[2].to_i total = @randomizer.roll_once(100) result_1 = ResultLevel.from_values(total, difficulty_1) result_2 = ResultLevel.from_values(total, difficulty_2) rank = if result_1.success? && result_2.success? "成功" elsif result_1.success? || result_2.success? "部分的成功" else "失敗" end Result.new.tap do |r| r.text = "(1d100<=#{difficulty_1},#{difficulty_2}) > #{total}[#{result_1},#{result_2}] > #{rank}" r.success = result_1.success? && result_2.success? r.failure = result_1.failure? && result_2.failure? end end
getFullAutoResult(command)
click to toggle source
# File lib/bcdice/game_system/Cthulhu7th.rb, line 240 def getFullAutoResult(command) FullAuto.eval(command, @randomizer) end
roll_1d100_table(table_name, table)
click to toggle source
# File lib/bcdice/game_system/Cthulhu7th.rb, line 175 def roll_1d100_table(table_name, table) total_n = @randomizer.roll_once(100) index = total_n - 1 text = table[index] return "#{table_name}(#{total_n}) > #{text}" end
roll_1d8_table(table_name, table)
click to toggle source
# File lib/bcdice/game_system/Cthulhu7th.rb, line 166 def roll_1d8_table(table_name, table) total_n = @randomizer.roll_once(8) index = total_n - 1 text = table[index] return "#{table_name}(#{total_n}) > #{text}" end
roll_bmr_table()
click to toggle source
表一式 即時の恐怖症表
# File lib/bcdice/game_system/Cthulhu7th.rb, line 274 def roll_bmr_table() total_n = @randomizer.roll_once(10) text = MADNESS_REAL_TIME_TABLE[total_n - 1] time_n = @randomizer.roll_once(10) return "狂気の発作(リアルタイム)(#{total_n}) > #{text}(1D10>#{time_n}ラウンド)" end
roll_bms_table()
click to toggle source
略式の恐怖表
# File lib/bcdice/game_system/Cthulhu7th.rb, line 297 def roll_bms_table() total_n = @randomizer.roll_once(10) text = MADNESS_SUMMARY_TABLE[total_n - 1] time_n = @randomizer.roll_once(10) return "狂気の発作(サマリー)(#{total_n}) > #{text}(1D10>#{time_n}時間)" end
skill_roll(command)
click to toggle source
# File lib/bcdice/game_system/Cthulhu7th.rb, line 184 def skill_roll(command) m = /^CC([-+]?\d+)?(?:<=(\d+)([RHEC])?)?$/.match(command) unless m return nil end bonus_dice = m[1].to_i difficulty = m[2]&.to_i difficulty_level = m[3] if difficulty == 0 difficulty = nil elsif difficulty_level == "H" difficulty /= 2 elsif difficulty_level == "E" difficulty /= 5 elsif difficulty_level == "C" difficulty = 0 end if bonus_dice == 0 && difficulty.nil? dice = @randomizer.roll_once(100) return "1D100 > #{dice}" end if bonus_dice.abs > 100 return "ボーナス・ペナルティダイスの値は-100以上、100以下としてください" end total, total_list = roll_with_bonus(bonus_dice) expr = difficulty.nil? ? "1D100" : "1D100<=#{difficulty}" result = if difficulty_level ResultLevel.with_difficulty_level(total, difficulty) elsif difficulty ResultLevel.from_values(total, difficulty) end sequence = [ "(#{expr}) ボーナス・ペナルティダイス[#{bonus_dice}]", total_list.join(", "), total, result, ].compact Result.new.tap do |r| r.text = sequence.join(" > ") if result r.condition = result.success? r.critical = result.critical? r.fumble = result.fumble? end end end