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

Sign up to get free protection for your applications and to get access to all the features.
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]