bcdice 3.15.0 → 3.17.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 (158) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +140 -0
  3. data/i18n/Airgetlamh/ja_jp.yml +5 -0
  4. data/i18n/Airgetlamh/ko_kr.yml +5 -0
  5. data/i18n/Alsetto/ja_jp.yml +5 -0
  6. data/i18n/Alsetto/ko_kr.yml +5 -0
  7. data/i18n/AnimaAnimus/ja_jp.yml +28 -0
  8. data/i18n/AnimaAnimus/ko_kr.yml +28 -0
  9. data/i18n/BlackJacket/ja_jp.yml +79 -0
  10. data/i18n/BlackJacket/ko_kr.yml +79 -0
  11. data/i18n/Bloodorium/ja_jp.yml +3 -0
  12. data/i18n/Bloodorium/ko_kr.yml +3 -0
  13. data/i18n/Cthulhu/ko_kr.yml +1 -1
  14. data/i18n/DoubleCross/ja_jp.yml +2 -2
  15. data/i18n/Dracurouge/ko_kr.yml +1284 -205
  16. data/i18n/Emoklore/ja_jp.yml +1 -0
  17. data/i18n/Emoklore/ko_kr.yml +8 -0
  18. data/i18n/FutariSousa/ja_jp.yml +70 -0
  19. data/i18n/FutariSousa/ko_kr.yml +157 -0
  20. data/i18n/HatsuneMiku/ja_jp.yml +579 -0
  21. data/i18n/HatsuneMiku/ko_kr.yml +579 -0
  22. data/i18n/Irisbane/ja_jp.yml +27 -0
  23. data/i18n/Irisbane/ko_kr.yml +27 -0
  24. data/i18n/JuinKansen/ja_jp.yml +168 -0
  25. data/i18n/JuinKansen/ko_kr.yml +168 -0
  26. data/i18n/KemonoNoMori/ja_jp.yml +229 -0
  27. data/i18n/KemonoNoMori/ko_kr.yml +229 -0
  28. data/i18n/KizunaBullet/ko_kr.yml +653 -0
  29. data/i18n/MagicPunk/ja_jp.yml +5 -0
  30. data/i18n/MagicPunk/ko_kr.yml +5 -0
  31. data/i18n/MorkBorg/ja_jp.yml +34 -0
  32. data/i18n/MorkBorg/ko_kr.yml +34 -0
  33. data/i18n/Nechronica/ko_kr.yml +43 -0
  34. data/i18n/NegikureNegimaki/ja_jp.yml +6 -0
  35. data/i18n/NegikureNegimaki/ko_kr.yml +6 -0
  36. data/i18n/Nuekagami/ja_jp.yml +219 -0
  37. data/i18n/Nuekagami/ko_kr.yml +219 -0
  38. data/i18n/Revulture/ja_jp.yml +8 -0
  39. data/i18n/Revulture/ko_kr.yml +8 -0
  40. data/i18n/SRS/ja_jp.yml +4 -0
  41. data/i18n/SRS/ko_kr.yml +4 -0
  42. data/i18n/ShinobiGami/ja_jp.yml +879 -0
  43. data/i18n/ShinobiGami/ko_kr.yml +876 -0
  44. data/i18n/SkynautsBouken/ja_jp.yml +28 -28
  45. data/i18n/StarryDolls/ja_jp.yml +456 -0
  46. data/i18n/StarryDolls/ko_kr.yml +456 -0
  47. data/i18n/StratoShout/ja_jp.yml +8 -8
  48. data/i18n/SwordWorld2_5/ja_jp.yml +48 -0
  49. data/i18n/Ventangle/ja_jp.yml +4 -0
  50. data/i18n/Ventangle/ko_kr.yml +4 -0
  51. data/i18n/YearZeroEngine/ja_jp.yml +12 -0
  52. data/i18n/YearZeroEngine/ko_kr.yml +12 -0
  53. data/i18n/ZombiLine/ja_jp.yml +27 -0
  54. data/i18n/ZombiLine/ko_kr.yml +27 -0
  55. data/i18n/ko_kr.yml +2 -0
  56. data/i18n/zh_hant.yml +2 -2
  57. data/lib/bcdice/dice_table/d66_left_range_table.rb +21 -0
  58. data/lib/bcdice/game_system/Aionia.rb +68 -19
  59. data/lib/bcdice/game_system/Airgetlamh.rb +64 -41
  60. data/lib/bcdice/game_system/Airgetlamh_Korean.rb +53 -0
  61. data/lib/bcdice/game_system/Alsetto.rb +63 -50
  62. data/lib/bcdice/game_system/Alsetto_Korean.rb +51 -0
  63. data/lib/bcdice/game_system/AnimaAnimus.rb +15 -32
  64. data/lib/bcdice/game_system/AnimaAnimus_Korean.rb +39 -0
  65. data/lib/bcdice/game_system/BlackJacket.rb +57 -113
  66. data/lib/bcdice/game_system/BlackJacket_Korean.rb +8 -206
  67. data/lib/bcdice/game_system/Bloodorium.rb +1 -1
  68. data/lib/bcdice/game_system/Bloodorium_Korean.rb +34 -0
  69. data/lib/bcdice/game_system/ChroniclesOfDarkness2e.rb +163 -0
  70. data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +471 -300
  71. data/lib/bcdice/game_system/DeadlineHeroes_Korean.rb +273 -0
  72. data/lib/bcdice/game_system/Dracurouge_Korean.rb +25 -19
  73. data/lib/bcdice/game_system/DungeonsAndDragons5.rb +106 -73
  74. data/lib/bcdice/game_system/DungeonsAndDragons5_Korean.rb +53 -0
  75. data/lib/bcdice/game_system/DungeonsAndDragons_Korean.rb +61 -0
  76. data/lib/bcdice/game_system/EdgeFlippers.rb +315 -0
  77. data/lib/bcdice/game_system/Emoklore.rb +34 -9
  78. data/lib/bcdice/game_system/Emoklore_Korean.rb +50 -0
  79. data/lib/bcdice/game_system/FateCoreSystem.rb +10 -6
  80. data/lib/bcdice/game_system/FullMetalPanic_Korean.rb +28 -0
  81. data/lib/bcdice/game_system/FutariSousa.rb +37 -12
  82. data/lib/bcdice/game_system/FutariSousa_Korean.rb +25 -8
  83. data/lib/bcdice/game_system/GaiaCare.rb +40 -0
  84. data/lib/bcdice/game_system/Garactier.rb +1 -1
  85. data/lib/bcdice/game_system/GardenOrder.rb +2 -2
  86. data/lib/bcdice/game_system/GardenOrderReEdit.rb +849 -0
  87. data/lib/bcdice/game_system/GardenOrder_Korean.rb +839 -0
  88. data/lib/bcdice/game_system/HatsuneMiku.rb +51 -605
  89. data/lib/bcdice/game_system/HatsuneMiku_Korean.rb +56 -0
  90. data/lib/bcdice/game_system/HunterTheReckoning5th.rb +15 -11
  91. data/lib/bcdice/game_system/Irisbane.rb +17 -30
  92. data/lib/bcdice/game_system/Irisbane_Korean.rb +52 -0
  93. data/lib/bcdice/game_system/JuinKansen.rb +41 -208
  94. data/lib/bcdice/game_system/JuinKansen_Korean.rb +46 -0
  95. data/lib/bcdice/game_system/KemonoNoMori.rb +67 -276
  96. data/lib/bcdice/game_system/KemonoNoMori_Korean.rb +62 -0
  97. data/lib/bcdice/game_system/KinAriel.rb +117 -0
  98. data/lib/bcdice/game_system/KizunaBullet_Korean.rb +109 -0
  99. data/lib/bcdice/game_system/KutuluRevised.rb +94 -0
  100. data/lib/bcdice/game_system/LiverLabyrinth.rb +321 -0
  101. data/lib/bcdice/game_system/Lost.rb +89 -0
  102. data/lib/bcdice/game_system/MagicPunk.rb +85 -0
  103. data/lib/bcdice/game_system/MagicPunk_Korean.rb +39 -0
  104. data/lib/bcdice/game_system/MarvelHeroicRoleplaying.rb +144 -0
  105. data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +122 -2
  106. data/lib/bcdice/game_system/MetallicGuardian_Korean.rb +28 -0
  107. data/lib/bcdice/game_system/MorkBorg.rb +170 -0
  108. data/lib/bcdice/game_system/MorkBorg_Korean.rb +49 -0
  109. data/lib/bcdice/game_system/NanimonaiMura.rb +112 -0
  110. data/lib/bcdice/game_system/Nechronica_Korean.rb +6 -6
  111. data/lib/bcdice/game_system/NegikureNegimaki.rb +140 -0
  112. data/lib/bcdice/game_system/NegikureNegimaki_Korean.rb +48 -0
  113. data/lib/bcdice/game_system/NeonUnderRealm.rb +122 -0
  114. data/lib/bcdice/game_system/NinjaSlayer2.rb +170 -49
  115. data/lib/bcdice/game_system/Nuekagami.rb +19 -261
  116. data/lib/bcdice/game_system/Nuekagami_Korean.rb +43 -0
  117. data/lib/bcdice/game_system/ParanoiaPerfect.rb +74 -0
  118. data/lib/bcdice/game_system/PastFutureParadox.rb +2245 -55
  119. data/lib/bcdice/game_system/PreciousDays.rb +170 -0
  120. data/lib/bcdice/game_system/Revulture.rb +8 -5
  121. data/lib/bcdice/game_system/Revulture_Korean.rb +51 -0
  122. data/lib/bcdice/game_system/Ryutama.rb +46 -46
  123. data/lib/bcdice/game_system/SRS.rb +4 -4
  124. data/lib/bcdice/game_system/SRS_Korean.rb +67 -0
  125. data/lib/bcdice/game_system/ShinobiGami.rb +154 -1047
  126. data/lib/bcdice/game_system/ShinobiGami_Korean.rb +102 -0
  127. data/lib/bcdice/game_system/StarryDolls.rb +70 -508
  128. data/lib/bcdice/game_system/StarryDolls_Korean.rb +80 -0
  129. data/lib/bcdice/game_system/StratoShout.rb +1 -1
  130. data/lib/bcdice/game_system/SwordWorld.rb +28 -2
  131. data/lib/bcdice/game_system/SwordWorld2_0.rb +1 -1
  132. data/lib/bcdice/game_system/SwordWorld2_5.rb +67 -3
  133. data/lib/bcdice/game_system/TacticalExorcist.rb +222 -0
  134. data/lib/bcdice/game_system/TenkaRyouran_Korean.rb +30 -0
  135. data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +38 -33
  136. data/lib/bcdice/game_system/Ventangle.rb +8 -7
  137. data/lib/bcdice/game_system/Ventangle_Korean.rb +41 -0
  138. data/lib/bcdice/game_system/Warhammer4.rb +202 -6
  139. data/lib/bcdice/game_system/WerewolfTheApocalypse5th.rb +20 -15
  140. data/lib/bcdice/game_system/WorldEndScrapyard.rb +333 -0
  141. data/lib/bcdice/game_system/WorldsEndFrontline_Korean.rb +26 -0
  142. data/lib/bcdice/game_system/YearZeroEngine.rb +7 -7
  143. data/lib/bcdice/game_system/YearZeroEngine_Korean.rb +46 -0
  144. data/lib/bcdice/game_system/ZombiLine.rb +29 -36
  145. data/lib/bcdice/game_system/ZombiLine_Korean.rb +37 -0
  146. data/lib/bcdice/game_system/cthulhu7th_Korean/full_auto.rb +294 -0
  147. data/lib/bcdice/game_system/cthulhu7th_Korean/rollable.rb +43 -0
  148. data/lib/bcdice/game_system/meikyu_kingdom_basic/atoz_table.rb +1184 -0
  149. data/lib/bcdice/game_system/meikyu_kingdom_basic/randr236_table.rb +254 -0
  150. data/lib/bcdice/game_system/meikyu_kingdom_basic/table.rb +54 -0
  151. data/lib/bcdice/game_system/meikyu_kingdom_basic/tk_table.rb +755 -0
  152. data/lib/bcdice/game_system/sword_world/rating_options.rb +9 -0
  153. data/lib/bcdice/game_system/sword_world/rating_parsed.rb +19 -0
  154. data/lib/bcdice/game_system/sword_world/rating_parser.rb +229 -149
  155. data/lib/bcdice/game_system/sword_world/transcendent_test.rb +1 -0
  156. data/lib/bcdice/game_system.rb +47 -0
  157. data/lib/bcdice/version.rb +1 -1
  158. metadata +96 -2
@@ -0,0 +1,170 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class PreciousDays < Base
6
+ # ゲームシステムの識別子
7
+ ID = "PreciousDays"
8
+
9
+ # ゲームシステム名
10
+ NAME = "プレシャスデイズ"
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = "ふれしやすていす"
14
+
15
+ HELP_MESSAGE = <<~TEXT
16
+ ■ 判定 (nPD+m>=x)
17
+ nD6のダイスロールをして、その合計が x を超えていたら成功。
18
+ 出目6が2個以上あればクリティカル。出目が全て1ならファンブル。
19
+ n: ダイス数(省略時 2)
20
+ m: 修正値(省略可)
21
+ x: 目標値(省略可)
22
+ 例) PD, PD+5>=6, 3PD>=10
23
+
24
+ ■ 表
25
+ - 第一印象表 FIT
26
+ - プライズ表(物品) PIT
27
+ - プライズ表(自身の変化) PCT
28
+ - プライズ表(友人) PFT
29
+ - 師匠の呼び名表 TCT
30
+ TEXT
31
+
32
+ TABLES = {
33
+ "PIT" => DiceTable::D66RangeTable.new(
34
+ "プライズ表(物品)",
35
+ [
36
+ [11..13, "旅行カバン > 師匠との思い出のつまったカバン。"],
37
+ [14..16, "リボンタイ > 立ち寄った街で、師匠が選んでくれたお揃いのリボンタイ。"],
38
+ [21..23, "キレイな石 > 遺跡や川原などで見つけた、美しい天然石。"],
39
+ [24..26, "手編みのマフラー > 滞在先で手に入れた、感謝の気持ちのこもった編み物。"],
40
+ [31..33, "魔術書の写本 > たまたま手に入れた魔術書(写本)。"],
41
+ [34..36, "師匠の落とし物 > 師匠がうっかり落とした、小さなペンダントやアクセサリーなど。"],
42
+ [41..43, "不思議な木の実 > 森の散策中に発見した珍しい木の実。"],
43
+ [44..46, "錆びた懐中時計 > 古代遺跡などで見つかる懐中時計(故障している)。"],
44
+ [51..53, "手書きの楽譜 > 吟遊詩人の書いた、楽譜。"],
45
+ [54..56, "特注の薬草セット > ちょっとした傷や発熱に処方できる薬草のセット。"],
46
+ [61..63, "紋章入りのバッジ > そのシナリオで手に入れた、紋章のついたバッジ。"],
47
+ [64..66, "使い古した手袋 > 修行でボロボロになった、手放せない手袋。"],
48
+ ]
49
+ ),
50
+ "PCT" => DiceTable::D66RangeTable.new(
51
+ "プライズ表(自身の変化)",
52
+ [
53
+ [11..13, "背筋が伸びる > 師匠との旅や修行を通じ、姿勢が正され、 威厳が増した。"],
54
+ [14..16, "表情が大人びる > 困難を乗り越えた経験から、表情に落ち着きと聡明さが加わった。"],
55
+ [21..23, "ちいさな傷 > いつの間にかついていた、小さな傷跡。"],
56
+ [24..26, "集中力の向上 > 周囲に動じない集中力が身についた。"],
57
+ [31..33, "日焼けした肌 > 健康的に日焼けした。"],
58
+ [34..36, "魔力の流れ > 体内のマナの流れを意識できるようになり、魔術の適性が向上した。"],
59
+ [41..43, "強靭な足腰 > 長い修行の旅を続けた結果、疲れにくい強靭な足腰になった。"],
60
+ [44..46, "握力の増強 > 物を握る力が強くなった。"],
61
+ [51..53, "優美な指先 > 繊細な詠唱や魔法薬の調合により、指先が優美になった。"],
62
+ [54..56, "良い香り > なにやら自分から良い香りが漂うになった。"],
63
+ [61..63, "早起き体質 > なにやら、自然と早起きできるようになった。"],
64
+ [64..66, "共感能力の成長 > 人々との交流を通じて、他者の感情を深く理解できるようになった。"],
65
+ ]
66
+ ),
67
+ "PFT" => DiceTable::D66RangeTable.new(
68
+ "プライズ表(友人)",
69
+ [
70
+ [11..13, "登場したNPC > そのシナリオで交流したNPC。"],
71
+ [14..16, "妖精 > 森や泉などで出会った、無害な妖精。"],
72
+ [21..23, "ライバル > 魔術師大会などで出会った同世代の魔術師。"],
73
+ [24..26, " 心優しい村人 > 旅の途中で親切にしてくれた村の住民。"],
74
+ [31..33, " 放浪の吟遊詩人 > PCの旅の物語を歌にしてくれることを約束した詩人。"],
75
+ [34..36, "旅の料理人 > 旅の道中で食料を分け合い、共に野営をした旅の料理人。"],
76
+ [41..43, "塔の受付嬢 > 魔術師協会の塔で、 出会った受付の担当者。"],
77
+ [44..46, "元・野盗 > 過去の過ちを悔い改めた元野盗の改心者。"],
78
+ [51..53, "動物 > PCと仲よくなった小さな動物。"],
79
+ [54..56, "貴族 > PCと仲よくなった小さな動物。"],
80
+ [61..63, "古代語の先生 > 図書館などで古代語の知識を教えてくれた、年上の学者。"],
81
+ [64..66, "年下の仲間 > PCを慕ってくれるようになった年下の魔術師見習い。"],
82
+ ]
83
+ ),
84
+ "FIT" => DiceTable::D66RangeTable.new(
85
+ "第一印象表",
86
+ [
87
+ [11..12, "神秘的 > 現実離れした、夢の中にいるような神秘的な雰囲気をまとっている。"],
88
+ [13..14, "変わっている > 一般的な魔術師のイメージとはかけ離れた、風変わりな人のような気がする。"],
89
+ [15..16, "優しい > その表情や声に穏やかさや優しさを感じた。"],
90
+ [21..22, "恐ろしい > 底知れぬ恐怖を感じた。見た目ではなく魔術師として底知れなさを感じる。"],
91
+ [23..24, "完璧 > 一切の隙が無く、完璧な魔術師に見えた。"],
92
+ [25..26, "孤独 > 目の前にいるというのに、まるで遠方にいるかのような距離を感じた。"],
93
+ [31..32, "美しい > その姿やたたずまいに、息をのむほどの美しさを感じた。"],
94
+ [33..34, "疲れている > まるで何度も繰り返し生を受けているかのような疲労を感じた。"],
95
+ [35..36, "天才 > ひと目で魔術師としての才能の違いが分かるのだと、初めて知った。"],
96
+ [41..42, "厳格 > 怖そうというのとは違う、厳しく真面目そうな人のように思えた。"],
97
+ [43..44, "謎めいている > ミステリアスな印象を与える、不思議な人だった。"],
98
+ [45..46, "暖かい > 不思議な温もりを感じる、見た人を安心させる人だった。"],
99
+ [51..52, "憧れる > ひと目見てこの人のようになりたい、なるんだという気持ちにになった。"],
100
+ [53..54, "印象が無い > 不思議と見た目も立ち居振る舞いも印象に残らない人だった。"],
101
+ [55..56, "隠している > 何かを隠している。そんな不思議な印象を感じる人だった。"],
102
+ [61..62, "頼りない > 一見すると、大丈夫かなという印象を与える人だった。"],
103
+ [63..64, "年齢不詳 > 若くも老人のようにも見える。見た目で年齢を推し量れない人だった。"],
104
+ [65..66, "普通の人 > 平凡というか、特別な印象を与えない、不思議な人だった。"],
105
+ ]
106
+ ),
107
+ "TCT" => DiceTable::Table.new(
108
+ "師匠の呼び名表",
109
+ "1D6",
110
+ [
111
+ "師匠",
112
+ "先生",
113
+ "マスター",
114
+ "親方",
115
+ "ボス",
116
+ "コーチ",
117
+ ]
118
+ ),
119
+
120
+ }.freeze
121
+
122
+ register_prefix('\d*PD', TABLES.keys)
123
+
124
+ def eval_game_system_specific_command(command)
125
+ return roll_pd(command) || roll_tables(command, TABLES)
126
+ end
127
+
128
+ private
129
+
130
+ def roll_pd(command)
131
+ parser = Command::Parser.new("PD", round_type: round_type)
132
+ .enable_prefix_number
133
+ .restrict_cmp_op_to(:>=, nil)
134
+ cmd = parser.parse(command)
135
+ return nil unless cmd
136
+
137
+ times = cmd.prefix_number
138
+ times ||= 2
139
+ return nil if times <= 0
140
+
141
+ dice_list = @randomizer.roll_barabara(times, 6).sort.reverse
142
+ total = dice_list.sum + cmd.modify_number
143
+
144
+ result =
145
+ if dice_list.count(6) >= 2
146
+ Result.critical("クリティカル")
147
+ elsif dice_list.count(1) == times
148
+ Result.fumble("ファンブル")
149
+ elsif cmd.cmp_op.nil?
150
+ Result.new
151
+ elsif total >= cmd.target_number
152
+ Result.success("成功")
153
+ else
154
+ Result.failure("失敗")
155
+ end
156
+
157
+ sequence = [
158
+ "(#{command})",
159
+ "#{dice_list.sum}[#{dice_list.join(',')}]#{Format.modifier(cmd.modify_number)}",
160
+ total,
161
+ result.text
162
+ ].compact.join(" > ")
163
+
164
+ result.text = sequence
165
+
166
+ return result
167
+ end
168
+ end
169
+ end
170
+ end
@@ -1,5 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "bcdice/base"
4
+ require "bcdice/format"
5
+
3
6
  module BCDice
4
7
  module GameSystem
5
8
  class Revulture < Base
@@ -56,9 +59,9 @@ module BCDice
56
59
  command = make_command_text(dice_count, border, additional_damage_rules)
57
60
 
58
61
  if dice_count <= 0
59
- return "#{command} > ダイス数が 0 です"
62
+ return "#{command} > #{translate('Revulture.error.no_dice')}"
60
63
  elsif border.nil? && additional_damage_rules
61
- return "#{command} > 目標値が指定されていないため、追加ダメージを算出できません"
64
+ return "#{command} > #{translate('Revulture.error.no_border')}"
62
65
  end
63
66
 
64
67
  dices = @randomizer.roll_barabara(dice_count, 6).sort
@@ -70,9 +73,9 @@ module BCDice
70
73
  message_elements = []
71
74
  message_elements << command
72
75
  message_elements << dices.join(',')
73
- message_elements << "クリティカル #{critical_hit_count}" if critical_hit_count > 0
74
- message_elements << "ヒット数 #{hit_count}" if hit_count
75
- message_elements << "ダメージ #{damage}" if damage
76
+ message_elements << translate("Revulture.critical", count: critical_hit_count) if critical_hit_count > 0
77
+ message_elements << translate("Revulture.hit_count", count: hit_count) if hit_count
78
+ message_elements << translate("Revulture.damage", count: damage) if damage
76
79
 
77
80
  Result.new(message_elements.join(' > ')).tap do |r|
78
81
  r.condition = hit_count > 0 if hit_count
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bcdice/game_system/Revulture"
4
+
5
+ module BCDice
6
+ module GameSystem
7
+ class Revulture_Korean < Revulture
8
+ # ゲームシステムの識別子
9
+ ID = 'Revulture:Korean'
10
+
11
+ # ゲームシステム名
12
+ NAME = '광쇄의 리벌처'
13
+
14
+ # ゲームシステム名の読みがな
15
+ SORT_KEY = '国際化:Korean:광쇄의 리벌처'
16
+
17
+ # ダイスボットの使い方
18
+ HELP_MESSAGE = <<~HELP
19
+ ■공격 판정( xAT, xATK, xATTACK )
20
+ x: 주사위 수(덧셈 + 과 나눗셈 / 사용 가능)
21
+ 예시) 3AT, 4ATK, 5+6ATTACK, 15/2AT
22
+
23
+ □공격 판정 목표값 포함( xAT<=y, xATK<=y, xATTACK<=y )
24
+ x: 주사위 수(덧셈 + 과 나눗셈 / 사용 가능)
25
+ y: 목표값( 1 이상 6 이하. 덧셈 + 사용 가능)
26
+ 예시) 3AT<=4, 3AT<=2+1
27
+
28
+ □공격 판정 목표값&추가 대미지 포함( xAT<=y[>=a:+b], xATK<=y[>=a:+b], xATTACK<=y[z] )
29
+ x: 주사위 수(덧셈 + 과 나눗셈 / 사용 가능)
30
+ y: 목표값( 1 이상 6 이하. 덧셈 + 사용 가능)
31
+ z: 추가 대미지 규칙(자세한 내용은 아래 참고)(※여러 개를 동시에 사용 가능)
32
+
33
+ ▽추가 대미지 규칙 [a:+b]
34
+ a: 히트 수가 a 라면
35
+  =a (히트 수가 a와 동일)
36
+  >=a (히트 수가 a 이상)
37
+ b: 대미지를 b 점 추가
38
+
39
+ 예시) 3AT<=4[>=2:+3] #룰 북 p056「그레인그랜트 AR(グレングラントAR)」
40
+ 예시) 2AT<=4[=1:+5][>=2:+8] #룰 북 p067「파보르 드래곤 브레스(ファーボル・ドラゴンブレス)」
41
+ HELP
42
+
43
+ register_prefix_from_super_class()
44
+
45
+ def initialize(command)
46
+ super(command)
47
+ @locale = :ko_kr
48
+ end
49
+ end
50
+ end
51
+ end
@@ -25,7 +25,7 @@ module BCDice
25
25
 
26
26
  def initialize(command)
27
27
  super(command)
28
- @validDiceTypes = [20, 12, 10, 8, 6, 4, 2]
28
+ @valid_dice_types = [20, 12, 10, 8, 6, 4, 2]
29
29
  end
30
30
 
31
31
  def eval_game_system_specific_command(command)
@@ -39,84 +39,84 @@ module BCDice
39
39
 
40
40
  dice1 = Regexp.last_match(1).to_i
41
41
  dice2 = Regexp.last_match(3).to_i
42
- modifyString = Regexp.last_match(4)
42
+ modify_string = Regexp.last_match(4)
43
43
  difficulty = Regexp.last_match(6)
44
44
 
45
- dice1, dice2 = getDiceType(dice1, dice2)
45
+ dice1, dice2 = get_dice_type(dice1, dice2)
46
46
  if dice1 == 0
47
47
  return ''
48
48
  end
49
49
 
50
- modifyString ||= ''
51
- modify = ArithmeticEvaluator.eval(modifyString)
52
- difficulty = getDiffculty(difficulty)
50
+ modify_string ||= ''
51
+ modify = ArithmeticEvaluator.eval(modify_string)
52
+ difficulty = get_difficulty(difficulty)
53
53
 
54
- value1 = getRollValue(dice1)
55
- value2 = getRollValue(dice2)
54
+ value1 = get_roll_value(dice1)
55
+ value2 = get_roll_value(dice2)
56
56
  total = value1 + value2 + modify
57
57
 
58
- result = getResultText(value1, value2, dice1, dice2, difficulty, total)
58
+ result = get_result_text(value1, value2, dice1, dice2, difficulty, total)
59
59
  unless result.empty?
60
60
  result = " > #{result}"
61
61
  end
62
62
 
63
- value1Text = "#{value1}(#{dice1})"
64
- value2Text = (value2 == 0 ? "" : "+#{value2}(#{dice2})")
65
- modifyText = getModifyString(modify)
63
+ value1_text = "#{value1}(#{dice1})"
64
+ value2_text = (value2 == 0 ? "" : "+#{value2}(#{dice2})")
65
+ modify_text = get_modify_string(modify)
66
66
 
67
- baseText = getBaseText(dice1, dice2, modify, difficulty)
68
- output = "(#{baseText}) > #{value1Text}#{value2Text}#{modifyText} > #{total}#{result}"
67
+ base_text = get_base_text(dice1, dice2, modify, difficulty)
68
+ output = "(#{base_text}) > #{value1_text}#{value2_text}#{modify_text} > #{total}#{result}"
69
69
  return output
70
70
  end
71
71
 
72
- def getDiceType(dice1, dice2)
73
- debug('getDiceType begin')
72
+ def get_dice_type(dice1, dice2)
73
+ debug('get_dice_type begin')
74
74
 
75
75
  if dice2 != 0
76
- if isValidDiceOne(dice1)
76
+ if valid_dice_one?(dice1)
77
77
  return dice1, dice2
78
78
  else
79
79
  return 0, 0
80
80
  end
81
81
  end
82
82
 
83
- if isValidDice(dice1, dice2)
83
+ if valid_dice?(dice1, dice2)
84
84
  return dice1, dice2
85
85
  end
86
86
 
87
- diceBase = dice1
87
+ dice_base = dice1
88
88
 
89
- dice1 = diceBase / 10
90
- dice2 = diceBase % 10
89
+ dice1 = dice_base / 10
90
+ dice2 = dice_base % 10
91
91
 
92
- if isValidDice(dice1, dice2)
92
+ if valid_dice?(dice1, dice2)
93
93
  return dice1, dice2
94
94
  end
95
95
 
96
- dice1 = diceBase / 100
97
- dice2 = diceBase % 100
96
+ dice1 = dice_base / 100
97
+ dice2 = dice_base % 100
98
98
 
99
- if isValidDice(dice1, dice2)
99
+ if valid_dice?(dice1, dice2)
100
100
  return dice1, dice2
101
101
  end
102
102
 
103
- if isValidDiceOne(diceBase)
104
- return diceBase, 0
103
+ if valid_dice_one?(dice_base)
104
+ return dice_base, 0
105
105
  end
106
106
 
107
107
  return 0, 0
108
108
  end
109
109
 
110
- def isValidDice(dice1, dice2)
111
- return isValidDiceOne(dice1) &&
112
- isValidDiceOne(dice2)
110
+ def valid_dice?(dice1, dice2)
111
+ return valid_dice_one?(dice1) &&
112
+ valid_dice_one?(dice2)
113
113
  end
114
114
 
115
- def isValidDiceOne(dice)
116
- @validDiceTypes.include?(dice)
115
+ def valid_dice_one?(dice)
116
+ @valid_dice_types.include?(dice)
117
117
  end
118
118
 
119
- def getDiffculty(difficulty)
119
+ def get_difficulty(difficulty)
120
120
  unless difficulty.nil?
121
121
  difficulty = difficulty.to_i
122
122
  end
@@ -124,19 +124,19 @@ module BCDice
124
124
  return difficulty
125
125
  end
126
126
 
127
- def getRollValue(dice)
127
+ def get_roll_value(dice)
128
128
  return 0 if dice == 0
129
129
 
130
130
  value = @randomizer.roll_once(dice)
131
131
  return value
132
132
  end
133
133
 
134
- def getResultText(value1, value2, dice1, dice2, difficulty, total)
135
- if isFamble(value1, value2)
134
+ def get_result_text(value1, value2, dice1, dice2, difficulty, total)
135
+ if famble?(value1, value2)
136
136
  return "1ゾロ【1ゾロポイント+1】"
137
137
  end
138
138
 
139
- if isCritical(value1, value2, dice1, dice2)
139
+ if critical?(value1, value2, dice1, dice2)
140
140
  return "クリティカル成功"
141
141
  end
142
142
 
@@ -151,11 +151,11 @@ module BCDice
151
151
  return "失敗"
152
152
  end
153
153
 
154
- def isFamble(value1, value2)
154
+ def famble?(value1, value2)
155
155
  return (value1 == 1) && (value2 == 1)
156
156
  end
157
157
 
158
- def isCritical(value1, value2, dice1, dice2)
158
+ def critical?(value1, value2, dice1, dice2)
159
159
  return false if value2 == 0
160
160
 
161
161
  if (value1 == 6) && (value2 == 6)
@@ -169,23 +169,23 @@ module BCDice
169
169
  return false
170
170
  end
171
171
 
172
- def getBaseText(dice1, dice2, modify, difficulty)
173
- baseText = "R#{dice1}"
172
+ def get_base_text(dice1, dice2, modify, difficulty)
173
+ base_text = "R#{dice1}"
174
174
 
175
175
  if dice2 != 0
176
- baseText += ",#{dice2}"
176
+ base_text += ",#{dice2}"
177
177
  end
178
178
 
179
- baseText += getModifyString(modify)
179
+ base_text += get_modify_string(modify)
180
180
 
181
181
  unless difficulty.nil?
182
- baseText += ">=#{difficulty}"
182
+ base_text += ">=#{difficulty}"
183
183
  end
184
184
 
185
- return baseText
185
+ return base_text
186
186
  end
187
187
 
188
- def getModifyString(modify)
188
+ def get_modify_string(modify)
189
189
  if modify > 0
190
190
  return "+" + modify.to_s
191
191
  elsif modify < 0
@@ -280,15 +280,15 @@ module BCDice
280
280
  # @return [Result] 比較結果
281
281
  def compare_result(srs_roll, sum, modified_sum)
282
282
  if sum >= srs_roll.critical_value
283
- Result.critical("自動成功")
283
+ Result.critical(translate("SRS.auto_success"))
284
284
  elsif sum <= srs_roll.fumble_value
285
- Result.fumble("自動失敗")
285
+ Result.fumble(translate("SRS.auto_failure"))
286
286
  elsif srs_roll.target_value.nil?
287
287
  Result.new
288
288
  elsif modified_sum >= srs_roll.target_value
289
- Result.success("成功")
289
+ Result.success(translate("success"))
290
290
  else
291
- Result.failure("失敗")
291
+ Result.failure(translate("failure"))
292
292
  end
293
293
  end
294
294
  end
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bcdice/arithmetic_evaluator'
4
+ require 'bcdice/game_system/SRS'
5
+
6
+ module BCDice
7
+ module GameSystem
8
+ class SRS_Korean < SRS
9
+ # ゲームシステムの識別子
10
+ ID = 'SRS:Korean'
11
+
12
+ # ゲームシステム名
13
+ NAME = '스탠다드 RPG 시스템(SRS)'
14
+
15
+ # ゲームシステム名の読みがな
16
+ SORT_KEY = '国際化:Korean:스탠다드 RPG 시스템(SRS)'
17
+
18
+ HELP_MESSAGE_1 = <<~HELP_MESSAGE
19
+ ・판정
20
+  ・일반판정: 2D6+m@c#f>=t 또는 2D6+m>=t[c,f]
21
+   수정치 m, 목표치 t, 크리티컬치 c, 펌블치 f로 판정합니다.
22
+   수정치, 크리티컬치, 펌블치는 생략 가능합니다([]째로 생략 가능, @c・#f 지정 순서는 상관없음).
23
+   크리티컬치, 펌블치의 기본값은 각각 12, 2입니다.
24
+   자동성공, 자동실패, 성공, 실패를 자동 표시합니다.
25
+
26
+   예) 2d6>=10     수정치 0, 목표치 10으로 판정
27
+   예) 2d6+2>=10    수정치 +2, 목표치 10으로 판정
28
+   예) 2d6+2>=10[11]  ↑를 크리티컬치 11로 판정
29
+   예) 2d6+2@11>=10   ↑를 크리티컬치 11로 판정
30
+   예) 2d6+2>=10[12,4] ↑를 크리티컬치 12, 펌블치 4로 판정
31
+   예) 2d6+2@12#4>=10  ↑를 크리티컬치 12, 펌블치 4로 판정
32
+   예) 2d6+2>=10[,4]  ↑를 크리티컬치 12, 펌블치 4로 판정 (크리티컬치 생략)
33
+   예) 2d6+2#4>=10   ↑를 크리티컬치 12, 펌블치 4로 판정 (크리티컬치 생략)
34
+ HELP_MESSAGE
35
+
36
+ HELP_MESSAGE_2 = <<~HELP_MESSAGE
37
+  ・크리티컬 및 펌블만 판정: 2D6+m@c#f 또는 2D6+m[c,f]
38
+   목표치를 지정하지 않고, 수정치 m, 크리티컬치 c, 펌블치 f로 판정합니다.
39
+   수정치, 크리티컬치, 펌블치는 생략 가능합니다([]는 생략 불가, @c・#f 지정 순서는 상관없음).
40
+   자동성공, 자동실패를 자동 표시합니다.
41
+
42
+   예) 2d6[]    수정치 0, 크리티컬치 12, 펌블치 2로 판정
43
+   예) 2d6+2[11]  수정치 +2, 크리티컬치 11, 펌블치 2로 판정
44
+   예) 2d6+2@11   수정치 +2, 크리티컬치 11, 펌블치 2로 판정
45
+   예) 2d6+2[12,4] 수정치 +2, 크리티컬치 12, 펌블치 4로 판정
46
+   예) 2d6+2@12#4  수정치 +2, 크리티컬치 12, 펌블치 4로 판정
47
+ HELP_MESSAGE
48
+
49
+ HELP_MESSAGE_3 = <<~HELP_MESSAGE
50
+ ・D66 주사위 있음 (순서 교체 없음)
51
+ HELP_MESSAGE
52
+
53
+ # 既定のダイスボット説明文
54
+ DEFAULT_HELP_MESSAGE = "#{HELP_MESSAGE_1}\n#{HELP_MESSAGE_2}\n#{HELP_MESSAGE_3}"
55
+
56
+ HELP_MESSAGE = DEFAULT_HELP_MESSAGE
57
+
58
+ register_prefix_from_super_class()
59
+
60
+ # ダイスボットを初期化
61
+ def initialize(command)
62
+ super(command)
63
+ @locale = :ko_kr
64
+ end
65
+ end
66
+ end
67
+ end