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
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
# 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
# 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
バラバラロールのコマンドを返す @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
近接攻撃を行う @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
電子戦を行う @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
回避判定を行う @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
難易度の整数値を返す @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
構文解析する @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
正規表現のマッチ情報から近接攻撃ノードを作る @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
正規表現のマッチ情報から電子戦ノードを作る @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
正規表現のマッチ情報から回避判定ノードを作る @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