class BCDice::GameSystem::Amadeus
Constants
- CHECK_DICE_COUNT
- HELP_MESSAGE
ダイスボットの使い方
- ID
ゲームシステムの識別子
- NAME
ゲームシステム名
- SORT_KEY
ゲームシステム名の読みがな
- TABLES
Public Class Methods
new(command)
click to toggle source
Calls superclass method
BCDice::Base::new
# File lib/bcdice/game_system/Amadeus.rb, line 44 def initialize(command) super(command) @sort_add_dice = true @enabled_d66 = true @d66_sort_type = D66SortType::ASC end
Private Class Methods
translate_tables(locale)
click to toggle source
# File lib/bcdice/game_system/Amadeus.rb, line 134 def translate_tables(locale) { "ECT" => DiceTable::Table.from_i18n("Amadeus.table.ECT", locale), "BST" => DiceTable::Table.from_i18n("Amadeus.table.BST", locale), "RT" => DiceTable::Table.from_i18n("Amadeus.table.RT", locale), "PRT" => DiceTable::Table.from_i18n("Amadeus.table.PRT", locale), "FT" => DiceTable::Table.from_i18n("Amadeus.table.FT", locale), "BT" => DiceTable::D66Table.from_i18n("Amadeus.table.BT", locale), "FWT" => DiceTable::Table.from_i18n("Amadeus.table.FWT", locale), "BRT" => DiceTable::Table.from_i18n("Amadeus.table.BRT", locale), "RIT" => DiceTable::Table.from_i18n("Amadeus.table.RIT", locale), "WT" => DiceTable::Table.from_i18n("Amadeus.table.WT", locale), "NMT" => DiceTable::Table.from_i18n("Amadeus.table.NMT", locale), "TGT" => DiceTable::Table.from_i18n("Amadeus.table.TGT", locale), "CST" => DiceTable::Table.from_i18n("Amadeus.table.CST", locale), "GCVT" => DiceTable::Table.from_i18n("Amadeus.table.GCVT", locale), "YCVT" => DiceTable::Table.from_i18n("Amadeus.table.YCVT", locale), "ECVT" => DiceTable::Table.from_i18n("Amadeus.table.ECVT", locale), "CCVT" => DiceTable::Table.from_i18n("Amadeus.table.CCVT", locale), "NCVT" => DiceTable::Table.from_i18n("Amadeus.table.NCVT", locale), "DGVT" => DiceTable::Table.from_i18n("Amadeus.table.DGVT", locale), "DAVT" => DiceTable::Table.from_i18n("Amadeus.table.DAVT", locale), "PRCT" => DiceTable::Table.from_i18n("Amadeus.table.PRCT", locale), "TCCT" => DiceTable::Table.from_i18n("Amadeus.table.TCCT", locale), "INCT" => DiceTable::Table.from_i18n("Amadeus.table.INCT", locale), "PSCT" => DiceTable::Table.from_i18n("Amadeus.table.PSCT", locale), "LVCT" => DiceTable::Table.from_i18n("Amadeus.table.LVCT", locale), "DACT" => DiceTable::Table.from_i18n("Amadeus.table.DACT", locale), "RGT" => DiceTable::Table.from_i18n("Amadeus.table.RGT", locale), "FBT" => DiceTable::Table.from_i18n("Amadeus.table.FBT", locale), "CHVT" => DiceTable::Table.from_i18n("Amadeus.table.CHVT", locale), "LCVT" => DiceTable::Table.from_i18n("Amadeus.table.LCVT", locale), "KCVT" => DiceTable::Table.from_i18n("Amadeus.table.KCVT", locale), "SAT" => DiceTable::D66Table.from_i18n("Amadeus.table.SAT", locale), "SMT" => DiceTable::D66Table.from_i18n("Amadeus.table.SMT", locale), } end
Public Instance Methods
eval_game_system_specific_command(command)
click to toggle source
# File lib/bcdice/game_system/Amadeus.rb, line 52 def eval_game_system_specific_command(command) roll_amadeus(command) || roll_tables(command, self.class::TABLES) end
Private Instance Methods
roll_amadeus(command)
click to toggle source
# File lib/bcdice/game_system/Amadeus.rb, line 59 def roll_amadeus(command) m = /^R([A-DS])([+\-\d]*)(@(\d))?((>=?)([+\-\d]*))?(@(\d))?$/i.match(command) unless m return nil end rank = m[1] modifier = ArithmeticEvaluator.eval(m[2]) cmp_op = m[6] ? Normalize.comparison_operator(m[6]) : :>= target = m[7] ? ArithmeticEvaluator.eval(m[7]) : 4 special = (m[4] || m[9] || 6).to_i dice_count = CHECK_DICE_COUNT[rank] dice_list = @randomizer.roll_barabara(dice_count, 6) dice_text = dice_list.join(",") special_text = (special == 6 ? "" : "@#{special}") dice_list = [dice_list.min] if rank == "D" available_inga = dice_list.size > 1 inga_table = translate("Amadeus.inga_table") success = false critical = false fumble = false results = dice_list.map do |dice| total = dice + modifier result = if dice == 1 fumble = true translate("Amadeus.fumble") elsif dice >= special critical = true success = true translate("Amadeus.special") elsif total.send(cmp_op, target) success = true translate("success") else translate("failure") end if available_inga inga = inga_table[dice - 1] "#{total}_#{result}[#{dice}#{inga}]" else "#{total}_#{result}[#{dice}]" end end sequence = [ "(R#{rank}#{Format.modifier(modifier)}#{special_text}#{cmp_op}#{target})", "[#{dice_text}]#{Format.modifier(modifier)}", results.join(" / ") ] Result.new.tap do |r| r.text = sequence.join(" > ") if success r.success = true r.critical = critical else r.failure = true r.fumble = fumble end end end