bcdice 3.1.3 → 3.2.0

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 (129) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +33 -2
  3. data/i18n/StellarKnights/ja_jp.yml +496 -0
  4. data/lib/bcdice/common_command/add_dice.rb +1 -1
  5. data/lib/bcdice/common_command/calc.rb +1 -1
  6. data/lib/bcdice/dice_table.rb +2 -0
  7. data/lib/bcdice/dice_table/d66_half_grid_table.rb +33 -0
  8. data/lib/bcdice/dice_table/d66_one_third_table.rb +34 -0
  9. data/lib/bcdice/game_system.rb +3 -0
  10. data/lib/bcdice/game_system/AceKillerGene.rb +1 -1
  11. data/lib/bcdice/game_system/Ainecadette.rb +68 -0
  12. data/lib/bcdice/game_system/Airgetlamh.rb +1 -1
  13. data/lib/bcdice/game_system/Alsetto.rb +1 -1
  14. data/lib/bcdice/game_system/AlterRaise.rb +2 -2
  15. data/lib/bcdice/game_system/AngelGear.rb +1 -1
  16. data/lib/bcdice/game_system/AnimaAnimus.rb +1 -1
  17. data/lib/bcdice/game_system/Arianrhod.rb +6 -8
  18. data/lib/bcdice/game_system/Avandner.rb +1 -1
  19. data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
  20. data/lib/bcdice/game_system/BattleTech.rb +1 -1
  21. data/lib/bcdice/game_system/BeginningIdol.rb +5 -5
  22. data/lib/bcdice/game_system/BeginningIdol_Korean.rb +5 -5
  23. data/lib/bcdice/game_system/BladeOfArcana.rb +1 -1
  24. data/lib/bcdice/game_system/BlindMythos.rb +1 -1
  25. data/lib/bcdice/game_system/BloodCrusade.rb +6 -7
  26. data/lib/bcdice/game_system/BloodMoon.rb +9 -8
  27. data/lib/bcdice/game_system/CardRanker.rb +8 -7
  28. data/lib/bcdice/game_system/ChaosFlare.rb +21 -15
  29. data/lib/bcdice/game_system/Chill.rb +10 -10
  30. data/lib/bcdice/game_system/Chill3.rb +9 -9
  31. data/lib/bcdice/game_system/CrashWorld.rb +1 -1
  32. data/lib/bcdice/game_system/Cthulhu.rb +1 -1
  33. data/lib/bcdice/game_system/Cthulhu7th.rb +48 -10
  34. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +1 -1
  35. data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +1 -1
  36. data/lib/bcdice/game_system/DarkBlaze.rb +0 -11
  37. data/lib/bcdice/game_system/DarkDaysDrive.rb +8 -7
  38. data/lib/bcdice/game_system/DeadlineHeroes.rb +2 -2
  39. data/lib/bcdice/game_system/DemonParasite.rb +5 -13
  40. data/lib/bcdice/game_system/DesperateRun.rb +1 -1
  41. data/lib/bcdice/game_system/DoubleCross.rb +1 -1
  42. data/lib/bcdice/game_system/Dracurouge.rb +1 -1
  43. data/lib/bcdice/game_system/EclipsePhase.rb +14 -14
  44. data/lib/bcdice/game_system/Elric.rb +18 -14
  45. data/lib/bcdice/game_system/Elysion.rb +1 -1
  46. data/lib/bcdice/game_system/EmbryoMachine.rb +9 -8
  47. data/lib/bcdice/game_system/Emoklore.rb +3 -3
  48. data/lib/bcdice/game_system/Fiasco.rb +1 -1
  49. data/lib/bcdice/game_system/FilledWith.rb +4 -0
  50. data/lib/bcdice/game_system/GURPS.rb +17 -28
  51. data/lib/bcdice/game_system/Garako.rb +1 -1
  52. data/lib/bcdice/game_system/GardenOrder.rb +1 -1
  53. data/lib/bcdice/game_system/GeishaGirlwithKatana.rb +1 -1
  54. data/lib/bcdice/game_system/GoblinSlayer.rb +1 -1
  55. data/lib/bcdice/game_system/Gorilla.rb +2 -8
  56. data/lib/bcdice/game_system/GranCrest.rb +18 -11
  57. data/lib/bcdice/game_system/Gundog.rb +9 -8
  58. data/lib/bcdice/game_system/GundogRevised.rb +10 -9
  59. data/lib/bcdice/game_system/GundogZero.rb +1 -1
  60. data/lib/bcdice/game_system/GurpsFW.rb +16 -16
  61. data/lib/bcdice/game_system/HarnMaster.rb +19 -26
  62. data/lib/bcdice/game_system/HatsuneMiku.rb +1 -1
  63. data/lib/bcdice/game_system/Hieizan.rb +12 -21
  64. data/lib/bcdice/game_system/HouraiGakuen.rb +1 -1
  65. data/lib/bcdice/game_system/HuntersMoon.rb +5 -10
  66. data/lib/bcdice/game_system/InfiniteFantasia.rb +19 -17
  67. data/lib/bcdice/game_system/Insane.rb +13 -20
  68. data/lib/bcdice/game_system/IthaWenUa.rb +8 -15
  69. data/lib/bcdice/game_system/JamesBond.rb +10 -10
  70. data/lib/bcdice/game_system/JekyllAndHyde.rb +1 -1
  71. data/lib/bcdice/game_system/Kamigakari.rb +1 -1
  72. data/lib/bcdice/game_system/KanColle.rb +4 -9
  73. data/lib/bcdice/game_system/KemonoNoMori.rb +1 -1
  74. data/lib/bcdice/game_system/KillDeathBusiness.rb +7 -15
  75. data/lib/bcdice/game_system/KurayamiCrying.rb +55 -2
  76. data/lib/bcdice/game_system/MeikyuDays.rb +10 -8
  77. data/lib/bcdice/game_system/MeikyuKingdom.rb +26 -26
  78. data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +3 -3
  79. data/lib/bcdice/game_system/MetalHead.rb +12 -22
  80. data/lib/bcdice/game_system/MetalHeadExtream.rb +5 -5
  81. data/lib/bcdice/game_system/MonotoneMuseum.rb +8 -6
  82. data/lib/bcdice/game_system/Nechronica.rb +28 -21
  83. data/lib/bcdice/game_system/NinjaSlayer.rb +4 -4
  84. data/lib/bcdice/game_system/NjslyrBattle.rb +8 -11
  85. data/lib/bcdice/game_system/OneWayHeroics.rb +1 -1
  86. data/lib/bcdice/game_system/Paradiso.rb +1 -1
  87. data/lib/bcdice/game_system/ParasiteBlood.rb +1 -1
  88. data/lib/bcdice/game_system/Peekaboo.rb +4 -9
  89. data/lib/bcdice/game_system/Pendragon.rb +7 -7
  90. data/lib/bcdice/game_system/PhantasmAdventure.rb +8 -8
  91. data/lib/bcdice/game_system/Postman.rb +1 -1
  92. data/lib/bcdice/game_system/PulpCthulhu.rb +1 -1
  93. data/lib/bcdice/game_system/Raisondetre.rb +2 -2
  94. data/lib/bcdice/game_system/Revulture.rb +123 -0
  95. data/lib/bcdice/game_system/RuneQuest.rb +8 -8
  96. data/lib/bcdice/game_system/Ryutama.rb +1 -1
  97. data/lib/bcdice/game_system/Satasupe.rb +1 -1
  98. data/lib/bcdice/game_system/ScreamHighSchool.rb +2 -2
  99. data/lib/bcdice/game_system/SharedFantasia.rb +19 -23
  100. data/lib/bcdice/game_system/ShinobiGami.rb +14 -6
  101. data/lib/bcdice/game_system/Skynauts.rb +2 -2
  102. data/lib/bcdice/game_system/SkynautsBouken.rb +228 -0
  103. data/lib/bcdice/game_system/StellarKnights.rb +59 -696
  104. data/lib/bcdice/game_system/SterileLife.rb +1 -1
  105. data/lib/bcdice/game_system/StratoShout.rb +8 -16
  106. data/lib/bcdice/game_system/Strave.rb +1 -1
  107. data/lib/bcdice/game_system/SwordWorld.rb +16 -7
  108. data/lib/bcdice/game_system/SwordWorld2_0.rb +2 -2
  109. data/lib/bcdice/game_system/SwordWorld2_5.rb +2 -2
  110. data/lib/bcdice/game_system/TherapieSein.rb +1 -1
  111. data/lib/bcdice/game_system/TokyoGhostResearch.rb +1 -1
  112. data/lib/bcdice/game_system/TrinitySeven.rb +4 -4
  113. data/lib/bcdice/game_system/TunnelsAndTrolls.rb +1 -1
  114. data/lib/bcdice/game_system/Utakaze.rb +1 -1
  115. data/lib/bcdice/game_system/Villaciel.rb +1 -1
  116. data/lib/bcdice/game_system/WARPS.rb +11 -9
  117. data/lib/bcdice/game_system/WaresBlade.rb +4 -9
  118. data/lib/bcdice/game_system/Warhammer.rb +15 -6
  119. data/lib/bcdice/game_system/Warhammer4.rb +15 -11
  120. data/lib/bcdice/game_system/WitchQuest.rb +1 -1
  121. data/lib/bcdice/game_system/YankeeYogSothoth.rb +4 -9
  122. data/lib/bcdice/game_system/meikyu_kingdom_basic/kingdom_table.rb +1 -1
  123. data/lib/bcdice/game_system/sword_world/rating_parsed.rb +4 -4
  124. data/lib/bcdice/game_system/sword_world/rating_parser.rb +1 -1
  125. data/lib/bcdice/game_system/sword_world/transcendent_test.rb +26 -8
  126. data/lib/bcdice/repl.rb +1 -1
  127. data/lib/bcdice/result.rb +26 -0
  128. data/lib/bcdice/version.rb +1 -1
  129. metadata +9 -4
@@ -13,7 +13,12 @@ module BCDice
13
13
  SORT_KEY = 'くらやみくらいん'
14
14
 
15
15
  # ダイスボットの使い方
16
- HELP_MESSAGE = "・アクシデント表(ACT)\n"
16
+ HELP_MESSAGE = <<~TEXT
17
+ ・アクシデント表(ACT)
18
+ ・感情表(EMO)
19
+ ・幕間シーン表(情景)(SST)
20
+ ・幕間シーン表(関係)(SRT)
21
+ TEXT
17
22
 
18
23
  def eval_game_system_specific_command(command)
19
24
  if (m = /^ACT(\d+)$/i.match(command))
@@ -41,9 +46,57 @@ module BCDice
41
46
  "まるで自分を支える何かが失われたように、あなたはその場に立ち尽くす。諦めと絶望が心を支配する。ああ、そうか。これが、「心が折れる」ということか……。あなたは「理性」を4点失う。"
42
47
  ]
43
48
  ),
49
+ "EMO" => DiceTable::Table.new(
50
+ "感情表",
51
+ "1D10",
52
+ [
53
+ "(正)信頼/(負)依存",
54
+ "(正)安心/(負)不安",
55
+ "(正)友情/(負)憤怒",
56
+ "(正)尊敬/(負)恐怖",
57
+ "(正)愛情/(負)嫉妬",
58
+ "(正)共感/(負)否定",
59
+ "(正)忠誠/(負)侮蔑",
60
+ "(正)憧憬/(負)劣等感",
61
+ "(正)性愛/(負)拒絶",
62
+ "(正)狂信/(負)殺意",
63
+ ]
64
+ ),
65
+ "SST" => DiceTable::Table.new(
66
+ "幕間シーン表(情景)",
67
+ "1D10",
68
+ [
69
+ "先が見えない闇の中を、あなたは手探りに進んでいる。暗がりに入り込んでしまったのか、それとも辺りの光が消えたのか———その時、あなたの眼前に、闇から溶け出すように何者かの姿が現れた。",
70
+ "夢を見ていた。かつてあった出来事が、目の前で繰り返される……ハッと気が付き、現実に戻る。心配そうにあなたを覗き込む顔を見て、再び夢の光景がフラッシュバックする。この人、あの時の……!",
71
+ "気が付くと見知らぬ場所を1人歩いている。迷ってしまったのだろうか。辺りを見回していた、その時———あなたは背後に気配を感じた。いつの間にか誰か立っている……!",
72
+ "「危ない!」突然上がった声と同時に、あなたは突き飛ばされ、床を転がった。次の瞬間、不気味で巨大な何かがあなたの頭をかすめてゆく……。あなたは身を起こし、あなたと一緒に倒れ込んだ人物に声をかけた。",
73
+ "不気味な声を上げながら、何かがゆっくりと近づいてくる。あなたが咄嗟に身を隠した場所には、すでに誰かいた。このまま息を殺し、一緒に危険が過ぎ去るのを待つしかない。",
74
+ "むせかえるような臭いが辺りに満ちている。これは血の臭いだろうか。いや、それにしては……。すると、あなたの近くで、誰かが小さく咳き込んだ……",
75
+ "一息つけそうな場所を見つけ、あなたは座りこんだ。不気味なことに巻き込まれているとは思えない、穏やかな時間が流れる。ふと、あなたは隣りに座っている人物に話しかけた。",
76
+ "静寂の中、あなたを呼ぶ声が響く。声の主に対し、あなたは思う。望むところだ。自分の方こそ、確認しなければならないことがある———!あなたは足早に、声のする方へと進んだ。",
77
+ "高い場所に立ち、あなたは異常な世界を見下ろしている。その時、後ろで誰かが地面を踏む音がした。来たか……予想通り、ここでなら会うことができた。あなたは振り返り、相手を見た。",
78
+ "周囲を確認し、あなたは相手に合図を送る。足音静かに、相手があなたの元へと駆け寄る。———他の気配はない。慎重に、密やかに、あなたは相手と話し始めた。",
79
+ ]
80
+ ),
81
+ "SRT" => DiceTable::Table.new(
82
+ "幕間シーン表(関係)",
83
+ "1D10",
84
+ [
85
+ "微かな香り。ちょっとした仕事。横顔。あの人のすべてが、あなたの胸を高鳴らせる———こんな気持ちは、初めてだ。",
86
+ "頭の中にノイズが走る。あなたは、たしかに、あの人とあったことがある。けれど、詳しく思い出そうとするたびに頭痛が走る……この記憶、確かめなければ。",
87
+ "異常な事態だというのに……いや、異常な事態だからこそ、あの人はあなたに安心感を与えてくれる、とにかく話がしたい。今はまず、あの人を探そう。",
88
+ "今あなたに必要なのは「捨て駒」だ。そう、ピッタリの奴がいるじゃないか!誰を犠牲にしても生き残ってやる。そのためには……。あなたは、あの人の方へと歩み寄った。",
89
+ "こんな時でも、どこか気の合う相手というのは見つかるものだ———安堵するような、弾むような気持ちで、あなたはその人に声をかけた。さぁ、共闘といこうじゃないか。",
90
+ "なんでよりによってこんなヤツと……!?図らずも二人きりになってしまった相手に、あなたは眉をひそめた。会話はない。そもそもこいつが安全かわからない……誰か助けて!",
91
+ "特に理由はない。けれど、一緒に行動すること自体は大事でしょう?仕方ないじゃないか、怖いんだから……!あなたは、いそいそと手近な人間へと寄って行った。",
92
+ "不意に昔のこと———二度と取り戻せない過ちが頭をよぎる。そんなことを思い出したのも、あの人の面影を、あの顔に感じてしまうせいだ。別人とはわかっている。けれど、今度こそ———。",
93
+ "あなたは影に隠れ、その人物を見張っている。怪しい……この人こそが、事件の元凶じゃないか?とはいえ、このままではじり貧だ。あなたは意を決し、影から飛び出して話をかけた。",
94
+ "間違いない……!あなたはその人物をにらみつけた。何という幸運だろう。追い求めた相手が、すぐそこにいるなんて!あなたは荒れ狂う胸の内を気取られぬよう、ゆっくりと近づいた。",
95
+ ]
96
+ ),
44
97
  }.freeze
45
98
 
46
- register_prefix("ACT.*", TABLES.keys)
99
+ register_prefix(TABLES.keys)
47
100
  end
48
101
  end
49
102
  end
@@ -44,18 +44,19 @@ module BCDice
44
44
  return string
45
45
  end
46
46
 
47
- def check_2D6(total, dice_total, _dice_list, cmp_op, target)
48
- return '' if target == '?'
49
- return '' unless cmp_op == :>=
47
+ def result_2d6(total, dice_total, _dice_list, cmp_op, target)
48
+ return nil unless cmp_op == :>=
50
49
 
51
50
  if dice_total <= 2
52
- "絶対失敗"
51
+ Result.fumble("絶対失敗")
53
52
  elsif dice_total >= 12
54
- "絶対成功"
53
+ Result.critical("絶対成功")
54
+ elsif target == "?"
55
+ Result.nothing
55
56
  elsif total >= target
56
- "成功"
57
+ Result.success("成功")
57
58
  else
58
- "失敗"
59
+ Result.failure("失敗")
59
60
  end
60
61
  end
61
62
 
@@ -104,7 +105,8 @@ module BCDice
104
105
 
105
106
  if signOfInequality != "" # 成功度判定処理
106
107
  cmp_op = Normalize.comparison_operator(signOfInequality)
107
- output += check_2D6(total_n, dice_now, dice_num, cmp_op, diff)
108
+ result = result_2d6(total_n, dice_now, dice_num, cmp_op, diff)
109
+ output += " > #{result.text}" if result
108
110
  end
109
111
 
110
112
  return output
@@ -51,12 +51,12 @@ module BCDice
51
51
  'TT', 'NT', 'ET', 'MPT',
52
52
  'T1T', 'T2T', 'T3T', 'T4T', 'T5T',
53
53
  'NAME',
54
- 'DFT', 'IDT\d*',
54
+ 'DFT', 'IDT',
55
55
  'WIT', 'LIT', 'RIT', 'SIT', 'RWIT', 'RUIT',
56
56
  'IFT',
57
57
  '\d+RET',
58
- 'PNT\d*', 'MLT\d*',
59
- 'KNT\d+', 'WORD\d+'
58
+ 'PNT', 'MLT',
59
+ 'KNT', 'WORD'
60
60
  )
61
61
 
62
62
  def initialize(command)
@@ -77,38 +77,38 @@ module BCDice
77
77
  return string
78
78
  end
79
79
 
80
- def check_nD6(total, dice_total, dice_list, cmp_op, target)
81
- return '' if target == '?'
80
+ def result_nd6(total, dice_total, dice_list, cmp_op, target)
81
+ return Result.nothing if target == "?"
82
+ return nil unless cmp_op == :>=
82
83
 
83
- result = get2D6Result(total, dice_total, cmp_op, target)
84
- result += getKiryokuResult(total, dice_list, target)
84
+ result = result_nd6_only(total, dice_total, cmp_op, target)
85
+ result.text += kiryoku_result(total, dice_list, target)
85
86
 
86
87
  return result
87
88
  end
88
89
 
89
- alias check_2D6 check_nD6
90
+ def result_nd6_only(total, dice_total, cmp_op, target)
91
+ return nil unless cmp_op == :>=
90
92
 
91
- def get2D6Result(total_n, dice_n, signOfInequality, diff)
92
- return '' unless signOfInequality == :>=
93
-
94
- if dice_n <= 2
95
- " 絶対失敗"
96
- elsif dice_n >= 12
97
- " > 絶対成功"
93
+ if dice_total <= 2
94
+ Result.fumble("絶対失敗")
95
+ elsif dice_total >= 12
96
+ Result.critical("絶対成功")
97
+ elsif total >= target
98
+ Result.success("成功")
98
99
  else
99
- get2D6ResultOnlySuccess(total_n, diff)
100
+ Result.failure("失敗")
100
101
  end
101
102
  end
102
103
 
103
- def get2D6ResultOnlySuccess(total_n, diff)
104
- if total_n >= diff
105
- " 成功"
106
- else
107
- " > 失敗"
108
- end
104
+ def result_2d6_text(total, dice_total, cmp_op, target)
105
+ text = result_nd6_only(total, dice_total, cmp_op, target)&.text
106
+ return "" if text.nil?
107
+
108
+ return " > #{text}"
109
109
  end
110
110
 
111
- def getKiryokuResult(total_n, dice_list, diff)
111
+ def kiryoku_result(total_n, dice_list, diff)
112
112
  num_6 = dice_list.count(6)
113
113
 
114
114
  if num_6 == 0
@@ -131,7 +131,7 @@ module BCDice
131
131
  none6Dice_n = maxDice1 + maxDice2
132
132
  debug("none6Dice_n", none6Dice_n)
133
133
  debug("diff", diff)
134
- none6DiceReuslt = get2D6ResultOnlySuccess(none6Total_n, diff)
134
+ none6DiceReuslt = (none6Total_n >= diff ? " > 成功" : " > 失敗")
135
135
 
136
136
  return " (もしくは) #{none6Total_n}#{none6DiceReuslt} & 《気力》1点獲得"
137
137
  end
@@ -180,8 +180,8 @@ module BCDice
180
180
 
181
181
  if signOfInequality != "" # 成功度判定処理
182
182
  cmp_op = Normalize.comparison_operator(signOfInequality)
183
- output += get2D6Result(total_n, dice_now, cmp_op, diff)
184
- output += getKiryokuResult(total_n, dice_list, diff)
183
+ output += result_2d6_text(total_n, dice_now, cmp_op, diff)
184
+ output += kiryoku_result(total_n, dice_list, diff)
185
185
  end
186
186
 
187
187
  return output
@@ -65,14 +65,14 @@ module BCDice
65
65
  'BDT', 'TBO', 'CBO', 'SBO', 'VBO',
66
66
  'ET', 'FET', 'HET', 'SDT', 'IEQ', 'FRT',
67
67
  'T1T', 'T2T', 'T3T', 'T4T', 'T5T',
68
- 'MPT', 'KNT\d+', 'WORD\d+', 'NAME', 'NNAME', 'NM',
68
+ 'MPT', 'KNT', 'WORD', 'NAME', 'NNAME', 'NM',
69
69
  'RT', 'CIR', 'RUIR', 'RWIR',
70
70
  'WIT', 'LIT', 'RIT', 'SIT', 'NRWT', 'NRUT', 'ARWT', 'ARUT',
71
71
  'KET', 'TET', 'NST', 'RET', 'FAT', 'HRT', 'BLT',
72
72
  'BUS', 'SHS', 'ASS', 'SUS', 'SCS', 'LAS', 'NES', 'COS', 'ENS', 'TOS',
73
73
  'ABUS', 'ASHS', 'AASS', 'ASUS', 'ASCS', 'ALAS', 'ANES', 'ACOS', 'AENS', 'ATOS',
74
74
  'SE', 'ARN', 'WEN', 'NEN', 'CEN', 'SEN', 'OEN',
75
- 'DFT\d+'
75
+ 'DFT'
76
76
  )
77
77
 
78
78
  def initialize(command)
@@ -82,7 +82,7 @@ module BCDice
82
82
  @d66_sort_type = D66SortType::ASC
83
83
  end
84
84
 
85
- def getKiryokuResult(_total_n, dice_list, _diff)
85
+ def kiryoku_result(_total_n, dice_list, _diff)
86
86
  num_6 = dice_list.count(6)
87
87
 
88
88
  if num_6 == 0
@@ -35,7 +35,7 @@ module BCDice
35
35
  例)CRCM98 対物で数値98の戦闘結果を参照する。
36
36
  MESSAGETEXT
37
37
 
38
- register_prefix('AR', 'SR', 'HR<=.+', 'CC', 'ACT', 'ACL', 'ACS', 'CRC[A-Z]\d+')
38
+ register_prefix('AR', 'SR', 'HR<=', 'CC', 'ACT', 'ACL', 'ACS', 'CRC[A-Z]')
39
39
 
40
40
  def eval_game_system_specific_command(command)
41
41
  result = roll_tables(command, TABLES)
@@ -62,17 +62,13 @@ module BCDice
62
62
  return string
63
63
  end
64
64
 
65
- def check_2D6(total, dice_total, _dice_list, cmp_op, target)
66
- return '' if cmp_op != :>= || target == "?"
65
+ def result_2d6(_total, dice_total, _dice_list, cmp_op, _target)
66
+ return nil if cmp_op != :>=
67
67
 
68
68
  if dice_total >= 12
69
- "絶対成功"
69
+ Result.critical("絶対成功")
70
70
  elsif dice_total <= 2
71
- "絶対失敗"
72
- elsif total >= target
73
- " > 成功"
74
- else
75
- " > 失敗"
71
+ Result.fumble("絶対失敗")
76
72
  end
77
73
  end
78
74
 
@@ -85,11 +81,14 @@ module BCDice
85
81
  return text
86
82
  end
87
83
 
88
- def check_1D100(total, dice_total, cmp_op, target)
89
- return '' if target == '?'
90
- return '' unless cmp_op == :<=
84
+ def result_1d100(_total, dice_total, cmp_op, _target)
85
+ return nil unless cmp_op == :<=
91
86
 
92
- return getResult(total, dice_total, target)
87
+ if dice_total <= 5
88
+ Result.critical("絶対成功")
89
+ elsif dice_total >= 96
90
+ Result.fumble("絶対失敗")
91
+ end
93
92
  end
94
93
 
95
94
  def getHitResult(total_n, _dice_n, diff)
@@ -106,15 +105,6 @@ module BCDice
106
105
  return ' > 成功'
107
106
  end
108
107
 
109
- def getResult(total_n, dice_n, diff)
110
- return ' > 絶対成功' if dice_n <= 5
111
- return ' > 絶対失敗' if dice_n >= 96
112
-
113
- return ' > 成功' if total_n <= diff
114
-
115
- return ' > 失敗'
116
- end
117
-
118
108
  # 戦闘結果チャートを振る
119
109
  # @param [String] suv 耐久レベル
120
110
  # @param [String] num 数値
@@ -51,11 +51,11 @@ module BCDice
51
51
  MESSAGETEXT
52
52
 
53
53
  register_prefix(
54
- '[AS]R\d+',
55
- '(HU|BK|WA|SC|BG|IN|PT|HT|TA|AC|HE|TR|VT|BO|CS|TH|AM|GD|HC|BI|BT|AI)HIT\d*',
56
- 'SUV[A-Z]\d+', '[HTALMEBPD]DMG[LMHO]',
57
- 'CRT\d*', '[GSME]AC\d*', '[ASL]MA\d*(\+\d+)?',
58
- 'SEC', 'NAC', 'LDC', '[W]ENC\d*'
54
+ '[AS]R',
55
+ '(HU|BK|WA|SC|BG|IN|PT|HT|TA|AC|HE|TR|VT|BO|CS|TH|AM|GD|HC|BI|BT|AI)HIT',
56
+ 'SUV[A-Z]', '[HTALMEBPD]DMG[LMHO]',
57
+ 'CRT', '[GSME]AC', '[ASL]MA',
58
+ 'SEC', 'NAC', 'LDC', '[W]ENC'
59
59
  )
60
60
 
61
61
  def eval_game_system_specific_command(command)
@@ -77,23 +77,25 @@ module BCDice
77
77
 
78
78
  result =
79
79
  if dice_value <= fumble
80
- translate("MonotoneMuseum.automatic_failure")
80
+ Result.fumble(translate("MonotoneMuseum.automatic_failure"))
81
81
  elsif dice_value >= critical
82
- translate("MonotoneMuseum.automatic_success")
82
+ Result.critical(translate("MonotoneMuseum.automatic_success"))
83
83
  elsif total >= target
84
- translate("success")
84
+ Result.success(translate("success"))
85
85
  else
86
- translate("failure")
86
+ Result.failure(translate("failure"))
87
87
  end
88
88
 
89
89
  sequence = [
90
90
  "(#{command})",
91
91
  "#{dice_value}[#{dice_str}]#{Format.modifier(modify_number)}",
92
92
  total.to_s,
93
- result,
93
+ result.text,
94
94
  ]
95
95
 
96
- return sequence.join(" > ")
96
+ result.text = sequence.join(" > ")
97
+
98
+ result
97
99
  end
98
100
 
99
101
  # モノトーンミュージアム用のテーブル
@@ -56,26 +56,33 @@ module BCDice
56
56
 
57
57
  private
58
58
 
59
- def check_nD10(total, _dice_total, dice_list, cmp_op, target) # ゲーム別成功度判定(nD10)
60
- return '' if target == '?'
61
- return '' unless cmp_op == :>=
62
-
63
- result =
64
- if total >= 11
65
- translate("Nechronica.critical")
66
- elsif total >= target
67
- translate("success")
68
- elsif dice_list.count { |i| i <= 1 } == 0
69
- translate("failure")
70
- elsif dice_list.size > 1
71
- fumble = translate("Nechronica.fumble")
72
- break_all_parts = translate("Nechronica.break_all_parts")
73
- "#{fumble} > #{break_all_parts}"
74
- else
75
- translate("Nechronica.fumble")
76
- end
59
+ def result_nd10(total, _dice_total, dice_list, cmp_op, target) # ゲーム別成功度判定(nD10)
60
+ return Result.nothing if target == '?'
61
+ return nil unless cmp_op == :>=
62
+
63
+ if total >= 11
64
+ Result.critical(translate("Nechronica.critical"))
65
+ elsif total >= target
66
+ Result.success(translate("success"))
67
+ elsif dice_list.count { |i| i <= 1 } == 0
68
+ Result.failure(translate("failure"))
69
+ elsif dice_list.size > 1
70
+ fumble = translate("Nechronica.fumble")
71
+ break_all_parts = translate("Nechronica.break_all_parts")
72
+ Result.fumble("#{fumble} #{break_all_parts}")
73
+ else
74
+ Result.fumble(translate("Nechronica.fumble"))
75
+ end
76
+ end
77
77
 
78
- return " #{result}"
78
+ def result_nd10_text(total, dice_list, target)
79
+ text = result_nd10(total, 0, dice_list, :>=, target)&.text
80
+
81
+ if text.nil?
82
+ ""
83
+ else
84
+ " > #{text}"
85
+ end
79
86
  end
80
87
 
81
88
  def nechronica_check(string)
@@ -120,7 +127,7 @@ module BCDice
120
127
  dice_str = dice.join(",")
121
128
  output += " > #{total_n}[#{dice_str}]"
122
129
 
123
- output += check_nD10(total_n, dice_n, dice, :>=, diff)
130
+ output += result_nd10_text(total_n, dice, diff)
124
131
 
125
132
  if isBattleMode
126
133
  hit_loc = getHitLocation(total_n)
@@ -166,7 +173,7 @@ module BCDice
166
173
 
167
174
  TABLES = translate_tables(:ja_jp)
168
175
 
169
- register_prefix('\d+NC.*', '\d+NA.*', '\d+R10.*', TABLES.keys)
176
+ register_prefix('\d+NC', '\d+NA', '\d+R10', TABLES.keys)
170
177
  end
171
178
  end
172
179
  end
@@ -253,10 +253,10 @@ module BCDice
253
253
 
254
254
  # ダイスボットで使用するコマンドを配列で列挙する
255
255
  register_prefix(
256
- 'NJ\d+',
257
- 'EV\d+',
258
- 'AT\d+',
259
- 'EL\d+',
256
+ 'NJ',
257
+ 'EV',
258
+ 'AT',
259
+ 'EL',
260
260
  TABLES.keys
261
261
  )
262
262
  end
@@ -21,21 +21,18 @@ module BCDice
21
21
  INFO_MESSAGE_TEXT
22
22
 
23
23
  # ゲーム別成功度判定(2D6)
24
- def check_2D6(total, _dice_total, dice_list, cmp_op, target)
25
- return '' if target == '?'
26
- return '' if cmp_op != :<=
24
+ def result_2d6(total, _dice_total, dice_list, cmp_op, target)
25
+ return Result.nothing if target == "?"
26
+ return nil if cmp_op != :<=
27
27
 
28
- return success_text(total, target) + juuten(dice_list)
29
- end
28
+ result = (total <= target ? Result.success("成功") : Result.failure("失敗"))
29
+ result.text += juuten(dice_list)
30
30
 
31
- def success_text(total, target)
32
- if total <= target
33
- " > 成功"
34
- else
35
- " > 失敗"
36
- end
31
+ return result
37
32
  end
38
33
 
34
+ private
35
+
39
36
  def juuten(dice_list)
40
37
  juuten = dice_list.count(1) + dice_list.count(6)
41
38