class BCDice::GameSystem::Raisondetre

Constants

HELP_MESSAGE

ダイスボットの使い方

ID

ゲームシステムの識別子

NAME

ゲームシステム名

SORT_KEY

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

Public Class Methods

new(command) click to toggle source
Calls superclass method BCDice::Base::new
# File lib/bcdice/game_system/Raisondetre.rb, line 36
def initialize(command)
  super(command)
  @sort_add_dice = true # ダイスのソート有
end

Public Instance Methods

checkDamage(diceCount, armor) click to toggle source
# File lib/bcdice/game_system/Raisondetre.rb, line 127
def checkDamage(diceCount, armor)
  if diceCount <= 0
    correction = 1 + diceCount * -1
    rollCount = 1
  else
    correction = 0
    rollCount = diceCount
  end

  dice_list = @randomizer.roll_barabara(rollCount, 10).sort
  diceText = dice_list.join(",")

  diceArray = dice_list.map { |x| x == 10 ? 0 : x }.sort
  criticalCount = diceArray.count(0)
  diceArray.map! { |i| i - correction }
  diceText2 = diceArray.join(",")

  result = "#{rollCount}D10"
  result += "-#{correction}" if correction > 0
  result += " > [#{diceText}] > [#{diceText2}]"

  if armor > 0
    resultArray = []
    success = 0

    diceArray.each do |i|
      if i >= armor
        resultArray.push(i)
        success += 1
      else
        resultArray.push("×")
      end
    end
    resultText = resultArray.join(',')

    result += " > [#{resultText}]>=#{armor} 有効数:#{success}"
  end

  result += " 0=#{criticalCount}個"

  return result
end
checkRoll(diceCount, choiceCount, target) click to toggle source
# File lib/bcdice/game_system/Raisondetre.rb, line 72
def checkRoll(diceCount, choiceCount, target)
  if diceCount <= 0
    correction = 1 + diceCount * -1
    rollCount = 1
  else
    correction = 0
    rollCount = diceCount
  end

  diceArray = @randomizer.roll_barabara(rollCount, 10).sort
  diceText = diceArray.join(',')

  diceArray.map! { |x| x == 10 ? 0 : x }
  diceArray.map! { |i| i - correction }
  diceText2 = diceArray.sort.join(',')

  funbleArray = diceArray.select { |i| i <= 1 }
  isFunble = (funbleArray.size >= rollCount)

  dice = 0
  success = 0
  unless isFunble
    criticalCount = diceArray.count(0)
    critical = criticalCount * 10

    choiceArray = diceArray.reverse
    choiceArray.delete(0)
    choiceArray = choiceArray.slice(0..(choiceCount - 1))
    choiceText = choiceArray.join(',')
    dice = choiceArray.inject(:+)
    success = dice + critical
  end

  result = "#{rollCount}D10"
  result += "-#{correction}" if correction > 0
  result += " > [#{diceText}] > [#{diceText2}] > "

  if isFunble
    result += "達成値:0 (Funble)"
  else
    result += "#{dice}[#{choiceText}]"
    result += "+#{critical}" if critical > 0
    result += "=達成値:#{success}"
    result += " (#{criticalCount}Critical)" if critical > 0
  end

  if target > 0
    result += ">=#{target} "
    result += "【成功】" if  success >= target
    result += "【失敗】" if  success < target
  end

  return result
end
eval_game_system_specific_command(command) click to toggle source
# File lib/bcdice/game_system/Raisondetre.rb, line 46
def eval_game_system_specific_command(command)
  if command =~ /(-)?(\d+)?RD(\d+)?(@(\d+))?$/i
    diceCount = (Regexp.last_match(2) || 1).to_i
    diceCount *= -1 unless Regexp.last_match(1).nil?
    choiceCount = (Regexp.last_match(3) || 1).to_i
    target = (Regexp.last_match(5) || 0).to_i

    return checkRoll(diceCount, choiceCount, target)

  elsif command =~ /(-)?(\d+)?DD([1-9])?([+\-]\d+)?$/i
    diceCount = (Regexp.last_match(2) || 1).to_i
    diceCount *= -1 unless Regexp.last_match(1).nil?
    armor = (Regexp.last_match(3) || 0).to_i
    if armor > 0
      armor += (Regexp.last_match(4) || 0).to_i
      armor = 1 if  armor < 1
      armor = 9 if  armor > 9
    end

    return checkDamage(diceCount, armor)

  end

  return nil
end