bcdice 3.12.0 → 3.13.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 -0
- data/lib/bcdice/arithmetic/parser.rb +4 -2
- data/lib/bcdice/base.rb +1 -1
- data/lib/bcdice/command/parser.rb +4 -2
- data/lib/bcdice/common_command/add_dice/parser.rb +4 -2
- data/lib/bcdice/common_command/barabara_dice/parser.rb +4 -2
- data/lib/bcdice/common_command/calc/parser.rb +4 -2
- data/lib/bcdice/common_command/reroll_dice/parser.rb +4 -2
- data/lib/bcdice/common_command/tally_dice/parser.rb +4 -2
- data/lib/bcdice/common_command/upper_dice/parser.rb +4 -2
- data/lib/bcdice/game_system/Airgetlamh.rb +1 -1
- data/lib/bcdice/game_system/Alsetto.rb +2 -2
- data/lib/bcdice/game_system/AniMalus.rb +221 -0
- data/lib/bcdice/game_system/ArknightsFan.rb +182 -0
- data/lib/bcdice/game_system/Avandner.rb +1 -1
- data/lib/bcdice/game_system/BBN.rb +1 -1
- data/lib/bcdice/game_system/BadLife.rb +3 -3
- data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
- data/lib/bcdice/game_system/Chill3.rb +6 -6
- data/lib/bcdice/game_system/DarkSouls.rb +1 -1
- data/lib/bcdice/game_system/Elric.rb +1 -1
- data/lib/bcdice/game_system/FullFace.rb +92 -0
- data/lib/bcdice/game_system/InfiniteFantasia.rb +4 -1
- data/lib/bcdice/game_system/Irisbane.rb +1 -1
- data/lib/bcdice/game_system/KillDeathBusiness.rb +1 -1
- data/lib/bcdice/game_system/KyokoShinshoku.rb +158 -0
- data/lib/bcdice/game_system/Liminal.rb +136 -0
- data/lib/bcdice/game_system/MetalHead.rb +1 -1
- data/lib/bcdice/game_system/MetalHeadExtream.rb +1 -1
- data/lib/bcdice/game_system/NRR.rb +122 -0
- data/lib/bcdice/game_system/NSSQ.rb +1 -1
- data/lib/bcdice/game_system/NightWizard.rb +1 -1
- data/lib/bcdice/game_system/NightWizard3rd.rb +15 -2
- data/lib/bcdice/game_system/OneWayHeroics.rb +1 -1
- data/lib/bcdice/game_system/PastFutureParadox.rb +1238 -0
- data/lib/bcdice/game_system/Postman.rb +3 -3
- data/lib/bcdice/game_system/RecordOfSteam.rb +1 -1
- data/lib/bcdice/game_system/RuneQuestRoleplayingInGlorantha.rb +1 -1
- data/lib/bcdice/game_system/Ryutama.rb +4 -4
- data/lib/bcdice/game_system/Siren.rb +97 -0
- data/lib/bcdice/game_system/Skynauts.rb +1 -1
- data/lib/bcdice/game_system/Strave.rb +1 -1
- data/lib/bcdice/game_system/TherapieSein.rb +1 -1
- data/lib/bcdice/game_system/TrinitySeven.rb +1 -1
- data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +12 -6
- data/lib/bcdice/game_system/WerewolfTheApocalypse5th.rb +12 -6
- data/lib/bcdice/game_system/cthulhu7th/full_auto.rb +1 -1
- data/lib/bcdice/game_system/sword_world/rating_parser.rb +4 -2
- data/lib/bcdice/game_system.rb +8 -0
- data/lib/bcdice/loader.rb +1 -1
- data/lib/bcdice/version.rb +1 -1
- metadata +27 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c364b7cf3805345490d3e93d448a79b6575817d21bb9706ef3a792f8be0fb748
|
4
|
+
data.tar.gz: 6cc52cf4ba2c97c4a053f3b0e4e412e7982751ae0744f4554d6b9d4480948257
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8acaab5a72d4e8aac101337796249a8acd615a37c0ade50a01679ed9aaf281cb7450c40912f1bef8e292a18d0ee5951ac4fee618061111b4644418c28643b6e
|
7
|
+
data.tar.gz: a6d7c34f493d0b546c380f000adfeb5d40e4d17df95632bf178fb98e4c6c42ed944f501a17e4055f088d27cf564ea9273f76fd65a7e5c0c1ed61de95d730764e
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,32 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
## 3.13.0 2024/02/08
|
4
|
+
|
5
|
+
### 対応ゲームシステムの追加
|
6
|
+
- 終末アイドル育成TRPGセイレーン (Siren): 蜂紫さんありがとうっ! ([#663](https://github.com/bcdice/BCDice/pull/663))
|
7
|
+
- リミナル (Liminal): Facelessさんありがとうっ! ([#664](https://github.com/bcdice/BCDice/pull/664))
|
8
|
+
- アークナイツTRPG by Dapto (ArknightsFan): Ayase00さんありがとうっ! ([#666](https://github.com/bcdice/BCDice/pull/666))
|
9
|
+
- フルフェイス (FullFace): Facelessさんありがとうっ! ([#668](https://github.com/bcdice/BCDice/pull/668))
|
10
|
+
- アニマラス (AniMalus): Facelessさんありがとうっ! ([#669](https://github.com/bcdice/BCDice/pull/669))
|
11
|
+
- パストフューチャーパラドックス (PastFutureParadox): hikoyamamayoさんありがとうっ! ([#673](https://github.com/bcdice/BCDice/pull/673))
|
12
|
+
- 虚構侵蝕TRPG (KyokoShinshoku) ([#674](https://github.com/bcdice/BCDice/pull/674))
|
13
|
+
- nRR (NRR) ([#675](https://github.com/bcdice/BCDice/pull/675))
|
14
|
+
|
15
|
+
### 変更
|
16
|
+
|
17
|
+
- RuneQuest:Roleplaying in Glorantha: システム名を英語から日本語に変更。フレッド緑野さんありがとうっ! ([#662](https://github.com/bcdice/BCDice/pull/662))
|
18
|
+
- Vampire: The Masquerade 5th Edition: ダイスプールよりHungerダイスよりが大きい時に全てのダイスがHungerダイスになるよう変更。フレッド緑野さんありがとうっ! ([#670](https://github.com/bcdice/BCDice/pull/670))
|
19
|
+
- Werewolf: The Apocalypse 5th Edition: ダイスプールよりRageダイスよりが大きい時に全てのダイスがRageダイスになるよう変更。フレッド緑野さんありがとうっ! ([#671](https://github.com/bcdice/BCDice/pull/671))
|
20
|
+
- Chill 3rd Edition: 成否の表記をルールに合わせて変更。Facelessさんありがとうっ! ([#672](https://github.com/bcdice/BCDice/pull/672))
|
21
|
+
|
22
|
+
### 誤植修正
|
23
|
+
- ナイトウィザード The 3rd Edition: ヘルプメッセージの誤りを修正。opparcoさんありがとうっ! ([#667](https://github.com/bcdice/BCDice/pull/667))
|
24
|
+
- 無限のファンタジア: 成功レベルの判定方法を記載。 ([#676](https://github.com/bcdice/BCDice/pull/676))
|
25
|
+
|
26
|
+
### 開発
|
27
|
+
- Ruby 3.3をサポートバージョンに追加 ([#665](https://github.com/bcdice/BCDice/pull/665))
|
28
|
+
- Ruby 2.6をサポートバージョンから除外 ([#665](https://github.com/bcdice/BCDice/pull/665))
|
29
|
+
|
3
30
|
## 3.12.0 2023/12/04
|
4
31
|
|
5
32
|
### 対応ゲームシステムの追加
|
@@ -1,7 +1,7 @@
|
|
1
1
|
#
|
2
2
|
# DO NOT MODIFY!!!!
|
3
|
-
# This file is automatically generated by Racc 1.
|
4
|
-
# from Racc grammar file "".
|
3
|
+
# This file is automatically generated by Racc 1.7.3
|
4
|
+
# from Racc grammar file "parser.y".
|
5
5
|
#
|
6
6
|
|
7
7
|
require 'racc/parser.rb'
|
@@ -130,6 +130,7 @@ Racc_arg = [
|
|
130
130
|
racc_shift_n,
|
131
131
|
racc_reduce_n,
|
132
132
|
racc_use_result_var ]
|
133
|
+
Ractor.make_shareable(Racc_arg) if defined?(Ractor)
|
133
134
|
|
134
135
|
Racc_token_to_s_table = [
|
135
136
|
"$end",
|
@@ -151,6 +152,7 @@ Racc_token_to_s_table = [
|
|
151
152
|
"unary",
|
152
153
|
"round_type",
|
153
154
|
"term" ]
|
155
|
+
Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor)
|
154
156
|
|
155
157
|
Racc_debug_parser = false
|
156
158
|
|
data/lib/bcdice/base.rb
CHANGED
@@ -58,7 +58,7 @@ module BCDice
|
|
58
58
|
@prefixes.freeze
|
59
59
|
pattarns = CommonCommand::COMMANDS.map { |c| c::PREFIX_PATTERN.source } + @prefixes
|
60
60
|
|
61
|
-
@command_pattern = /^S?(#{pattarns.join(
|
61
|
+
@command_pattern = /^S?(#{pattarns.join('|')})/i.freeze
|
62
62
|
end
|
63
63
|
|
64
64
|
# @param command [String]
|
@@ -1,7 +1,7 @@
|
|
1
1
|
#
|
2
2
|
# DO NOT MODIFY!!!!
|
3
|
-
# This file is automatically generated by Racc 1.
|
4
|
-
# from Racc grammar file "".
|
3
|
+
# This file is automatically generated by Racc 1.7.3
|
4
|
+
# from Racc grammar file "parser.y".
|
5
5
|
#
|
6
6
|
|
7
7
|
require 'racc/parser.rb'
|
@@ -312,6 +312,7 @@ Racc_arg = [
|
|
312
312
|
racc_shift_n,
|
313
313
|
racc_reduce_n,
|
314
314
|
racc_use_result_var ]
|
315
|
+
Ractor.make_shareable(Racc_arg) if defined?(Ractor)
|
315
316
|
|
316
317
|
Racc_token_to_s_table = [
|
317
318
|
"$end",
|
@@ -344,6 +345,7 @@ Racc_token_to_s_table = [
|
|
344
345
|
"mul",
|
345
346
|
"add",
|
346
347
|
"round_type" ]
|
348
|
+
Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor)
|
347
349
|
|
348
350
|
Racc_debug_parser = false
|
349
351
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
#
|
2
2
|
# DO NOT MODIFY!!!!
|
3
|
-
# This file is automatically generated by Racc 1.
|
4
|
-
# from Racc grammar file "".
|
3
|
+
# This file is automatically generated by Racc 1.7.3
|
4
|
+
# from Racc grammar file "parser.y".
|
5
5
|
#
|
6
6
|
|
7
7
|
require 'racc/parser.rb'
|
@@ -200,6 +200,7 @@ Racc_arg = [
|
|
200
200
|
racc_shift_n,
|
201
201
|
racc_reduce_n,
|
202
202
|
racc_use_result_var ]
|
203
|
+
Ractor.make_shareable(Racc_arg) if defined?(Ractor)
|
203
204
|
|
204
205
|
Racc_token_to_s_table = [
|
205
206
|
"$end",
|
@@ -242,6 +243,7 @@ Racc_token_to_s_table = [
|
|
242
243
|
"filter_type",
|
243
244
|
"filter_type_with_shorthand",
|
244
245
|
"filter_shorthand" ]
|
246
|
+
Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor)
|
245
247
|
|
246
248
|
Racc_debug_parser = false
|
247
249
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
#
|
2
2
|
# DO NOT MODIFY!!!!
|
3
|
-
# This file is automatically generated by Racc 1.
|
4
|
-
# from Racc grammar file "".
|
3
|
+
# This file is automatically generated by Racc 1.7.3
|
4
|
+
# from Racc grammar file "parser.y".
|
5
5
|
#
|
6
6
|
|
7
7
|
require 'racc/parser.rb'
|
@@ -154,6 +154,7 @@ Racc_arg = [
|
|
154
154
|
racc_shift_n,
|
155
155
|
racc_reduce_n,
|
156
156
|
racc_use_result_var ]
|
157
|
+
Ractor.make_shareable(Racc_arg) if defined?(Ractor)
|
157
158
|
|
158
159
|
Racc_token_to_s_table = [
|
159
160
|
"$end",
|
@@ -190,6 +191,7 @@ Racc_token_to_s_table = [
|
|
190
191
|
"mul",
|
191
192
|
"unary",
|
192
193
|
"round_type" ]
|
194
|
+
Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor)
|
193
195
|
|
194
196
|
Racc_debug_parser = false
|
195
197
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
#
|
2
2
|
# DO NOT MODIFY!!!!
|
3
|
-
# This file is automatically generated by Racc 1.
|
4
|
-
# from Racc grammar file "".
|
3
|
+
# This file is automatically generated by Racc 1.7.3
|
4
|
+
# from Racc grammar file "parser.y".
|
5
5
|
#
|
6
6
|
|
7
7
|
require 'racc/parser.rb'
|
@@ -138,6 +138,7 @@ Racc_arg = [
|
|
138
138
|
racc_shift_n,
|
139
139
|
racc_reduce_n,
|
140
140
|
racc_use_result_var ]
|
141
|
+
Ractor.make_shareable(Racc_arg) if defined?(Ractor)
|
141
142
|
|
142
143
|
Racc_token_to_s_table = [
|
143
144
|
"$end",
|
@@ -162,6 +163,7 @@ Racc_token_to_s_table = [
|
|
162
163
|
"unary",
|
163
164
|
"round_type",
|
164
165
|
"term" ]
|
166
|
+
Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor)
|
165
167
|
|
166
168
|
Racc_debug_parser = false
|
167
169
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
#
|
2
2
|
# DO NOT MODIFY!!!!
|
3
|
-
# This file is automatically generated by Racc 1.
|
4
|
-
# from Racc grammar file "".
|
3
|
+
# This file is automatically generated by Racc 1.7.3
|
4
|
+
# from Racc grammar file "parser.y".
|
5
5
|
#
|
6
6
|
|
7
7
|
require 'racc/parser.rb'
|
@@ -175,6 +175,7 @@ Racc_arg = [
|
|
175
175
|
racc_shift_n,
|
176
176
|
racc_reduce_n,
|
177
177
|
racc_use_result_var ]
|
178
|
+
Ractor.make_shareable(Racc_arg) if defined?(Ractor)
|
178
179
|
|
179
180
|
Racc_token_to_s_table = [
|
180
181
|
"$end",
|
@@ -212,6 +213,7 @@ Racc_token_to_s_table = [
|
|
212
213
|
"mul",
|
213
214
|
"unary",
|
214
215
|
"round_type" ]
|
216
|
+
Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor)
|
215
217
|
|
216
218
|
Racc_debug_parser = false
|
217
219
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
#
|
2
2
|
# DO NOT MODIFY!!!!
|
3
|
-
# This file is automatically generated by Racc 1.
|
4
|
-
# from Racc grammar file "".
|
3
|
+
# This file is automatically generated by Racc 1.7.3
|
4
|
+
# from Racc grammar file "parser.y".
|
5
5
|
#
|
6
6
|
|
7
7
|
require 'racc/parser.rb'
|
@@ -144,6 +144,7 @@ Racc_arg = [
|
|
144
144
|
racc_shift_n,
|
145
145
|
racc_reduce_n,
|
146
146
|
racc_use_result_var ]
|
147
|
+
Ractor.make_shareable(Racc_arg) if defined?(Ractor)
|
147
148
|
|
148
149
|
Racc_token_to_s_table = [
|
149
150
|
"$end",
|
@@ -173,6 +174,7 @@ Racc_token_to_s_table = [
|
|
173
174
|
"mul",
|
174
175
|
"unary",
|
175
176
|
"round_type" ]
|
177
|
+
Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor)
|
176
178
|
|
177
179
|
Racc_debug_parser = false
|
178
180
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
#
|
2
2
|
# DO NOT MODIFY!!!!
|
3
|
-
# This file is automatically generated by Racc 1.
|
4
|
-
# from Racc grammar file "".
|
3
|
+
# This file is automatically generated by Racc 1.7.3
|
4
|
+
# from Racc grammar file "parser.y".
|
5
5
|
#
|
6
6
|
|
7
7
|
require 'racc/parser.rb'
|
@@ -181,6 +181,7 @@ Racc_arg = [
|
|
181
181
|
racc_shift_n,
|
182
182
|
racc_reduce_n,
|
183
183
|
racc_use_result_var ]
|
184
|
+
Ractor.make_shareable(Racc_arg) if defined?(Ractor)
|
184
185
|
|
185
186
|
Racc_token_to_s_table = [
|
186
187
|
"$end",
|
@@ -220,6 +221,7 @@ Racc_token_to_s_table = [
|
|
220
221
|
"term",
|
221
222
|
"unary",
|
222
223
|
"round_type" ]
|
224
|
+
Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor)
|
223
225
|
|
224
226
|
Racc_debug_parser = false
|
225
227
|
|
@@ -102,7 +102,7 @@ module BCDice
|
|
102
102
|
totalDamage = totalSuccessCount * damage + totalCriticalCount * criticalTrigger
|
103
103
|
|
104
104
|
result += "(#{diceCount}D10\<\=#{target}) > #{text} > Hits:#{totalSuccessCount}*#{damage}"
|
105
|
-
result += " + Trigger:#{totalCriticalCount}*#{criticalTrigger}" if
|
105
|
+
result += " + Trigger:#{totalCriticalCount}*#{criticalTrigger}" if criticalTrigger > 0
|
106
106
|
result += " > #{totalDamage}ダメージ"
|
107
107
|
else
|
108
108
|
result += "(#{diceCount}D10\<\=#{target}) > #{text} > 成功数:#{totalSuccessCount}"
|
@@ -50,7 +50,7 @@ module BCDice
|
|
50
50
|
if command =~ /(\d+)AL(C|G)?(\d+)?((x|\*)(\d+))?$/i
|
51
51
|
rapid = Regexp.last_match(1).to_i
|
52
52
|
isCritical = Regexp.last_match(2).nil?
|
53
|
-
if
|
53
|
+
if isCritical
|
54
54
|
criticalNumber = 1
|
55
55
|
else
|
56
56
|
if Regexp.last_match(2) == "G"
|
@@ -98,7 +98,7 @@ module BCDice
|
|
98
98
|
text += "+" unless text.empty?
|
99
99
|
text += "#{successCount}[#{diceText}]"
|
100
100
|
|
101
|
-
break unless
|
101
|
+
break unless isCritical
|
102
102
|
|
103
103
|
rollCount = criticalCount
|
104
104
|
end
|
@@ -0,0 +1,221 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class AniMalus < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = 'AniMalus'
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = 'アニマラス'
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = 'あにまらす'
|
14
|
+
|
15
|
+
# ダイスボットの使い方
|
16
|
+
HELP_MESSAGE = <<~INFO_MESSAGETEXT
|
17
|
+
■ステータスのダイス判定 nAM<=t,x n:能力値 t:成功値 x:必要成功数
|
18
|
+
例)3AM<=2,1: ダイスを3個振って、成功値2,必要成功数1で判定。その結果(成功数,成功・失敗)を表示
|
19
|
+
|
20
|
+
■探索技能のダイス判定 AI<=t,x t:探索技能レベル x:必要成功数
|
21
|
+
例)AI<=3,1: ダイスを3個振って、探索技能レベル3,必要成功数1で判定。その結果(成功数,成功・失敗)を表示
|
22
|
+
|
23
|
+
■攻撃判定 AA<=t t:戦闘技能レベル
|
24
|
+
例)AA<=3: ダイスを3個振って、戦闘技能レベル3で判定。その結果(成功・失敗,ダメージ,クリティカル,ファンブル)を表示
|
25
|
+
|
26
|
+
■防御判定 AG=t t:攻撃技能レベル
|
27
|
+
例)AG=2: ダイスを3個振って、攻撃技能レベル2で判定。その結果(成功・失敗,ダメージ,クリティカル,ファンブル)を表示
|
28
|
+
|
29
|
+
■回避判定 AD=t t:攻撃技能レベル
|
30
|
+
例)AD=3: ダイスを1個振って、攻撃技能レベル3で判定。その結果(成功・失敗)を表示
|
31
|
+
INFO_MESSAGETEXT
|
32
|
+
|
33
|
+
register_prefix('\d*A[MIAGD]')
|
34
|
+
|
35
|
+
def initialize(command)
|
36
|
+
super(command)
|
37
|
+
|
38
|
+
@sort_barabara_dice = true # バラバラロール(Bコマンド)でソート有
|
39
|
+
end
|
40
|
+
|
41
|
+
def eval_game_system_specific_command(command)
|
42
|
+
resolute_action(command) ||
|
43
|
+
resolute_investigation(command) ||
|
44
|
+
resolute_attacking(command) ||
|
45
|
+
resolute_guarding(command) ||
|
46
|
+
resolute_dodging(command)
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
# ステータスの判定
|
52
|
+
# @param [String] command
|
53
|
+
# @return [Result]
|
54
|
+
def resolute_action(command)
|
55
|
+
m = /^(\d+)AM<=(\d+),(\d)$/.match(command)
|
56
|
+
return nil unless m
|
57
|
+
|
58
|
+
num_dice = m[1].to_i
|
59
|
+
num_target = m[2].to_i
|
60
|
+
num_success = m[3].to_i
|
61
|
+
|
62
|
+
dice = @randomizer.roll_barabara(num_dice, 6).sort
|
63
|
+
dice_text = dice.join(",")
|
64
|
+
success_num = dice.count { |val| val <= num_target }
|
65
|
+
output = "(#{num_dice}AM<=#{num_target},#{num_success}) > #{dice_text} > 成功数#{success_num}"
|
66
|
+
if success_num >= num_success
|
67
|
+
output += " > 成功"
|
68
|
+
return Result.success(output)
|
69
|
+
else
|
70
|
+
output += " > 失敗"
|
71
|
+
return Result.failure(output)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# 探索技能の判定
|
76
|
+
# @param [String] command
|
77
|
+
# @return [Result]
|
78
|
+
def resolute_investigation(command)
|
79
|
+
m = /^AI<=(\d+),(\d)$/.match(command)
|
80
|
+
return nil unless m
|
81
|
+
|
82
|
+
num_target = m[1].to_i
|
83
|
+
num_success = m[2].to_i
|
84
|
+
|
85
|
+
dice = @randomizer.roll_barabara(3, 6).sort
|
86
|
+
dice_text = dice.join(",")
|
87
|
+
success_num = dice.count { |val| val <= num_target }
|
88
|
+
output = "(AI<=#{num_target},#{num_success}) > #{dice_text} > 成功数#{success_num}"
|
89
|
+
if success_num >= num_success
|
90
|
+
output += " > 成功"
|
91
|
+
return Result.success(output)
|
92
|
+
else
|
93
|
+
output += " > 失敗"
|
94
|
+
return Result.failure(output)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
# 攻撃技能の判定
|
99
|
+
# @param [String] command
|
100
|
+
# @return [Result]
|
101
|
+
def resolute_attacking(command)
|
102
|
+
m = /^AA<=(\d+)$/.match(command)
|
103
|
+
return nil unless m
|
104
|
+
|
105
|
+
num_target = m[1].to_i
|
106
|
+
|
107
|
+
dice = @randomizer.roll_barabara(3, 6).sort
|
108
|
+
dice_text = dice.join(",")
|
109
|
+
success_num = dice.count { |val| val <= num_target }
|
110
|
+
is_critical = dice[0] == 1 && dice[1] == 2 && dice[2] == 3
|
111
|
+
is_fumble = dice[0] == 4 && dice[1] == 5 && dice[2] == 6
|
112
|
+
damage1 = dice.max
|
113
|
+
damage2 = dice.max
|
114
|
+
if dice[0] == dice[1] && dice[1] == dice[2] && dice[2] <= num_target
|
115
|
+
damage2 += 6
|
116
|
+
damage1 = damage2
|
117
|
+
elsif dice[0] == dice[1] && dice[1] <= num_target
|
118
|
+
damage2 += 3
|
119
|
+
elsif dice[1] == dice[2] && dice[2] <= num_target
|
120
|
+
damage2 += 3
|
121
|
+
end
|
122
|
+
|
123
|
+
return Result.new.tap do |result|
|
124
|
+
result.critical = is_critical
|
125
|
+
result.fumble = is_fumble
|
126
|
+
result.condition = (success_num > 0)
|
127
|
+
|
128
|
+
sequence = [
|
129
|
+
"(AA<=#{num_target})",
|
130
|
+
dice_text,
|
131
|
+
"成功数#{success_num}",
|
132
|
+
if result.success?
|
133
|
+
"成功"
|
134
|
+
else
|
135
|
+
"失敗"
|
136
|
+
end
|
137
|
+
].compact
|
138
|
+
if result.success?
|
139
|
+
if damage1 == damage2
|
140
|
+
sequence.push("ダメージ(#{damage1})")
|
141
|
+
else
|
142
|
+
sequence.push("ダメージ(#{damage1}か#{damage2})")
|
143
|
+
end
|
144
|
+
end
|
145
|
+
sequence.push("クリティカル") if result.critical?
|
146
|
+
sequence.push("ファンブル") if result.fumble?
|
147
|
+
|
148
|
+
result.text = sequence.join(" > ")
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
# 防御技能の判定
|
153
|
+
# @param [String] command
|
154
|
+
# @return [Result]
|
155
|
+
def resolute_guarding(command)
|
156
|
+
m = /^AG=(\d+)$/.match(command)
|
157
|
+
return nil unless m
|
158
|
+
|
159
|
+
num_target = m[1].to_i
|
160
|
+
|
161
|
+
dice = @randomizer.roll_barabara(3, 6).sort
|
162
|
+
dice_text = dice.join(",")
|
163
|
+
success_num = dice.count(num_target)
|
164
|
+
is_critical = dice[0] == 1 && dice[1] == 2 && dice[2] == 3
|
165
|
+
is_fumble = dice[0] == 4 && dice[1] == 5 && dice[2] == 6
|
166
|
+
|
167
|
+
return Result.new.tap do |result|
|
168
|
+
result.critical = is_critical
|
169
|
+
result.fumble = is_fumble
|
170
|
+
result.condition = (success_num > 0)
|
171
|
+
|
172
|
+
sequence = [
|
173
|
+
"(AG=#{num_target})",
|
174
|
+
dice_text,
|
175
|
+
"成功数#{success_num}",
|
176
|
+
if result.success?
|
177
|
+
"成功 > ダメージ軽減(#{success_num * 2})"
|
178
|
+
else
|
179
|
+
"失敗"
|
180
|
+
end
|
181
|
+
].compact
|
182
|
+
sequence.push("クリティカル") if result.critical?
|
183
|
+
sequence.push("ファンブル") if result.fumble?
|
184
|
+
|
185
|
+
result.text = sequence.join(" > ")
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
# 回避技能の判定
|
190
|
+
# @param [String] command
|
191
|
+
# @return [Result]
|
192
|
+
def resolute_dodging(command)
|
193
|
+
m = /^AD=(\d+)$/.match(command)
|
194
|
+
return nil unless m
|
195
|
+
|
196
|
+
num_target = m[1].to_i
|
197
|
+
|
198
|
+
dice = @randomizer.roll_barabara(1, 6)
|
199
|
+
dice_text = dice.join(",")
|
200
|
+
success_num = dice.count(num_target)
|
201
|
+
|
202
|
+
return Result.new.tap do |result|
|
203
|
+
result.condition = (success_num > 0)
|
204
|
+
|
205
|
+
sequence = [
|
206
|
+
"(AD=#{num_target})",
|
207
|
+
dice_text,
|
208
|
+
"成功数#{success_num}",
|
209
|
+
if result.success?
|
210
|
+
"成功(ダメージ無効)"
|
211
|
+
else
|
212
|
+
"失敗"
|
213
|
+
end
|
214
|
+
].compact
|
215
|
+
|
216
|
+
result.text = sequence.join(" > ")
|
217
|
+
end
|
218
|
+
end
|
219
|
+
end
|
220
|
+
end
|
221
|
+
end
|