class BCDice::GameSystem::AlchemiaStruggle

Constants

ALIAS
ARTICLE_TABLES
CATALYST_TABLES
DRAMA_SEQUENCE_TABLES
HELP_MESSAGE
ID
NAME
ROLL_REG
SORT_KEY
TABLES

Public Class Methods

new(command) click to toggle source
Calls superclass method BCDice::Base::new
# File lib/bcdice/game_system/AlchemiaStruggle.rb, line 46
def initialize(command)
  super(command)

  @sort_add_dice = true # 加算ダイスのソート有
  @sort_barabara_dice = true # バラバラダイスでソート有
  @round_type = RoundType::CEIL # 割り算をした時の端数切り上げ
end

Public Instance Methods

eval_game_system_specific_command(command) click to toggle source
# File lib/bcdice/game_system/AlchemiaStruggle.rb, line 54
def eval_game_system_specific_command(command)
  c = ALIAS[command] || command

  try_roll_alchemia(c) ||
    try_roll_uldice(c) ||
    roll_tables(c, TABLES)
end
make_dice_text(dice_list) click to toggle source
# File lib/bcdice/game_system/AlchemiaStruggle.rb, line 134
def make_dice_text(dice_list)
  "[#{dice_list.sort.join ', '}]"
end
make_roll_and_pick_text(rolled_dice_list, pick_dice_count, picked_dice_list) click to toggle source

実際にピックできた数と要求されたピック数は一致しないケースが(ルール上)あるため、 pick_dice_count はパラメータとして受ける必要がある。

# File lib/bcdice/game_system/AlchemiaStruggle.rb, line 130
def make_roll_and_pick_text(rolled_dice_list, pick_dice_count, picked_dice_list)
  "(#{rolled_dice_list.size}D6|>#{pick_dice_count}D6) > #{make_dice_text(rolled_dice_list)} >> #{make_dice_text(picked_dice_list)} > #{picked_dice_list.sum}"
end
make_roll_text(rolled_dice_list) click to toggle source
# File lib/bcdice/game_system/AlchemiaStruggle.rb, line 125
def make_roll_text(rolled_dice_list)
  "(#{rolled_dice_list.size}D6) > #{make_dice_text(rolled_dice_list)}"
end
pick_maximum(dice_list, pick_dice_count) click to toggle source
# File lib/bcdice/game_system/AlchemiaStruggle.rb, line 117
def pick_maximum(dice_list, pick_dice_count)
  if dice_list.size <= pick_dice_count
    dice_list
  else
    dice_list.sort.pop(pick_dice_count)
  end
end
roll_alchemia(roll_dice_count) click to toggle source
# File lib/bcdice/game_system/AlchemiaStruggle.rb, line 104
def roll_alchemia(roll_dice_count)
  @randomizer.roll_barabara(roll_dice_count, 6)
end
roll_alchemia_and_pick(roll_dice_count, pick_dice_count) click to toggle source
# File lib/bcdice/game_system/AlchemiaStruggle.rb, line 108
def roll_alchemia_and_pick(roll_dice_count, pick_dice_count)
  rolled_dice_list = roll_alchemia(roll_dice_count)

  return {
    rolled_dices: rolled_dice_list,
    picked_dices: pick_maximum(rolled_dice_list, pick_dice_count),
  }
end
try_roll_alchemia(command) click to toggle source
# File lib/bcdice/game_system/AlchemiaStruggle.rb, line 62
def try_roll_alchemia(command)
  match = ROLL_REG.match(command)
  return nil unless match

  roll_dice_count = match[1].to_i

  if match[2].nil?
    # ロールのみ(ピックなし):

    result = roll_alchemia(roll_dice_count)
    return make_roll_text(result)
  else
    # ロールして最大値をピック:

    pick_dice_count = match[2].to_i

    result = roll_alchemia_and_pick(roll_dice_count, pick_dice_count)
    return make_roll_and_pick_text(result[:rolled_dices], pick_dice_count, result[:picked_dices])
  end
end
try_roll_uldice(command) click to toggle source
# File lib/bcdice/game_system/AlchemiaStruggle.rb, line 83
def try_roll_uldice(command)
  match = /^(\d+)UL$/.match(command)
  return nil unless match

  roll_dice_count = match[1].to_i
  dice_list = @randomizer.roll_barabara(roll_dice_count, 6).sort
  dice_list_text = dice_list.join(",")

  result = dice_list.group_by(&:itself)
                    .map { |k, v| "No.#{k}: #{v.size}個" }
                    .join(", ")

  sequence = [
    "(#{roll_dice_count}D6)",
    "[#{dice_list_text}]",
    result
  ]

  sequence.join(" > ")
end