bcdice 3.0.0.pre.alpha.2 → 3.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (235) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +42 -1
  3. data/README.md +34 -7
  4. data/i18n/DetatokoSaga/ja_jp.yml +3 -2
  5. data/i18n/DetatokoSaga/ko_kr.yml +1 -0
  6. data/i18n/KillDeathBusiness/ja_jp.yml +4 -4
  7. data/i18n/KillDeathBusiness/ko_kr.yml +5 -4
  8. data/i18n/MagicaLogia/ko_kr.yml +564 -0
  9. data/i18n/MonotoneMuseum/ja_jp.yml +40 -4
  10. data/i18n/StratoShout/ja_jp.yml +4 -4
  11. data/i18n/StratoShout/ko_kr.yml +4 -4
  12. data/lib/bcdice.rb +4 -1
  13. data/lib/bcdice/arithmetic.rb +22 -0
  14. data/lib/bcdice/arithmetic/node.rb +112 -43
  15. data/lib/bcdice/arithmetic/parser.rb +240 -0
  16. data/lib/bcdice/arithmetic_evaluator.rb +7 -156
  17. data/lib/bcdice/base.rb +8 -1
  18. data/lib/bcdice/command/lexer.rb +57 -0
  19. data/lib/bcdice/command/parsed.rb +65 -0
  20. data/lib/bcdice/command/parser.rb +489 -0
  21. data/lib/bcdice/common_command.rb +2 -0
  22. data/lib/bcdice/common_command/add_dice.rb +3 -1
  23. data/lib/bcdice/common_command/add_dice/node.rb +142 -69
  24. data/lib/bcdice/common_command/add_dice/parser.rb +100 -83
  25. data/lib/bcdice/common_command/add_dice/randomizer.rb +2 -0
  26. data/lib/bcdice/common_command/barabara_dice.rb +2 -0
  27. data/lib/bcdice/common_command/barabara_dice/node.rb +9 -1
  28. data/lib/bcdice/common_command/barabara_dice/result.rb +22 -0
  29. data/lib/bcdice/common_command/calc.rb +2 -0
  30. data/lib/bcdice/common_command/calc/node.rb +10 -1
  31. data/lib/bcdice/common_command/calc/parser.rb +1 -1
  32. data/lib/bcdice/common_command/d66_dice.rb +5 -1
  33. data/lib/bcdice/common_command/lexer.rb +2 -1
  34. data/lib/bcdice/common_command/upper_dice.rb +2 -0
  35. data/lib/bcdice/common_command/upper_dice/parser.rb +118 -97
  36. data/lib/bcdice/common_command/version.rb +3 -1
  37. data/lib/bcdice/deprecated/checker.rb +6 -6
  38. data/lib/bcdice/dice_table.rb +3 -0
  39. data/lib/bcdice/dice_table/chain_table.rb +2 -0
  40. data/lib/bcdice/dice_table/d66_grid_table.rb +2 -0
  41. data/lib/bcdice/dice_table/d66_parity_table.rb +36 -0
  42. data/lib/bcdice/dice_table/d66_range_table.rb +2 -0
  43. data/lib/bcdice/dice_table/d66_table.rb +2 -0
  44. data/lib/bcdice/dice_table/roll_result.rb +2 -0
  45. data/lib/bcdice/dice_table/table.rb +2 -0
  46. data/lib/bcdice/enum.rb +2 -0
  47. data/lib/bcdice/format.rb +2 -0
  48. data/lib/bcdice/game_system.rb +10 -0
  49. data/lib/bcdice/game_system/AceKillerGene.rb +1 -1
  50. data/lib/bcdice/game_system/AlchemiaStruggle.rb +346 -0
  51. data/lib/bcdice/game_system/Alshard.rb +1 -2
  52. data/lib/bcdice/game_system/Amadeus.rb +1 -1
  53. data/lib/bcdice/game_system/AngelGear.rb +123 -0
  54. data/lib/bcdice/game_system/AnimaAnimus.rb +1 -5
  55. data/lib/bcdice/game_system/ArsMagica.rb +1 -1
  56. data/lib/bcdice/game_system/BBN.rb +7 -5
  57. data/lib/bcdice/game_system/BadLife.rb +2 -2
  58. data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
  59. data/lib/bcdice/game_system/BeastBindTrinity.rb +3 -12
  60. data/lib/bcdice/game_system/BeginningIdol.rb +4 -4
  61. data/lib/bcdice/game_system/BeginningIdol_Korean.rb +4 -4
  62. data/lib/bcdice/game_system/BladeOfArcana.rb +4 -4
  63. data/lib/bcdice/game_system/BlindMythos.rb +12 -10
  64. data/lib/bcdice/game_system/BloodCrusade.rb +54 -80
  65. data/lib/bcdice/game_system/BloodMoon.rb +43 -2
  66. data/lib/bcdice/game_system/CardRanker.rb +24 -64
  67. data/lib/bcdice/game_system/ChaosFlare.rb +4 -4
  68. data/lib/bcdice/game_system/Chill.rb +1 -1
  69. data/lib/bcdice/game_system/CodeLayerd.rb +37 -67
  70. data/lib/bcdice/game_system/ColossalHunter.rb +2 -2
  71. data/lib/bcdice/game_system/Cthulhu.rb +8 -4
  72. data/lib/bcdice/game_system/Cthulhu7th.rb +42 -336
  73. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +1 -1
  74. data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +1 -1
  75. data/lib/bcdice/game_system/CthulhuTech.rb +1 -2
  76. data/lib/bcdice/game_system/DarkBlaze.rb +5 -5
  77. data/lib/bcdice/game_system/DeadlineHeroes.rb +1 -1
  78. data/lib/bcdice/game_system/DesperateRun.rb +163 -0
  79. data/lib/bcdice/game_system/DetatokoSaga.rb +25 -7
  80. data/lib/bcdice/game_system/DetatokoSaga_Korean.rb +3 -3
  81. data/lib/bcdice/game_system/DiceBot.rb +22 -4
  82. data/lib/bcdice/game_system/DiceOfTheDead.rb +1 -1
  83. data/lib/bcdice/game_system/DoubleCross.rb +61 -94
  84. data/lib/bcdice/game_system/EarthDawn.rb +1 -1
  85. data/lib/bcdice/game_system/EarthDawn3.rb +1 -1
  86. data/lib/bcdice/game_system/EarthDawn4.rb +1 -1
  87. data/lib/bcdice/game_system/Elysion.rb +2 -2
  88. data/lib/bcdice/game_system/EmbryoMachine.rb +6 -6
  89. data/lib/bcdice/game_system/EtrianOdysseySRS.rb +1 -2
  90. data/lib/bcdice/game_system/FilledWith.rb +3 -3
  91. data/lib/bcdice/game_system/FullMetalPanic.rb +1 -2
  92. data/lib/bcdice/game_system/GURPS.rb +1 -1
  93. data/lib/bcdice/game_system/Garako.rb +14 -5
  94. data/lib/bcdice/game_system/GardenOrder.rb +1 -1
  95. data/lib/bcdice/game_system/GehennaAn.rb +4 -4
  96. data/lib/bcdice/game_system/GoblinSlayer.rb +1 -1
  97. data/lib/bcdice/game_system/Gorilla.rb +1 -1
  98. data/lib/bcdice/game_system/Gundog.rb +1 -1
  99. data/lib/bcdice/game_system/GundogRevised.rb +3 -3
  100. data/lib/bcdice/game_system/GundogZero.rb +2 -2
  101. data/lib/bcdice/game_system/GurpsFW.rb +2 -5
  102. data/lib/bcdice/game_system/HarnMaster.rb +1 -1
  103. data/lib/bcdice/game_system/HatsuneMiku.rb +2 -2
  104. data/lib/bcdice/game_system/HouraiGakuen.rb +1 -1
  105. data/lib/bcdice/game_system/HuntersMoon.rb +17 -110
  106. data/lib/bcdice/game_system/Illusio.rb +25 -34
  107. data/lib/bcdice/game_system/InfiniteBabeL.rb +518 -0
  108. data/lib/bcdice/game_system/JekyllAndHyde.rb +42 -0
  109. data/lib/bcdice/game_system/JuinKansen.rb +251 -0
  110. data/lib/bcdice/game_system/KanColle.rb +17 -166
  111. data/lib/bcdice/game_system/KillDeathBusiness.rb +35 -44
  112. data/lib/bcdice/game_system/KillDeathBusiness_Korean.rb +2 -1
  113. data/lib/bcdice/game_system/LogHorizon.rb +8 -8
  114. data/lib/bcdice/game_system/LostRoyal.rb +2 -4
  115. data/lib/bcdice/game_system/MagicaLogia.rb +3 -3
  116. data/lib/bcdice/game_system/MagicaLogia_Korean.rb +66 -0
  117. data/lib/bcdice/game_system/MeikyuDays.rb +2 -2
  118. data/lib/bcdice/game_system/MeikyuKingdom.rb +3 -3
  119. data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +3 -3
  120. data/lib/bcdice/game_system/MetalHeadExtream.rb +5 -5
  121. data/lib/bcdice/game_system/MetallicGuardian.rb +1 -2
  122. data/lib/bcdice/game_system/MonotoneMuseum.rb +4 -3
  123. data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +1 -1
  124. data/lib/bcdice/game_system/NSSQ.rb +2 -2
  125. data/lib/bcdice/game_system/Nechronica.rb +3 -3
  126. data/lib/bcdice/game_system/NeverCloud.rb +540 -5
  127. data/lib/bcdice/game_system/NightWizard.rb +2 -2
  128. data/lib/bcdice/game_system/NightWizard3rd.rb +1 -1
  129. data/lib/bcdice/game_system/NightmareHunterDeep.rb +3 -4
  130. data/lib/bcdice/game_system/NinjaSlayer.rb +30 -41
  131. data/lib/bcdice/game_system/OneWayHeroics.rb +1 -1
  132. data/lib/bcdice/game_system/OracleEngine.rb +14 -18
  133. data/lib/bcdice/game_system/OrgaRain.rb +17 -25
  134. data/lib/bcdice/game_system/Paradiso.rb +3 -3
  135. data/lib/bcdice/game_system/ParanoiaRebooted.rb +1 -1
  136. data/lib/bcdice/game_system/Peekaboo.rb +1 -1
  137. data/lib/bcdice/game_system/PhantasmAdventure.rb +0 -4
  138. data/lib/bcdice/game_system/Postman.rb +1 -1
  139. data/lib/bcdice/game_system/PulpCthulhu.rb +1 -1
  140. data/lib/bcdice/game_system/Raisondetre.rb +1 -1
  141. data/lib/bcdice/game_system/RecordOfLodossWar.rb +8 -7
  142. data/lib/bcdice/game_system/RecordOfSteam.rb +1 -1
  143. data/lib/bcdice/game_system/RokumonSekai2.rb +3 -3
  144. data/lib/bcdice/game_system/RuinBreakers.rb +1 -1
  145. data/lib/bcdice/game_system/RyuTuber.rb +6 -4
  146. data/lib/bcdice/game_system/Ryutama.rb +2 -2
  147. data/lib/bcdice/game_system/SRS.rb +1 -6
  148. data/lib/bcdice/game_system/SamsaraBallad.rb +5 -4
  149. data/lib/bcdice/game_system/Satasupe.rb +90 -865
  150. data/lib/bcdice/game_system/ScreamHighSchool.rb +2 -2
  151. data/lib/bcdice/game_system/SevenFortressMobius.rb +1 -1
  152. data/lib/bcdice/game_system/SharedFantasia.rb +1 -1
  153. data/lib/bcdice/game_system/ShinkuuGakuen.rb +3 -3
  154. data/lib/bcdice/game_system/ShinobiGami.rb +75 -39
  155. data/lib/bcdice/game_system/ShoujoTenrankai.rb +1 -1
  156. data/lib/bcdice/game_system/Skynauts.rb +2 -2
  157. data/lib/bcdice/game_system/SteamPunkers.rb +7 -5
  158. data/lib/bcdice/game_system/StellarKnights.rb +1 -3
  159. data/lib/bcdice/game_system/SterileLife.rb +1 -1
  160. data/lib/bcdice/game_system/StrangerOfSwordCity.rb +2 -2
  161. data/lib/bcdice/game_system/StratoShout.rb +10 -36
  162. data/lib/bcdice/game_system/StratoShout_Korean.rb +2 -1
  163. data/lib/bcdice/game_system/SwordWorld.rb +46 -182
  164. data/lib/bcdice/game_system/SwordWorld2_0.rb +21 -149
  165. data/lib/bcdice/game_system/SwordWorld2_5.rb +126 -40
  166. data/lib/bcdice/game_system/TherapieSein.rb +2 -2
  167. data/lib/bcdice/game_system/TokumeiTenkousei.rb +2 -2
  168. data/lib/bcdice/game_system/Torg.rb +2 -2
  169. data/lib/bcdice/game_system/TorgEternity.rb +5 -8
  170. data/lib/bcdice/game_system/TrinitySeven.rb +2 -2
  171. data/lib/bcdice/game_system/TunnelsAndTrolls.rb +7 -7
  172. data/lib/bcdice/game_system/TwilightGunsmoke.rb +2 -2
  173. data/lib/bcdice/game_system/UnsungDuet.rb +1 -1
  174. data/lib/bcdice/game_system/Utakaze.rb +2 -2
  175. data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +1 -1
  176. data/lib/bcdice/game_system/Warhammer.rb +7 -7
  177. data/lib/bcdice/game_system/Warhammer4.rb +10 -13
  178. data/lib/bcdice/game_system/WorldOfDarkness.rb +1 -1
  179. data/lib/bcdice/game_system/YearZeroEngine.rb +1 -1
  180. data/lib/bcdice/game_system/Yggdrasill.rb +605 -0
  181. data/lib/bcdice/game_system/ZettaiReido.rb +2 -2
  182. data/lib/bcdice/game_system/cthulhu7th/full_auto.rb +294 -0
  183. data/lib/bcdice/game_system/cthulhu7th/rollable.rb +41 -0
  184. data/lib/bcdice/game_system/meikyu_kingdom/item_table.rb +2 -0
  185. data/lib/bcdice/game_system/meikyu_kingdom/kingdom_name_table.rb +2 -0
  186. data/lib/bcdice/game_system/meikyu_kingdom/landscape_table.rb +2 -0
  187. data/lib/bcdice/game_system/meikyu_kingdom/name_tables.rb +2 -0
  188. data/lib/bcdice/game_system/meikyu_kingdom/placename_table.rb +2 -0
  189. data/lib/bcdice/game_system/meikyu_kingdom/tables.rb +2 -0
  190. data/lib/bcdice/game_system/meikyu_kingdom/word_table.rb +2 -0
  191. data/lib/bcdice/game_system/meikyu_kingdom_basic/item_table.rb +2 -0
  192. data/lib/bcdice/game_system/meikyu_kingdom_basic/kingdom_table.rb +2 -0
  193. data/lib/bcdice/game_system/meikyu_kingdom_basic/name_table.rb +2 -0
  194. data/lib/bcdice/game_system/meikyu_kingdom_basic/table.rb +2 -0
  195. data/lib/bcdice/game_system/meikyu_kingdom_basic/word_table.rb +2 -0
  196. data/lib/bcdice/game_system/one_way_heroics/dungeon_table.rb +2 -0
  197. data/lib/bcdice/game_system/one_way_heroics/random_event_table.rb +2 -0
  198. data/lib/bcdice/game_system/one_way_heroics/tables.rb +2 -0
  199. data/lib/bcdice/game_system/satasupe/tables.rb +723 -0
  200. data/lib/bcdice/game_system/sword_world/rating_lexer.rb +47 -0
  201. data/lib/bcdice/game_system/sword_world/rating_parsed.rb +99 -0
  202. data/lib/bcdice/game_system/sword_world/rating_parser.rb +457 -0
  203. data/lib/bcdice/game_system/sword_world/transcendent_test.rb +104 -0
  204. data/lib/bcdice/loader.rb +11 -4
  205. data/lib/bcdice/normalize.rb +3 -1
  206. data/lib/bcdice/preprocessor.rb +12 -8
  207. data/lib/bcdice/randomizer.rb +14 -0
  208. data/lib/bcdice/repl.rb +3 -1
  209. data/lib/bcdice/result.rb +4 -0
  210. data/lib/bcdice/translate.rb +2 -0
  211. data/lib/bcdice/user_defined_dice_table.rb +28 -15
  212. data/lib/bcdice/version.rb +3 -1
  213. metadata +28 -27
  214. data/.editorconfig +0 -21
  215. data/.github/.codecov.yaml +0 -10
  216. data/.github/workflows/coverage.yaml +0 -21
  217. data/.github/workflows/lint.yaml +0 -13
  218. data/.github/workflows/test.yml +0 -20
  219. data/.gitignore +0 -14
  220. data/.rubocop.yml +0 -108
  221. data/.rubocop_todo.yml +0 -114
  222. data/Gemfile +0 -14
  223. data/ROADMAP.md +0 -30
  224. data/Rakefile +0 -152
  225. data/bcdice.gemspec +0 -29
  226. data/bin/repl.rb +0 -21
  227. data/docs/README.txt +0 -2028
  228. data/docs/dicebot_sort_key.md +0 -72
  229. data/docs/how_to_make_dicebot.md +0 -453
  230. data/lib/bcdice/command_parser.rb +0 -242
  231. data/lib/bcdice/common_command/add_dice/parser.y +0 -153
  232. data/lib/bcdice/common_command/barabara_dice/parser.y +0 -107
  233. data/lib/bcdice/common_command/calc/parser.y +0 -79
  234. data/lib/bcdice/common_command/reroll_dice/parser.y +0 -158
  235. data/lib/bcdice/common_command/upper_dice/parser.y +0 -143
@@ -20,7 +20,7 @@ module BCDice
20
20
  例)9E 10E8 10E+D12
21
21
  INFO_MESSAGE_TEXT
22
22
 
23
- register_prefix('\d+e.*')
23
+ register_prefix('\d+e')
24
24
 
25
25
  def initialize(command)
26
26
  super(command)
@@ -24,7 +24,7 @@ module BCDice
24
24
    ステップ12、目標値8、カルマダイスD12:10E8+1D6
25
25
  INFO_MESSAGE_TEXT
26
26
 
27
- register_prefix('\d+e.*')
27
+ register_prefix('\d+e')
28
28
 
29
29
  def initialize(command)
30
30
  super(command)
@@ -24,7 +24,7 @@ module BCDice
24
24
    ステップ10、目標値8、カルマダイス:10E8K
25
25
  INFO_MESSAGE_TEXT
26
26
 
27
- register_prefix('\d+e.*')
27
+ register_prefix('\d+e')
28
28
 
29
29
  def initialize(command)
30
30
  super(command)
@@ -1200,8 +1200,8 @@ module BCDice
1200
1200
  }.freeze
1201
1201
 
1202
1202
  register_prefix(
1203
- 'EL.*',
1204
- 'DATE.*', 'FDATE.*', 'ODATE.*', 'MDATE.*',
1203
+ 'EL',
1204
+ 'DATE', 'FDATE', 'ODATE', 'MDATE',
1205
1205
  'RBT', 'SBT', 'BBT', 'CBT', 'DBT', 'IBT', 'FBT', 'LBT', 'PBT', 'NBT', 'ABT', 'VBT', 'GBT', 'HBT',
1206
1206
  'BFT', 'FWT', 'FT',
1207
1207
  'SRT', 'ORT', 'DRT', 'URT',
@@ -24,7 +24,7 @@ module BCDice
24
24
   ・射撃攻撃ファンブル表 SFT
25
25
  INFO_MESSAGE_TEXT
26
26
 
27
- register_prefix('EM\d+.*', 'HLT', 'MFT', 'SFT', '2R10.*')
27
+ register_prefix('EM\d+', 'HLT', 'MFT', 'SFT', '2R10')
28
28
 
29
29
  def initialize(command)
30
30
  super(command)
@@ -34,10 +34,10 @@ module BCDice
34
34
 
35
35
  def replace_text(string)
36
36
  string
37
- .gsub(/EM(\d+)([\+\-][\+\-\d]+)(@(\d+))(\#(\d+))/i) { "2R10#{Regexp.last_match(2)}>=#{Regexp.last_match(1)}[#{Regexp.last_match(4)},#{Regexp.last_match(6)}]" }
38
- .gsub(/EM(\d+)([\+\-][\+\-\d]+)(\#(\d+))/i) { "2R10#{Regexp.last_match(2)}>=#{Regexp.last_match(1)}[20,#{Regexp.last_match(4)}]" }
39
- .gsub(/EM(\d+)([\+\-][\+\-\d]+)(@(\d+))/i) { "2R10#{Regexp.last_match(2)}>=#{Regexp.last_match(1)}[#{Regexp.last_match(4)},2]" }
40
- .gsub(/EM(\d+)([\+\-][\+\-\d]+)/i) { "2R10#{Regexp.last_match(2)}>=#{Regexp.last_match(1)}[20,2]" }
37
+ .gsub(/EM(\d+)([+\-][+\-\d]+)(@(\d+))(\#(\d+))/i) { "2R10#{Regexp.last_match(2)}>=#{Regexp.last_match(1)}[#{Regexp.last_match(4)},#{Regexp.last_match(6)}]" }
38
+ .gsub(/EM(\d+)([+\-][+\-\d]+)(\#(\d+))/i) { "2R10#{Regexp.last_match(2)}>=#{Regexp.last_match(1)}[20,#{Regexp.last_match(4)}]" }
39
+ .gsub(/EM(\d+)([+\-][+\-\d]+)(@(\d+))/i) { "2R10#{Regexp.last_match(2)}>=#{Regexp.last_match(1)}[#{Regexp.last_match(4)},2]" }
40
+ .gsub(/EM(\d+)([+\-][+\-\d]+)/i) { "2R10#{Regexp.last_match(2)}>=#{Regexp.last_match(1)}[20,2]" }
41
41
  .gsub(/EM(\d+)(@(\d+))(\#(\d+))/i) { "2R10>=#{Regexp.last_match(1)}[#{Regexp.last_match(3)},#{Regexp.last_match(5)}]" }
42
42
  .gsub(/EM(\d+)(\#(\d+))/i) { "2R10>=#{Regexp.last_match(1)}[20,#{Regexp.last_match(3)}]" }
43
43
  .gsub(/EM(\d+)(@(\d+))/i) { "2R10>=#{Regexp.last_match(1)}[#{Regexp.last_match(3)},2]" }
@@ -63,7 +63,7 @@ module BCDice
63
63
  def checkRoll(string)
64
64
  string = replace_text(string)
65
65
 
66
- return nil unless /(^|\s)S?(2[rR]10([\+\-\d]+)?([>=]+(\d+))(\[(\d+),(\d+)\]))(\s|$)/i =~ string
66
+ return nil unless /(^|\s)S?(2[rR]10([+\-\d]+)?([>=]+(\d+))(\[(\d+),(\d+)\]))(\s|$)/i =~ string
67
67
 
68
68
  string = Regexp.last_match(2)
69
69
  diff = 0
@@ -2,7 +2,6 @@
2
2
 
3
3
  require 'bcdice/game_system/SRS'
4
4
 
5
- # 世界樹の迷宮SRSのダイスボット
6
5
  module BCDice
7
6
  module GameSystem
8
7
  class EtrianOdysseySRS < SRS
@@ -16,7 +15,7 @@ module BCDice
16
15
  SORT_KEY = 'せかいしゆのめいきゆうSRS'
17
16
 
18
17
  # 固有のコマンドの接頭辞を設定する
19
- register_prefix('2D6.*', 'EO.*', 'SQ.*')
18
+ register_prefix('2D6', 'EO', 'SQ')
20
19
 
21
20
  # 成功判定のエイリアスコマンドを設定する
22
21
  set_aliases_for_srs_roll('EO', 'SQ')
@@ -140,12 +140,12 @@ module BCDice
140
140
  crt = 4
141
141
  fmb = 17
142
142
 
143
- if command =~ /(\d[\+\-\d]*)-(\d+)FW(\@(\d+))?(\#(\d+))?/i
143
+ if command =~ /(\d[+\-\d]*)-(\d+)FW(@(\d+))?(\#(\d+))?/i
144
144
  difficultyText = Regexp.last_match(1)
145
145
  diceCount = Regexp.last_match(2).to_i
146
146
  crt = Regexp.last_match(4).to_i unless Regexp.last_match(3).nil?
147
147
  fmb = Regexp.last_match(6).to_i unless Regexp.last_match(5).nil?
148
- elsif command =~ /(\d+)FW(\@(\d+))?(\#(\d+))?(<=([\+\-\d]*))?/i
148
+ elsif command =~ /(\d+)FW(@(\d+))?(\#(\d+))?(<=([+\-\d]*))?/i
149
149
  diceCount = Regexp.last_match(1).to_i
150
150
  crt = Regexp.last_match(3).to_i unless Regexp.last_match(2).nil?
151
151
  fmb = Regexp.last_match(5).to_i unless Regexp.last_match(4).nil?
@@ -222,7 +222,7 @@ module BCDice
222
222
 
223
223
  # 夢幻の迷宮財宝表
224
224
  def getTresureResult(command)
225
- return nil unless command =~ /TRS(\d+)([\+\-]\d)?/
225
+ return nil unless command =~ /TRS(\d+)([+\-]\d)?/
226
226
 
227
227
  rank = Regexp.last_match(1).to_i
228
228
  modify = Regexp.last_match(2).to_i
@@ -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 FullMetalPanic < SRS
@@ -16,7 +15,7 @@ module BCDice
16
15
  SORT_KEY = 'ふるめたるはにつくRPG'
17
16
 
18
17
  # 固有のコマンドの接頭辞を設定する
19
- register_prefix('2D6.*', 'MG.*', 'FP.*')
18
+ register_prefix('2D6', 'MG', 'FP')
20
19
 
21
20
  # 成功判定のエイリアスコマンドを設定する
22
21
  set_aliases_for_srs_roll('MG', 'FP')
@@ -78,7 +78,7 @@ module BCDice
78
78
  end
79
79
 
80
80
  def roll_3d6(command)
81
- m = /^([\d\+\-]+)\-3D6?([\d\+\-]*)$/.match(command)
81
+ m = /^([\d+\-]+)-3D6?([\d+\-]*)$/.match(command)
82
82
  return nil unless m
83
83
 
84
84
  target_number = ArithmeticEvaluator.eval(m[1])
@@ -18,9 +18,9 @@ module BCDice
18
18
 
19
19
  # ダイスボットの使い方
20
20
  HELP_MESSAGE = <<~MESSAGETEXT
21
- ・判定 GR+n#f>=X (+n:判定値、#f:不安定による自動失敗基準値、X:目標値)
21
+ ・判定 GR+n#f>=X (+n:判定値、#f:不安定による自動失敗基準値、X:目標値、それぞれ省略可能)
22
22
  ・部位決定チャート:HIT
23
- ・ダメージ+部位決定:GAHn(n:火力)
23
+ ・ダメージ+部位決定:GHAn(n:火力)
24
24
  ・ダメージチャート:xDCy(CDC/EDC/FDC/ADC/LDC )
25
25
  ・ダメージチャートver2:xDTy(CDT/EDT/FDT/ADT/LDT)
26
26
   xは C:コックピット、E:エンジン、F:フレーム、A:アーム、L:レッグ
@@ -35,8 +35,16 @@ module BCDice
35
35
  ・武器改造チャート表:WCC
36
36
  ・イベントチャート表:EVC
37
37
  ・戦闘開始距離:BSD
38
+
39
+ デフォルトダイス:10面
38
40
  MESSAGETEXT
39
41
 
42
+ def initialize(command)
43
+ super(command)
44
+
45
+ @sides_implicit_d = 10
46
+ end
47
+
40
48
  # @param command [String]
41
49
  # @return [String, nil]
42
50
  def eval_game_system_specific_command(command)
@@ -53,10 +61,11 @@ module BCDice
53
61
  # @param command [String]
54
62
  # @return [String, nil]
55
63
  def roll_gr(command)
56
- parser = CommandParser.new("GR")
64
+ parser = Command::Parser.new("GR", round_type: round_type)
65
+ .enable_fumble
66
+ .restrict_cmp_op_to(nil, :>=)
57
67
  cmd = parser.parse(command)
58
68
  return nil unless cmd
59
- return nil if cmd.critical
60
69
 
61
70
  modify_number = cmd.modify_number || 0
62
71
  auto_failure_number = cmd.fumble || 1
@@ -645,7 +654,7 @@ module BCDice
645
654
  )
646
655
  }.freeze
647
656
 
648
- register_prefix('GR.*', '[CEFAL]D[CT][-+\d]+', 'GHA[-+\d]+', TABLES.keys)
657
+ register_prefix('GR', '[CEFAL]D[CT][-+\d]+', 'GHA[-+\d]+', TABLES.keys)
649
658
  end
650
659
  end
651
660
  end
@@ -32,7 +32,7 @@ module BCDice
32
32
 
33
33
  def eval_game_system_specific_command(command)
34
34
  case command
35
- when %r{GO(\-?\d+)(/(\d+))?(@(\d+))?}i
35
+ when %r{GO(-?\d+)(/(\d+))?(@(\d+))?}i
36
36
  success_rate = Regexp.last_match(1).to_i
37
37
  repeat_count = (Regexp.last_match(3) || 1).to_i
38
38
  critical_border_text = Regexp.last_match(5)
@@ -23,7 +23,7 @@ module BCDice
23
23
   幸運の助けを自動処理します。(連撃増加値、闘技チットを表示抑制します)
24
24
  INFO_MESSAGE_TEXT
25
25
 
26
- register_prefix('\d+G\d+.*', '\d+GA\d+.*', '\d+R6.*')
26
+ register_prefix('\d+G\d+', '\d+GA\d+', '\d+R6')
27
27
 
28
28
  def initialize(command)
29
29
  super(command)
@@ -35,9 +35,9 @@ module BCDice
35
35
 
36
36
  def replace_text(string)
37
37
  string
38
- .gsub(/(\d+)GA(\d+)([\+\-][\+\-\d]+)/) { "#{Regexp.last_match(1)}R6#{Regexp.last_match(3)}>=#{Regexp.last_match(2)}[1]" }
38
+ .gsub(/(\d+)GA(\d+)([+\-][+\-\d]+)/) { "#{Regexp.last_match(1)}R6#{Regexp.last_match(3)}>=#{Regexp.last_match(2)}[1]" }
39
39
  .gsub(/(\d+)GA(\d+)/) { "#{Regexp.last_match(1)}R6>=#{Regexp.last_match(2)}[1]" }
40
- .gsub(/(\d+)G(\d+)([\+\-][\+\-\d]+)/) { "#{Regexp.last_match(1)}R6#{Regexp.last_match(3)}>=#{Regexp.last_match(2)}[0]" }
40
+ .gsub(/(\d+)G(\d+)([+\-][+\-\d]+)/) { "#{Regexp.last_match(1)}R6#{Regexp.last_match(3)}>=#{Regexp.last_match(2)}[0]" }
41
41
  .gsub(/(\d+)G(\d+)/) { "#{Regexp.last_match(1)}R6>=#{Regexp.last_match(2)}[0]" }
42
42
  end
43
43
 
@@ -46,7 +46,7 @@ module BCDice
46
46
  def eval_game_system_specific_command(string)
47
47
  string = replace_text(string)
48
48
 
49
- unless /(^|\s)S?((\d+)[rR]6([\+\-\d]+)?([>=]+(\d+))(\[(\d)\]))(\s|$)/i =~ string
49
+ unless /(^|\s)S?((\d+)[rR]6([+\-\d]+)?([>=]+(\d+))(\[(\d)\]))(\s|$)/i =~ string
50
50
  return nil
51
51
  end
52
52
 
@@ -41,7 +41,7 @@ module BCDice
41
41
  MESSAGETEXT
42
42
 
43
43
  # 因果点は共有リソースなのでMCPIはシークレットダイスを無効化
44
- register_prefix('GS\(\d+\)', 'GS.*', '^MCPI.*\$\d+$', 'DB\d+')
44
+ register_prefix('GS\(\d+\)', 'GS', '^MCPI.*\$\d+$', 'DB\d+')
45
45
 
46
46
  def initialize(command)
47
47
  super(command)
@@ -21,7 +21,7 @@ module BCDice
21
21
  例) G>=7 : 2D6して7以上なら成功
22
22
  MESSAGETEXT
23
23
 
24
- register_prefix('G.*')
24
+ register_prefix('G')
25
25
 
26
26
  def change_text(string)
27
27
  string = string.gsub(/^(S)?G/i) { "#{Regexp.last_match(1)}2D6" }
@@ -41,7 +41,7 @@ module BCDice
41
41
  if dig1 <= 0
42
42
  " > クリティカル(達成値20+SL)"
43
43
  else
44
- " > 成功(達成値#{(dig10 + dig1)}+SL)"
44
+ " > 成功(達成値#{dig10 + dig1}+SL)"
45
45
  end
46
46
  else
47
47
  " > 失敗"
@@ -52,7 +52,7 @@ module BCDice
52
52
  if dig1 <= 0
53
53
  " > クリティカル(達成値20+SL)"
54
54
  else
55
- " > 成功(達成値#{(dig10 + dig1)}+SL)"
55
+ " > 成功(達成値#{dig10 + dig1}+SL)"
56
56
  end
57
57
  else
58
58
  " > 失敗"
@@ -68,7 +68,7 @@ module BCDice
68
68
  mod = 0
69
69
 
70
70
  # ダメージペナルティ表
71
- if /(\w)DPT([\+\-\d]*)/i =~ string
71
+ if /(\w)DPT([+\-\d]*)/i =~ string
72
72
  ttype = 'ダメージペナルティー'
73
73
  head = Regexp.last_match(1)
74
74
  mod = ArithmeticEvaluator.eval(Regexp.last_match(2)) if Regexp.last_match(2)
@@ -77,7 +77,7 @@ module BCDice
77
77
  end
78
78
 
79
79
  # ファンブル表
80
- if /(\w)FT([\+\-\d]*)/i =~ string
80
+ if /(\w)FT([+\-\d]*)/i =~ string
81
81
  ttype = 'ファンブル'
82
82
  head = Regexp.last_match(1)
83
83
  mod = ArithmeticEvaluator.eval(Regexp.last_match(2)) if Regexp.last_match(2)
@@ -37,7 +37,7 @@ module BCDice
37
37
  mod = 0
38
38
 
39
39
  # ダメージペナルティ表
40
- if /(\w)DPT([\+\-\d]*)/i =~ string
40
+ if /(\w)DPT([+\-\d]*)/i =~ string
41
41
  ttype = 'ダメージペナルティー'
42
42
  head = Regexp.last_match(1)
43
43
  mod = ArithmeticEvaluator.eval(Regexp.last_match(2)) if Regexp.last_match(2)
@@ -46,7 +46,7 @@ module BCDice
46
46
  end
47
47
 
48
48
  # ファンブル表
49
- if /(\w)FT([\+\-\d]*)/i =~ string
49
+ if /(\w)FT([+\-\d]*)/i =~ string
50
50
  ttype = 'ファンブル'
51
51
  head = Regexp.last_match(1)
52
52
  mod = ArithmeticEvaluator.eval(Regexp.last_match(2)) if Regexp.last_match(2)
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # どどんとふ用 GURPS-FW オリジナルダイスボット
4
- # Last update 2013/11/07
5
-
6
3
  module BCDice
7
4
  module GameSystem
8
5
  class GurpsFW < Base
@@ -284,7 +281,7 @@ module BCDice
284
281
  end
285
282
  result = table[num]
286
283
 
287
- when /REACT((\+|\-)?\d*)/
284
+ when /REACT((\+|-)?\d*)/
288
285
  modify = Regexp.last_match(1).to_i
289
286
 
290
287
  tableName = "反応表"
@@ -320,7 +317,7 @@ module BCDice
320
317
  result, number = get_table_by_nD6(table, 3)
321
318
  result = "#{dif}:#{result}"
322
319
 
323
- when /TRS(E|N|H|L)(\d+)((\+|\-)?\d*)/
320
+ when /TRS(E|N|H|L)(\d+)((\+|-)?\d*)/
324
321
  tableName = "財宝テーブル"
325
322
  diff = Regexp.last_match(1)
326
323
  depth = Regexp.last_match(2).to_i
@@ -21,7 +21,7 @@ module BCDice
21
21
  ・人型用 中段命中部位表 (SLH)/上段命中部位 (SLHU)/上段命中部位 (SLHD)
22
22
  MESSAGETEXT
23
23
 
24
- register_prefix('SHK\d+.*', 'SLH', 'SLHU', 'SLHD')
24
+ register_prefix('SHK\d+', 'SLH', 'SLHU', 'SLHD')
25
25
 
26
26
  def check_1D100(total, _dice_total, cmp_op, target)
27
27
  return '' if target == '?'
@@ -51,7 +51,7 @@ module BCDice
51
51
  end
52
52
 
53
53
  def judgeRoll(command)
54
- return nil unless /^(R([A-DS]|\d+)([\+\-\d,]*))(@(\d))?((>(=)?)([\+\-\d]*))?(@(\d))?$/i =~ command
54
+ return nil unless /^(R([A-DS]|\d+)([+\-\d,]*))(@(\d))?((>(=)?)([+\-\d]*))?(@(\d))?$/i =~ command
55
55
 
56
56
  skillRank = Regexp.last_match(2)
57
57
  modifyText = Regexp.last_match(3)
@@ -699,7 +699,7 @@ module BCDice
699
699
  ),
700
700
  }.freeze
701
701
 
702
- register_prefix('R([A-DS]|\d+).*', TABLES.keys)
702
+ register_prefix('R([A-DS]|\d+)', TABLES.keys)
703
703
  end
704
704
  end
705
705
  end
@@ -31,7 +31,7 @@ module BCDice
31
31
  例)Hourai : 仁義八徳は、【義】(奇数、奇数、偶数)
32
32
  INFO_MESSAGE_TEXT
33
33
 
34
- register_prefix('ROL.*', 'MED\(\d+,\d+\)', 'RES\(\d+,\d+\)', 'INY.*', 'HTK.*', 'GOG.*')
34
+ register_prefix('ROL', 'MED\(\d+,\d+\)', 'RES\(\d+,\d+\)', 'INY', 'HTK', 'GOG')
35
35
 
36
36
  # ゲームの名前
37
37
  # チャット欄表示名
@@ -27,12 +27,8 @@ module BCDice
27
27
   ・異形アビリティー表 (SATx) (xは個数)
28
28
   ・異形アビリティー表2 (SA2Tx) (xは個数)
29
29
    →表1と表2の振り分けも判定
30
-  ・指定特技(社会)表  (TST)
31
-  ・指定特技(頭部)表  (THT)
32
-  ・指定特技(腕部)表  (TAT)
33
-  ・指定特技(胴部)表  (TBT)
34
-  ・指定特技(脚部)表  (TLT)
35
-  ・指定特技(環境)表  (TET)
30
+  ・指定特技表 RTTn(n=分野番号、省略可能)
31
+ 1.社会(TST) 2.頭部(THT) 3.腕部(TAT) 4.胴部(TBT) 5.脚部(TLT) 6.環境(TET)
36
32
   ・異形化表      (MST)
37
33
   ・代償表       (ERT)
38
34
   ・ディフェンス遭遇表1/2/3 (DS1ET/DS2ET/DS3ET)
@@ -71,7 +67,7 @@ module BCDice
71
67
  when /^SA/i
72
68
  roll_strange_ability_table(command)
73
69
  else
74
- roll_tables(command, TABLES)
70
+ roll_tables(command, TABLES) || RTT.roll_command(randomizer, command)
75
71
  end
76
72
  end
77
73
 
@@ -134,6 +130,19 @@ module BCDice
134
130
  end
135
131
  end
136
132
 
133
+ RTT = DiceTable::SaiFicSkillTable.new(
134
+ [
135
+ ['社会', ['怯える', '考えない', '話す', '黙る', '売る', '伝える', '作る', '憶える', '脅す', '騙す', '怒る']],
136
+ ['頭部', ['聴く', '感覚器', '見つける', '反応', '閃く', '脳', '考える', '予感', '叫ぶ', '口', '噛む']],
137
+ ['腕部', ['操作', '殴る', '斬る', '利き腕', '撃つ', '掴む', '投げる', '逆腕', '刺す', '振る', '締める']],
138
+ ['胴部', ['塞ぐ', '呼吸器', '止める', '動かない', '受ける', '心臓', '逸らす', 'かわす', '落ちる', '消化器', '耐える',]],
139
+ ['脚部', ['迫る', '走る', '蹴る', '利き脚', '跳ぶ', '仕掛ける', 'しゃがむ', '逆脚', '滑る', '踏む', '歩く']],
140
+ ['環境', ['耐熱', '休む', '待つ', '捕らえる', '隠れる', '追う', 'バランス', '現れる', '追い込む', '休まない', '耐寒']]
141
+ ],
142
+ rttn: ['TST', 'THT', 'TAT', 'TBT', 'TLT', 'TET'],
143
+ rttn_format: "指定特技(%<category_name>s)表(%<row_dice>d) > %<skill_name>s"
144
+ )
145
+
137
146
  TABLES = {
138
147
  "CLT" => DiceTable::Table.new(
139
148
  "都市ロケーション表",
@@ -224,108 +233,6 @@ module BCDice
224
233
  '心臓',
225
234
  ]
226
235
  ),
227
- "TST" => DiceTable::Table.new(
228
- "指定特技(社会)表",
229
- "2D6",
230
- [
231
- '怯える',
232
- '考えない',
233
- '話す',
234
- '黙る',
235
- '売る',
236
- '伝える',
237
- '作る',
238
- '憶える',
239
- '脅す',
240
- '騙す',
241
- '怒る',
242
- ]
243
- ),
244
- "THT" => DiceTable::Table.new(
245
- "指定特技(頭部)表",
246
- "2D6",
247
- [
248
- '聴く',
249
- '感覚器',
250
- '見つける',
251
- '反応',
252
- '閃く',
253
- '脳',
254
- '考える',
255
- '予感',
256
- '叫ぶ',
257
- '口',
258
- '噛む',
259
- ]
260
- ),
261
- "TAT" => DiceTable::Table.new(
262
- "指定特技(腕部)表",
263
- "2D6",
264
- [
265
- '操作',
266
- '殴る',
267
- '斬る',
268
- '利き腕',
269
- '撃つ',
270
- '掴む',
271
- '投げる',
272
- '逆腕',
273
- '刺す',
274
- '振る',
275
- '締める',
276
- ]
277
- ),
278
- "TBT" => DiceTable::Table.new(
279
- "指定特技(胴部)表",
280
- "2D6",
281
- [
282
- '塞ぐ',
283
- '呼吸器',
284
- '止める',
285
- '動かない',
286
- '受ける',
287
- '心臓',
288
- '逸らす',
289
- 'かわす',
290
- '落ちる',
291
- '消化器',
292
- '耐える',
293
- ]
294
- ),
295
- "TLT" => DiceTable::Table.new(
296
- "指定特技(脚部)表",
297
- "2D6",
298
- [
299
- '迫る',
300
- '走る',
301
- '蹴る',
302
- '利き脚',
303
- '跳ぶ',
304
- '仕掛ける',
305
- 'しゃがむ',
306
- '逆脚',
307
- '滑る',
308
- '踏む',
309
- '歩く',
310
- ]
311
- ),
312
- "TET" => DiceTable::Table.new(
313
- "指定特技(環境)表",
314
- "2D6",
315
- [
316
- '耐熱',
317
- '休む',
318
- '待つ',
319
- '捕らえる',
320
- '隠れる',
321
- '追う',
322
- 'バランス',
323
- '現れる',
324
- '追い込む',
325
- '休まない',
326
- '耐寒',
327
- ]
328
- ),
329
236
  "DS1ET" => DiceTable::Table.new(
330
237
  "ディフェンス遭遇表1st",
331
238
  "1D6",
@@ -496,7 +403,7 @@ module BCDice
496
403
  ),
497
404
  }.freeze
498
405
 
499
- register_prefix('SA2?T\d*', TABLES.keys)
406
+ register_prefix(RTT.prefixes, 'SA2?T\d*', TABLES.keys)
500
407
  end
501
408
  end
502
409
  end