bcdice 3.1.2 → 3.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (161) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +154 -75
  3. data/README.md +3 -2
  4. data/i18n/Cthulhu/zh_hans.yml +11 -0
  5. data/i18n/MagicaLogia/zh_hans.yml +564 -0
  6. data/i18n/StellarKnights/ja_jp.yml +498 -0
  7. data/i18n/StellarKnights/ko_kr.yml +498 -0
  8. data/i18n/zh_hans.yml +7 -0
  9. data/lib/bcdice/command/parsed.rb +11 -3
  10. data/lib/bcdice/command/parser.rb +179 -100
  11. data/lib/bcdice/common_command/add_dice.rb +1 -1
  12. data/lib/bcdice/common_command/barabara_dice/node.rb +2 -2
  13. data/lib/bcdice/common_command/barabara_dice/result.rb +6 -0
  14. data/lib/bcdice/common_command/calc.rb +1 -1
  15. data/lib/bcdice/common_command/choice.rb +78 -7
  16. data/lib/bcdice/dice_table.rb +3 -0
  17. data/lib/bcdice/dice_table/d66_half_grid_table.rb +33 -0
  18. data/lib/bcdice/dice_table/d66_left_range_table.rb +29 -0
  19. data/lib/bcdice/dice_table/d66_one_third_table.rb +34 -0
  20. data/lib/bcdice/game_system.rb +10 -0
  21. data/lib/bcdice/game_system/AceKillerGene.rb +1 -1
  22. data/lib/bcdice/game_system/Ainecadette.rb +68 -0
  23. data/lib/bcdice/game_system/Airgetlamh.rb +1 -1
  24. data/lib/bcdice/game_system/Alsetto.rb +1 -1
  25. data/lib/bcdice/game_system/AlterRaise.rb +2 -2
  26. data/lib/bcdice/game_system/Amadeus.rb +110 -93
  27. data/lib/bcdice/game_system/AngelGear.rb +10 -5
  28. data/lib/bcdice/game_system/AnimaAnimus.rb +16 -9
  29. data/lib/bcdice/game_system/Arianrhod.rb +6 -8
  30. data/lib/bcdice/game_system/Avandner.rb +1 -1
  31. data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
  32. data/lib/bcdice/game_system/BattleTech.rb +109 -28
  33. data/lib/bcdice/game_system/BeastBindTrinity.rb +28 -12
  34. data/lib/bcdice/game_system/BeginningIdol.rb +5 -5
  35. data/lib/bcdice/game_system/BeginningIdol_Korean.rb +5 -5
  36. data/lib/bcdice/game_system/BladeOfArcana.rb +1 -1
  37. data/lib/bcdice/game_system/BlindMythos.rb +39 -38
  38. data/lib/bcdice/game_system/BloodCrusade.rb +6 -7
  39. data/lib/bcdice/game_system/BloodMoon.rb +9 -8
  40. data/lib/bcdice/game_system/CardRanker.rb +8 -7
  41. data/lib/bcdice/game_system/ChaosFlare.rb +21 -15
  42. data/lib/bcdice/game_system/Chill.rb +10 -10
  43. data/lib/bcdice/game_system/Chill3.rb +9 -9
  44. data/lib/bcdice/game_system/CodeLayerd.rb +39 -39
  45. data/lib/bcdice/game_system/ColossalHunter.rb +34 -47
  46. data/lib/bcdice/game_system/CrashWorld.rb +1 -1
  47. data/lib/bcdice/game_system/Cthulhu.rb +1 -1
  48. data/lib/bcdice/game_system/Cthulhu7th.rb +50 -12
  49. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +1 -1
  50. data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +1 -1
  51. data/lib/bcdice/game_system/Cthulhu_SimplifiedChinese.rb +60 -0
  52. data/lib/bcdice/game_system/DarkBlaze.rb +0 -11
  53. data/lib/bcdice/game_system/DarkDaysDrive.rb +8 -7
  54. data/lib/bcdice/game_system/DeadlineHeroes.rb +11 -10
  55. data/lib/bcdice/game_system/DemonParasite.rb +5 -13
  56. data/lib/bcdice/game_system/DesperateRun.rb +1 -1
  57. data/lib/bcdice/game_system/DoubleCross.rb +3 -1
  58. data/lib/bcdice/game_system/Dracurouge.rb +3 -2
  59. data/lib/bcdice/game_system/EclipsePhase.rb +14 -14
  60. data/lib/bcdice/game_system/Elric.rb +18 -14
  61. data/lib/bcdice/game_system/Elysion.rb +1 -1
  62. data/lib/bcdice/game_system/EmbryoMachine.rb +9 -8
  63. data/lib/bcdice/game_system/Emoklore.rb +25 -20
  64. data/lib/bcdice/game_system/Fiasco.rb +1 -1
  65. data/lib/bcdice/game_system/FilledWith.rb +4 -0
  66. data/lib/bcdice/game_system/FutariSousa.rb +12 -10
  67. data/lib/bcdice/game_system/GURPS.rb +17 -28
  68. data/lib/bcdice/game_system/Garako.rb +1 -1
  69. data/lib/bcdice/game_system/GardenOrder.rb +12 -7
  70. data/lib/bcdice/game_system/GeishaGirlwithKatana.rb +1 -1
  71. data/lib/bcdice/game_system/GoblinSlayer.rb +1 -1
  72. data/lib/bcdice/game_system/Gorilla.rb +2 -8
  73. data/lib/bcdice/game_system/GranCrest.rb +189 -417
  74. data/lib/bcdice/game_system/Gundog.rb +9 -8
  75. data/lib/bcdice/game_system/GundogRevised.rb +10 -9
  76. data/lib/bcdice/game_system/GundogZero.rb +1 -1
  77. data/lib/bcdice/game_system/GurpsFW.rb +16 -16
  78. data/lib/bcdice/game_system/HarnMaster.rb +19 -26
  79. data/lib/bcdice/game_system/HatsuneMiku.rb +1 -1
  80. data/lib/bcdice/game_system/Hieizan.rb +12 -21
  81. data/lib/bcdice/game_system/HouraiGakuen.rb +1 -1
  82. data/lib/bcdice/game_system/HuntersMoon.rb +5 -10
  83. data/lib/bcdice/game_system/InfiniteFantasia.rb +19 -17
  84. data/lib/bcdice/game_system/Insane.rb +13 -20
  85. data/lib/bcdice/game_system/Irisbane.rb +154 -0
  86. data/lib/bcdice/game_system/IthaWenUa.rb +8 -15
  87. data/lib/bcdice/game_system/JamesBond.rb +10 -10
  88. data/lib/bcdice/game_system/JekyllAndHyde.rb +1 -1
  89. data/lib/bcdice/game_system/Kamigakari.rb +1 -1
  90. data/lib/bcdice/game_system/KanColle.rb +4 -9
  91. data/lib/bcdice/game_system/KemonoNoMori.rb +26 -39
  92. data/lib/bcdice/game_system/KillDeathBusiness.rb +7 -15
  93. data/lib/bcdice/game_system/KurayamiCrying.rb +141 -2
  94. data/lib/bcdice/game_system/LiveraDoll.rb +254 -304
  95. data/lib/bcdice/game_system/LogHorizon.rb +13 -10
  96. data/lib/bcdice/game_system/MagicaLogia_SimplifiedChinese.rb +66 -0
  97. data/lib/bcdice/game_system/MeikyuDays.rb +10 -8
  98. data/lib/bcdice/game_system/MeikyuKingdom.rb +26 -26
  99. data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +4 -3
  100. data/lib/bcdice/game_system/MetalHead.rb +12 -22
  101. data/lib/bcdice/game_system/MetalHeadExtream.rb +5 -5
  102. data/lib/bcdice/game_system/MonotoneMuseum.rb +8 -6
  103. data/lib/bcdice/game_system/Nechronica.rb +63 -90
  104. data/lib/bcdice/game_system/NinjaSlayer.rb +6 -7
  105. data/lib/bcdice/game_system/NjslyrBattle.rb +8 -11
  106. data/lib/bcdice/game_system/OneWayHeroics.rb +1 -1
  107. data/lib/bcdice/game_system/Paradiso.rb +3 -3
  108. data/lib/bcdice/game_system/ParasiteBlood.rb +1 -1
  109. data/lib/bcdice/game_system/Peekaboo.rb +4 -9
  110. data/lib/bcdice/game_system/Pendragon.rb +7 -7
  111. data/lib/bcdice/game_system/PersonaO.rb +86 -0
  112. data/lib/bcdice/game_system/PhantasmAdventure.rb +8 -8
  113. data/lib/bcdice/game_system/Postman.rb +1 -1
  114. data/lib/bcdice/game_system/PulpCthulhu.rb +1 -1
  115. data/lib/bcdice/game_system/Raisondetre.rb +2 -2
  116. data/lib/bcdice/game_system/Revulture.rb +123 -0
  117. data/lib/bcdice/game_system/RuneQuest.rb +8 -8
  118. data/lib/bcdice/game_system/Ryutama.rb +1 -1
  119. data/lib/bcdice/game_system/SRS.rb +17 -16
  120. data/lib/bcdice/game_system/SamsaraBallad.rb +38 -11
  121. data/lib/bcdice/game_system/Satasupe.rb +32 -32
  122. data/lib/bcdice/game_system/ScreamHighSchool.rb +5 -5
  123. data/lib/bcdice/game_system/SharedFantasia.rb +19 -23
  124. data/lib/bcdice/game_system/ShinobiGami.rb +14 -6
  125. data/lib/bcdice/game_system/Skynauts.rb +103 -142
  126. data/lib/bcdice/game_system/SkynautsBouken.rb +228 -0
  127. data/lib/bcdice/game_system/StarryDolls.rb +318 -0
  128. data/lib/bcdice/game_system/SteamPunkers.rb +25 -7
  129. data/lib/bcdice/game_system/StellarKnights.rb +85 -706
  130. data/lib/bcdice/game_system/StellarKnights_Korean.rb +79 -0
  131. data/lib/bcdice/game_system/SterileLife.rb +2 -3
  132. data/lib/bcdice/game_system/StratoShout.rb +8 -16
  133. data/lib/bcdice/game_system/Strave.rb +1 -1
  134. data/lib/bcdice/game_system/SwordWorld.rb +16 -7
  135. data/lib/bcdice/game_system/SwordWorld2_0.rb +2 -2
  136. data/lib/bcdice/game_system/SwordWorld2_5.rb +2 -2
  137. data/lib/bcdice/game_system/TherapieSein.rb +1 -1
  138. data/lib/bcdice/game_system/TokumeiTenkousei.rb +4 -3
  139. data/lib/bcdice/game_system/TokyoGhostResearch.rb +1 -1
  140. data/lib/bcdice/game_system/TorgEternity.rb +2 -2
  141. data/lib/bcdice/game_system/ToshiakiHolyGrailWar.rb +92 -0
  142. data/lib/bcdice/game_system/TrinitySeven.rb +279 -280
  143. data/lib/bcdice/game_system/TunnelsAndTrolls.rb +1 -1
  144. data/lib/bcdice/game_system/Utakaze.rb +53 -48
  145. data/lib/bcdice/game_system/Villaciel.rb +1 -1
  146. data/lib/bcdice/game_system/WARPS.rb +11 -9
  147. data/lib/bcdice/game_system/WaresBlade.rb +4 -9
  148. data/lib/bcdice/game_system/Warhammer.rb +15 -6
  149. data/lib/bcdice/game_system/Warhammer4.rb +15 -11
  150. data/lib/bcdice/game_system/WitchQuest.rb +1 -1
  151. data/lib/bcdice/game_system/YankeeYogSothoth.rb +4 -9
  152. data/lib/bcdice/game_system/Yggdrasill.rb +1 -1
  153. data/lib/bcdice/game_system/ZettaiReido.rb +20 -25
  154. data/lib/bcdice/game_system/meikyu_kingdom_basic/kingdom_table.rb +1 -1
  155. data/lib/bcdice/game_system/sword_world/rating_parsed.rb +4 -4
  156. data/lib/bcdice/game_system/sword_world/rating_parser.rb +1 -1
  157. data/lib/bcdice/game_system/sword_world/transcendent_test.rb +26 -8
  158. data/lib/bcdice/repl.rb +1 -1
  159. data/lib/bcdice/result.rb +26 -0
  160. data/lib/bcdice/version.rb +1 -1
  161. metadata +22 -5
@@ -35,7 +35,7 @@ module BCDice
35
35
  ・實時型 Short/總結型 Longer
36
36
  INFO_MESSAGE_TEXT
37
37
 
38
- register_prefix('CC\(\d+\)', 'CC', 'CBR\(\d+,\d+\)', 'FAR\(\d+\)', 'FAR')
38
+ register_prefix('CC', 'CBR', 'FAR')
39
39
 
40
40
  def initialize(command)
41
41
  super(command)
@@ -32,7 +32,7 @@ module BCDice
32
32
  예)FAR(25,70,98) FAR(50,80,98,-1)
33
33
  INFO_MESSAGE_TEXT
34
34
 
35
- register_prefix('CC\(\d+\)', 'CC', 'CBR\(\d+,\d+\)', 'FAR\(\d+\)', 'FAR')
35
+ register_prefix('CC', 'CBR', 'FAR')
36
36
 
37
37
  def initialize(command)
38
38
  super(command)
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bcdice/game_system/Cthulhu"
4
+
5
+ module BCDice
6
+ module GameSystem
7
+ class Cthulhu_SimplifiedChinese < Cthulhu
8
+ # ゲームシステムの識別子
9
+ ID = 'Cthulhu:SimplifiedChinese'
10
+
11
+ # ゲームシステム名
12
+ NAME = '克苏鲁的呼唤 第六版'
13
+
14
+ # ゲームシステム名の読みがな
15
+ SORT_KEY = '国際化:Simplified Chinese:克苏鲁的呼唤 第六版'
16
+
17
+ # ダイスボットの使い方
18
+ HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
19
+ c=大成功值 / f=大失败值 / s=极难成功
20
+
21
+ 1d100<=n c・f・s全部关闭(只进行数值比较判定)
22
+
23
+ ・带cfs判定的判定指令
24
+
25
+ CC 掷1d100骰 c=1、f=100
26
+ CCB 同上,c=5、f=96
27
+
28
+ 例:CC<=80 (以80技能値进行行为判定。并以1%的标准使用cf的值)
29
+ 例:CCB<=55 (以55技能値进行行为判定。并以5%的标准使用cf的值)
30
+
31
+ ・关于组合骰
32
+
33
+ CBR(x,y) c=1、f=100
34
+ CBRB(x,y) c=5、f=96
35
+
36
+ ・关于对抗骰
37
+ RES(x-y) c=1、f=100
38
+ RESB(x-y) c=5、f=96
39
+
40
+ ※故障值判定
41
+
42
+ ・CC(x) c=1、f=100
43
+ x=故障值。骰点在x以上并且发生大失败时,会和大失败一起显示(文本为「大失败&故障」)
44
+ 没有发生大失败时,与成功或失败无关,文斗都会显示为「故障」(不显示成功或失败的情况下进行覆盖显示)
45
+
46
+ ・CCB(x) c=5、f=96
47
+ 同上
48
+
49
+ INFO_MESSAGE_TEXT
50
+
51
+ register_prefix_from_super_class()
52
+
53
+ def initialize(command)
54
+ super(command)
55
+
56
+ @locale = :zh_hans
57
+ end
58
+ end
59
+ end
60
+ end
@@ -43,17 +43,6 @@ module BCDice
43
43
  return string
44
44
  end
45
45
 
46
- # ゲーム別成功度判定(nD6)
47
- def check_nD6(total, _dice_total, _dice_list, cmp_op, target)
48
- if cmp_op != :>= || target == "?"
49
- ''
50
- elsif total >= target
51
- " > 成功"
52
- else
53
- " > 失敗"
54
- end
55
- end
56
-
57
46
  def check_roll(string)
58
47
  string = replace_text(string)
59
48
  return nil unless (m = /(^|\s)S?(3[rR]6([+\-\d]+)?(\[(\d+),(\d+)\])(([>=]+)(\d+))?)(\s|$)/i.match(string))
@@ -51,18 +51,19 @@ module BCDice
51
51
  end
52
52
 
53
53
  # ゲーム別成功度判定(2D6)
54
- def check_2D6(total, dice_total, _dice_list, cmp_op, target)
55
- return '' if target == '?'
56
- return '' unless cmp_op == :>=
54
+ def result_2d6(total, dice_total, _dice_list, cmp_op, target)
55
+ return nil unless cmp_op == :>=
57
56
 
58
57
  if dice_total <= 2
59
- "ファンブル(判定失敗。失敗表(FT)を追加で1回振る)"
58
+ Result.fumble("ファンブル(判定失敗。失敗表(FT)を追加で1回振る)")
60
59
  elsif dice_total >= 12
61
- "スペシャル(判定成功。大成功表(GJT)を1回使用可能)"
60
+ Result.critical("スペシャル(判定成功。大成功表(GJT)を1回使用可能)")
61
+ elsif target == "?"
62
+ Result.nothing
62
63
  elsif total >= target
63
- "成功"
64
+ Result.success("成功")
64
65
  else
65
- "失敗"
66
+ Result.failure("失敗")
66
67
  end
67
68
  end
68
69
 
@@ -33,8 +33,8 @@ module BCDice
33
33
  INFO_MESSAGE_TEXT
34
34
 
35
35
  register_prefix(
36
- 'DLH\\d+([\\+\\-]\\d+)*',
37
- 'DC(L|S|C)\d+',
36
+ 'DLH',
37
+ 'DC[LSC]',
38
38
  'RNC[JO]',
39
39
  'HNC'
40
40
  )
@@ -71,10 +71,11 @@ module BCDice
71
71
  "行為判定(成功率:#{success_rate}%)",
72
72
  "1D100[#{dice10},#{dice01}]=#{roll_result_text}",
73
73
  roll_result_text.to_s,
74
- result
74
+ result.text
75
75
  ]
76
76
 
77
- return sequence.join(" > ")
77
+ result.text = sequence.join(" > ")
78
+ result
78
79
  end
79
80
 
80
81
  SUCCESS_STR = "成功"
@@ -84,19 +85,19 @@ module BCDice
84
85
 
85
86
  def action_result(total, tens, ones, success_rate)
86
87
  if total == 100 || success_rate <= 0
87
- FUMBLE_STR
88
+ Result.fumble(FUMBLE_STR)
88
89
  elsif total <= success_rate - 100
89
- CRITICAL_STR
90
+ Result.critical(CRITICAL_STR)
90
91
  elsif tens == ones
91
92
  if total <= success_rate
92
- CRITICAL_STR
93
+ Result.critical(CRITICAL_STR)
93
94
  else
94
- FUMBLE_STR
95
+ Result.fumble(FUMBLE_STR)
95
96
  end
96
97
  elsif total <= success_rate
97
- SUCCESS_STR
98
+ Result.success(SUCCESS_STR)
98
99
  else
99
- FAILURE_STR
100
+ Result.failure(FAILURE_STR)
100
101
  end
101
102
  end
102
103
 
@@ -28,7 +28,7 @@ module BCDice
28
28
  ・D66ダイスあり
29
29
  INFO_MESSAGE_TEXT
30
30
 
31
- register_prefix('[NAMUC]?URGE\d+')
31
+ register_prefix('[NAMUC]?URGE')
32
32
 
33
33
  def initialize(command)
34
34
  super(command)
@@ -38,21 +38,13 @@ module BCDice
38
38
  end
39
39
 
40
40
  # ゲーム別成功度判定(nD6)
41
- def check_nD6(total, _dice_total, dice_list, cmp_op, target)
41
+ def result_nd6(_total, _dice_total, dice_list, _cmp_op, target)
42
42
  if dice_list.count(1) >= 2 # 1の目が2個以上ならファンブル
43
- return "致命的失敗"
43
+ Result.fumble("致命的失敗")
44
44
  elsif dice_list.count(6) >= 2 # 6の目が2個以上あったらクリティカル
45
- return "効果的成功"
45
+ Result.critical("効果的成功")
46
46
  elsif target == "?"
47
- return ''
48
- end
49
-
50
- if [:>=, :>].include?(cmp_op)
51
- if total.send(cmp_op, target)
52
- " > 成功"
53
- else
54
- " > 失敗"
55
- end
47
+ Result.nothing
56
48
  end
57
49
  end
58
50
 
@@ -100,7 +100,7 @@ module BCDice
100
100
  )
101
101
  }.freeze
102
102
 
103
- register_prefix('RC\d+', 'DDC', TABLES.keys)
103
+ register_prefix('RC', 'DDC', TABLES.keys)
104
104
 
105
105
  def initialize(command)
106
106
  super(command)
@@ -117,6 +117,8 @@ module BCDice
117
117
  achieved_value.to_s
118
118
  end
119
119
 
120
+ r.critical = value_groups.length > 1
121
+
120
122
  parts = [
121
123
  "(#{@expression})",
122
124
  "#{value_groups.join('+')}#{@modifier_str}",
@@ -239,7 +241,7 @@ module BCDice
239
241
  end
240
242
 
241
243
  # 疾風怒濤式の成功判定コマンドの正規表現マッチ情報からノードを作る
242
- # @param [MatchData] m 正規表現のマッチ情報
244
+ # @param command [String]
243
245
  # @return [DX]
244
246
  def parse_dx_shippu_doto(command)
245
247
  parser = Command::Parser.new(/\d+DX\d*/, round_type: round_type)
@@ -115,8 +115,9 @@ module BCDice
115
115
  dice_count = 4 if dice_count == 0
116
116
 
117
117
  dice_list = @randomizer.roll_barabara(dice_count, 6).sort
118
+ total = dice_list.sum()
118
119
 
119
- return "(#{command}) > #{dice_count}D6 > [ #{dice_list.join(', ')} ]"
120
+ return "(#{command}) > #{dice_count}D6 > [ #{dice_list.join(', ')} ] > #{total}"
120
121
  end
121
122
 
122
123
  def getReactionDiceCommandResult(command)
@@ -548,7 +549,7 @@ module BCDice
548
549
 
549
550
  TABLES = translate_tables(:ja_jp)
550
551
 
551
- register_prefix('DR', 'RT', 'HRT', 'CT\d+', TABLES.keys)
552
+ register_prefix('DR', 'RT', 'HRT', 'CT', TABLES.keys)
552
553
  end
553
554
  end
554
555
  end
@@ -16,34 +16,34 @@ module BCDice
16
16
  HELP_MESSAGE =
17
17
  '1D100<=m 方式の判定で成否、クリティカル・ファンブルを自動判定'
18
18
 
19
- def check_1D100(total, _dice_total, cmp_op, target)
20
- return '' if target == '?'
21
- return '' unless cmp_op == :<=
19
+ def result_1d100(total, _dice_total, cmp_op, target)
20
+ return nil if target == '?'
21
+ return nil unless cmp_op == :<=
22
22
 
23
- diceValue = total % 100 # 出目00は100ではなく00とする
24
- dice_ten_place = diceValue / 10
25
- dice_one_place = diceValue % 10
23
+ dice_value = total % 100 # 出目00は100ではなく00とする
24
+ dice_ten_place = dice_value / 10
25
+ dice_one_place = dice_value % 10
26
26
 
27
27
  if dice_ten_place == dice_one_place
28
- return '決定的失敗' if diceValue == 99
29
- return '00 > 決定的成功' if diceValue == 0
30
- return '決定的成功' if total <= target
28
+ return Result.fumble('決定的失敗') if dice_value == 99
29
+ return Result.critical('00 > 決定的成功') if dice_value == 0
30
+ return Result.critical('決定的成功') if total <= target
31
31
 
32
- return '決定的失敗'
32
+ return Result.fumble('決定的失敗')
33
33
  end
34
34
 
35
35
  diff_threshold = 30
36
36
 
37
37
  if total <= target
38
38
  if total >= diff_threshold
39
- 'エクセレント'
39
+ Result.success('エクセレント')
40
40
  else
41
- '成功'
41
+ Result.success('成功')
42
42
  end
43
43
  elsif (total - target) >= diff_threshold
44
- 'シビア'
44
+ Result.failure('シビア')
45
45
  else
46
- '失敗'
46
+ Result.failure('失敗')
47
47
  end
48
48
  end
49
49
  end
@@ -16,20 +16,24 @@ module BCDice
16
16
  HELP_MESSAGE = "貫通、クリティカル、ファンブルの自動判定を行います。\n"
17
17
 
18
18
  # ゲーム別成功度判定(1d100)
19
- def check_1D100(total, _dice_total, cmp_op, target)
20
- return '' if target == '?'
21
- return '' unless cmp_op == :<=
22
-
23
- # 1は常に貫通
24
- return " > 貫通" if total <= 1
25
- # 100は常に致命的失敗
26
- return " 致命的失敗" if total >= 100
27
-
28
- return " > 決定的成功" if total <= (target / 5 + 0.9)
29
- return " > 成功" if total <= target
30
- return " > 致命的失敗" if (total >= 99) && (target < 100)
31
-
32
- return " 失敗"
19
+ def result_1d100(total, _dice_total, cmp_op, target)
20
+ return nil unless cmp_op == :<=
21
+
22
+ if total <= 1
23
+ Result.critical("貫通") # 1は常に貫通
24
+ elsif total >= 100
25
+ Result.fumble("致命的失敗") # 100は常に致命的失敗
26
+ elsif target == '?'
27
+ Result.nothing
28
+ elsif total <= (target / 5.0).ceil
29
+ Result.critical("決定的成功")
30
+ elsif total <= target
31
+ Result.success("成功")
32
+ elsif (total >= 99) && (target < 100)
33
+ Result.fumble("致命的失敗")
34
+ else
35
+ Result.failure("失敗")
36
+ end
33
37
  end
34
38
  end
35
39
  end
@@ -1205,7 +1205,7 @@ module BCDice
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',
1208
- 'NJ\d+', 'BS\d+', TABLES.keys
1208
+ 'NJ', 'BS', TABLES.keys
1209
1209
  )
1210
1210
  end
1211
1211
  end
@@ -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', 'HLT', 'MFT', 'SFT', '2R10')
28
28
 
29
29
  def initialize(command)
30
30
  super(command)
@@ -45,18 +45,19 @@ module BCDice
45
45
  end
46
46
 
47
47
  # ゲーム別成功度判定(nD10)
48
- def check_nD10(total, dice_total, _dice_list, cmp_op, target)
49
- return '' if target == '?'
50
- return '' unless cmp_op == :>=
48
+ def result_nd10(total, dice_total, _dice_list, cmp_op, target)
49
+ return nil unless cmp_op == :>=
51
50
 
52
51
  if dice_total <= 2
53
- "ファンブル"
52
+ Result.fumble("ファンブル")
54
53
  elsif dice_total >= 20
55
- "クリティカル"
54
+ Result.critical("クリティカル")
55
+ elsif target == "?"
56
+ Result.nothing
56
57
  elsif total >= target
57
- "成功"
58
+ Result.success("成功")
58
59
  else
59
- "失敗"
60
+ Result.failure("失敗")
60
61
  end
61
62
  end
62
63
 
@@ -7,13 +7,13 @@ module BCDice
7
7
  ID = "Emoklore"
8
8
 
9
9
  # ゲームシステム名
10
- NAME = "エモクロア"
10
+ NAME = "エモクロアTRPG"
11
11
 
12
12
  # ゲームシステム名の読みがな
13
13
  #
14
14
  # 「ゲームシステム名の読みがなの設定方法」(docs/dicebot_sort_key.md)を参考にして
15
15
  # 設定してください
16
- SORT_KEY = "えもくろあ"
16
+ SORT_KEY = "えもくろあTRPG"
17
17
 
18
18
  # ダイスボットの使い方
19
19
  HELP_MESSAGE = <<~MESSAGETEXT
@@ -30,7 +30,7 @@ module BCDice
30
30
  MESSAGETEXT
31
31
 
32
32
  # ダイスボットで使用するコマンドを配列で列挙する
33
- register_prefix('\d*DM<=\d+', '(B|\d*)DA\d+')
33
+ register_prefix('\d*DM<=', '(B|\d*)DA')
34
34
 
35
35
  CRITICAL_VALUE = 1
36
36
  FUMBLE_VALUE = 10
@@ -53,7 +53,7 @@ module BCDice
53
53
  # ダイスロールの共通処理
54
54
  # @param [Integer] num_dice
55
55
  # @param [Integer] success_threshold
56
- # @return [String]
56
+ # @return [Result]
57
57
  def dice_roll(num_dice, success_threshold)
58
58
  # ダイスを振った結果を配列として取得
59
59
  values = @randomizer.roll_barabara(num_dice, 10)
@@ -65,33 +65,35 @@ module BCDice
65
65
 
66
66
  # 成功値
67
67
  success_value = 2 * critical + success - fumble
68
+ result = compare_result(success_value)
68
69
 
69
- "#{values} > #{success_value} > #{result_text(success_value)}"
70
+ result.text = "#{values} > #{success_value} > #{result.text}"
71
+ return result
70
72
  end
71
73
 
72
74
  # @param [Integer] success
73
- # @return [String]
74
- def result_text(success)
75
+ # @return [Result]
76
+ def compare_result(success)
75
77
  if success < 0
76
- "ファンブル!"
78
+ Result.fumble("ファンブル!")
77
79
  elsif success == 0
78
- "失敗!"
80
+ Result.failure("失敗!")
79
81
  elsif success == 1
80
- "成功!"
82
+ Result.success("成功!")
81
83
  elsif success == 2
82
- "ダブル!"
84
+ Result.critical("ダブル!")
83
85
  elsif success == 3
84
- "トリプル!"
86
+ Result.critical("トリプル!")
85
87
  elsif success <= 9
86
- "ミラクル!"
88
+ Result.critical("ミラクル!")
87
89
  else
88
- "カタストロフ!"
90
+ Result.critical("カタストロフ!")
89
91
  end
90
92
  end
91
93
 
92
94
  # 技能判定
93
95
  # @param [String] command コマンド
94
- # @return [String, nil] コマンドの結果
96
+ # @return [Result, nil] コマンドの結果
95
97
  def roll_dm(command)
96
98
  m = /^(\d+)?DM<=(\d+)$/.match(command)
97
99
  unless m
@@ -105,14 +107,15 @@ module BCDice
105
107
  end
106
108
 
107
109
  # ダイスロール本体
108
- ret_str = dice_roll(num_dice, success_threshold)
110
+ result = dice_roll(num_dice, success_threshold)
109
111
 
110
- return "(#{num_dice}DM<=#{success_threshold}) > #{ret_str}"
112
+ result.text = "(#{num_dice}DM<=#{success_threshold}) > #{result.text}"
113
+ return result
111
114
  end
112
115
 
113
116
  # 取得技能判定
114
117
  # @param [String] command コマンド
115
- # @return [String, nil] コマンドの結果
118
+ # @return [Result, nil] コマンドの結果
116
119
  def roll_da(command)
117
120
  m = /^(B|\d+)?DA(\d+)(\+\d+)?$/.match(command)
118
121
  unless m
@@ -123,8 +126,10 @@ module BCDice
123
126
  num_dice = (m[1] == "B" ? 1 : (m[1]&.to_i || 1)) + bonus
124
127
  success_threshold = m[1].to_i + m[2].to_i
125
128
 
126
- ret_str = dice_roll(num_dice, success_threshold)
127
- "(#{command}) > (#{num_dice}DM<=#{success_threshold}) > #{ret_str}"
129
+ result = dice_roll(num_dice, success_threshold)
130
+
131
+ result.text = "(#{command}) > (#{num_dice}DM<=#{success_threshold}) > #{result.text}"
132
+ return result
128
133
  end
129
134
  end
130
135
  end