Skip to content

Commit bbc7790

Browse files
authored
Merge pull request #837 from bcdice/refactor/Airgetlamh
[Airgetlamh] パース処理の分離と変数名のsnake_case化
2 parents bbba2b5 + b1f6758 commit bbc7790

File tree

2 files changed

+61
-41
lines changed

2 files changed

+61
-41
lines changed

.rubocop_todo.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,6 @@ Naming/MethodName:
9191
Exclude:
9292
- 'lib/bcdice/base.rb'
9393
- 'lib/bcdice/deprecated/*.rb'
94-
- 'lib/bcdice/game_system/Airgetlamh.rb'
9594
- 'lib/bcdice/game_system/Alsetto.rb'
9695
- 'lib/bcdice/game_system/AlterRaise.rb'
9796
- 'lib/bcdice/game_system/Avandner.rb'
@@ -172,7 +171,6 @@ Naming/MethodParameterName:
172171
MinNameLength: 1
173172
Exclude:
174173
- 'lib/bcdice/base.rb'
175-
- 'lib/bcdice/game_system/Airgetlamh.rb'
176174
- 'lib/bcdice/game_system/Alsetto.rb'
177175
- 'lib/bcdice/game_system/Avandner.rb'
178176
- 'lib/bcdice/game_system/BadLife.rb'
@@ -214,7 +212,6 @@ Naming/MethodParameterName:
214212
Naming/VariableName:
215213
Exclude:
216214
- 'lib/bcdice/base.rb'
217-
- 'lib/bcdice/game_system/Airgetlamh.rb'
218215
- 'lib/bcdice/game_system/Alsetto.rb'
219216
- 'lib/bcdice/game_system/AlterRaise.rb'
220217
- 'lib/bcdice/game_system/Avandner.rb'

lib/bcdice/game_system/Airgetlamh.rb

Lines changed: 61 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)