bcdice 3.2.0 → 3.3.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +27 -3
- data/README.md +1 -1
- data/i18n/MagicaLogia/zh_hans.yml +564 -0
- data/i18n/StellarKnights/ja_jp.yml +2 -0
- data/i18n/StellarKnights/ko_kr.yml +498 -0
- data/i18n/zh_hans.yml +7 -0
- data/lib/bcdice/command/parsed.rb +11 -3
- data/lib/bcdice/command/parser.rb +179 -100
- data/lib/bcdice/common_command/barabara_dice/node.rb +2 -2
- data/lib/bcdice/common_command/barabara_dice/result.rb +6 -0
- data/lib/bcdice/game_system.rb +3 -0
- data/lib/bcdice/game_system/Amadeus.rb +110 -93
- data/lib/bcdice/game_system/AnimaAnimus.rb +15 -8
- data/lib/bcdice/game_system/BattleTech.rb +109 -28
- data/lib/bcdice/game_system/BeastBindTrinity.rb +28 -12
- data/lib/bcdice/game_system/BlindMythos.rb +38 -37
- data/lib/bcdice/game_system/CodeLayerd.rb +39 -39
- data/lib/bcdice/game_system/ColossalHunter.rb +34 -47
- data/lib/bcdice/game_system/DeadlineHeroes.rb +9 -8
- data/lib/bcdice/game_system/DoubleCross.rb +2 -0
- data/lib/bcdice/game_system/Emoklore.rb +22 -17
- data/lib/bcdice/game_system/FutariSousa.rb +12 -10
- data/lib/bcdice/game_system/GardenOrder.rb +11 -6
- data/lib/bcdice/game_system/KemonoNoMori.rb +25 -38
- data/lib/bcdice/game_system/KurayamiCrying.rb +86 -0
- data/lib/bcdice/game_system/LiveraDoll.rb +254 -304
- data/lib/bcdice/game_system/LogHorizon.rb +10 -7
- data/lib/bcdice/game_system/MagicaLogia_SimplifiedChinese.rb +66 -0
- data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +2 -1
- data/lib/bcdice/game_system/Nechronica.rb +57 -91
- data/lib/bcdice/game_system/NinjaSlayer.rb +2 -3
- data/lib/bcdice/game_system/SRS.rb +17 -16
- data/lib/bcdice/game_system/SamsaraBallad.rb +38 -11
- data/lib/bcdice/game_system/Satasupe.rb +31 -31
- data/lib/bcdice/game_system/ScreamHighSchool.rb +3 -3
- data/lib/bcdice/game_system/Skynauts.rb +101 -140
- data/lib/bcdice/game_system/StarryDolls.rb +318 -0
- data/lib/bcdice/game_system/SteamPunkers.rb +11 -6
- data/lib/bcdice/game_system/StellarKnights.rb +28 -12
- data/lib/bcdice/game_system/StellarKnights_Korean.rb +79 -0
- data/lib/bcdice/game_system/TokumeiTenkousei.rb +4 -3
- data/lib/bcdice/game_system/TrinitySeven.rb +275 -276
- data/lib/bcdice/game_system/Utakaze.rb +52 -47
- data/lib/bcdice/game_system/Yggdrasill.rb +1 -1
- data/lib/bcdice/game_system/ZettaiReido.rb +20 -25
- data/lib/bcdice/version.rb +1 -1
- metadata +8 -2
@@ -0,0 +1,318 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "bcdice/dice_table/chain_table"
|
4
|
+
require "bcdice/dice_table/sai_fic_skill_table"
|
5
|
+
require "bcdice/dice_table/table"
|
6
|
+
require "bcdice/format"
|
7
|
+
|
8
|
+
module BCDice
|
9
|
+
module GameSystem
|
10
|
+
class StarryDolls < Base
|
11
|
+
# ゲームシステムの識別子
|
12
|
+
ID = "StarryDolls"
|
13
|
+
|
14
|
+
# ゲームシステム名
|
15
|
+
NAME = "スタリィドール"
|
16
|
+
|
17
|
+
# ゲームシステム名の読みがな
|
18
|
+
SORT_KEY = "すたりいとおる"
|
19
|
+
|
20
|
+
# ダイスボットの使い方
|
21
|
+
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
|
22
|
+
・行為判定 nD6±m@s>=t
|
23
|
+
nD6の行為判定を行う。スペシャル/ファンブル/成功/失敗を判定。
|
24
|
+
n: ダイス数
|
25
|
+
m: 修正(省略可)
|
26
|
+
s: スペシャル値(省略時 12)
|
27
|
+
t: 目標値(?指定可)
|
28
|
+
・各種表
|
29
|
+
・ランダム特技決定表 RTTn (n:分野番号、省略可能)
|
30
|
+
1願望 2元素 3星使い 4動作 5召喚 6人間性
|
31
|
+
・ランダム分野表 RCT
|
32
|
+
・ランダム星座表 HOR
|
33
|
+
ランダム星座表A HORA/ランダム星座表B HORB
|
34
|
+
・主人関係表 MRT/関係属性表 RAT
|
35
|
+
・奇跡表 MIR
|
36
|
+
・戦果表 BRT
|
37
|
+
・事件表 TRO
|
38
|
+
・遭遇表 ENC
|
39
|
+
・致命傷表 FWT
|
40
|
+
・カタストロフ表 CAT
|
41
|
+
・回想表
|
42
|
+
〈魔術師の庭〉回想表 JDSRT/〈セブンス・ヘブン〉回想表 SHRT
|
43
|
+
/〈祝福の鐘〉回想表 BCRT/〈オメガ探偵社〉回想表 ODRT
|
44
|
+
・D66ダイスあり
|
45
|
+
INFO_MESSAGE_TEXT
|
46
|
+
|
47
|
+
def initialize(command)
|
48
|
+
super(command)
|
49
|
+
|
50
|
+
@d66_sort_type = D66SortType::ASC
|
51
|
+
end
|
52
|
+
|
53
|
+
def eval_game_system_specific_command(command)
|
54
|
+
action_roll(command) ||
|
55
|
+
roll_tables(command, TABLES) ||
|
56
|
+
RTT.roll_command(@randomizer, command)
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
SPECIAL = "スペシャル(【星命力】を1D6点回復)"
|
62
|
+
FUMBLE = "ファンブル(ランダムなサインが【蝕】状態へ変化)"
|
63
|
+
|
64
|
+
RTT = DiceTable::SaiFicSkillTable.new(
|
65
|
+
[
|
66
|
+
["願望", ["創造", "研究", "守護", "絆", "*かに座", "夢", "*しし座", "自由", "恋愛", "脚光", "世界"]],
|
67
|
+
["元素", ["光", "雷", "*ふたご座", "水", "火", "風", "木", "氷", "*おとめ座", "土", "闇"]],
|
68
|
+
["星使い", ["*おうし座", "幸運", "幻影", "テレパシー", "予知夢", "星読み", "治癒", "天候", "変身", "時間停止", "*てんびん座"]],
|
69
|
+
["動作", ["*おひつじ座", "精密", "高速", "怪力", "隠密", "飛行", "言霊", "模倣", "軽業", "歌舞", "*さそり座"]],
|
70
|
+
["召喚", ["リボン", "照明具", "*うお座", "料理", "獣", "花", "乗り物", "書物", "*いて座", "武器", "財宝"]],
|
71
|
+
["人間性", ["勇気", "知恵", "熱意", "調和", "*みずがめ座", "愛情", "*やぎ座", "センス", "根気", "礼節", "理性"]],
|
72
|
+
]
|
73
|
+
)
|
74
|
+
|
75
|
+
def action_roll(command)
|
76
|
+
parser = Command::Parser.new("D6", round_type: round_type)
|
77
|
+
.has_prefix_number
|
78
|
+
.restrict_cmp_op_to(:>=)
|
79
|
+
.enable_critical
|
80
|
+
.enable_question_target
|
81
|
+
cmd = parser.parse(command)
|
82
|
+
return nil unless cmd
|
83
|
+
|
84
|
+
times = cmd.prefix_number
|
85
|
+
return nil if times < 1
|
86
|
+
|
87
|
+
fumble = 2
|
88
|
+
special = cmd.critical || 12
|
89
|
+
|
90
|
+
if special <= fumble
|
91
|
+
special = fumble + 1 # p.180
|
92
|
+
cmd.critical = special
|
93
|
+
end
|
94
|
+
|
95
|
+
dice_list = @randomizer.roll_barabara(times, 6)
|
96
|
+
dice_total = dice_list.sum()
|
97
|
+
total = dice_total + cmd.modify_number
|
98
|
+
|
99
|
+
result =
|
100
|
+
if dice_total <= fumble
|
101
|
+
Result.fumble(FUMBLE)
|
102
|
+
elsif dice_total >= special
|
103
|
+
Result.critical(SPECIAL)
|
104
|
+
elsif cmd.question_target?
|
105
|
+
Result.new
|
106
|
+
elsif total >= cmd.target_number
|
107
|
+
Result.success("成功")
|
108
|
+
else
|
109
|
+
Result.failure("失敗")
|
110
|
+
end
|
111
|
+
|
112
|
+
sequence = [
|
113
|
+
"(#{cmd.to_s(:after_modify_number)})",
|
114
|
+
"#{dice_total}[#{dice_list.join(',')}]#{Format.modifier(cmd.modify_number)}",
|
115
|
+
total,
|
116
|
+
result.text
|
117
|
+
].compact
|
118
|
+
|
119
|
+
result.text = sequence.join(" > ")
|
120
|
+
result
|
121
|
+
end
|
122
|
+
|
123
|
+
HOR_TABLE_A = DiceTable::Table.new(
|
124
|
+
"ランダム星座表A", # p.177
|
125
|
+
"1D6",
|
126
|
+
[
|
127
|
+
"おひつじ座",
|
128
|
+
"おうし座",
|
129
|
+
"ふたご座",
|
130
|
+
"かに座",
|
131
|
+
"しし座",
|
132
|
+
"おとめ座",
|
133
|
+
]
|
134
|
+
)
|
135
|
+
|
136
|
+
HOR_TABLE_B = DiceTable::Table.new(
|
137
|
+
"ランダム星座表B", # p.177
|
138
|
+
"1D6",
|
139
|
+
[
|
140
|
+
"てんびん座",
|
141
|
+
"さそり座",
|
142
|
+
"いて座",
|
143
|
+
"やぎ座",
|
144
|
+
"みずがめ座",
|
145
|
+
"うお座",
|
146
|
+
]
|
147
|
+
)
|
148
|
+
|
149
|
+
TABLES = {
|
150
|
+
"HORA" => HOR_TABLE_A,
|
151
|
+
"HORB" => HOR_TABLE_B,
|
152
|
+
"HOR" => DiceTable::ChainTable.new(
|
153
|
+
"ランダム星座表", # p.177
|
154
|
+
"1D6",
|
155
|
+
[
|
156
|
+
HOR_TABLE_A,
|
157
|
+
HOR_TABLE_A,
|
158
|
+
HOR_TABLE_A,
|
159
|
+
HOR_TABLE_B,
|
160
|
+
HOR_TABLE_B,
|
161
|
+
HOR_TABLE_B,
|
162
|
+
]
|
163
|
+
),
|
164
|
+
"MRT" => DiceTable::Table.new(
|
165
|
+
"主人関係表", # p.186
|
166
|
+
"1D6",
|
167
|
+
[
|
168
|
+
"親",
|
169
|
+
"友人",
|
170
|
+
"恩師",
|
171
|
+
"相棒",
|
172
|
+
"上司",
|
173
|
+
"恋人",
|
174
|
+
]
|
175
|
+
),
|
176
|
+
"RAT" => DiceTable::Table.new(
|
177
|
+
"関係属性表", # p.186
|
178
|
+
"1D6",
|
179
|
+
[
|
180
|
+
"尊敬/優越感",
|
181
|
+
"理解/反抗",
|
182
|
+
"愉快/恐怖",
|
183
|
+
"友情/競争",
|
184
|
+
"恋心/不気味",
|
185
|
+
"庇護/劣等感",
|
186
|
+
]
|
187
|
+
),
|
188
|
+
"MIR" => DiceTable::Table.new(
|
189
|
+
"奇跡表", # p.177
|
190
|
+
"1D6",
|
191
|
+
[
|
192
|
+
"空から降る一筋の光が星人形の体を包み込み、不思議な力を与えてくれる。",
|
193
|
+
"守護星座に関連する人や動物が現れ、星人形に力を貸してくれる。",
|
194
|
+
"運命が不自然なまでに星人形の味方をし、すべてが上手く進んでいく。",
|
195
|
+
"星人形の必要とするものが空中から次々と現れる。",
|
196
|
+
"少しの間だけ〈劇場〉の住人が正気に戻り、一致団結して星人形に協力してくれる。",
|
197
|
+
"体中に星命力が溢れ出し、限界を超えた大規模な星術を扱えるようになる。",
|
198
|
+
]
|
199
|
+
),
|
200
|
+
"BRT" => DiceTable::Table.new(
|
201
|
+
"戦果表", # p.191
|
202
|
+
"1D6",
|
203
|
+
[
|
204
|
+
"所持しているアイテムから一つを選び、同じものをもう一つ獲得する。所持していない場合はもう一度戦果表を使用する。",
|
205
|
+
"時計を獲得する。",
|
206
|
+
"ロザリオを獲得する。",
|
207
|
+
"コンパスを獲得する。",
|
208
|
+
"星の欠片を獲得する。",
|
209
|
+
"自由なアイテムを一つ獲得する。",
|
210
|
+
]
|
211
|
+
),
|
212
|
+
"TRO" => DiceTable::Table.new(
|
213
|
+
"事件表", # p.193
|
214
|
+
"2D6",
|
215
|
+
[
|
216
|
+
"〈変晶体〉を手にした途端、人形兵の軍勢に見つかり追われることに……! なんとかして振り切ろう!",
|
217
|
+
"〈変晶体〉を乗せた物体が空を飛んでいる。接触する方法はないだろうか。",
|
218
|
+
"不気味な商人が現れた。価値あるものを差し出せば、〈変晶体〉と交換してくれるという。上手く交渉しよう。",
|
219
|
+
"〈変晶体〉の影響で理性を失った人々が大喧嘩をしている。これでは浄化するのも困難だ……仲間と協力して仲裁しよう。",
|
220
|
+
"〈変晶体〉は建物の中にあるようだが、警備が厳重だ。どうやって侵入しようか……。",
|
221
|
+
"罪のない人たちが〈変晶体〉を持つ敵に捕らわれているようだ。仲間と共に人々を助け出し、〈変晶体〉を浄化しよう。",
|
222
|
+
"〈変晶体〉に操られた人々がこちらへ敵意の目を向けている。危害は加えたくないが、一体どうすれば……!",
|
223
|
+
"〈変晶体〉に取り憑かれた動物が、仲間に襲いかかった! 早く助け出さなければ!",
|
224
|
+
"仲間が敵にさらわれてしまった! 敵は〈変晶体〉も持っているようだ。追跡して仲間を助けなければ!",
|
225
|
+
"入り組んだ場所に迷い込んでしまった。〈変晶体〉の気配は近いはずだが、どこにあるのだろう?",
|
226
|
+
"〈変晶体〉は深い水の底に沈んでいるようだ。浄化する方法はないだろうか……。",
|
227
|
+
]
|
228
|
+
),
|
229
|
+
"ENC" => DiceTable::Table.new(
|
230
|
+
"遭遇表", # p.193
|
231
|
+
"1D6",
|
232
|
+
[
|
233
|
+
"『弁士』コオロギのパルランテ\n指定特技: 《調和/人間性5》\n効果: プラネタリカードルール非採用時、このセッション中【運命力】を1点上昇させる。\nプラネタリカードルール採用時、ベネフィックを1枚獲得する。",
|
234
|
+
"『航空士』鳩のコロンボ\n指定特技: 《熱意/人間性4》\n効果: コンパスを1つ獲得する。",
|
235
|
+
"『医者』カラスのコルヴォ\n指定特技: 《礼節/人間性11》\n効果: 星の欠片を1つ獲得する。",
|
236
|
+
"『御者』むく犬のメドーラ\n指定特技: 《知恵/人間性3》\n効果: 時計を1つ獲得する。",
|
237
|
+
"『道化』ピエロのアルレッキーノ\n指定特技: 《センス/人間性9》\n効果: 【関係】の使用チェックをすべてはずす。使用チェックがなければ、アルレッキーノに【関係】を獲得する。",
|
238
|
+
"『少女』ヤギのカプレッティーナ\n指定特技: 《愛情/人間性7》\n効果: ロザリオを1つ獲得する。",
|
239
|
+
]
|
240
|
+
),
|
241
|
+
"FWT" => DiceTable::Table.new(
|
242
|
+
"致命傷表", # p.184
|
243
|
+
"1D6",
|
244
|
+
[
|
245
|
+
"敵の攻撃は星人形の瞳を直撃し、宝石は鮮血のごとく砕け散った。PCは形骸化する。",
|
246
|
+
"なんとか致命傷は免れたが、もう戦闘は難しそうだ……。PCは戦闘から脱落する。",
|
247
|
+
"最後の力をふり絞り、星人形は持っていたものを仲間へ投げ渡した。PCは所持しているアイテムを誰かに譲渡したのち戦闘から脱落する。",
|
248
|
+
"星人形は自分の気持ちを誰かに託しながら、地面に倒れ込んだ。仲間のうち誰か一人がPCに対する【関係】を獲得したのち、PCは戦闘から脱落する。",
|
249
|
+
"ただでやられるわけにはいかない……! 星人形は捨て身の攻撃を放つ。PCはエネミー1体に霧装の【耐久値】と同じダメージを与えたのち、戦闘から脱落する。",
|
250
|
+
"こんなところで倒れるわけにはいかない。星人形は【星命力】1点で戦闘に復帰する。再度【星命力】が0になった場合、PCは致命傷表を使用せず戦闘から脱落する。",
|
251
|
+
]
|
252
|
+
),
|
253
|
+
"CAT" => DiceTable::Table.new(
|
254
|
+
"カタストロフ表", # p.198
|
255
|
+
"1D6",
|
256
|
+
[
|
257
|
+
"〈劇場〉全体が大きく揺れ、空間に裂け目が生じる。現実は塗り替えられ……〈変容区〉と化した。最も恐れていた事態に、星人形たちは呆然と立ち尽くすほかなかった。",
|
258
|
+
"激しい地鳴りと共に人形兵たちの増援が押し寄せ、形成が逆転してしまう。星人形たちはやむを得ず〈劇場〉を後にした。",
|
259
|
+
"「時間切れです」戦場に〈悪魔派〉がやってきた。星座の加護は遮られ、星人形の体から力が抜けていく。「いずれまた」という声を最後に星人形の意識は途絶え……現実世界で目を覚ました。",
|
260
|
+
"突如〈型堕ち〉が苦しみ始め、体に残っていた〈悪夢の霧〉を爆発させた。意識を失った星人形たちが目覚めたのは現実世界だった。……まだ再挑戦する時間はあるはずだ。",
|
261
|
+
"〈型堕ち〉は自分を制御できなくなり、〈悪夢の霧〉に呑まれて姿を消してしまった。主を失った〈劇場〉は成長も衰退もしないまま、鏡の中に残り続けることになるだろう。",
|
262
|
+
"〈型堕ち〉の体は膨張する〈悪夢の霧〉の圧力に耐えきれず、宝石を内側から破壊してしまった。〈型堕ち〉に残された命はあとわずかだ。星人形は〈型堕ち〉の最期を看取ることになる。",
|
263
|
+
]
|
264
|
+
),
|
265
|
+
"JDSRT" => DiceTable::Table.new(
|
266
|
+
"〈魔術師の庭〉回想表", # p.187
|
267
|
+
"1D6",
|
268
|
+
[
|
269
|
+
"仕事に必要な道具が不足し、急遽買い出しへ。荷物が重くなりそうだからと、キーNPCも手伝ってくれることになった。",
|
270
|
+
"キーNPCはあなたの仕事に感謝し、プレゼントを贈ってくれた。箱の中身はキーNPCのお気に入りの一品らしい。",
|
271
|
+
"主人はお客さんと話し込んでいる。あなたが部屋の片隅で退屈そうにしていると、キーNPCと目が合った。",
|
272
|
+
"整備作業がひと区切りついたところで、キーNPCがお茶とお菓子を持ってきてくれた。少し休憩しよう。",
|
273
|
+
"整備中、星人形の体に傷が見つかった。どこで付けたのだろう? あなたはキーNPCに聞いてみることにした。",
|
274
|
+
"部屋を移動中、あるものが目に留まる。それはキーNPCにとって思い出深いものであるようだ。",
|
275
|
+
]
|
276
|
+
),
|
277
|
+
"SHRT" => DiceTable::Table.new(
|
278
|
+
"〈セブンス・ヘブン〉回想表", # p.187
|
279
|
+
"1D6",
|
280
|
+
[
|
281
|
+
"掃除をしていたら、お家のものを引っ掛けて壊してしまった! そこへキーNPCがやってきて……。",
|
282
|
+
"キーNPCはちょっとお疲れの様子。あなたはお茶とお菓子を持って労ってあげることにした。",
|
283
|
+
"料理の材料を取りたいのに、棚に手が届かない……。あなたはキーNPCに助けを求めた。",
|
284
|
+
"キーNPCの仕事をお手伝い。こんな体験は初めてだ! あなたはワクワクしながら挑戦する。",
|
285
|
+
"お客さんの星人形に制服を貸し出して、一緒に写真撮影をすることに。照れてるだろうか? それともノリノリ?",
|
286
|
+
"今日はセブンス・ヘブンのファン感謝イベント。会場には、差し入れを持ったキーNPCの姿もあった。",
|
287
|
+
]
|
288
|
+
),
|
289
|
+
"BCRT" => DiceTable::Table.new(
|
290
|
+
"〈祝福の鐘〉回想表", # p.187
|
291
|
+
"1D6",
|
292
|
+
[
|
293
|
+
"終演後のエントランスで挨拶をしていると、キーNPCが誰かと話し込んでいる。ちょっと様子を見に行こう。",
|
294
|
+
"次の公演に向けて衣装合わせ。どんな役をやる? 衣装のフィット具合はどう? 確認していると、キーNPCが様子を見にやってきた。",
|
295
|
+
"基礎練習。地道なルーチンワークの間、スパイスとなるのはキーNPCとのおしゃべりだ。",
|
296
|
+
"学校での公演。終わったあと、子どもたちに囲まれてもみくちゃになる。キーNPCは、子どもが好きだったっけ?",
|
297
|
+
"地方巡業。一緒に移動するキーNPCと、あれこれ話し込んでいると、意外な話題に移っていって……。",
|
298
|
+
"撤収作業も終わりに近づくステージの上。誰もいない客席に向けて、キーNPCが遠い目をしている。",
|
299
|
+
]
|
300
|
+
),
|
301
|
+
"ODRT" => DiceTable::Table.new(
|
302
|
+
"〈オメガ探偵社〉回想表", # p.187
|
303
|
+
"1D6",
|
304
|
+
[
|
305
|
+
"事件調査のため、キーNPCに聞き込み。何か有益な情報は出るだろうか。世間話になってしまうかも?",
|
306
|
+
"依頼もなく平和な探偵事務所へ、キーNPCがやってきた。これが事件の序章に……なるんだろうか?",
|
307
|
+
"みんなで、近所の家のペット探し。キーNPCの見知ったペットらしく、ちょっと心配そうな顔をしている。",
|
308
|
+
"警察の事件調査を手伝うことに。キーNPCは、事件の重要参考人として呼び出されているようだ。",
|
309
|
+
"地道な張り込み調査をしているところへ、キーNPCがやってきた。あなたに差し入れもあるようだ。",
|
310
|
+
"華麗なる事件解決! 主人の推理をたくさん手伝うことができた。キーNPCも、あなたに一目置いてくれそう。",
|
311
|
+
]
|
312
|
+
),
|
313
|
+
}.freeze
|
314
|
+
|
315
|
+
register_prefix('\d+D6', RTT.prefixes, TABLES.keys)
|
316
|
+
end
|
317
|
+
end
|
318
|
+
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'bcdice/base'
|
3
4
|
require 'bcdice/dice_table/d66_range_table'
|
4
5
|
|
5
6
|
module BCDice
|
@@ -52,19 +53,23 @@ module BCDice
|
|
52
53
|
|
53
54
|
result =
|
54
55
|
if dice_list.all? { |x| x == 1 }
|
55
|
-
"ファンブル"
|
56
|
+
Result.fumble("ファンブル")
|
56
57
|
elsif target_number
|
57
|
-
successes >= target_number ? "成功" : "失敗"
|
58
|
+
successes >= target_number ? Result.success("成功") : Result.failure("失敗")
|
59
|
+
else
|
60
|
+
Result.new
|
58
61
|
end
|
59
62
|
|
60
|
-
|
63
|
+
result.text = [
|
61
64
|
"(#{command})",
|
62
65
|
"[#{dice_list_text}]",
|
63
66
|
"成功数:#{successes}, 失敗数:#{failures}",
|
64
|
-
result
|
65
|
-
].compact
|
67
|
+
result.text
|
68
|
+
].compact.join(" > ")
|
66
69
|
|
67
|
-
|
70
|
+
result.critical = dice_list.include?(6)
|
71
|
+
|
72
|
+
return result
|
68
73
|
end
|
69
74
|
|
70
75
|
# スチームパンカーズ用のテーブル
|
@@ -17,12 +17,15 @@ module BCDice
|
|
17
17
|
|
18
18
|
# ダイスボットの使い方
|
19
19
|
HELP_MESSAGE = <<~MESSAGETEXT
|
20
|
-
|
20
|
+
・アタック判定 nSK[d][,k>l,...]
|
21
21
|
[]内は省略可能。
|
22
22
|
n: ダイス数、d: アタック判定における対象の防御力、k, l: ダイスの出目がkならばlに変更(アマランサスのスキル「始まりの部屋」用)
|
23
23
|
d省略時はダイスを振った結果のみ表示。(nSKはnB6と同じ)
|
24
24
|
|
25
25
|
4SK: ダイスを4個振って、その結果を表示
|
26
|
+
4+2SK: ダイスを4+2 (=6) 個振って、その結果を表示
|
27
|
+
5/2SK: ダイスを5個の半分 (=2) 個振って、その結果を表示
|
28
|
+
(5+3)/2SK: ダイスを(5+3)個の半分 (=4) 個振って、その結果を表示
|
26
29
|
5SK3: 【アタック判定:5ダイス】、対象の防御力を3として成功数を表示
|
27
30
|
3SK,1>6: ダイスを3個振り、出目が1のダイスを全て6に変更し、その結果を表示
|
28
31
|
6SK4,1>6,2>6: 【アタック判定:6ダイス】、出目が1と2のダイスを全て6に変更、対象の防御力を4として成功数を表示
|
@@ -73,10 +76,14 @@ module BCDice
|
|
73
76
|
def eval_game_system_specific_command(command)
|
74
77
|
command = command.upcase
|
75
78
|
|
76
|
-
if (table = TABLES[command])
|
79
|
+
if (table = self.class::TABLES[command])
|
77
80
|
table.roll(@randomizer)
|
78
|
-
elsif (m =
|
79
|
-
|
81
|
+
elsif (m = %r{([()+/\d]+)SK(\d)?((,\d>\d)+)?}.match(command))
|
82
|
+
num_dices = Arithmetic.eval(m[1], round_type: RoundType::FLOOR)
|
83
|
+
|
84
|
+
unless num_dices.nil?
|
85
|
+
resolute_action(num_dices, m[2] && m[2].to_i, m[3])
|
86
|
+
end
|
80
87
|
elsif command == 'STB2'
|
81
88
|
roll_all_situation_b2_tables
|
82
89
|
elsif command == 'ALLS'
|
@@ -94,13 +101,15 @@ module BCDice
|
|
94
101
|
# @param [Integer] num_dices
|
95
102
|
# @param [Integer | nil] defence
|
96
103
|
# @param [String] dice_change_text
|
97
|
-
# @
|
98
|
-
|
99
|
-
def resolute_action(num_dices, defence, dice_change_text, command)
|
104
|
+
# @return [Result, String]
|
105
|
+
def resolute_action(num_dices, defence, dice_change_text)
|
100
106
|
dices = @randomizer.roll_barabara(num_dices, 6).sort
|
101
107
|
dice_text = dices.join(",")
|
102
108
|
|
103
|
-
output = "(#{
|
109
|
+
output = "(#{remake_command(num_dices, defence, dice_change_text)}) > #{dice_text}"
|
110
|
+
if dices.empty?
|
111
|
+
return output + translate("StellarKnights.SK.no_dice_error")
|
112
|
+
end
|
104
113
|
|
105
114
|
# FAQによると、ダイスの置き換えは宣言された順番に適用されていく
|
106
115
|
dice_change_rules = parse_dice_change_rules(dice_change_text)
|
@@ -129,6 +138,13 @@ module BCDice
|
|
129
138
|
end
|
130
139
|
end
|
131
140
|
|
141
|
+
def remake_command(num_dices, defence, dice_change_text)
|
142
|
+
command = "#{num_dices}SK"
|
143
|
+
command += defence.to_s unless defence.nil?
|
144
|
+
command += dice_change_text unless dice_change_text.nil?
|
145
|
+
command
|
146
|
+
end
|
147
|
+
|
132
148
|
def parse_dice_change_rules(text)
|
133
149
|
return [] if text.nil?
|
134
150
|
|
@@ -144,11 +160,11 @@ module BCDice
|
|
144
160
|
end
|
145
161
|
|
146
162
|
def roll_all_situation_b2_tables
|
147
|
-
(1..6).map { |num| TABLES["STB2#{num}"].roll(@randomizer) }.join("\n")
|
163
|
+
(1..6).map { |num| self.class::TABLES["STB2#{num}"].roll(@randomizer) }.join("\n")
|
148
164
|
end
|
149
165
|
|
150
166
|
def roll_all_situation_tables
|
151
|
-
['STA', 'STB', 'STC'].map { |command| TABLES[command].roll(@randomizer) }.join("\n")
|
167
|
+
['STA', 'STB', 'STC'].map { |command| self.class::TABLES[command].roll(@randomizer) }.join("\n")
|
152
168
|
end
|
153
169
|
|
154
170
|
def roll_personality_table
|
@@ -169,7 +185,7 @@ module BCDice
|
|
169
185
|
indexes = results.map { |r| r[1] }
|
170
186
|
name = translate("StellarKnights.FT.name")
|
171
187
|
|
172
|
-
return "#{name}(#{indexes.join(',')}) > #{values.join('
|
188
|
+
return "#{name}(#{indexes.join(',')}) > #{values.join(translate('StellarKnights.FT.sep'))}"
|
173
189
|
end
|
174
190
|
|
175
191
|
class << self
|
@@ -210,7 +226,7 @@ module BCDice
|
|
210
226
|
|
211
227
|
TABLES = translate_tables(:ja_jp)
|
212
228
|
|
213
|
-
register_prefix('
|
229
|
+
register_prefix('[()+\/\d]+SK', 'STB2', 'ALLS', 'PET', 'FT', TABLES.keys)
|
214
230
|
end
|
215
231
|
end
|
216
232
|
end
|