class BCDice::GameSystem::StellarKnights
Constants
- 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/StellarKnights.rb, line 69 def initialize(command) super(command) @sort_barabara_dice = true # バラバラロール(Bコマンド)でソート有 @d66_sort_type = D66SortType::NO_SORT end
Private Class Methods
translate_tables(locale)
click to toggle source
# File lib/bcdice/game_system/StellarKnights.rb, line 194 def translate_tables(locale) { "TT" => DiceTable::D66GridTable.from_i18n("StellarKnights.tables.TT", locale), "STA" => DiceTable::Table.from_i18n("StellarKnights.tables.STA", locale), "STB" => DiceTable::D66OneThirdTable.from_i18n("StellarKnights.tables.STB", locale), "STB21" => DiceTable::Table.from_i18n("StellarKnights.tables.STB21", locale), "STB22" => DiceTable::Table.from_i18n("StellarKnights.tables.STB22", locale), "STB23" => DiceTable::Table.from_i18n("StellarKnights.tables.STB23", locale), "STB24" => DiceTable::Table.from_i18n("StellarKnights.tables.STB24", locale), "STB25" => DiceTable::Table.from_i18n("StellarKnights.tables.STB25", locale), "STB26" => DiceTable::Table.from_i18n("StellarKnights.tables.STB26", locale), "STC" => DiceTable::D66HalfGridTable.from_i18n("StellarKnights.tables.STC", locale), "GAT" => DiceTable::Table.from_i18n("StellarKnights.tables.GAT", locale), "HOT" => DiceTable::D66HalfGridTable.from_i18n("StellarKnights.tables.HOT", locale), "DET" => DiceTable::D66HalfGridTable.from_i18n("StellarKnights.tables.DET", locale), "WIT" => DiceTable::D66OneThirdTable.from_i18n("StellarKnights.tables.WIT", locale), "YST" => DiceTable::D66OneThirdTable.from_i18n("StellarKnights.tables.YST", locale), "YSTA" => DiceTable::D66OneThirdTable.from_i18n("StellarKnights.tables.YSTA", locale), "YSTM" => DiceTable::D66OneThirdTable.from_i18n("StellarKnights.tables.YSTM", locale), "STM" => DiceTable::D66HalfGridTable.from_i18n("StellarKnights.tables.STM", locale), "YSTL" => DiceTable::D66HalfGridTable.from_i18n("StellarKnights.tables.YSTL", locale), "YSTR" => DiceTable::D66HalfGridTable.from_i18n("StellarKnights.tables.YSTR", locale), "STBR" => DiceTable::D66HalfGridTable.from_i18n("StellarKnights.tables.STBR", locale), "STCR" => DiceTable::D66HalfGridTable.from_i18n("StellarKnights.tables.STCR", locale), "STBS" => DiceTable::D66HalfGridTable.from_i18n("StellarKnights.tables.STBS", locale), "STE" => DiceTable::D66HalfGridTable.from_i18n("StellarKnights.tables.STE", locale), "YSTB" => DiceTable::D66HalfGridTable.from_i18n("StellarKnights.tables.YSTB", locale), "YSTF" => DiceTable::D66HalfGridTable.from_i18n("StellarKnights.tables.YSTF", locale), "STAL" => DiceTable::D66HalfGridTable.from_i18n("StellarKnights.tables.STAL", locale), } end
Public Instance Methods
eval_game_system_specific_command(command)
click to toggle source
# File lib/bcdice/game_system/StellarKnights.rb, line 76 def eval_game_system_specific_command(command) command = command.upcase if (table = self.class::TABLES[command]) table.roll(@randomizer) elsif (m = %r{([()+/\d]+)SK(\d)?((,\d>\d)+)?}.match(command)) num_dices = Arithmetic.eval(m[1], RoundType::FLOOR) unless num_dices.nil? resolute_action(num_dices, m[2] && m[2].to_i, m[3]) end elsif command == 'STB2' roll_all_situation_b2_tables elsif command == 'ALLS' roll_all_situation_tables elsif command == "PET" roll_personality_table elsif (m = /FT(\d+)?/.match(command)) num = (m[1] || 5).to_i roll_fragment_table(num) end end
Private Instance Methods
parse_dice_change_rules(text)
click to toggle source
# File lib/bcdice/game_system/StellarKnights.rb, line 148 def parse_dice_change_rules(text) return [] if text.nil? # 正規表現の都合で先頭に ',' が残っているので取っておく text = text[1..-1] text.split(',').map do |rule| v = rule.split('>').map(&:to_i) { from: v[0], to: v[1], } end end
remake_command(num_dices, defence, dice_change_text)
click to toggle source
# File lib/bcdice/game_system/StellarKnights.rb, line 141 def remake_command(num_dices, defence, dice_change_text) command = "#{num_dices}SK" command += defence.to_s unless defence.nil? command += dice_change_text unless dice_change_text.nil? command end
resolute_action(num_dices, defence, dice_change_text)
click to toggle source
@param [Integer] num_dices @param [Integer | nil] defence @param [String] dice_change_text @return [Result, String]
# File lib/bcdice/game_system/StellarKnights.rb, line 105 def resolute_action(num_dices, defence, dice_change_text) dices = @randomizer.roll_barabara(num_dices, 6).sort dice_text = dices.join(",") output = "(#{remake_command(num_dices, defence, dice_change_text)}) > #{dice_text}" if dices.empty? return output + translate("StellarKnights.SK.no_dice_error") end # FAQによると、ダイスの置き換えは宣言された順番に適用されていく dice_change_rules = parse_dice_change_rules(dice_change_text) dice_change_rules.each do |rule| dices.map! { |val| val == rule[:from] ? rule[:to] : val } end unless dice_change_rules.empty? dices.sort! output += " > [#{dices.join(',')}]" end if defence.nil? success = false failure = false else success_num = dices.count { |val| val >= defence } output += " > " + translate("StellarKnights.SK.success_num", success_num: success_num) success = success_num > 0 failure = !success end Result.new(output).tap do |r| r.success = success r.failure = failure end end
roll_all_situation_b2_tables()
click to toggle source
# File lib/bcdice/game_system/StellarKnights.rb, line 162 def roll_all_situation_b2_tables (1..6).map { |num| self.class::TABLES["STB2#{num}"].roll(@randomizer) }.join("\n") end
roll_all_situation_tables()
click to toggle source
# File lib/bcdice/game_system/StellarKnights.rb, line 166 def roll_all_situation_tables ['STA', 'STB', 'STC'].map { |command| self.class::TABLES[command].roll(@randomizer) }.join("\n") end
roll_fragment_table(num)
click to toggle source
# File lib/bcdice/game_system/StellarKnights.rb, line 178 def roll_fragment_table(num) if num <= 0 return nil end results = Array.new(num) { get_table_by_d66(translate("StellarKnights.FT.items")) } values = results.map { |r| r[0] } indexes = results.map { |r| r[1] } name = translate("StellarKnights.FT.name") return "#{name}(#{indexes.join(',')}) > #{values.join(translate('StellarKnights.FT.sep'))}" end
roll_personality_table()
click to toggle source
# File lib/bcdice/game_system/StellarKnights.rb, line 170 def roll_personality_table value1, index1 = get_table_by_d66(translate("StellarKnights.PET.items")) value2, index2 = get_table_by_d66(translate("StellarKnights.PET.items")) name = translate("StellarKnights.PET.name") result = translate("StellarKnights.PET.result", value1: value1, value2: value2) return "#{name}(#{index1},#{index2}) > #{result}" end