class BCDice::GameSystem::GardenOrder

Constants

DAMAGE_TABLE
HELP_MESSAGE

ダイスボットの使い方

ID

ゲームシステムのの識別子

NAME

ゲームシステム名

SORT_KEY

ゲームシステム名の読みがな

Public Instance Methods

check_roll(success_rate, critical_border) click to toggle source
# File lib/bcdice/game_system/GardenOrder.rb, line 69
def check_roll(success_rate, critical_border)
  success_rate = 0 if success_rate < 0
  fumble_border = (success_rate < 100 ? 96 : 99)

  dice_value = @randomizer.roll_once(100)
  result = get_check_result(dice_value, success_rate, critical_border, fumble_border)

  result.text = "D100<=#{success_rate}@#{critical_border} > #{dice_value} > #{result.text}"
  return result
end
check_roll_repeat_attack(success_rate, repeat_count, critical_border) click to toggle source
# File lib/bcdice/game_system/GardenOrder.rb, line 59
def check_roll_repeat_attack(success_rate, repeat_count, critical_border)
  success_rate_per_one = success_rate / repeat_count
  # 連続攻撃は最終的な成功率が50%以上であることが必要 cf. p217
  if repeat_count > 1 && success_rate_per_one < 50
    return "D100<=#{success_rate_per_one}@#{critical_border} > 連続攻撃は成功率が50%以上必要です"
  end

  check_roll(success_rate_per_one, critical_border)
end
eval_game_system_specific_command(command) click to toggle source
# File lib/bcdice/game_system/GardenOrder.rb, line 33
def eval_game_system_specific_command(command)
  case command
  when %r{GO(-?\d+)(/(\d+))?(@(\d+))?}i
    success_rate = Regexp.last_match(1).to_i
    repeat_count = (Regexp.last_match(3) || 1).to_i
    critical_border_text = Regexp.last_match(5)
    critical_border = get_critical_border(critical_border_text, success_rate)

    return check_roll_repeat_attack(success_rate, repeat_count, critical_border)

  when /^DC(SL|BL|IM|BR|RF|EL)(\d+)/i
    type = Regexp.last_match(1)
    damage_value = Regexp.last_match(2).to_i
    return look_up_damage_chart(type, damage_value)
  end

  return nil
end
get_check_result(dice_value, success_rate, critical_border, fumble_border) click to toggle source
# File lib/bcdice/game_system/GardenOrder.rb, line 80
def get_check_result(dice_value, success_rate, critical_border, fumble_border)
  # クリティカルとファンブルが重なった場合は、ファンブルとなる。 cf. p175
  return Result.fumble("ファンブル") if dice_value >= fumble_border
  return Result.critical("クリティカル") if dice_value <= critical_border
  return Result.success("成功") if dice_value <= success_rate

  return Result.failure("失敗")
end
get_critical_border(critical_border_text, success_rate) click to toggle source
# File lib/bcdice/game_system/GardenOrder.rb, line 52
def get_critical_border(critical_border_text, success_rate)
  return critical_border_text.to_i unless critical_border_text.nil?

  critical_border = [success_rate / 5, 1].max
  return critical_border
end
get_damage_table_info_by_type(type) click to toggle source
# File lib/bcdice/game_system/GardenOrder.rb, line 98
def get_damage_table_info_by_type(type)
  data = DAMAGE_TABLE[type]
  return nil if data.nil?

  return data[:name], data[:table]
end
look_up_damage_chart(type, damage_value) click to toggle source
# File lib/bcdice/game_system/GardenOrder.rb, line 89
def look_up_damage_chart(type, damage_value)
  name, table = get_damage_table_info_by_type(type)

  row = get_table_by_number(damage_value, table, nil)
  return nil if row.nil?

  "負傷表:#{name}[#{damage_value}] > #{row[:damage]} | #{row[:name]} … #{row[:text]}"
end