@@ -51,64 +51,87 @@ def initialize(command)
5151 end
5252
5353 def eval_game_system_specific_command ( command )
54- # AA/ALコマンド:調査判定, 成功判定
55- if command =~ /(\d +)?A(A|L)(\d +)?((x|\* )(\d +)(\+ (\d +))?)?(C(\d +))?$/i
56- diceCount = ( Regexp . last_match ( 1 ) || 2 ) . to_i
57- target = ( Regexp . last_match ( 3 ) || 6 ) . to_i
58- damage = ( Regexp . last_match ( 6 ) || 0 ) . to_i
59-
60- if Regexp . last_match ( 2 ) == 'L' # 旧Ver対応
61- criticalTrigger = 0
62- criticalNumber = 0
63- else
64- criticalTrigger = ( Regexp . last_match ( 8 ) || 0 ) . to_i
65- criticalNumber = ( Regexp . last_match ( 10 ) || 1 ) . to_i
66- end
67- criticalNumber = 3 if criticalNumber > 4
68-
69- return checkRoll ( diceCount , target , damage , criticalTrigger , criticalNumber )
54+ check_roll ( command )
55+ end
56+
57+ private
58+
59+ def parse_check_roll ( command )
60+ m = /(\d +)?A(A|L)(\d +)?(?:[X*](\d +)(?:\+ (\d +))?)?(?:C(\d +))?$/i . match ( command )
61+ unless m
62+ return nil
63+ end
64+
65+ dice_count = m [ 1 ] &.to_i || 2
66+ target = m [ 3 ] &.to_i || 6
67+ damage = m [ 4 ] . to_i
68+ critical_trigger = m [ 5 ] . to_i
69+ critical_number = m [ 6 ] &.to_i || 1
70+
71+ if m [ 2 ] == "L"
72+ critical_trigger = 0
73+ critical_number = 0
74+ elsif critical_number > 4
75+ critical_number = 3
7076 end
7177
72- return nil
78+ return {
79+ dice_count : dice_count ,
80+ target : target ,
81+ damage : damage ,
82+ critical_trigger : critical_trigger ,
83+ critical_number : critical_number ,
84+ }
7385 end
7486
75- def checkRoll ( diceCount , target , damage , criticalTrigger , criticalNumber )
76- totalSuccessCount = 0
77- totalCriticalCount = 0
87+ def check_roll ( command )
88+ parsed = parse_check_roll ( command )
89+ unless parsed
90+ return nil
91+ end
92+
93+ dice_count = parsed [ :dice_count ]
94+ target = parsed [ :target ]
95+ damage = parsed [ :damage ]
96+ critical_trigger = parsed [ :critical_trigger ]
97+ critical_number = parsed [ :critical_number ]
98+
99+ total_success_count = 0
100+ total_critical_count = 0
78101 text = ""
79102
80- rollCount = diceCount
103+ roll_count = dice_count
81104
82- while rollCount > 0
83- diceArray = @randomizer . roll_barabara ( rollCount , 10 ) . sort
84- diceText = diceArray . join ( "," )
105+ while roll_count > 0
106+ dice_array = @randomizer . roll_barabara ( roll_count , 10 ) . sort
107+ dice_text = dice_array . join ( "," )
85108
86- successCount = diceArray . count { |i | i <= target }
87- criticalCount = diceArray . count { |i | i <= criticalNumber }
109+ success_count = dice_array . count { |i | i <= target }
110+ critical_count = dice_array . count { |i | i <= critical_number }
88111
89- totalSuccessCount += successCount
90- totalCriticalCount += criticalCount
112+ total_success_count += success_count
113+ total_critical_count += critical_count
91114
92115 text += "+" unless text . empty?
93- text += "#{ successCount } [#{ diceText } ]"
116+ text += "#{ success_count } [#{ dice_text } ]"
94117
95- rollCount = criticalCount
118+ roll_count = critical_count
96119 end
97120
98121 result = ""
99- isDamage = ( damage != 0 )
122+ is_damage = ( damage != 0 )
100123
101- if isDamage
102- totalDamage = totalSuccessCount * damage + totalCriticalCount * criticalTrigger
124+ if is_damage
125+ total_damage = total_success_count * damage + total_critical_count * critical_trigger
103126
104- result += "(#{ diceCount } D10\< \= #{ target } ) > #{ text } > Hits:#{ totalSuccessCount } *#{ damage } "
105- result += " + Trigger:#{ totalCriticalCount } *#{ criticalTrigger } " if criticalTrigger > 0
106- result += " > #{ totalDamage } ダメージ"
127+ result += "(#{ dice_count } D10\< \= #{ target } ) > #{ text } > Hits:#{ total_success_count } *#{ damage } "
128+ result += " + Trigger:#{ total_critical_count } *#{ critical_trigger } " if critical_trigger > 0
129+ result += " > #{ total_damage } ダメージ"
107130 else
108- result += "(#{ diceCount } D10\< \= #{ target } ) > #{ text } > 成功数:#{ totalSuccessCount } "
131+ result += "(#{ dice_count } D10\< \= #{ target } ) > #{ text } > 成功数:#{ total_success_count } "
109132 end
110133
111- result += " / #{ totalCriticalCount } クリティカル" if totalCriticalCount > 0
134+ result += " / #{ total_critical_count } クリティカル" if total_critical_count > 0
112135
113136 return result
114137 end
0 commit comments