bcdice 3.0.0.pre.rc.2 → 3.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +49 -1
  3. data/README.md +33 -7
  4. data/i18n/MonotoneMuseum/ja_jp.yml +3 -3
  5. data/lib/bcdice/common_command/add_dice.rb +1 -1
  6. data/lib/bcdice/dice_table/sai_fic_skill_table.rb +1 -1
  7. data/lib/bcdice/game_system.rb +1 -0
  8. data/lib/bcdice/game_system/AlchemiaStruggle.rb +1 -1
  9. data/lib/bcdice/game_system/Alshard.rb +1 -1
  10. data/lib/bcdice/game_system/AngelGear.rb +123 -0
  11. data/lib/bcdice/game_system/ArsMagica.rb +1 -1
  12. data/lib/bcdice/game_system/BBN.rb +1 -1
  13. data/lib/bcdice/game_system/BadLife.rb +1 -1
  14. data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
  15. data/lib/bcdice/game_system/BeastBindTrinity.rb +2 -2
  16. data/lib/bcdice/game_system/BlindMythos.rb +1 -1
  17. data/lib/bcdice/game_system/BloodCrusade.rb +42 -42
  18. data/lib/bcdice/game_system/BloodMoon.rb +41 -0
  19. data/lib/bcdice/game_system/CardRanker.rb +2 -2
  20. data/lib/bcdice/game_system/ChaosFlare.rb +1 -1
  21. data/lib/bcdice/game_system/Chill.rb +1 -1
  22. data/lib/bcdice/game_system/CodeLayerd.rb +3 -1
  23. data/lib/bcdice/game_system/Cthulhu.rb +8 -4
  24. data/lib/bcdice/game_system/Cthulhu7th.rb +40 -334
  25. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +2 -2
  26. data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +2 -2
  27. data/lib/bcdice/game_system/CthulhuTech.rb +1 -1
  28. data/lib/bcdice/game_system/Cthulhu_ChineseTraditional.rb +1 -1
  29. data/lib/bcdice/game_system/Cthulhu_Korean.rb +1 -1
  30. data/lib/bcdice/game_system/DarkBlaze.rb +1 -1
  31. data/lib/bcdice/game_system/DiceOfTheDead.rb +1 -1
  32. data/lib/bcdice/game_system/DoubleCross.rb +1 -1
  33. data/lib/bcdice/game_system/EarthDawn.rb +1 -1
  34. data/lib/bcdice/game_system/EarthDawn3.rb +1 -1
  35. data/lib/bcdice/game_system/EarthDawn4.rb +1 -1
  36. data/lib/bcdice/game_system/Elysion.rb +2 -2
  37. data/lib/bcdice/game_system/EmbryoMachine.rb +1 -1
  38. data/lib/bcdice/game_system/EtrianOdysseySRS.rb +1 -1
  39. data/lib/bcdice/game_system/FilledWith.rb +203 -1274
  40. data/lib/bcdice/game_system/FullMetalPanic.rb +1 -1
  41. data/lib/bcdice/game_system/Garako.rb +12 -4
  42. data/lib/bcdice/game_system/GehennaAn.rb +1 -1
  43. data/lib/bcdice/game_system/GoblinSlayer.rb +1 -1
  44. data/lib/bcdice/game_system/Gorilla.rb +1 -1
  45. data/lib/bcdice/game_system/HarnMaster.rb +1 -1
  46. data/lib/bcdice/game_system/HatsuneMiku.rb +1 -1
  47. data/lib/bcdice/game_system/HouraiGakuen.rb +1 -1
  48. data/lib/bcdice/game_system/Illusio.rb +25 -34
  49. data/lib/bcdice/game_system/LogHorizon.rb +3 -3
  50. data/lib/bcdice/game_system/LostRoyal.rb +1 -1
  51. data/lib/bcdice/game_system/MeikyuDays.rb +1 -1
  52. data/lib/bcdice/game_system/MeikyuKingdom.rb +2 -2
  53. data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +3 -3
  54. data/lib/bcdice/game_system/MetalHeadExtream.rb +1 -1
  55. data/lib/bcdice/game_system/MetallicGuardian.rb +1 -1
  56. data/lib/bcdice/game_system/MonotoneMuseum.rb +1 -1
  57. data/lib/bcdice/game_system/NeverCloud.rb +540 -5
  58. data/lib/bcdice/game_system/NightWizard.rb +1 -1
  59. data/lib/bcdice/game_system/NightWizard3rd.rb +1 -1
  60. data/lib/bcdice/game_system/NinjaSlayer.rb +4 -13
  61. data/lib/bcdice/game_system/OneWayHeroics.rb +1 -1
  62. data/lib/bcdice/game_system/OracleEngine.rb +1 -1
  63. data/lib/bcdice/game_system/OrgaRain.rb +17 -25
  64. data/lib/bcdice/game_system/Paradiso.rb +3 -3
  65. data/lib/bcdice/game_system/ParanoiaRebooted.rb +1 -1
  66. data/lib/bcdice/game_system/Postman.rb +1 -1
  67. data/lib/bcdice/game_system/PulpCthulhu.rb +1 -1
  68. data/lib/bcdice/game_system/RecordOfLodossWar.rb +1 -1
  69. data/lib/bcdice/game_system/RecordOfSteam.rb +1 -1
  70. data/lib/bcdice/game_system/RokumonSekai2.rb +1 -1
  71. data/lib/bcdice/game_system/Ryutama.rb +1 -1
  72. data/lib/bcdice/game_system/SRS.rb +1 -1
  73. data/lib/bcdice/game_system/SamsaraBallad.rb +1 -1
  74. data/lib/bcdice/game_system/Satasupe.rb +79 -860
  75. data/lib/bcdice/game_system/SevenFortressMobius.rb +1 -1
  76. data/lib/bcdice/game_system/SharedFantasia.rb +1 -1
  77. data/lib/bcdice/game_system/ShinkuuGakuen.rb +2 -2
  78. data/lib/bcdice/game_system/ShinobiGami.rb +3 -3
  79. data/lib/bcdice/game_system/Skynauts.rb +2 -2
  80. data/lib/bcdice/game_system/SteamPunkers.rb +1 -1
  81. data/lib/bcdice/game_system/SterileLife.rb +2 -3
  82. data/lib/bcdice/game_system/StrangerOfSwordCity.rb +2 -2
  83. data/lib/bcdice/game_system/SwordWorld.rb +46 -182
  84. data/lib/bcdice/game_system/SwordWorld2_0.rb +21 -149
  85. data/lib/bcdice/game_system/SwordWorld2_5.rb +126 -40
  86. data/lib/bcdice/game_system/Torg.rb +1 -1
  87. data/lib/bcdice/game_system/TorgEternity.rb +2 -2
  88. data/lib/bcdice/game_system/TunnelsAndTrolls.rb +1 -1
  89. data/lib/bcdice/game_system/TwilightGunsmoke.rb +1 -1
  90. data/lib/bcdice/game_system/UnsungDuet.rb +1 -1
  91. data/lib/bcdice/game_system/Utakaze.rb +1 -1
  92. data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +1 -1
  93. data/lib/bcdice/game_system/Warhammer.rb +1 -1
  94. data/lib/bcdice/game_system/Warhammer4.rb +1 -1
  95. data/lib/bcdice/game_system/WorldOfDarkness.rb +1 -1
  96. data/lib/bcdice/game_system/YearZeroEngine.rb +1 -1
  97. data/lib/bcdice/game_system/ZettaiReido.rb +1 -1
  98. data/lib/bcdice/game_system/cthulhu7th/full_auto.rb +294 -0
  99. data/lib/bcdice/game_system/cthulhu7th/rollable.rb +41 -0
  100. data/lib/bcdice/game_system/filled_with/enemy_data_tables.rb +322 -0
  101. data/lib/bcdice/game_system/filled_with/event_tables.rb +392 -0
  102. data/lib/bcdice/game_system/filled_with/tresure_tables.rb +179 -0
  103. data/lib/bcdice/game_system/satasupe/tables.rb +723 -0
  104. data/lib/bcdice/game_system/sword_world/rating_lexer.rb +47 -0
  105. data/lib/bcdice/game_system/sword_world/rating_parsed.rb +99 -0
  106. data/lib/bcdice/game_system/sword_world/rating_parser.rb +457 -0
  107. data/lib/bcdice/game_system/sword_world/transcendent_test.rb +104 -0
  108. data/lib/bcdice/version.rb +1 -1
  109. metadata +15 -4
@@ -23,7 +23,7 @@ module BCDice
23
23
   例)12SFM-5@7#2  1SFM  50SFM+5@7,10#2,5 50SFM-5+10@7,10#2,5+15+25
24
24
  INFO_MESSAGE_TEXT
25
25
 
26
- register_prefix('([-+]?\d+)?SFM.*', '2R6.*')
26
+ register_prefix('([-+]?\d+)?SFM', '2R6')
27
27
 
28
28
  def initialize(command)
29
29
  super(command)
@@ -21,7 +21,7 @@ module BCDice
21
21
  例) SF+4>=9 : 2D6して4を足した値が9以上なら成功
22
22
  MESSAGETEXT
23
23
 
24
- register_prefix('SF.*', 'ST.*')
24
+ register_prefix('SF', 'ST')
25
25
 
26
26
  def change_text(string)
27
27
  string.gsub(/SF/i, "2D6").gsub(/ST/i, "2D6")
@@ -34,8 +34,8 @@ module BCDice
34
34
  MESSAGETEXT
35
35
 
36
36
  register_prefix(
37
- 'CRL.*', 'CSW.*', 'CLS.*', 'CSS.*', 'CSP.*', 'CAX.*', 'CCL.*', 'CMA.*', 'CBX.*', 'CPR.*', 'CST.*',
38
- 'RL.*', 'SW.*', 'LS.*', 'SS.*', 'SP.*', 'AX.*', 'CL.*', 'BW.*', 'MA.*', 'BX.*', 'PR.*', 'ST.*'
37
+ 'CRL', 'CSW', 'CLS', 'CSS', 'CSP', 'CAX', 'CCL', 'CMA', 'CBX', 'CPR', 'CST',
38
+ 'RL', 'SW', 'LS', 'SS', 'SP', 'AX', 'CL', 'BW', 'MA', 'BX', 'PR', 'ST'
39
39
  )
40
40
 
41
41
  def eval_game_system_specific_command(command)
@@ -109,10 +109,10 @@ module BCDice
109
109
  total = dice_total + cmd.modify_number
110
110
 
111
111
  result =
112
- if dice_total >= cmd.critical
113
- Result.critical(SPECIAL)
114
- elsif dice_total <= cmd.fumble
112
+ if dice_total <= cmd.fumble
115
113
  Result.fumble("ファンブル")
114
+ elsif dice_total >= cmd.critical
115
+ Result.critical(SPECIAL)
116
116
  elsif cmd.cmp_op.nil?
117
117
  Result.new
118
118
  elsif total >= cmd.target_number
@@ -25,14 +25,14 @@ module BCDice
25
25
  ◆砲撃判定+ダメージチェック (BOMn/Dx/y@m) n:目標値(省略時:7)
26
26
   x:ダメージ左側の値、y:ダメージ右側の値
27
27
   m:《弾道学》(省略可)上:8、下:2、左:4、右:6
28
-  例) BOM/D/4 BOM9/D19@4
28
+  例) BOM/D/4 BOM9/D19/2@4
29
29
  ◆《回避運動》 (AVOn@mXX) n:目標値(省略時:7)
30
30
   m:回避方向。上:8、下:2、左:4、右:6、XX:ダメージチェック結果
31
31
   例)
32
32
   AVO9@8[縦1,横4],[縦2,横6],[縦3,横8] AVO@2[縦6,横4],[縦2,横6]
33
33
  MESSAGETEXT
34
34
 
35
- register_prefix('D.*', '2[Dd]6<=.*', 'SN.*', 'NV.*', 'AVO.*', 'BOM.*')
35
+ register_prefix('D', '2D6<=', 'SN', 'NV', 'AVO', 'BOM')
36
36
 
37
37
  def initialize(command)
38
38
  super(command)
@@ -481,7 +481,7 @@ module BCDice
481
481
  )
482
482
  }.freeze
483
483
 
484
- register_prefix('SP.*', TABLES.keys)
484
+ register_prefix('SP', TABLES.keys)
485
485
  end
486
486
  end
487
487
  end
@@ -37,8 +37,7 @@ module BCDice
37
37
   ・超未来の宇宙船内 INT
38
38
  MESSAGETEXT
39
39
 
40
- register_prefix('(\d+)*DA.*\[(\d+),(\d+)(,(\d+))?\]', 'VPFT', 'VNFT', 'VNRT', 'AAFT', 'AST', 'RNST', 'RET', 'TRST', 'TRAT', 'TRMT', 'TROT', 'TET', 'ENT', 'CUT', 'NAT', 'INT') # '(\d+)*DA.*\[.*\]'
41
-
40
+ register_prefix('\d*DA.*\[(\d+),(\d+)(,(\d+))?\]', 'VPFT', 'VNFT', 'VNRT', 'AAFT', 'AST', 'RNST', 'RET', 'TRST', 'TRAT', 'TRMT', 'TROT', 'TET', 'ENT', 'CUT', 'NAT', 'INT')
42
41
  def eval_game_system_specific_command(command) # ダイスロールコマンド
43
42
  # 通常判定部分をgetJudgeResultコマンドに切り分け
44
43
  output = getJudgeResult(command)
@@ -104,7 +103,7 @@ module BCDice
104
103
 
105
104
  def getJudgeResult(command)
106
105
  case command
107
- when /(\d+)*DA([\d+*\-]*\d)?\[(\d+),(\d+)(,(\d+))?\]/i
106
+ when /(\d+)?DA([\d+*\-]*\d)?\[(\d+),(\d+)(,(\d+))?\]/i
108
107
  number = (Regexp.last_match(1) || 1).to_i
109
108
  correction = (Regexp.last_match(2) || 0).to_i
110
109
  single = (Regexp.last_match(3) || 4).to_i
@@ -10,7 +10,7 @@ module BCDice
10
10
  NAME = '剣の街の異邦人TRPG'
11
11
 
12
12
  # ゲームシステム名の読みがな
13
- SORT_KEY = 'けんのまちのいほうしんTRPG'
13
+ SORT_KEY = 'つるきのまちのいほうしんTRPG'
14
14
 
15
15
  # ダイスボットの使い方
16
16
  HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
@@ -21,7 +21,7 @@ module BCDice
21
21
  ・D66ダイスあり
22
22
  INFO_MESSAGE_TEXT
23
23
 
24
- register_prefix('\d+SR.*')
24
+ register_prefix('\d+SR')
25
25
 
26
26
  def initialize(command)
27
27
  super(command)
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "bcdice/game_system/sword_world/rating_parser"
4
+
3
5
  module BCDice
4
6
  module GameSystem
5
7
  class SwordWorld < Base
@@ -15,35 +17,13 @@ module BCDice
15
17
  # ダイスボットの使い方
16
18
  HELP_MESSAGE = "・SW レーティング表 (Kx[c]+m$f) (x:キー, c:クリティカル値, m:ボーナス, f:出目修正)\n"
17
19
 
18
- register_prefix('H?K\d+.*')
20
+ register_prefix('H?K\d+')
19
21
 
20
22
  def initialize(command)
21
23
  super(command)
22
24
  @rating_table = 0
23
25
  end
24
26
 
25
- # change_textで使うレーティング表コマンドの正規表現
26
- #
27
- # SW 2.5のダイスボットでも必要なため、共通化のために定数として定義する
28
- RATING_TABLE_RE_FOR_CHANGE_TEXT = /\AS?H?K\d+/i.freeze
29
-
30
- # コマンド実行前にメッセージを置換する
31
- # @param [String] string 受信したメッセージ
32
- # @return [String]
33
- def replace_text(string)
34
- return string unless RATING_TABLE_RE_FOR_CHANGE_TEXT.match?(string)
35
-
36
- string
37
- .gsub(/\[(\d+)\]/) { "c[#{Regexp.last_match(1)}]" }
38
- .gsub(/@(\d+)/) { "c[#{Regexp.last_match(1)}]" }
39
- .gsub(/\$([-+]?\d+)/) { "m[#{Regexp.last_match(1)}]" }
40
- .gsub(/r([-+]?\d+)/i) { "r[#{Regexp.last_match(1)}]" }
41
- end
42
-
43
- def getRatingCommandStrings
44
- "cmCM"
45
- end
46
-
47
27
  def result_2d6(total, dice_total, _dice_list, cmp_op, target)
48
28
  if dice_total >= 12
49
29
  Result.critical("自動的成功")
@@ -64,60 +44,32 @@ module BCDice
64
44
 
65
45
  private
66
46
 
47
+ def rating_parser
48
+ return RatingParser.new
49
+ end
50
+
67
51
  #################### SWレーティング表 ########################
68
52
  def rating(string) # レーティング表
69
- string = replace_text(string)
70
53
  debug("rating string", string)
54
+ command = rating_parser.parse(string)
71
55
 
72
- commands = getRatingCommandStrings
73
-
74
- m = /^S?(H?K[\d+\-]+([#{commands}]\[([\d+\-]+)\])*([\d+\-]*)([CMR]\[([\d+\-]+)\]|GF|H)*)/i.match(string)
75
- unless m
56
+ unless command
76
57
  debug("not matched")
77
58
  return '1'
78
59
  end
79
60
 
80
- string = m[1]
81
- half = string.include?("H")
82
-
83
- rateUp, string = getRateUpFromString(string)
84
- crit, string = getCriticalFromString(string, half)
85
- firstDiceChanteTo, firstDiceChangeModify, string = getDiceChangesFromString(string)
86
-
87
- key, addValue = getKeyAndAddValueFromString(string)
88
-
89
- return '1' unless key =~ /(\d+)/
90
-
91
- key = Regexp.last_match(1).to_i
92
-
93
61
  # 2.0対応
94
62
  rate_sw2_0 = getSW2_0_RatingTable
95
63
 
96
64
  keyMax = rate_sw2_0.length - 1
97
65
  debug("keyMax", keyMax)
98
- if key > keyMax
66
+ if command.rate > keyMax
99
67
  return "キーナンバーは#{keyMax}までです"
100
68
  end
101
69
 
102
70
  newRates = getNewRates(rate_sw2_0)
103
71
 
104
- output = "KeyNo.#{key}"
105
-
106
- output += "c[#{crit}]" if crit < 13
107
- output += "m[#{firstDiceChangeModify}]" if firstDiceChangeModify != 0
108
- output += "m[#{firstDiceChanteTo}]" if firstDiceChanteTo != 0
109
- output += "r[#{rateUp}]" if rateUp != 0
110
-
111
- output, values = getAdditionalString(string, output)
112
-
113
- debug('output', output)
114
-
115
- if addValue != 0
116
- output += "+#{addValue}" if addValue > 0
117
- output += addValue.to_s if addValue < 0
118
- end
119
-
120
- output += " > "
72
+ output = "#{command}"
121
73
 
122
74
  diceResultTotals = []
123
75
  diceResults = []
@@ -126,17 +78,19 @@ module BCDice
126
78
  diceOnlyTotal = 0
127
79
  totalValue = 0
128
80
  round = 0
81
+ first_to = command.first_to
82
+ first_modify = command.first_modify
129
83
 
130
84
  loop do
131
- dice_raw, diceText = rollDice(values)
85
+ dice_raw, diceText = rollDice(command)
132
86
  dice = dice_raw
133
87
 
134
- if firstDiceChanteTo != 0
135
- dice = dice_raw = firstDiceChanteTo
136
- firstDiceChanteTo = 0
137
- elsif firstDiceChangeModify != 0
138
- dice += firstDiceChangeModify.to_i
139
- firstDiceChangeModify = 0
88
+ if first_to != 0
89
+ dice = dice_raw = first_to
90
+ first_to = 0
91
+ elsif first_modify != 0
92
+ dice += first_modify
93
+ first_modify = 0
140
94
  end
141
95
 
142
96
  # 出目がピンゾロの時にはそこで終了
@@ -149,12 +103,12 @@ module BCDice
149
103
  break
150
104
  end
151
105
 
152
- dice += getAdditionalDiceValue(dice, values)
106
+ dice += command.kept_modify if (command.kept_modify != 0) && (dice != 2)
153
107
 
154
108
  dice = 2 if dice < 2
155
109
  dice = 12 if dice > 12
156
110
 
157
- currentKey = [key + round * rateUp, keyMax].min
111
+ currentKey = [command.rate + round * command.rateup, keyMax].min
158
112
  debug("currentKey", currentKey)
159
113
  rateValue = newRates[dice][currentKey]
160
114
  debug("rateValue", rateValue)
@@ -168,79 +122,15 @@ module BCDice
168
122
 
169
123
  round += 1
170
124
 
171
- break unless dice >= crit
125
+ break unless dice >= command.critical
172
126
  end
173
127
 
174
- output += getResultText(totalValue, addValue, diceResults, diceResultTotals,
175
- rateResults, diceOnlyTotal, round, half)
128
+ output += getResultText(totalValue, command, diceResults, diceResultTotals,
129
+ rateResults, diceOnlyTotal, round)
176
130
 
177
131
  return output
178
132
  end
179
133
 
180
- def getAdditionalString(_string, output)
181
- values = {}
182
- return output, values
183
- end
184
-
185
- def getAdditionalDiceValue(_dice, _values)
186
- 0
187
- end
188
-
189
- def getCriticalFromString(string, half)
190
- crit = half ? 13 : 10
191
-
192
- regexp = /c\[(\d+)\]/i
193
-
194
- if regexp =~ string
195
- crit = Regexp.last_match(1).to_i
196
- crit = 3 if crit < 3 # エラートラップ(クリティカル値が3未満なら3とする)
197
- string = string.gsub(regexp, '')
198
- end
199
-
200
- return crit, string
201
- end
202
-
203
- def getDiceChangesFromString(string)
204
- firstDiceChanteTo = 0
205
- firstDiceChangeModify = 0
206
-
207
- regexp = /m\[([\d+\-]+)\]/i
208
-
209
- if regexp =~ string
210
- firstDiceChangeModify = Regexp.last_match(1)
211
-
212
- unless /[+\-]/ =~ firstDiceChangeModify
213
- firstDiceChanteTo = firstDiceChangeModify.to_i
214
- firstDiceChangeModify = 0
215
- end
216
-
217
- string = string.gsub(regexp, '')
218
- end
219
-
220
- return firstDiceChanteTo, firstDiceChangeModify, string
221
- end
222
-
223
- def getRateUpFromString(string)
224
- rateUp = 0
225
- return rateUp, string
226
- end
227
-
228
- def getKeyAndAddValueFromString(string)
229
- key = nil
230
- addValue = 0
231
-
232
- if /K(\d+)([\d+\-]*)/i =~ string # ボーナスの抽出
233
- key = Regexp.last_match(1)
234
- if Regexp.last_match(2)
235
- addValue = ArithmeticEvaluator.eval(Regexp.last_match(2))
236
- end
237
- else
238
- key = string
239
- end
240
-
241
- return key, addValue
242
- end
243
-
244
134
  def getSW2_0_RatingTable
245
135
  rate_sw2_0 = [
246
136
  # 0
@@ -397,7 +287,7 @@ module BCDice
397
287
  return newRates
398
288
  end
399
289
 
400
- def rollDice(_values)
290
+ def rollDice(_command)
401
291
  dice_list = @randomizer.roll_barabara(2, 6)
402
292
  total = dice_list.sum()
403
293
  dice_str = dice_list.join(",")
@@ -405,15 +295,14 @@ module BCDice
405
295
  end
406
296
 
407
297
  # @param rating_total [Integer]
408
- # @param modifier [Integer]
298
+ # @param command [SwordWorld::RatingParsed]
409
299
  # @param diceResults [Array<String>]
410
300
  # @param diceResultTotals [Array<String>]
411
301
  # @param rateResults [Array<String>]
412
302
  # @param dice_total [Integer]
413
303
  # @param round [Integer]
414
- # @param half [Boolean]
415
- def getResultText(rating_total, modifier, diceResults, diceResultTotals,
416
- rateResults, dice_total, round, half)
304
+ def getResultText(rating_total, command, diceResults, diceResultTotals,
305
+ rateResults, dice_total, round)
417
306
  sequence = []
418
307
 
419
308
  sequence.push("2D:[#{diceResults.join(' ')}]=#{diceResultTotals.join(',')}")
@@ -425,14 +314,21 @@ module BCDice
425
314
  end
426
315
 
427
316
  # rate回数が1回で、修正値がない時には途中式と最終結果が一致するので、途中式を省略する
428
- if rateResults.size > 1 || modifier != 0
429
- text = rateResults.join(',') + Format.modifier(modifier)
430
- if half
317
+ if rateResults.size > 1 || command.modifier != 0
318
+ text = rateResults.join(',') + Format.modifier(command.modifier)
319
+ if command.half
431
320
  text = "(#{text})/2"
321
+ if command.modifier_after_half != 0
322
+ text += Format.modifier(command.modifier_after_half)
323
+ end
324
+ end
325
+ sequence.push(text)
326
+ elsif command.half
327
+ text = "#{rateResults.first}/2"
328
+ if command.modifier_after_half != 0
329
+ text += Format.modifier(command.modifier_after_half)
432
330
  end
433
331
  sequence.push(text)
434
- elsif half
435
- sequence.push("#{rateResults.first}/2")
436
332
  end
437
333
 
438
334
  if round > 1
@@ -440,9 +336,12 @@ module BCDice
440
336
  sequence.push(round_text)
441
337
  end
442
338
 
443
- total = rating_total + modifier
444
- if half
339
+ total = rating_total + command.modifier
340
+ if command.half
445
341
  total = (total / 2.0).ceil
342
+ if command.modifier_after_half != 0
343
+ total += command.modifier_after_half
344
+ end
446
345
  end
447
346
 
448
347
  total_text = total.to_s
@@ -450,41 +349,6 @@ module BCDice
450
349
 
451
350
  return sequence.join(" > ")
452
351
  end
453
-
454
- def setRatingTable(tnick)
455
- mode_str = ""
456
- pre_mode = @rating_table
457
-
458
- if /(\d+)/ =~ tnick
459
- @rating_table = Regexp.last_match(1).to_i
460
- if @rating_table > 1
461
- mode_str = "2.0-mode"
462
- @rating_table = 2
463
- elsif @rating_table > 0
464
- mode_str = "new-mode"
465
- @rating_table = 1
466
- else
467
- mode_str = "old-mode"
468
- @rating_table = 0
469
- end
470
- else
471
- case tnick
472
- when /old/i
473
- @rating_table = 0
474
- mode_str = "old-mode"
475
- when /new/i
476
- @rating_table = 1
477
- mode_str = "new-mode"
478
- when /2\.0/i
479
- @rating_table = 2
480
- mode_str = "2.0-mode"
481
- end
482
- end
483
-
484
- return '1' if @rating_table == pre_mode
485
-
486
- return "RatingTableを#{mode_str}に変更しました"
487
- end
488
352
  end
489
353
  end
490
354
  end