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

Sign up to get free protection for your applications and to get access to all the features.
Files changed (255) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +1 -1
  3. data/.rubocop.yml +12 -0
  4. data/.rubocop_todo.yml +1 -0
  5. data/CHANGELOG.md +34 -0
  6. data/Gemfile +6 -3
  7. data/Rakefile +52 -18
  8. data/bcdice.gemspec +2 -0
  9. data/i18n/Amadeus/ja_jp.yml +386 -0
  10. data/i18n/Amadeus/ko_kr.yml +148 -0
  11. data/i18n/Cthulhu/ja_jp.yml +11 -0
  12. data/i18n/Cthulhu/ko_kr.yml +11 -0
  13. data/i18n/Cthulhu/zh_hant.yml +11 -0
  14. data/i18n/DetatokoSaga/ja_jp.yml +74 -0
  15. data/i18n/DetatokoSaga/ko_kr.yml +74 -0
  16. data/i18n/DoubleCross/ja_jp.yml +53 -0
  17. data/i18n/DoubleCross/ko_kr.yml +53 -0
  18. data/i18n/Dracurouge/ja_jp.yml +1374 -0
  19. data/i18n/Dracurouge/ko_kr.yml +295 -0
  20. data/i18n/Fiasco/ja_jp.yml +10 -0
  21. data/i18n/Fiasco/ko_kr.yml +10 -0
  22. data/i18n/FutariSousa/ja_jp.yml +720 -0
  23. data/i18n/FutariSousa/ko_kr.yml +746 -0
  24. data/i18n/Insane/ja_jp.yml +454 -0
  25. data/i18n/Insane/ko_kr.yml +502 -0
  26. data/i18n/Kamigakari/ja_jp.yml +276 -0
  27. data/i18n/Kamigakari/ko_kr.yml +204 -0
  28. data/i18n/KillDeathBusiness/ja_jp.yml +1092 -0
  29. data/i18n/KillDeathBusiness/ko_kr.yml +1062 -0
  30. data/i18n/LogHorizon/ja_jp.yml +3082 -0
  31. data/i18n/LogHorizon/ko_kr.yml +923 -0
  32. data/i18n/MagicaLogia/ja_jp.yml +564 -0
  33. data/i18n/MonotoneMuseum/ja_jp.yml +525 -0
  34. data/i18n/MonotoneMuseum/ko_kr.yml +89 -0
  35. data/i18n/Nechronica/ja_jp.yml +57 -0
  36. data/i18n/Nechronica/ko_kr.yml +14 -0
  37. data/i18n/StratoShout/ja_jp.yml +160 -0
  38. data/i18n/StratoShout/ko_kr.yml +160 -0
  39. data/i18n/ja_jp.yml +5 -0
  40. data/i18n/ko_kr.yml +7 -0
  41. data/i18n/zh_hant.yml +3 -0
  42. data/lib/bcdice/arithmetic/node.rb +154 -0
  43. data/lib/bcdice/base.rb +87 -101
  44. data/lib/bcdice/common_command.rb +2 -0
  45. data/lib/bcdice/common_command/add_dice.rb +5 -41
  46. data/lib/bcdice/common_command/add_dice/node.rb +92 -16
  47. data/lib/bcdice/common_command/add_dice/parser.rb +374 -274
  48. data/lib/bcdice/common_command/add_dice/parser.y +153 -0
  49. data/lib/bcdice/common_command/add_dice/randomizer.rb +25 -33
  50. data/lib/bcdice/common_command/barabara_dice.rb +6 -47
  51. data/lib/bcdice/common_command/barabara_dice/node.rb +84 -0
  52. data/lib/bcdice/common_command/barabara_dice/parser.rb +336 -0
  53. data/lib/bcdice/common_command/barabara_dice/parser.y +107 -0
  54. data/lib/bcdice/common_command/calc.rb +7 -30
  55. data/lib/bcdice/common_command/calc/node.rb +30 -0
  56. data/lib/bcdice/common_command/calc/parser.rb +271 -0
  57. data/lib/bcdice/common_command/calc/parser.y +79 -0
  58. data/lib/bcdice/common_command/choice.rb +137 -19
  59. data/lib/bcdice/common_command/d66_dice.rb +48 -34
  60. data/lib/bcdice/common_command/lexer.rb +46 -0
  61. data/lib/bcdice/common_command/repeat.rb +102 -0
  62. data/lib/bcdice/common_command/reroll_dice.rb +8 -158
  63. data/lib/bcdice/common_command/reroll_dice/node.rb +198 -0
  64. data/lib/bcdice/common_command/reroll_dice/parser.rb +421 -0
  65. data/lib/bcdice/common_command/reroll_dice/parser.y +158 -0
  66. data/lib/bcdice/common_command/upper_dice.rb +10 -129
  67. data/lib/bcdice/common_command/upper_dice/node.rb +181 -0
  68. data/lib/bcdice/common_command/upper_dice/parser.rb +412 -0
  69. data/lib/bcdice/common_command/upper_dice/parser.y +143 -0
  70. data/lib/bcdice/common_command/version.rb +9 -17
  71. data/lib/bcdice/deprecated/checker.rb +78 -0
  72. data/lib/bcdice/dice_table/d66_grid_table.rb +8 -0
  73. data/lib/bcdice/dice_table/d66_table.rb +10 -0
  74. data/lib/bcdice/dice_table/sai_fic_skill_table.rb +75 -17
  75. data/lib/bcdice/dice_table/sai_fic_skill_table/category.rb +25 -0
  76. data/lib/bcdice/dice_table/sai_fic_skill_table/skill.rb +23 -0
  77. data/lib/bcdice/dice_table/table.rb +8 -0
  78. data/lib/bcdice/game_system.rb +7 -1
  79. data/lib/bcdice/game_system/AFF2e.rb +1 -1
  80. data/lib/bcdice/game_system/AceKillerGene.rb +2 -2
  81. data/lib/bcdice/game_system/Airgetlamh.rb +3 -3
  82. data/lib/bcdice/game_system/Alsetto.rb +1 -1
  83. data/lib/bcdice/game_system/Alshard.rb +1 -1
  84. data/lib/bcdice/game_system/AlterRaise.rb +2 -2
  85. data/lib/bcdice/game_system/Amadeus.rb +46 -507
  86. data/lib/bcdice/game_system/Amadeus_Korean.rb +12 -456
  87. data/lib/bcdice/game_system/AnimaAnimus.rb +1 -1
  88. data/lib/bcdice/game_system/Arianrhod.rb +0 -1
  89. data/lib/bcdice/game_system/ArsMagica.rb +1 -1
  90. data/lib/bcdice/game_system/Avandner.rb +1 -1
  91. data/lib/bcdice/game_system/BBN.rb +1 -1
  92. data/lib/bcdice/game_system/BadLife.rb +1 -1
  93. data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
  94. data/lib/bcdice/game_system/BeastBindTrinity.rb +1 -2
  95. data/lib/bcdice/game_system/BeginningIdol.rb +2 -3
  96. data/lib/bcdice/game_system/BeginningIdol_Korean.rb +2 -3
  97. data/lib/bcdice/game_system/BladeOfArcana.rb +2 -2
  98. data/lib/bcdice/game_system/BlindMythos.rb +1 -1
  99. data/lib/bcdice/game_system/BloodCrusade.rb +0 -1
  100. data/lib/bcdice/game_system/BloodMoon.rb +0 -1
  101. data/lib/bcdice/game_system/CardRanker.rb +1 -2
  102. data/lib/bcdice/game_system/ChaosFlare.rb +1 -1
  103. data/lib/bcdice/game_system/Chill.rb +1 -1
  104. data/lib/bcdice/game_system/CodeLayerd.rb +1 -1
  105. data/lib/bcdice/game_system/ColossalHunter.rb +1 -2
  106. data/lib/bcdice/game_system/Comes.rb +50 -0
  107. data/lib/bcdice/game_system/CrashWorld.rb +1 -1
  108. data/lib/bcdice/game_system/Cthulhu.rb +94 -97
  109. data/lib/bcdice/game_system/Cthulhu7th.rb +108 -67
  110. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +1 -1
  111. data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +1 -1
  112. data/lib/bcdice/game_system/CthulhuTech.rb +8 -14
  113. data/lib/bcdice/game_system/Cthulhu_ChineseTraditional.rb +7 -190
  114. data/lib/bcdice/game_system/Cthulhu_Korean.rb +5 -186
  115. data/lib/bcdice/game_system/DarkBlaze.rb +9 -5
  116. data/lib/bcdice/game_system/DarkDaysDrive.rb +17 -15
  117. data/lib/bcdice/game_system/DarkSouls.rb +1 -1
  118. data/lib/bcdice/game_system/DeadlineHeroes.rb +2 -2
  119. data/lib/bcdice/game_system/DemonParasite.rb +1 -2
  120. data/lib/bcdice/game_system/DetatokoSaga.rb +48 -149
  121. data/lib/bcdice/game_system/DetatokoSaga_Korean.rb +6 -274
  122. data/lib/bcdice/game_system/DiceOfTheDead.rb +9 -6
  123. data/lib/bcdice/game_system/DoubleCross.rb +102 -81
  124. data/lib/bcdice/game_system/DoubleCross_Korean.rb +13 -330
  125. data/lib/bcdice/game_system/Dracurouge.rb +376 -1678
  126. data/lib/bcdice/game_system/Dracurouge_Korean.rb +16 -271
  127. data/lib/bcdice/game_system/EarthDawn.rb +1 -1
  128. data/lib/bcdice/game_system/EarthDawn3.rb +1 -1
  129. data/lib/bcdice/game_system/EarthDawn4.rb +1 -1
  130. data/lib/bcdice/game_system/Elysion.rb +3 -4
  131. data/lib/bcdice/game_system/EmbryoMachine.rb +1 -1
  132. data/lib/bcdice/game_system/Emoklore.rb +131 -0
  133. data/lib/bcdice/game_system/EndBreaker.rb +1 -2
  134. data/lib/bcdice/game_system/EtrianOdysseySRS.rb +1 -1
  135. data/lib/bcdice/game_system/Fiasco.rb +87 -70
  136. data/lib/bcdice/game_system/Fiasco_Korean.rb +7 -95
  137. data/lib/bcdice/game_system/FilledWith.rb +462 -566
  138. data/lib/bcdice/game_system/FullMetalPanic.rb +1 -1
  139. data/lib/bcdice/game_system/FutariSousa.rb +103 -938
  140. data/lib/bcdice/game_system/FutariSousa_Korean.rb +7 -948
  141. data/lib/bcdice/game_system/{Gurps.rb → GURPS.rb} +184 -217
  142. data/lib/bcdice/game_system/Garako.rb +131 -39
  143. data/lib/bcdice/game_system/GardenOrder.rb +2 -2
  144. data/lib/bcdice/game_system/GehennaAn.rb +1 -1
  145. data/lib/bcdice/game_system/GeishaGirlwithKatana.rb +1 -1
  146. data/lib/bcdice/game_system/GoblinSlayer.rb +1 -1
  147. data/lib/bcdice/game_system/GoldenSkyStories.rb +1 -1
  148. data/lib/bcdice/game_system/Gorilla.rb +1 -1
  149. data/lib/bcdice/game_system/GranCrest.rb +2 -3
  150. data/lib/bcdice/game_system/GundogRevised.rb +1 -1
  151. data/lib/bcdice/game_system/GundogZero.rb +1 -1
  152. data/lib/bcdice/game_system/GurpsFW.rb +2 -3
  153. data/lib/bcdice/game_system/HarnMaster.rb +2 -2
  154. data/lib/bcdice/game_system/HatsuneMiku.rb +1 -2
  155. data/lib/bcdice/game_system/HouraiGakuen.rb +1 -1
  156. data/lib/bcdice/game_system/HuntersMoon.rb +1 -2
  157. data/lib/bcdice/game_system/Illusio.rb +2 -2
  158. data/lib/bcdice/game_system/Insane.rb +90 -717
  159. data/lib/bcdice/game_system/Insane_Korean.rb +7 -719
  160. data/lib/bcdice/game_system/Kamigakari.rb +47 -242
  161. data/lib/bcdice/game_system/Kamigakari_Korean.rb +6 -394
  162. data/lib/bcdice/game_system/KanColle.rb +3 -3
  163. data/lib/bcdice/game_system/KemonoNoMori.rb +1 -1
  164. data/lib/bcdice/game_system/KillDeathBusiness.rb +162 -1144
  165. data/lib/bcdice/game_system/KillDeathBusiness_Korean.rb +6 -1459
  166. data/lib/bcdice/game_system/KurayamiCrying.rb +1 -1
  167. data/lib/bcdice/game_system/LiveraDoll.rb +2 -2
  168. data/lib/bcdice/game_system/LogHorizon.rb +350 -3379
  169. data/lib/bcdice/game_system/LogHorizon_Korean.rb +55 -1357
  170. data/lib/bcdice/game_system/LostRecord.rb +0 -1
  171. data/lib/bcdice/game_system/LostRoyal.rb +1 -2
  172. data/lib/bcdice/game_system/MagicaLogia.rb +158 -1044
  173. data/lib/bcdice/game_system/MeikyuDays.rb +1 -2
  174. data/lib/bcdice/game_system/MeikyuKingdom.rb +4 -4
  175. data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +4 -5
  176. data/lib/bcdice/game_system/MetalHead.rb +1 -1
  177. data/lib/bcdice/game_system/MetalHeadExtream.rb +2 -2
  178. data/lib/bcdice/game_system/MetallicGuardian.rb +1 -1
  179. data/lib/bcdice/game_system/MonotoneMuseum.rb +38 -239
  180. data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +10 -270
  181. data/lib/bcdice/game_system/NSSQ.rb +159 -0
  182. data/lib/bcdice/game_system/Nechronica.rb +34 -73
  183. data/lib/bcdice/game_system/Nechronica_Korean.rb +11 -128
  184. data/lib/bcdice/game_system/NeverCloud.rb +1 -1
  185. data/lib/bcdice/game_system/NightWizard.rb +1 -1
  186. data/lib/bcdice/game_system/NightWizard3rd.rb +1 -1
  187. data/lib/bcdice/game_system/NinjaSlayer.rb +12 -11
  188. data/lib/bcdice/game_system/NjslyrBattle.rb +1 -1
  189. data/lib/bcdice/game_system/OneWayHeroics.rb +1 -2
  190. data/lib/bcdice/game_system/OracleEngine.rb +1 -1
  191. data/lib/bcdice/game_system/OrgaRain.rb +2 -2
  192. data/lib/bcdice/game_system/Paradiso.rb +1 -1
  193. data/lib/bcdice/game_system/Paranoia.rb +1 -1
  194. data/lib/bcdice/game_system/ParanoiaRebooted.rb +1 -1
  195. data/lib/bcdice/game_system/ParasiteBlood.rb +1 -1
  196. data/lib/bcdice/game_system/Peekaboo.rb +22 -122
  197. data/lib/bcdice/game_system/Postman.rb +2 -2
  198. data/lib/bcdice/game_system/PulpCthulhu.rb +3 -3
  199. data/lib/bcdice/game_system/Raisondetre.rb +2 -2
  200. data/lib/bcdice/game_system/RecordOfLodossWar.rb +1 -1
  201. data/lib/bcdice/game_system/RecordOfSteam.rb +1 -1
  202. data/lib/bcdice/game_system/RokumonSekai2.rb +1 -1
  203. data/lib/bcdice/game_system/RuinBreakers.rb +296 -0
  204. data/lib/bcdice/game_system/Ryutama.rb +1 -1
  205. data/lib/bcdice/game_system/SRS.rb +1 -2
  206. data/lib/bcdice/game_system/SamsaraBallad.rb +1 -1
  207. data/lib/bcdice/game_system/Satasupe.rb +1 -2
  208. data/lib/bcdice/game_system/ScreamHighSchool.rb +2 -2
  209. data/lib/bcdice/game_system/SevenFortressMobius.rb +1 -1
  210. data/lib/bcdice/game_system/ShadowRun5.rb +2 -2
  211. data/lib/bcdice/game_system/SharedFantasia.rb +1 -1
  212. data/lib/bcdice/game_system/ShinMegamiTenseiKakuseihen.rb +1 -1
  213. data/lib/bcdice/game_system/ShinkuuGakuen.rb +2 -2
  214. data/lib/bcdice/game_system/ShinobiGami.rb +1 -2
  215. data/lib/bcdice/game_system/ShoujoTenrankai.rb +2 -2
  216. data/lib/bcdice/game_system/Skynauts.rb +1 -1
  217. data/lib/bcdice/game_system/SteamPunkers.rb +1 -1
  218. data/lib/bcdice/game_system/StellarKnights.rb +1 -2
  219. data/lib/bcdice/game_system/SterileLife.rb +1 -1
  220. data/lib/bcdice/game_system/StrangerOfSwordCity.rb +1 -2
  221. data/lib/bcdice/game_system/StratoShout.rb +44 -247
  222. data/lib/bcdice/game_system/StratoShout_Korean.rb +6 -282
  223. data/lib/bcdice/game_system/Strave.rb +2 -2
  224. data/lib/bcdice/game_system/SwordWorld.rb +8 -9
  225. data/lib/bcdice/game_system/SwordWorld2_0.rb +2 -3
  226. data/lib/bcdice/game_system/SwordWorld2_5.rb +2 -3
  227. data/lib/bcdice/game_system/TherapieSein.rb +1 -1
  228. data/lib/bcdice/game_system/TokumeiTenkousei.rb +1 -1
  229. data/lib/bcdice/game_system/TokyoGhostResearch.rb +2 -2
  230. data/lib/bcdice/game_system/Torg.rb +2 -2
  231. data/lib/bcdice/game_system/Torg1_5.rb +1 -1
  232. data/lib/bcdice/game_system/TorgEternity.rb +1 -1
  233. data/lib/bcdice/game_system/TrinitySeven.rb +1 -1
  234. data/lib/bcdice/game_system/TunnelsAndTrolls.rb +1 -1
  235. data/lib/bcdice/game_system/TwilightGunsmoke.rb +1 -2
  236. data/lib/bcdice/game_system/UnsungDuet.rb +139 -0
  237. data/lib/bcdice/game_system/Utakaze.rb +1 -1
  238. data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +1 -1
  239. data/lib/bcdice/game_system/Villaciel.rb +1 -2
  240. data/lib/bcdice/game_system/Warhammer.rb +1 -1
  241. data/lib/bcdice/game_system/Warhammer4.rb +329 -0
  242. data/lib/bcdice/game_system/WitchQuest.rb +1 -1
  243. data/lib/bcdice/game_system/WorldOfDarkness.rb +1 -1
  244. data/lib/bcdice/game_system/YankeeYogSothoth.rb +15 -15
  245. data/lib/bcdice/game_system/YearZeroEngine.rb +1 -1
  246. data/lib/bcdice/game_system/ZettaiReido.rb +1 -1
  247. data/lib/bcdice/game_system/filled_with/cook_tables.rb +119 -0
  248. data/lib/bcdice/game_system/filled_with/lot_tables.rb +155 -0
  249. data/lib/bcdice/loader.rb +6 -8
  250. data/lib/bcdice/preprocessor.rb +15 -40
  251. data/lib/bcdice/repl.rb +1 -1
  252. data/lib/bcdice/result.rb +83 -0
  253. data/lib/bcdice/translate.rb +11 -0
  254. data/lib/bcdice/version.rb +1 -1
  255. metadata +80 -4
@@ -90,7 +90,7 @@ module BCDice
90
90
  }.freeze
91
91
 
92
92
  # ダイスボットで使用するコマンドを配列で列挙する
93
- register_prefix(['\d+AN<=\d([\+\-]\d+)*'] + TABLES.keys)
93
+ register_prefix('\d+AN<=\d([\+\-]\d+)*', TABLES.keys)
94
94
  end
95
95
  end
96
96
  end
@@ -22,7 +22,6 @@ module BCDice
22
22
  super(command)
23
23
 
24
24
  @sort_add_dice = true
25
- @enabled_d66 = true
26
25
  @d66_sort_type = D66SortType::NO_SORT
27
26
  end
28
27
 
@@ -26,7 +26,7 @@ module BCDice
26
26
    最初の0が判断基準で、その右側5つがボッチダイスです。1*2,8*2,0*1なので1botchという訳です。
27
27
  INFO_MESSAGE_TEXT
28
28
 
29
- register_prefix(['ArS.*', '1R10.*'])
29
+ register_prefix('ArS.*', '1R10.*')
30
30
 
31
31
  def eval_game_system_specific_command(string)
32
32
  unless parse_ars(string) || parse_1r10(string)
@@ -34,7 +34,7 @@ module BCDice
34
34
  ・8av4*7+10 → 8d10で目標値4、攻撃力7、クリティカルトリガー10の命中判定。
35
35
  MESSAGETEXT
36
36
 
37
- register_prefix(['\d+AV\d+((x|\*)\d+(\+\d+)?)?(c\d+)?'])
37
+ register_prefix('\d+AV\d+((x|\*)\d+(\+\d+)?)?(c\d+)?')
38
38
 
39
39
  def initialize(command)
40
40
  super(command)
@@ -2,7 +2,7 @@ module BCDice
2
2
  module GameSystem
3
3
  class BBN < Base
4
4
  # ダイスボットで使用するコマンドを配列で列挙する
5
- register_prefix(['\d+BN.*'])
5
+ register_prefix('\d+BN.*')
6
6
 
7
7
  ID = 'BBN'.freeze
8
8
 
@@ -41,7 +41,7 @@ module BCDice
41
41
  ・スキル表:SKL
42
42
  MESSAGETEXT
43
43
 
44
- register_prefix(['\d?(BAD|BL|GL).*', '[TDGKSB]RN', 'SKL'])
44
+ register_prefix('\d?(BAD|BL|GL).*', '[TDGKSB]RN', 'SKL')
45
45
 
46
46
  def eval_game_system_specific_command(command)
47
47
  command = command.upcase
@@ -26,7 +26,7 @@ module BCDice
26
26
   セット数が1以上の時はセット数も表示し、攻撃判定の場合は命中部位も表示します。
27
27
  INFO_MESSAGE_TEXT
28
28
 
29
- register_prefix(['\d+BK.*', '\d+BA.*', '\d+BKC\d+.*', '\d+BAC\d+.*', '\d+R6.*'])
29
+ register_prefix('\d+BK.*', '\d+BA.*', '\d+BKC\d+.*', '\d+BAC\d+.*', '\d+R6.*')
30
30
 
31
31
  def initialize(command)
32
32
  super(command)
@@ -63,7 +63,6 @@ module BCDice
63
63
  def initialize(command)
64
64
  super(command)
65
65
 
66
- @enabled_d66 = true
67
66
  @d66_sort_type = D66SortType::ASC
68
67
  end
69
68
 
@@ -342,7 +341,7 @@ module BCDice
342
341
  ),
343
342
  }.freeze
344
343
 
345
- register_prefix(['\d+BB.*', '\d+R6.*'] + TABLES.keys)
344
+ register_prefix('\d+BB.*', '\d+R6.*', TABLES.keys)
346
345
  end
347
346
  end
348
347
  end
@@ -54,7 +54,7 @@ module BCDice
54
54
  []内は省略可 D66入れ替えあり
55
55
  INFO_MESSAGE_TEXT
56
56
 
57
- register_prefix([
57
+ register_prefix(
58
58
  '[1-7]*PD\d+(?:[\+\-]\d+)?',
59
59
  'HW',
60
60
  'BWT',
@@ -142,13 +142,12 @@ module BCDice
142
142
  'LIT',
143
143
  'TIT',
144
144
  'CIT'
145
- ])
145
+ )
146
146
 
147
147
  def initialize(command)
148
148
  super(command)
149
149
 
150
150
  @sort_add_dice = true
151
- @enabled_d66 = true
152
151
  @d66_sort_type = D66SortType::ASC
153
152
  end
154
153
 
@@ -52,7 +52,7 @@ module BCDice
52
52
  []内は省略可 D66 다이스가 존재
53
53
  INFO_MESSAGE_TEXT
54
54
 
55
- register_prefix([
55
+ register_prefix(
56
56
  '[1-7]*PD\d+(?:[\+\-]\d+)?',
57
57
  'HW',
58
58
  'BWT',
@@ -137,13 +137,12 @@ module BCDice
137
137
  'LIT',
138
138
  'TIT',
139
139
  'CIT'
140
- ])
140
+ )
141
141
 
142
142
  def initialize(command)
143
143
  super(command)
144
144
 
145
145
  @sort_add_dice = true
146
- @enabled_d66 = true
147
146
  @d66_sort_type = D66SortType::ASC
148
147
  end
149
148
 
@@ -32,13 +32,13 @@ module BCDice
32
32
    例)CTR+→因縁表(R版)を出目2~21でロールする。
33
33
  INFO_MESSAGE_TEXT
34
34
 
35
- register_prefix([
35
+ register_prefix(
36
36
  '\d+A\d*[CF]?\d*[CF]?\d*',
37
37
  'CT3[\+\-]?',
38
38
  'CTR[\+\-]?',
39
39
  'DJV\-?',
40
40
  'AKST[\+\-]?'
41
- ])
41
+ )
42
42
 
43
43
  def initialize(command)
44
44
  super(command)
@@ -454,7 +454,7 @@ module BCDice
454
454
  ),
455
455
  }.freeze
456
456
 
457
- register_prefix(['BM.*', 'ReRoll\d+.*', 'RP\d+', 'DT'] + TABLES.keys)
457
+ register_prefix('BM.*', 'ReRoll\d+.*', 'RP\d+', 'DT', TABLES.keys)
458
458
  end
459
459
  end
460
460
  end
@@ -40,7 +40,6 @@ module BCDice
40
40
  super(command)
41
41
 
42
42
  @sort_add_dice = true
43
- @enabled_d66 = true
44
43
  @d66_sort_type = D66SortType::ASC
45
44
  @round_type = RoundType::CEIL # 端数切り上げに設定
46
45
  end
@@ -38,7 +38,6 @@ module BCDice
38
38
  super(command)
39
39
 
40
40
  @sort_add_dice = true
41
- @enabled_d66 = true
42
41
  @d66_sort_type = D66SortType::ASC
43
42
  @round_type = RoundType::CEIL # 端数切り上げに設定
44
43
  end
@@ -32,7 +32,6 @@ module BCDice
32
32
  super(command)
33
33
 
34
34
  @sort_add_dice = true
35
- @enabled_d66 = true
36
35
  @d66_sort_type = D66SortType::ASC
37
36
  end
38
37
 
@@ -243,7 +242,7 @@ module BCDice
243
242
  ]
244
243
  ),
245
244
  }.freeze
246
- register_prefix(['RM', 'CM.*'] + TABLES.keys)
245
+ register_prefix('RM', 'CM.*', TABLES.keys)
247
246
  end
248
247
  end
249
248
  end
@@ -41,7 +41,7 @@ module BCDice
41
41
  - FT7
42
42
  INFO_MESSAGE_TEXT
43
43
 
44
- register_prefix(['\d*CF.*', 'FT\d*'])
44
+ register_prefix('\d*CF.*', 'FT\d*')
45
45
 
46
46
  # ゲーム別成功度判定(2D6)。以前の処理をそのまま残しています。
47
47
  def check_2D6(total, dice_total, _dice_list, cmp_op, target)
@@ -22,7 +22,7 @@ module BCDice
22
22
   例)SR7   sr13   SR(7+4)   Ssr10
23
23
  INFO_MESSAGE_TEXT
24
24
 
25
- register_prefix(['SR\d+.*'])
25
+ register_prefix('SR\d+.*')
26
26
 
27
27
  def check_1D100(total, _dice_total, cmp_op, target)
28
28
  return '' if target == '?'
@@ -28,7 +28,7 @@ module BCDice
28
28
  0CL : 1CL[0]と同じ判定
29
29
  MESSAGETEXT
30
30
 
31
- register_prefix(['[+-]?\d*CL([+-]\d+)?[@\d]*.*'])
31
+ register_prefix('[+-]?\d*CL([+-]\d+)?[@\d]*.*')
32
32
 
33
33
  def eval_game_system_specific_command(command)
34
34
  debug('eval_game_system_specific_command command', command)
@@ -32,7 +32,6 @@ module BCDice
32
32
 
33
33
  def initialize(command)
34
34
  super(command)
35
- @enabled_d66 = true
36
35
  @d66_sort_type = D66SortType::NO_SORT
37
36
  end
38
37
 
@@ -563,7 +562,7 @@ module BCDice
563
562
 
564
563
  }.freeze
565
564
 
566
- register_prefix(["CH.*", "B6T", "CNP"] + TABLES.keys)
565
+ register_prefix("CH.*", "B6T", "CNP", TABLES.keys)
567
566
  end
568
567
  end
569
568
  end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class Comes < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'Comes'
8
+
9
+ # ゲームシステム名
10
+ NAME = 'カムズ'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'かむす'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
17
+ ・各種表
18
+  判定ペナルティ表 PT
19
+ INFO_MESSAGE_TEXT
20
+
21
+ def initialize(command)
22
+ super(command)
23
+
24
+ @sort_add_dice = true
25
+ @d66_sort_type = D66SortType::ASC
26
+ end
27
+
28
+ def eval_game_system_specific_command(command)
29
+ return roll_tables(command, self.class::TABLES)
30
+ end
31
+
32
+ TABLES = {
33
+ 'PT' => DiceTable::Table.new(
34
+ '判定ペナルティ表',
35
+ '1D6',
36
+ [
37
+ '恐ろしい目に合う。『恐怖』を与える。',
38
+ '今見ているものを理解できない。『混乱』を与える。',
39
+ '我を忘れて見とれてしまう。『魅了』を与える。',
40
+ '思わぬ遠回りをしてしまう。『疲労』を与える。',
41
+ '大きな失態を演じてしまう。『負傷』を与える。',
42
+ '別の困難が立ちはだかる。新たに判定を行わせる。',
43
+ ]
44
+ )
45
+ }.freeze
46
+
47
+ register_prefix(TABLES.keys)
48
+ end
49
+ end
50
+ end
@@ -19,7 +19,7 @@ module BCDice
19
19
  例・CW8
20
20
  INFO_MESSAGE_TEXT
21
21
 
22
- register_prefix(['CW\d+'])
22
+ register_prefix('CW\d+')
23
23
 
24
24
  def eval_game_system_specific_command(command)
25
25
  result = nil
@@ -48,7 +48,7 @@ module BCDice
48
48
 
49
49
  INFO_MESSAGE_TEXT
50
50
 
51
- register_prefix(['CC(B)?\(\d+\)', 'CC(B)?.*', 'RES(B)?.*', 'CBR(B)?\(\d+,\d+\)'])
51
+ register_prefix('CC(B)?\(\d+\)', 'CC(B)?.*', 'RES(B)?.*', 'CBR(B)?\(\d+,\d+\)')
52
52
 
53
53
  def initialize(command)
54
54
  super(command)
@@ -94,90 +94,95 @@ module BCDice
94
94
  return nil
95
95
  end
96
96
 
97
+ private
98
+
97
99
  def getCheckResult(command)
98
- broken_num = 0
99
- diff = 0
100
+ m = %r{CCB?(\d+)?(?:<=([+-/*\d]+))?}i.match(command)
101
+ broken_num = m[1].to_i
102
+ diff = ArithmeticEvaluator.eval(m[2])
100
103
 
101
- if (m = %r{CCB?(\d+)?<=([+-/*\d]+)}i.match(command))
102
- broken_num = m[1].to_i
103
- diff = ArithmeticEvaluator.eval(m[2])
104
+ if diff <= 0
105
+ total = @randomizer.roll_once(100)
106
+ return Result.new("(1D100) > #{total}")
104
107
  end
105
108
 
106
- output = ""
107
-
108
- if diff > 0
109
- output = "(1D100<=#{diff})"
110
-
111
- if broken_num > 0
112
- output += " 故障ナンバー[#{broken_num}]"
113
- end
109
+ expr = "(1D100<=#{diff})"
110
+ if broken_num > 0
111
+ expr += " #{translate('Cthulhu.broken_number')}[#{broken_num}]"
112
+ end
114
113
 
115
- total_n = @randomizer.roll_once(100)
114
+ total = @randomizer.roll_once(100)
115
+ compare_result = compare(total, diff, broken_num)
116
116
 
117
- output += " > #{total_n}"
118
- output += " > #{getCheckResultText(total_n, diff, broken_num)}"
119
- else
120
- total_n = @randomizer.roll_once(100)
121
- output = "(1D100) > #{total_n}"
117
+ compare_result.to_result.tap do |r|
118
+ r.text = "#{expr} > #{total} #{compare_result.text}"
122
119
  end
123
-
124
- return output
125
120
  end
126
121
 
127
- def getCheckResultText(total_n, diff, broken_num = 0)
128
- result = ""
129
- diff_special = 0
130
- fumble = false
122
+ class CompareResult
123
+ include Translate
124
+ attr_accessor :success, :failure, :critical, :fumble, :special, :broken
125
+
126
+ def initialize(locale)
127
+ @locale = locale
128
+
129
+ @success = false
130
+ @failure = false
131
+ @critical = false
132
+ @fumble = false
133
+ @special = false
134
+ @broke = false
135
+ end
131
136
 
132
- if @special_percentage > 0
133
- # specialの値設定が無い場合はクリティカル/ファンブル判定もしない
134
- diff_special = (diff * @special_percentage / 100).floor
135
- if diff_special < 1
136
- diff_special = 1
137
+ def text
138
+ if critical && special
139
+ translate("Cthulhu.critical_special")
140
+ elsif critical
141
+ translate("Cthulhu.critical")
142
+ elsif special
143
+ translate("Cthulhu.special")
144
+ elsif success
145
+ translate("success")
146
+ elsif broken && fumble
147
+ "#{translate('Cthulhu.fumble')}/#{translate('Cthulhu.broken')}"
148
+ elsif broken
149
+ translate("Cthulhu.broken")
150
+ elsif fumble
151
+ translate("Cthulhu.fumble")
152
+ elsif failure
153
+ translate("failure")
137
154
  end
138
155
  end
139
156
 
140
- if (total_n <= diff) && (total_n < 100)
141
- @is_success = true
142
- result = "成功"
143
-
144
- if diff_special > 0
145
- if total_n <= @critical_percentage
146
- @is_critical = true
147
- if total_n <= diff_special
148
- result = "決定的成功/スペシャル"
149
- else
150
- result = "決定的成功"
151
- end
152
- else
153
- if total_n <= diff_special
154
- result = "スペシャル"
155
- end
156
- end
157
+ def to_result
158
+ Result.new.tap do |r|
159
+ r.success = success
160
+ r.failure = failure
161
+ r.critical = critical
162
+ r.fumble = fumble
157
163
  end
164
+ end
165
+ end
166
+
167
+ def compare(total, target, broken_number = 0)
168
+ result = CompareResult.new(@locale)
169
+ target_special = (target * @special_percentage / 100).clamp(1, 100)
170
+
171
+ if (total <= target) && (total < 100)
172
+ result.success = true
173
+ result.special = total <= target_special
174
+ result.critical = total <= @critical_percentage
158
175
  else
159
- @is_failure = true
160
- result = "失敗"
161
-
162
- if diff_special > 0
163
- if (total_n >= (101 - @fumble_percentage)) && (diff < 100)
164
- @is_fumble = true
165
- result = "致命的失敗"
166
- fumble = true
167
- end
168
- end
176
+ result.failure = true
177
+ result.fumble = total >= (101 - @fumble_percentage)
169
178
  end
170
179
 
171
- if broken_num > 0
172
- if total_n >= broken_num
173
- @is_success = false
174
- @is_failure = true
175
- if fumble
176
- result += "/故障"
177
- else
178
- result = "故障"
179
- end
180
- end
180
+ if broken_number > 0 && total >= broken_number
181
+ result.broken = true
182
+ result.failure = true
183
+ result.success = false
184
+ result.special = false
185
+ result.critical = false
181
186
  end
182
187
 
183
188
  return result
@@ -186,33 +191,33 @@ module BCDice
186
191
  def getRegistResult(command)
187
192
  m = /RES(B)?([-\d]+)/i.match(command)
188
193
  unless m
189
- return "1"
194
+ return nil
190
195
  end
191
196
 
192
197
  value = m[2].to_i
193
198
  target = value * 5 + 50
194
199
 
195
200
  if target < 5
196
- @is_failure = true
197
- return "(1d100<=#{target}) > 自動失敗"
201
+ return Result.failure("(1d100<=#{target}) > #{translate('Cthulhu.automatic_failure')}")
198
202
  end
199
203
 
200
204
  if target > 95
201
- @is_success = true
202
- return "(1d100<=#{target}) > 自動成功"
205
+ return Result.success("(1d100<=#{target}) > #{translate('Cthulhu.automatic_success')}")
203
206
  end
204
207
 
205
208
  # 通常判定
206
209
  total_n = @randomizer.roll_once(100)
207
- result = getCheckResultText(total_n, target)
210
+ compare_result = compare(total_n, target)
208
211
 
209
- return "(1d100<=#{target}) > #{total_n} > #{result}"
212
+ compare_result.to_result.tap do |r|
213
+ r.text = "(1d100<=#{target}) > #{total_n} > #{compare_result.text}"
214
+ end
210
215
  end
211
216
 
212
217
  def getCombineRoll(command)
213
218
  m = /CBR(B)?\((\d+),(\d+)\)/i.match(command)
214
219
  unless m
215
- return "1"
220
+ return nil
216
221
  end
217
222
 
218
223
  diff_1 = m[2].to_i
@@ -220,32 +225,24 @@ module BCDice
220
225
 
221
226
  total = @randomizer.roll_once(100)
222
227
 
223
- result_1 = getCheckResultText(total, diff_1)
224
- result_2 = getCheckResultText(total, diff_2)
225
-
226
- successList = ["決定的成功/スペシャル", "決定的成功", "スペシャル", "成功"]
227
-
228
- succesCount = 0
229
- succesCount += 1 if successList.include?(result_1)
230
- succesCount += 1 if successList.include?(result_2)
231
- debug("succesCount", succesCount)
232
-
233
- @is_failure = false
234
- @is_success = false
228
+ result_1 = compare(total, diff_1)
229
+ result_2 = compare(total, diff_2)
235
230
 
236
231
  rank =
237
- if succesCount >= 2
238
- @is_success = true
239
- "成功"
240
- elsif succesCount == 1
241
- @is_success = true
242
- "部分的成功"
232
+ if result_1.success && result_2.success
233
+ translate("success")
234
+ elsif result_1.success || result_2.success
235
+ translate("Cthulhu.partial_success")
243
236
  else
244
- @is_failure = true
245
- "失敗"
237
+ translate("failure")
246
238
  end
247
239
 
248
- return "(1d100<=#{diff_1},#{diff_2}) > #{total}[#{result_1},#{result_2}] > #{rank}"
240
+ Result.new.tap do |r|
241
+ r.text = "(1d100<=#{diff_1},#{diff_2}) > #{total}[#{result_1.text},#{result_2.text}] > #{rank}"
242
+ r.critical = result_1.critical || result_2.critical
243
+ r.fumble = result_1.fumble || result_2.fumble
244
+ r.condition = result_1.success || result_2.success
245
+ end
249
246
  end
250
247
  end
251
248
  end