class BCDice::GameSystem::NinjaSlayer

Constants

AT

近接攻撃のノード

AT_RE

近接攻撃の正規表現

DIFFICULTY_RE

難易度の正規表現

DIFFICULTY_SYMBOL_TO_INTEGER

難易度の文字表現から整数値への対応

DIFFICULTY_VALUE_RE

難易度の値の正規表現

EL

電子戦のノード

EL_RE

電子戦の正規表現

EV

回避判定のノード

EV_RE

回避判定の正規表現

HELP_MESSAGE

ダイスボットの使い方

ID

ゲームシステムの識別子

NAME

ゲームシステム名

NJ_RE

通常判定の正規表現

SATSUBATSU_TABLE

サツバツ表

SORT_KEY

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

TABLES

表の定義

Public Class Methods

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

  @default_cmp_op = :>=
  @default_target_number = 4
end

Public Instance Methods

change_text(str) click to toggle source
# File lib/bcdice/game_system/NinjaSlayer.rb, line 80
def change_text(str)
  m = NJ_RE.match(str)
  return str unless m

  b_roll = bRollCommand(m[2], integerValueOfDifficulty(m[3] || m[4]))
  return "#{m[1]}#{b_roll}"
end
eval_game_system_specific_command(command) click to toggle source
# File lib/bcdice/game_system/NinjaSlayer.rb, line 88
def eval_game_system_specific_command(command)
  debug('eval_game_system_specific_command begin string', command)

  if (table = TABLES[command])
    return table.roll(randomizer)
  end

  case node = parse(command)
  when EV
    return executeEV(node)
  when AT
    return executeAT(node)
  when EL
    return executeEL(node)
  else
    return nil
  end
end

Private Instance Methods

bRollCommand(num, difficulty) click to toggle source

バラバラロールのコマンドを返す @param [#to_s] num ダイス数 @param [#to_s] difficulty 難易度 @return [String]

# File lib/bcdice/game_system/NinjaSlayer.rb, line 230
def bRollCommand(num, difficulty)
  "#{num}B6>=#{difficulty}"
end
executeAT(at) click to toggle source

近接攻撃を行う @param [AT] at 近接攻撃ノード @return [String] 近接攻撃結果

# File lib/bcdice/game_system/NinjaSlayer.rb, line 175
def executeAT(at)
  command = bRollCommand(at.num, at.difficulty)
  roll_result = BCDice::CommonCommand::BarabaraDice.eval(command, self, @randomizer)

  num_of_max_values = roll_result.last_dice_list.count(6)

  parts = [roll_result.text]

  if num_of_max_values >= 2
    parts.push("サツバツ!!")
  end

  return parts.join(" > ")
end
executeEL(el) click to toggle source

電子戦を行う @param [EL] el 電子戦ノード @return [String] 電子戦結果

# File lib/bcdice/game_system/NinjaSlayer.rb, line 193
def executeEL(el)
  command = bRollCommand(el.num, el.difficulty)
  roll_result = BCDice::CommonCommand::BarabaraDice.eval(command, self, @randomizer)

  values = roll_result.last_dice_list
  num_of_max_values = values.count(6)
  sum_of_true_values = values.count { |v| v >= el.difficulty }

  if num_of_max_values >= 1
    return [
      "#{roll_result.text} + #{num_of_max_values}",
      sum_of_true_values + num_of_max_values
    ].join(" > ")
  end

  return roll_result.text
end
executeEV(ev) click to toggle source

回避判定を行う @param [EV] ev 回避判定ノード @return [String] 回避判定結果

# File lib/bcdice/game_system/NinjaSlayer.rb, line 159
def executeEV(ev)
  command = bRollCommand(ev.num, ev.difficulty)
  roll_result = BCDice::CommonCommand::BarabaraDice.eval(command, self, @randomizer)

  parts = [roll_result.text]

  if ev.targetValue && roll_result.success_num > ev.targetValue
    parts.push("カウンターカラテ!!")
  end

  return parts.join(" > ")
end
integerValueOfDifficulty(s) click to toggle source

難易度の整数値を返す @param [String, nil] s 難易度表記 @return [Integer] 難易度の整数値 @raise [KeyError, IndexError] 無効な難易度表記が渡された場合。

sは2から6までの数字あるいは'K', 'E', 'N', 'H', 'UH'。 sがnilの場合は 4 を返す。

# File lib/bcdice/game_system/NinjaSlayer.rb, line 218
def integerValueOfDifficulty(s)
  return 4 unless s

  return s.to_i if /\A[2-6]\z/.match(s)

  return DIFFICULTY_SYMBOL_TO_INTEGER.fetch(s.upcase)
end
parse(command) click to toggle source

構文解析する @param [String] command コマンド文字列 @return [EV, AT, EL, nil]

# File lib/bcdice/game_system/NinjaSlayer.rb, line 112
def parse(command)
  case command
  when EV_RE
    return parseEV(Regexp.last_match)
  when AT_RE
    return parseAT(Regexp.last_match)
  when EL_RE
    return parseEL(Regexp.last_match)
  else
    return nil
  end
end
parseAT(m) click to toggle source

正規表現のマッチ情報から近接攻撃ノードを作る @param [MatchData] m 正規表現のマッチ情報 @return [AT]

# File lib/bcdice/game_system/NinjaSlayer.rb, line 139
def parseAT(m)
  num = m[1].to_i
  difficulty = integerValueOfDifficulty(m[2] || m[3])

  return AT.new(num, difficulty)
end
parseEL(m) click to toggle source

正規表現のマッチ情報から電子戦ノードを作る @param [MatchData] m 正規表現のマッチ情報 @return [EL]

# File lib/bcdice/game_system/NinjaSlayer.rb, line 149
def parseEL(m)
  num = m[1].to_i
  difficulty = integerValueOfDifficulty(m[2] || m[3])

  return EL.new(num, difficulty)
end
parseEV(m) click to toggle source

正規表現のマッチ情報から回避判定ノードを作る @param [MatchData] m 正規表現のマッチ情報 @return [EV]

# File lib/bcdice/game_system/NinjaSlayer.rb, line 128
def parseEV(m)
  num = m[1].to_i
  difficulty = integerValueOfDifficulty(m[2] || m[3])
  targetValue = m[4]&.to_i

  return EV.new(num, difficulty, targetValue)
end