class BCDice::GameSystem::Alsetto

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/Alsetto.rb, line 42
def initialize(command)
  super(command)
  @sort_add_dice = true # ダイスのソート有
end

Public Instance Methods

checkRoll(rapid, target, damage, isCritical, criticalNumber) click to toggle source
# File lib/bcdice/game_system/Alsetto.rb, line 71
def checkRoll(rapid, target, damage, isCritical, criticalNumber)
  totalSuccessCount = 0
  totalCriticalCount = 0
  text = ""

  rollCount = rapid

  while rollCount > 0
    diceArray = @randomizer.roll_barabara(rollCount, 6).sort
    diceText = diceArray.join(",")

    successCount = 0
    criticalCount = 0

    diceArray.each do |i|
      if i <= target
        successCount += 1
      end

      if i <= criticalNumber
        criticalCount += 1
      end
    end

    totalSuccessCount += successCount
    totalCriticalCount += 1 unless criticalCount == 0

    text += "+" unless text.empty?
    text += "#{successCount}[#{diceText}]"

    break unless  isCritical

    rollCount = criticalCount
  end

  isDamage = (damage != 0)

  if isDamage
    totalDamage = totalSuccessCount * damage

    result = "(#{rapid}D6\<\=#{target}) > #{text} > Hits:#{totalSuccessCount}*#{damage} > #{totalDamage}ダメージ"
  else
    result = "(#{rapid}D6\<\=#{target}) > #{text} > 成功数:#{totalSuccessCount}"
  end

  if isCritical
    result += " / #{totalCriticalCount}トライアンフ"
  end

  return result
end
eval_game_system_specific_command(command) click to toggle source
# File lib/bcdice/game_system/Alsetto.rb, line 47
def eval_game_system_specific_command(command)
  # ALCコマンド:命中判定
  # ALCコマンド:成功判定
  if command =~ /(\d+)AL(C|G)?(\d+)?((x|\*)(\d+))?$/i
    rapid = Regexp.last_match(1).to_i
    isCritical = Regexp.last_match(2).nil?
    if  isCritical
      criticalNumber = 1
    else
      if Regexp.last_match(2) == "G"
        isCritical = true
        criticalNumber = 2
      else
        criticalNumber = 0
      end
    end
    target = (Regexp.last_match(3) || 3).to_i
    damage = (Regexp.last_match(6) || 0).to_i
    return checkRoll(rapid, target, damage, isCritical, criticalNumber)
  end

  return nil
end