From fe750ef89e1f65d3a144504ca9f09008e41261a6 Mon Sep 17 00:00:00 2001 From: koi-chan Date: Tue, 17 Mar 2015 23:22:19 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=97=E3=83=A9=E3=82=B0=E3=82=A4=E3=83=B3?= =?UTF-8?q?=20Detatoko=20=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * コマンド".ds"で、スキルランクに31以上を指定した時の処理にエラーがあったので修正した * コマンド".ds"で、フラグを先に、四則演算を後ろに記述しても認識するようにした * 判定値がフラグ以下だった場合の、気力ダメージに関する出力の改良した * 上の修正に伴い、ドキュメントを更新した * 発言にマッチする部分にある正規表現のうち、繰り返されるいくつかを定数化した --- doc/plugins/detatoko.md | 2 +- lib/rgrb/plugin/detatoko/constants.rb | 8 ++++++++ lib/rgrb/plugin/detatoko/generator.rb | 11 ++++++----- lib/rgrb/plugin/detatoko/irc_adapter.rb | 19 ++++++++++--------- 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/doc/plugins/detatoko.md b/doc/plugins/detatoko.md index 88628524..260ad8da 100644 --- a/doc/plugins/detatoko.md +++ b/doc/plugins/detatoko.md @@ -24,7 +24,7 @@ Detatoko > でたとこサーガ [koi-chan]: スキルランク = 3 -> [6, 6, 5, 6]:12 + 3 = 15 (フラグ:10) .ds3@10 > でたとこサーガ [koi-chan]: スキルランク = 3 -> [5, 4, 5, 5]:10 = 10 (フラグ:10) -> でたとこサーガ [koi-chan]: フラグ以下 -> 気力ダメージ = 3 +> でたとこサーガ [koi-chan]: 【フラグ以下】気力ダメージ -> 1d6 = 4 ``` ### 体力烙印の獲得 (`.dvst` / `.dsst` / `.dtr` / `.d体力烙印`) diff --git a/lib/rgrb/plugin/detatoko/constants.rb b/lib/rgrb/plugin/detatoko/constants.rb index 6b140794..fe112e98 100644 --- a/lib/rgrb/plugin/detatoko/constants.rb +++ b/lib/rgrb/plugin/detatoko/constants.rb @@ -3,8 +3,16 @@ module RGRB module Plugin module Detatoko + # スキルランクを表す正規表現 + SR_RE = /s(\d+)/ + # 固定値での四則演算を表す正規表現 + SOLID_RE = %r|([+*\-/])(\d+)| + # フラグを指定した時の正規表現 + FLAG_RE = /@(\d+)/ # コマンドのパターンの最後を表す正規表現 END_RE = /(?:[\s ]|$)/ + # スタンス系統にマッチする正規表現 + STANCE_RE = /(?:敵視|宿命|憎悪|雲上|従属|不明|[・+\+])+/ end end end diff --git a/lib/rgrb/plugin/detatoko/generator.rb b/lib/rgrb/plugin/detatoko/generator.rb index 7fd269ac..dc12ec8e 100644 --- a/lib/rgrb/plugin/detatoko/generator.rb +++ b/lib/rgrb/plugin/detatoko/generator.rb @@ -22,6 +22,8 @@ def initialize # @param [Fixnum] flag フラグ # @return [String] def skill_decision(skill_rank, calc, solid, flag) + header = "スキルランク = #{skill_rank} -> " + case skill_rank when 0 result = @dice_roll_generator.dice_roll(3, 6) @@ -37,17 +39,16 @@ def skill_decision(skill_rank, calc, solid, flag) end decision = values.reduce(0, :+) - message = "スキルランク = #{skill_rank} -> [" - message << result.values.join(',') - message << ":#{decision}]" + message = header + message << "[#{result.values.join(',')}:#{decision}]" message << " #{calc} #{solid}" unless solid == 0 message << " = " message << eval("#{decision.to_f} #{calc} #{solid}").ceil.to_s unless flag == 0 message << " (フラグ:#{flag})" if decision <= flag - message << "\n" \ - "フラグ以下 -> 気力ダメージ = #{@random.rand(1..6)}" + message << "\n【フラグ以下】気力ダメージ -> 1d6 = " + message << "#{@random.rand(1..6)}" end end diff --git a/lib/rgrb/plugin/detatoko/irc_adapter.rb b/lib/rgrb/plugin/detatoko/irc_adapter.rb index a754d95d..911d9c64 100644 --- a/lib/rgrb/plugin/detatoko/irc_adapter.rb +++ b/lib/rgrb/plugin/detatoko/irc_adapter.rb @@ -13,18 +13,19 @@ class IrcAdapter set(plugin_name: 'Detatoko') self.prefix = '.d' - match(/s(\d+)#{END_RE}/i, method: :skill_decision) - match(%r|s(\d+)([+*\-/])(\d+)#{END_RE}|i, method: :skill_decision) - match(%r|s(\d+)([+*\-/])(\d+)@(\d+)|i, method: :skill_decision) - match(/s(\d+)@(\d+)/i, method: :skill_decision_flag) + match(/#{SR_RE}#{END_RE}/io, method: :skill_decision) + match(/#{SR_RE}#{SOLID_RE}#{END_RE}/io, method: :skill_decision) + match(/#{SR_RE}#{SOLID_RE}#{FLAG_RE}/io, method: :skill_decision) + match(/#{SR_RE}#{FLAG_RE}#{END_RE}/io, method: :skill_decision_flag) + match(/#{SR_RE}#{FLAG_RE}#{SOLID_RE}/io, method: :skill_decision_flag) match(/(v|m|s|w)s/i, method: :stigma) match(/(t|k)r/i, method: :stigma) match(/(体|気)力烙印/i, method: :stigma) match(/(v|m|s|w)be/i, method: :badend) match(/(t|k)b/i, method: :badend) match(/(体|気)力バッドエンド/i, method: :badend) - match(/stance[\s ]+((?:敵視|宿命|憎悪|雲上|従属|不明|[・+\+])+)/i, method: :stance) - match(/スタンス[\s ]+((?:敵視|宿命|憎悪|雲上|従属|不明|[・+\+])+)/i, method: :stance) + match(/stance[\s ]+(#{STANCE_RE})/io, method: :stance) + match(/スタンス[\s ]+(#{STANCE_RE})/io, method: :stance) def initialize(*args) super @@ -42,10 +43,10 @@ def skill_decision(m, skill_rank, calc = '+', solid = 0, flag = 0) } end - # skill_decision の固定値なし・フラグあり用ラッパー + # skill_decision のフラグ先行コマンド用ラッパー # @return [void] - def skill_decision_flag(m, skill_rank, flag = 0) - skill_decision(m, skill_rank, '+', '0', flag) + def skill_decision_flag(m, skill_rank, flag = 0, calc = '+', solid = 0) + skill_decision(m, skill_rank, calc, solid, flag) end # 烙印(p.63)を得る