bcdice 3.0.0.pre.alpha.2 → 3.0.0.pre.rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/README.md +1 -0
  4. data/i18n/KillDeathBusiness/ja_jp.yml +4 -4
  5. data/i18n/KillDeathBusiness/ko_kr.yml +5 -4
  6. data/i18n/MagicaLogia/ko_kr.yml +564 -0
  7. data/i18n/MonotoneMuseum/ja_jp.yml +37 -1
  8. data/i18n/StratoShout/ja_jp.yml +4 -4
  9. data/i18n/StratoShout/ko_kr.yml +4 -4
  10. data/lib/bcdice.rb +2 -1
  11. data/lib/bcdice/arithmetic.rb +22 -0
  12. data/lib/bcdice/arithmetic/node.rb +112 -43
  13. data/lib/bcdice/arithmetic/parser.rb +240 -0
  14. data/lib/bcdice/arithmetic_evaluator.rb +5 -156
  15. data/lib/bcdice/base.rb +8 -1
  16. data/lib/bcdice/command/lexer.rb +57 -0
  17. data/lib/bcdice/command/parsed.rb +65 -0
  18. data/lib/bcdice/command/parser.rb +489 -0
  19. data/lib/bcdice/common_command/add_dice.rb +1 -1
  20. data/lib/bcdice/common_command/add_dice/node.rb +142 -69
  21. data/lib/bcdice/common_command/add_dice/parser.rb +100 -83
  22. data/lib/bcdice/common_command/barabara_dice/node.rb +7 -1
  23. data/lib/bcdice/common_command/barabara_dice/result.rb +22 -0
  24. data/lib/bcdice/common_command/calc/node.rb +10 -1
  25. data/lib/bcdice/common_command/calc/parser.rb +1 -1
  26. data/lib/bcdice/common_command/d66_dice.rb +3 -1
  27. data/lib/bcdice/common_command/lexer.rb +2 -1
  28. data/lib/bcdice/common_command/upper_dice/parser.rb +118 -97
  29. data/lib/bcdice/common_command/version.rb +1 -1
  30. data/lib/bcdice/deprecated/checker.rb +6 -6
  31. data/lib/bcdice/dice_table.rb +1 -0
  32. data/lib/bcdice/dice_table/d66_parity_table.rb +34 -0
  33. data/lib/bcdice/game_system.rb +3 -0
  34. data/lib/bcdice/game_system/AceKillerGene.rb +1 -1
  35. data/lib/bcdice/game_system/AlchemiaStruggle.rb +312 -0
  36. data/lib/bcdice/game_system/Alshard.rb +0 -1
  37. data/lib/bcdice/game_system/Amadeus.rb +1 -1
  38. data/lib/bcdice/game_system/AnimaAnimus.rb +1 -5
  39. data/lib/bcdice/game_system/BadLife.rb +1 -1
  40. data/lib/bcdice/game_system/BeastBindTrinity.rb +1 -10
  41. data/lib/bcdice/game_system/BeginningIdol.rb +4 -4
  42. data/lib/bcdice/game_system/BeginningIdol_Korean.rb +4 -4
  43. data/lib/bcdice/game_system/BladeOfArcana.rb +4 -4
  44. data/lib/bcdice/game_system/BlindMythos.rb +12 -9
  45. data/lib/bcdice/game_system/BloodCrusade.rb +12 -38
  46. data/lib/bcdice/game_system/BloodMoon.rb +2 -2
  47. data/lib/bcdice/game_system/CardRanker.rb +23 -63
  48. data/lib/bcdice/game_system/ChaosFlare.rb +3 -3
  49. data/lib/bcdice/game_system/CodeLayerd.rb +1 -1
  50. data/lib/bcdice/game_system/ColossalHunter.rb +2 -2
  51. data/lib/bcdice/game_system/Cthulhu7th.rb +2 -2
  52. data/lib/bcdice/game_system/CthulhuTech.rb +0 -1
  53. data/lib/bcdice/game_system/DarkBlaze.rb +4 -4
  54. data/lib/bcdice/game_system/DeadlineHeroes.rb +1 -1
  55. data/lib/bcdice/game_system/DoubleCross.rb +60 -93
  56. data/lib/bcdice/game_system/EmbryoMachine.rb +5 -5
  57. data/lib/bcdice/game_system/EtrianOdysseySRS.rb +0 -1
  58. data/lib/bcdice/game_system/FilledWith.rb +3 -3
  59. data/lib/bcdice/game_system/FullMetalPanic.rb +0 -1
  60. data/lib/bcdice/game_system/GURPS.rb +1 -1
  61. data/lib/bcdice/game_system/Garako.rb +3 -2
  62. data/lib/bcdice/game_system/GardenOrder.rb +1 -1
  63. data/lib/bcdice/game_system/GehennaAn.rb +3 -3
  64. data/lib/bcdice/game_system/Gundog.rb +1 -1
  65. data/lib/bcdice/game_system/GundogRevised.rb +3 -3
  66. data/lib/bcdice/game_system/GundogZero.rb +2 -2
  67. data/lib/bcdice/game_system/GurpsFW.rb +2 -5
  68. data/lib/bcdice/game_system/HatsuneMiku.rb +1 -1
  69. data/lib/bcdice/game_system/HuntersMoon.rb +17 -110
  70. data/lib/bcdice/game_system/JuinKansen.rb +251 -0
  71. data/lib/bcdice/game_system/KanColle.rb +17 -166
  72. data/lib/bcdice/game_system/KillDeathBusiness.rb +35 -44
  73. data/lib/bcdice/game_system/KillDeathBusiness_Korean.rb +2 -1
  74. data/lib/bcdice/game_system/LogHorizon.rb +8 -8
  75. data/lib/bcdice/game_system/LostRoyal.rb +1 -3
  76. data/lib/bcdice/game_system/MagicaLogia.rb +3 -3
  77. data/lib/bcdice/game_system/MagicaLogia_Korean.rb +66 -0
  78. data/lib/bcdice/game_system/MeikyuDays.rb +1 -1
  79. data/lib/bcdice/game_system/MeikyuKingdom.rb +1 -1
  80. data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +1 -1
  81. data/lib/bcdice/game_system/MetalHeadExtream.rb +4 -4
  82. data/lib/bcdice/game_system/MetallicGuardian.rb +0 -1
  83. data/lib/bcdice/game_system/MonotoneMuseum.rb +3 -2
  84. data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +1 -1
  85. data/lib/bcdice/game_system/NSSQ.rb +2 -2
  86. data/lib/bcdice/game_system/Nechronica.rb +3 -3
  87. data/lib/bcdice/game_system/NightWizard.rb +1 -1
  88. data/lib/bcdice/game_system/NightmareHunterDeep.rb +3 -4
  89. data/lib/bcdice/game_system/NinjaSlayer.rb +26 -28
  90. data/lib/bcdice/game_system/OracleEngine.rb +13 -17
  91. data/lib/bcdice/game_system/Paradiso.rb +2 -2
  92. data/lib/bcdice/game_system/PhantasmAdventure.rb +0 -4
  93. data/lib/bcdice/game_system/Raisondetre.rb +1 -1
  94. data/lib/bcdice/game_system/RecordOfLodossWar.rb +2 -3
  95. data/lib/bcdice/game_system/RokumonSekai2.rb +2 -2
  96. data/lib/bcdice/game_system/RuinBreakers.rb +1 -1
  97. data/lib/bcdice/game_system/Ryutama.rb +1 -1
  98. data/lib/bcdice/game_system/SRS.rb +0 -5
  99. data/lib/bcdice/game_system/SamsaraBallad.rb +4 -3
  100. data/lib/bcdice/game_system/Satasupe.rb +22 -14
  101. data/lib/bcdice/game_system/ScreamHighSchool.rb +2 -2
  102. data/lib/bcdice/game_system/ShinkuuGakuen.rb +1 -1
  103. data/lib/bcdice/game_system/ShinobiGami.rb +75 -39
  104. data/lib/bcdice/game_system/StellarKnights.rb +1 -3
  105. data/lib/bcdice/game_system/SterileLife.rb +1 -1
  106. data/lib/bcdice/game_system/StrangerOfSwordCity.rb +1 -1
  107. data/lib/bcdice/game_system/StratoShout.rb +10 -36
  108. data/lib/bcdice/game_system/StratoShout_Korean.rb +2 -1
  109. data/lib/bcdice/game_system/SwordWorld.rb +5 -5
  110. data/lib/bcdice/game_system/SwordWorld2_5.rb +1 -1
  111. data/lib/bcdice/game_system/TherapieSein.rb +2 -2
  112. data/lib/bcdice/game_system/TokumeiTenkousei.rb +2 -2
  113. data/lib/bcdice/game_system/Torg.rb +1 -1
  114. data/lib/bcdice/game_system/TorgEternity.rb +4 -7
  115. data/lib/bcdice/game_system/TrinitySeven.rb +2 -2
  116. data/lib/bcdice/game_system/TunnelsAndTrolls.rb +6 -6
  117. data/lib/bcdice/game_system/TwilightGunsmoke.rb +1 -1
  118. data/lib/bcdice/game_system/Utakaze.rb +1 -1
  119. data/lib/bcdice/game_system/Warhammer.rb +6 -6
  120. data/lib/bcdice/game_system/Warhammer4.rb +9 -12
  121. data/lib/bcdice/game_system/ZettaiReido.rb +1 -1
  122. data/lib/bcdice/normalize.rb +1 -1
  123. data/lib/bcdice/preprocessor.rb +12 -8
  124. data/lib/bcdice/randomizer.rb +12 -0
  125. data/lib/bcdice/repl.rb +1 -1
  126. data/lib/bcdice/result.rb +2 -0
  127. data/lib/bcdice/user_defined_dice_table.rb +26 -15
  128. data/lib/bcdice/version.rb +1 -1
  129. metadata +14 -25
  130. data/.editorconfig +0 -21
  131. data/.github/.codecov.yaml +0 -10
  132. data/.github/workflows/coverage.yaml +0 -21
  133. data/.github/workflows/lint.yaml +0 -13
  134. data/.github/workflows/test.yml +0 -20
  135. data/.gitignore +0 -14
  136. data/.rubocop.yml +0 -108
  137. data/.rubocop_todo.yml +0 -114
  138. data/Gemfile +0 -14
  139. data/ROADMAP.md +0 -30
  140. data/Rakefile +0 -152
  141. data/bcdice.gemspec +0 -29
  142. data/bin/repl.rb +0 -21
  143. data/docs/README.txt +0 -2028
  144. data/docs/dicebot_sort_key.md +0 -72
  145. data/docs/how_to_make_dicebot.md +0 -453
  146. data/lib/bcdice/command_parser.rb +0 -242
  147. data/lib/bcdice/common_command/add_dice/parser.y +0 -153
  148. data/lib/bcdice/common_command/barabara_dice/parser.y +0 -107
  149. data/lib/bcdice/common_command/calc/parser.y +0 -79
  150. data/lib/bcdice/common_command/reroll_dice/parser.y +0 -158
  151. data/lib/bcdice/common_command/upper_dice/parser.y +0 -143
@@ -15,7 +15,7 @@ module BCDice
15
15
  # ダイスボットの使い方
16
16
  HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
17
17
  ・判定
18
-  JDx or JDx+y or JDx-y or JDx,z or JDx+y,z JDx-y,z
18
+  JDx or JDx±y or JDx,z JDx#z or JDx±y,z JDx±y#z
19
19
   (x=難易度、y=補正、z=ファンブル率(リスク))
20
20
  ・履歴表 (HST)
21
21
  ・願い事表 (-WT)
@@ -33,7 +33,7 @@ module BCDice
33
33
  ・ソウル放出表 (SOUL)
34
34
  ・汎用演出表 (STGT)
35
35
  ・ヘルスタイリスト罵倒表 (HSAT、HSATx) xに数字(1,2)で表を個別ロール
36
- ・指定特技ランダム決定表 (SKLT)、指定特技分野ランダム決定表 (SKLJ)
36
+ ・指定特技ランダム決定表 (SKLT, RTTn nは分野番号)、指定特技分野ランダム決定表 (RCT, SKLJ)
37
37
  ・エキストラ表 (EXT、EXTx) xに数字(1,2,3,4)で表を個別ロール
38
38
  ・製作委員決定表 PCDT/実際どうだったのか表 OHT
39
39
  ・タスク表 ヘルライオン PCT1/ヘルクロウ PCT2/ヘルスネーク PCT3/
@@ -70,28 +70,32 @@ module BCDice
70
70
  def eval_game_system_specific_command(command)
71
71
  debug("eval_game_system_specific_command command", command)
72
72
 
73
- # 判定チェックは先に処理
74
- case command
75
- when JUDGE_DICE_REG
76
- result = judgeDice(command)
77
- text = translate("KillDeathBusiness.JD.name") + result
78
- return text
73
+ if command.start_with?("JD")
74
+ judgeDice(command)
75
+ else
76
+ rollTableCommand(command)
79
77
  end
80
-
81
- # 判定以外なら表コマンドの処理に
82
- return rollTableCommand(command)
83
78
  end
84
79
 
85
- JUDGE_DICE_REG = /(^|\s)JD(\d+)([\+\-]\d+)?(,(\d+))?($|\s)/i.freeze
80
+ private
86
81
 
87
82
  def judgeDice(command)
88
- unless command.match(JUDGE_DICE_REG)
83
+ fumble_match = /,(\d+)$/.match(command)
84
+
85
+ parser = Command::Parser.new(/JD\d+/, round_type: round_type)
86
+ .enable_critical
87
+ .enable_fumble
88
+ .restrict_cmp_op_to(nil)
89
+ cmd = parser.parse(fumble_match&.pre_match || command)
90
+ unless cmd
89
91
  return nil
90
92
  end
91
93
 
92
- target = Regexp.last_match(2).to_i
93
- modify = Regexp.last_match(3).to_i
94
- fumble = Regexp.last_match(5).to_i
94
+ target = cmd.command.delete_prefix("JD").to_i
95
+ modify = cmd.modify_number
96
+ fumble = fumble_match ? fumble_match[1].to_i : cmd.fumble.to_i
97
+
98
+ command = judge_expr(target, modify, fumble)
95
99
 
96
100
  result = ""
97
101
 
@@ -138,12 +142,19 @@ module BCDice
138
142
  end
139
143
  end
140
144
 
141
- return result
145
+ return translate("KillDeathBusiness.JD.name") + result
146
+ end
147
+
148
+ def judge_expr(target, modifier, fumble)
149
+ modifier = Format.modifier(modifier)
150
+ fumble = ",#{fumble}" if fumble > 0
151
+
152
+ "JD#{target}#{modifier}#{fumble}"
142
153
  end
143
154
 
144
155
  def rollTableCommand(command)
145
156
  command = ALIAS[command] || command
146
- result = roll_tables(command, self.class::TABLES)
157
+ result = roll_tables(command, self.class::TABLES) || self.class::RTT.roll_command(@randomizer, command)
147
158
  return result if result
148
159
 
149
160
  tableName = ""
@@ -168,10 +179,6 @@ module BCDice
168
179
  when /^EXT(\d)?$/
169
180
  type = Regexp.last_match(1).to_i
170
181
  tableName, result, number = getExtraTableResult(type)
171
-
172
- when /^SKL(T|J)$/
173
- type = Regexp.last_match(1)
174
- tableName, result, number = getSkillTableResult(type)
175
182
  end
176
183
 
177
184
  if result.empty?
@@ -284,24 +291,6 @@ module BCDice
284
291
  return tableName, result, number
285
292
  end
286
293
 
287
- def getSkillTableResult(type)
288
- skillTableFull = translate("KillDeathBusiness.SKLT.items")
289
- skillTable, num1 = get_table_by_1d6(skillTableFull)
290
- skillGroup, table = skillTable
291
- if type == "T"
292
- tableName = translate("KillDeathBusiness.SKLT.name")
293
- skill, num2 = get_table_by_2d6(table)
294
- result = "「#{skillGroup}」《#{skill}》"
295
- number = "#{num1},#{num2}"
296
- else
297
- tableName = translate("KillDeathBusiness.SKLJ.name")
298
- result = skillGroup
299
- number = num1
300
- end
301
-
302
- return tableName, result, number
303
- end
304
-
305
294
  def getExtraTableResult(type)
306
295
  tableName = translate("KillDeathBusiness.EXT.name")
307
296
  extraTable1 = [
@@ -417,9 +406,14 @@ module BCDice
417
406
  "UMSPT" => DiceTable::Table.from_i18n("KillDeathBusiness.table.UMSPT", locale),
418
407
  }
419
408
  end
409
+
410
+ def translate_rtt(locale)
411
+ DiceTable::SaiFicSkillTable.from_i18n("KillDeathBusiness.RTT", locale, rtt: "SKLT", rct: "SKLJ")
412
+ end
420
413
  end
421
414
 
422
415
  TABLES = translate_tables(:ja_jp)
416
+ RTT = translate_rtt(:ja_jp)
423
417
 
424
418
  register_prefix(
425
419
  'ST[1-2]?',
@@ -427,12 +421,9 @@ module BCDice
427
421
  'EST', 'sErviceST',
428
422
  'HSAT[1-2]?',
429
423
  'EXT[1-4]?',
430
- 'SKLT',
431
- 'SKLJ',
432
424
  'JD'
433
425
  )
434
- register_prefix(TABLES.keys)
435
- register_prefix(ALIAS.keys)
426
+ register_prefix(TABLES.keys, register_prefix(ALIAS.keys), RTT.prefixes)
436
427
  end
437
428
  end
438
429
  end
@@ -35,7 +35,7 @@ module BCDice
35
35
  ・소울 방출표 (SOUL)
36
36
  ・범용연출표 (STGT)
37
37
  ・헬 스타일리스트 매도표 (HSAT、HSATx) x에 숫자(1,2)로 표를 개별 롤
38
- ・지정특기 랜덤 결정표 (SKLT)、지정특기 분야 랜덤 결정표 (SKLJ)
38
+ ・지정특기 랜덤 결정표 (RTT, SKLT)、지정특기 분야 랜덤 결정표 (RCT, SKLJ)
39
39
  ・엑스트라 표 (EXT、EXTx) x에 숫자(1,2,3,4)로 표를 개별 롤
40
40
  ・제작위원 결정표 PCDT/실제 어떠했는가 표 OHT
41
41
  ・태스크 표 헬 라이온 PCT1/헬 크로우 PCT2/헬 스네이크 PCT3/
@@ -52,6 +52,7 @@ module BCDice
52
52
  end
53
53
 
54
54
  TABLES = translate_tables(:ko_kr)
55
+ RTT = translate_rtt(:ko_kr)
55
56
  end
56
57
  end
57
58
  end
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "bcdice/base"
4
- require "bcdice/command_parser"
5
4
 
6
5
  module BCDice
7
6
  module GameSystem
@@ -115,7 +114,8 @@ module BCDice
115
114
  private
116
115
 
117
116
  def getCheckRollDiceCommandResult(command)
118
- parser = CommandParser.new(/^\d+LH$/).allow_cmp_op(nil, :>=)
117
+ parser = Command::Parser.new(/\d+LH/, round_type: round_type)
118
+ .restrict_cmp_op_to(nil, :>=)
119
119
 
120
120
  parsed = parser.parse(command)
121
121
  unless parsed
@@ -160,7 +160,7 @@ module BCDice
160
160
 
161
161
  # 消耗表ロール
162
162
  def roll_consumption(command)
163
- m = /^CT\d*([\+\-\d]+)?$/.match(command)
163
+ m = /^CT\d*([+\-\d]+)?$/.match(command)
164
164
  return nil unless m
165
165
 
166
166
  modifier = ArithmeticEvaluator.eval(m[1])
@@ -180,7 +180,7 @@ module BCDice
180
180
 
181
181
  ### 消耗表 ###
182
182
  def roll_consumption_table(command)
183
- m = /(P|E|G|C|ES|CS)CT(\d+)?([\+\-\d]+)?(?:\$(\d+))?/.match(command)
183
+ m = /(P|E|G|C|ES|CS)CT(\d+)?([+\-\d]+)?(?:\$(\d+))?/.match(command)
184
184
  return nil unless m
185
185
 
186
186
  table = construct_consumption_table(m[1])
@@ -244,7 +244,7 @@ module BCDice
244
244
 
245
245
  # 財宝表ロール
246
246
  def roll_treasure(command)
247
- m = /^TRS(\d+)*([\+\-\d]+)?$/.match(command)
247
+ m = /^TRS(\d+)*([+\-\d]+)?$/.match(command)
248
248
  return nil unless m
249
249
 
250
250
  character_rank = m[1].to_i
@@ -261,7 +261,7 @@ module BCDice
261
261
 
262
262
  ### 財宝表 ###
263
263
  def roll_treasure_table(command)
264
- m = /^([CMIHG]TRS)(\d+)*([\+\-\d]+)?(\$)?$/.match(command)
264
+ m = /^([CMIHG]TRS)(\d+)*([+\-\d]+)?(\$)?$/.match(command)
265
265
  return nil unless m
266
266
 
267
267
  type = m[1]
@@ -286,7 +286,7 @@ module BCDice
286
286
 
287
287
  # 拡張ルール財宝表
288
288
  def roll_treasure_table_b2(command)
289
- m = /^([CMIO]TRSE)(\d+)*([\+\-\d]+)?(\$)?$/.match(command)
289
+ m = /^([CMIO]TRSE)(\d+)*([+\-\d]+)?(\$)?$/.match(command)
290
290
  return nil unless m
291
291
 
292
292
  type = m[1]
@@ -487,7 +487,7 @@ module BCDice
487
487
 
488
488
  # イースタル探索表
489
489
  def roll_eastal_exploration_table(command)
490
- m = /ESTL(\d+)?([\+\-\d]+)?(?:\$(\d+))?/.match(command)
490
+ m = /ESTL(\d+)?([+\-\d]+)?(?:\$(\d+))?/.match(command)
491
491
  return nil unless m
492
492
  return nil if m[1].nil? && m[2].nil? && m[3].nil?
493
493
 
@@ -98,9 +98,7 @@ module BCDice
98
98
  sequences = (1...6).map do |start_key|
99
99
  find_sequence_from_start_key(keys, start_key)
100
100
  end
101
- sequence = sequences.select { |x| x.size > 1 }.max { |a, b| a.size <=> b.size }
102
-
103
- sequence
101
+ sequences.select { |x| x.size > 1 }.max { |a, b| a.size <=> b.size }
104
102
  end
105
103
 
106
104
  def find_sequence_from_start_key(keys, start_key)
@@ -81,7 +81,7 @@ module BCDice
81
81
 
82
82
  def eval_game_system_specific_command(command)
83
83
  self.class::SKILL_TABLE.roll_command(@randomizer, command) ||
84
- roll_tables(command, TABLES)
84
+ roll_tables(command, self.class::TABLES)
85
85
  end
86
86
 
87
87
  private
@@ -124,7 +124,7 @@ module BCDice
124
124
  private
125
125
 
126
126
  def expand(chosen, randomizer)
127
- chosen.gsub(/\%{([a-z]+)}/) do
127
+ chosen.gsub(/%{([a-z]+)}/) do
128
128
  m = Regexp.last_match
129
129
  type = m[1].to_sym
130
130
 
@@ -216,7 +216,7 @@ module BCDice
216
216
  "MFT" => force_field_table,
217
217
  "MLT" => alliance_table,
218
218
  "BST" => DiceTable::ChainTable.new(
219
- "ブランク秘密表",
219
+ I18n.translate("MagicaLogia.tables.BST.name", raise: true, locale: locale),
220
220
  "1D6",
221
221
  [
222
222
  inveterate_enemy_table,
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bcdice/game_system/MagicaLogia"
4
+
5
+ module BCDice
6
+ module GameSystem
7
+ class MagicaLogia_Korean < MagicaLogia
8
+ # ゲームシステムの識別子
9
+ ID = "MagicaLogia:Korean"
10
+
11
+ # ゲームシステム名
12
+ NAME = "마기카로기아"
13
+
14
+ # ゲームシステム名の読みがな
15
+ SORT_KEY = "国際化:Korean:마기카로기아"
16
+
17
+ # ダイスボットの使い方
18
+ HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
19
+ ・판정
20
+ 스페셜/펌블/성공/실패
21
+ ・각종 표
22
+ 경력 표 BGT/ 초기 앵커 표 DAT/ 운명 속성 표 FAT
23
+ 소원 표 WIT/ 프라이즈 표 PT
24
+ 시간의 흐름 표(구판) TPT/ 대형판 시간의 흐름 표 TPTB
25
+ 사건 표 AT
26
+ 펌블 표 FT/ 상태이상 표 WT
27
+ 운명 변전 표 FCT
28
+  전형적 재액 TCT/물리계 재액 PCT/정신계 재액 MCT/광기계 재액 ICT
29
+  사회계 재액 SCT/초자연계 재액 XCT/불가사의계 재액 WCT/코믹계 재액 CCT
30
+  마법사 재액 MGCT
31
+ 장면표 ST/대형판 장면표 STB
32
+  극한 환경 XEST/내면 세계 IWST/마법 도시 MCST
33
+  사후 세계 WDST/미궁 세계 LWST
34
+  마법 서가 MBST/마법 학원 MAST/크레도의 탑 TCST
35
+  병행 세계 PWST/종말 PAST/이세계 술집 GBST
36
+  별빛 SLST/구 도서관 OLST
37
+ 세계 법칙 추가 표 WLAT/떠돌이 괴물 표 WMT
38
+ 랜덤 분야 표 RCT
39
+ 랜덤 특기 표 RTT
40
+  별 분야 랜덤 특기 표 RTS, RTT1
41
+  짐승 분야 랜덤 특기 표 RTB, RTT2
42
+  힘 분야 랜덤 특기 표 RTF, RTT3
43
+  노래 분야 랜덤 특기 표 RTP, RTT4
44
+  꿈 분야 랜덤 특기 표 RTD, RTT5
45
+  어둠 분야 랜덤 특기 표 RTN, RTT6
46
+ 백지 비밀 표 BST/
47
+  숙적표 MIT/모략 표 MOT/인연 표 MAT
48
+  기인표 MUT/역장 표 MFT/동맹 표 MLT
49
+ 낙화 표 FFT
50
+ 그 후의 전개 표 FLT
51
+ ・D66 다이스 있음.
52
+ INFO_MESSAGE_TEXT
53
+
54
+ register_prefix_from_super_class()
55
+
56
+ def initialize(command)
57
+ super(command)
58
+
59
+ @locale = :ko_kr
60
+ end
61
+
62
+ SKILL_TABLE = translate_skill_table(:ko_kr)
63
+ TABLES = translate_tables(:ko_kr, SKILL_TABLE)
64
+ end
65
+ end
66
+ end
@@ -63,7 +63,7 @@ module BCDice
63
63
  string = replace_text(string)
64
64
 
65
65
  debug("checkRoll string", string)
66
- unless (m = /(^|\s)S?((\d+)[rR]6([\+\-\d]*)(([>=]+)(\d+))?)(\s|$)/i.match(string))
66
+ unless (m = /(^|\s)S?((\d+)[rR]6([+\-\d]*)(([>=]+)(\d+))?)(\s|$)/i.match(string))
67
67
  debug("not mutch")
68
68
  return nil
69
69
  end
@@ -141,7 +141,7 @@ module BCDice
141
141
 
142
142
  string = replace_text(string)
143
143
 
144
- m = /^S?((\d+)R6([\+\-\d]*)(([>=]+)(\d+))?)/i.match(string)
144
+ m = /^S?((\d+)R6([+\-\d]*)(([>=]+)(\d+))?)/i.match(string)
145
145
  unless m
146
146
  return nil
147
147
  end
@@ -24,7 +24,7 @@ module BCDice
24
24
   ・休憩表:才覚 TBT/魅力 CBT/探索 SBT/武勇 VBT
25
25
  お祭り FBT/空振り EBT/全体 WBT/カップル LBT
26
26
   ・ハプニング表:才覚 THT/魅力 CHT/探索 SHT/武勇 VHT
27
-  ・視察表 RT/情報収集表 IGT/ランダムマップ選択表 RMS
27
+  ・視察表 RT/情報収集表 IG/ランダムマップ選択表 RMS
28
28
   ・痛打表 CAT/致命傷表 FWT/戦闘ファンブル表 CFT
29
29
   ・道中表 TT/交渉表 NT/相場表 MPT/王国災厄表 KDT/王国変動表 KCT
30
30
   ・感情表 ET/好意表 FET/敵意表 HET
@@ -62,7 +62,7 @@ module BCDice
62
62
  text =
63
63
  case command.upcase
64
64
 
65
- when %r{([AS])R(\d+)(([\*/]\d+)*)?(((@|A|L)\d+)*)(\!M)?$}i
65
+ when %r{([AS])R(\d+)(([*/]\d+)*)?(((@|A|L)\d+)*)(!M)?$}i
66
66
  m = Regexp.last_match
67
67
 
68
68
  type = m[1]
@@ -121,7 +121,7 @@ module BCDice
121
121
  when 'LDC'
122
122
  get_loserDestiny_chart
123
123
 
124
- when /([W])ENC(\d+)?/i
124
+ when /(W)ENC(\d+)?/i
125
125
  locationType = Regexp.last_match(1)
126
126
  roc = (Regexp.last_match(2) || 0).to_i
127
127
  get_randomEncounter_table(locationType, roc)
@@ -904,9 +904,9 @@ module BCDice
904
904
  # 端数が使いたいので、parren_killer未使用
905
905
  def get_value(originalValue, calculateText)
906
906
  result = originalValue.to_f
907
- calculateArray = (calculateText || '').scan(%r{[\*/]\d*}) # 修正値を分割して配列へ
907
+ calculateArray = (calculateText || '').scan(%r{[*/]\d*}) # 修正値を分割して配列へ
908
908
  calculateArray.each do |i| # 配列内ループで補正率を計算
909
- i =~ %r{([\*/])(\d*)}i
909
+ i =~ %r{([*/])(\d*)}i
910
910
  result *= Regexp.last_match(2).to_i if Regexp.last_match(1) == '*'
911
911
  result /= Regexp.last_match(2).to_i if Regexp.last_match(1) == '/'
912
912
  end
@@ -2,7 +2,6 @@
2
2
 
3
3
  require 'bcdice/game_system/SRS'
4
4
 
5
- # メタリックガーディアンのダイスボット
6
5
  module BCDice
7
6
  module GameSystem
8
7
  class MetallicGuardian < SRS
@@ -26,7 +26,7 @@ module BCDice
26
26
    自動成功、自動失敗、成功、失敗を自動表示します。
27
27
  ・各種表
28
28
   ・感情表 ET/感情表 2.0 ET2
29
-  ・兆候表 OT/兆候表ver2.0 OT2
29
+  ・兆候表 OT/兆候表ver2.0 OT2/兆候表ver3.0 OT3
30
30
   ・歪み表 DT/歪み表ver2.0 DT2/歪み表(野外) DTO/歪み表(海) DTS/歪み表(館・城) DTM
31
31
   ・世界歪曲表 WDT/世界歪曲表2.0 WDT2
32
32
   ・永劫消失表 EDT
@@ -59,7 +59,7 @@ module BCDice
59
59
  private
60
60
 
61
61
  def check_roll(command)
62
- m = /^(\d+)D6([\+\-\d]*)>=(\d+)(\[(\d+)?(,(\d+))?\])?$/i.match(command)
62
+ m = /^(\d+)D6([+\-\d]*)>=(\d+)(\[(\d+)?(,(\d+))?\])?$/i.match(command)
63
63
  unless m
64
64
  return nil
65
65
  end
@@ -141,6 +141,7 @@ module BCDice
141
141
  "DTS" => MMTable.from_i18n("MonotoneMuseum.table.DTS", locale),
142
142
  "EDT" => DiceTable::Table.from_i18n("MonotoneMuseum.table.EDT", locale),
143
143
  "DTM" => MMTable.from_i18n("MonotoneMuseum.table.DTM", locale),
144
+ "OT3" => DiceTable::Table.from_i18n("MonotoneMuseum.table.OT3", locale),
144
145
  }
145
146
  end
146
147
  end
@@ -23,7 +23,7 @@ module BCDice
23
23
    자동성공, 자동실패, 성공, 실패를 자동표기합니다.
24
24
  ・각종표
25
25
   ・감정표 ET/감정표 2.0 ET2
26
-  ・징조표 OT/兆候表ver2.0 OT2
26
+  ・징조표 OT/兆候表ver2.0 OT2/兆候表ver3.0 OT3
27
27
   ・일그러짐표 DT/일그러짐표ver2.0 DT2/歪み表(野外) DTO/歪み表(海) DTS/歪み表(館・城) DTM
28
28
   ・세계왜곡표  WDT/世界歪曲表2.0 WDT2
29
29
   ・永劫消失表 EDT
@@ -40,7 +40,7 @@ module BCDice
40
40
 
41
41
  # 判定
42
42
  def roll_sq(command)
43
- m = /(\d+)SQ([\+\-\d]+)?/i.match(command)
43
+ m = /(\d+)SQ([+\-\d]+)?/i.match(command)
44
44
  return nil unless m
45
45
 
46
46
  dice_count = m[1].to_i
@@ -116,7 +116,7 @@ module BCDice
116
116
 
117
117
  # 採取ロール
118
118
  def collecting_roll(command)
119
- m = /([TSG])C([\+\-\d]+)?/i.match(command)
119
+ m = /([TSG])C([+\-\d]+)?/i.match(command)
120
120
  return nil unless m
121
121
 
122
122
  type = m[1]