bcdice 3.11.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 +58 -0
- data/i18n/FutariSousa/ko_kr.yml +1625 -529
- data/i18n/Insane/ko_kr.yml +393 -258
- data/i18n/NinjaSlayer2/ja_jp.yml +34 -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/Emoklore.rb +4 -6
- data/lib/bcdice/game_system/FullFace.rb +92 -0
- data/lib/bcdice/game_system/FutariSousa_Korean.rb +44 -19
- data/lib/bcdice/game_system/HunterTheReckoning5th.rb +10 -3
- data/lib/bcdice/game_system/InfiniteFantasia.rb +4 -1
- data/lib/bcdice/game_system/Insane_Korean.rb +11 -11
- data/lib/bcdice/game_system/Irisbane.rb +1 -1
- data/lib/bcdice/game_system/KamitsubakiCityUnderConstructionNarrative.rb +251 -0
- 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/NinjaSlayer.rb +3 -1
- data/lib/bcdice/game_system/NinjaSlayer2.rb +299 -0
- 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 +10 -7
- data/lib/bcdice/game_system/Ryutama.rb +4 -4
- data/lib/bcdice/game_system/SajinsenkiAGuS.rb +5 -1
- data/lib/bcdice/game_system/SajinsenkiAGuS2E.rb +285 -0
- data/lib/bcdice/game_system/Siren.rb +97 -0
- data/lib/bcdice/game_system/Skynauts.rb +1 -1
- data/lib/bcdice/game_system/SkynautsBouken.rb +1 -1
- data/lib/bcdice/game_system/Strave.rb +1 -1
- data/lib/bcdice/game_system/SwordWorld.rb +16 -0
- data/lib/bcdice/game_system/SwordWorld2_5.rb +8 -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 +21 -9
- data/lib/bcdice/game_system/WerewolfTheApocalypse5th.rb +179 -0
- data/lib/bcdice/game_system/cthulhu7th/full_auto.rb +1 -1
- data/lib/bcdice/game_system/sword_world/rating_options.rb +3 -0
- data/lib/bcdice/game_system/sword_world/rating_parsed.rb +9 -0
- data/lib/bcdice/game_system/sword_world/rating_parser.rb +177 -130
- data/lib/bcdice/game_system/sword_world/transcendent_test.rb +1 -1
- data/lib/bcdice/game_system.rb +12 -0
- data/lib/bcdice/loader.rb +1 -1
- data/lib/bcdice/version.rb +1 -1
- metadata +32 -5
|
@@ -123,7 +123,7 @@ module BCDice
|
|
|
123
123
|
|
|
124
124
|
# @return [ParsedNW, nil]
|
|
125
125
|
def parse_nw(string)
|
|
126
|
-
m = /^([-+]?\d+)?#{@nw_command}((?:[-+]\d+)+)?(?:@(\d+(?:,\d+)*))?(?:#(\d+(?:,\d+)*))?(?:\$(\d+
|
|
126
|
+
m = /^([-+]?\d+)?#{@nw_command}((?:[-+]\d+)+)?(?:@(\d+(?:,\d+)*))?(?:#(\d+(?:,\d+)*))?(?:\$(\d+))?((?:[-+]\d+)+)?(?:([>=]+)(\d+))?$/.match(string)
|
|
127
127
|
unless m
|
|
128
128
|
return nil
|
|
129
129
|
end
|
|
@@ -5,14 +5,27 @@ require 'bcdice/game_system/NightWizard'
|
|
|
5
5
|
module BCDice
|
|
6
6
|
module GameSystem
|
|
7
7
|
class NightWizard3rd < NightWizard
|
|
8
|
+
# ゲームシステムの識別子
|
|
9
|
+
ID = 'NightWizard3rd'
|
|
10
|
+
|
|
8
11
|
# ゲームシステム名
|
|
9
12
|
NAME = 'ナイトウィザード The 3rd Edition'
|
|
10
13
|
|
|
11
14
|
# ゲームシステム名の読みがな
|
|
12
15
|
SORT_KEY = 'ないとういさあと3'
|
|
13
16
|
|
|
14
|
-
#
|
|
15
|
-
|
|
17
|
+
# ダイスボットの使い方
|
|
18
|
+
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
|
|
19
|
+
・判定用コマンド (aNW+b@x#y$z+c)
|
|
20
|
+
a : 基本値
|
|
21
|
+
b : 常時に準じる特技による補正
|
|
22
|
+
c : 常時以外の特技、および支援効果による補正
|
|
23
|
+
x : クリティカル値のカンマ区切り(省略時 10)
|
|
24
|
+
y : ファンブル値のカンマ区切り(省略時 5)
|
|
25
|
+
z : プラーナによる達成値補正のプラーナ消費数(ファンブル時には適用されない)
|
|
26
|
+
クリティカル値、ファンブル値が無い場合は1や13などのあり得ない数値を入れてください。
|
|
27
|
+
例)12NW-5@7#2$3 1NW 50nw+5@7,10#2,5 50nw-5+10@7,10#2,5+15+25
|
|
28
|
+
INFO_MESSAGE_TEXT
|
|
16
29
|
|
|
17
30
|
register_prefix('([-+]?\d+)?NW', '2R6')
|
|
18
31
|
|
|
@@ -13,7 +13,7 @@ module BCDice
|
|
|
13
13
|
NAME = 'ニンジャスレイヤーTRPG'
|
|
14
14
|
|
|
15
15
|
# ゲームシステム名の読みがな
|
|
16
|
-
SORT_KEY = 'にんしやすれいやあ
|
|
16
|
+
SORT_KEY = 'にんしやすれいやあTRPG'
|
|
17
17
|
|
|
18
18
|
# ダイスボットの使い方
|
|
19
19
|
HELP_MESSAGE = <<~MESSAGETEXT
|
|
@@ -38,6 +38,8 @@ module BCDice
|
|
|
38
38
|
|
|
39
39
|
・難易度
|
|
40
40
|
KIDS=K,EASY=E,NORMAL=N,HARD=H,ULTRA HARD=UH 数字にも対応
|
|
41
|
+
|
|
42
|
+
※上記コマンド群は『ニンジャスレイヤーTRPG コア・ルールブック』に対応していません。コア・ルールブックで遊ぶ場合には『ニンジャスレイヤーTRPG 2版』のコマンドを利用してください。
|
|
41
43
|
MESSAGETEXT
|
|
42
44
|
|
|
43
45
|
def initialize(command)
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module BCDice
|
|
4
|
+
module GameSystem
|
|
5
|
+
class NinjaSlayer2 < Base
|
|
6
|
+
# ゲームシステムの識別子
|
|
7
|
+
ID = "NinjaSlayer2"
|
|
8
|
+
|
|
9
|
+
# ゲームシステム名
|
|
10
|
+
NAME = "ニンジャスレイヤーTRPG 2版"
|
|
11
|
+
|
|
12
|
+
# ゲームシステム名の読みがな
|
|
13
|
+
SORT_KEY = "にんしやすれいやあTRPG2"
|
|
14
|
+
|
|
15
|
+
HELP_MESSAGE = <<~TEXT
|
|
16
|
+
- K{x1},{x2},...,{xn}
|
|
17
|
+
難易度K([K]ids)の成功判定({x1}B6>=2)を、ダイス{x1}個({x2}~を指定した場合はそれぞれ個々に)で実行します。
|
|
18
|
+
先頭の文字を変えることで、難易度E([E]asy),N([N]ormal),H([H]ard),U([U]ltra-hard)もしくはUH([U]ltra-[H]ard)でも実行可能です。(以下も同様)
|
|
19
|
+
|
|
20
|
+
- K{x1},{x2},...,{xn}[>={y}]
|
|
21
|
+
K{x1}のロールの結果を使って、[]内で指定された条件を満たすダイスの個数を追加で出力します。
|
|
22
|
+
判定式は「>=」の他に「>」「<=」「<」「=」「!=」が利用可能です。
|
|
23
|
+
[=5][=6]のように複数記述することで、それぞれで追加判定が可能です。
|
|
24
|
+
|
|
25
|
+
- K{x1},{x2},...,{xn}[S] or K{x1},{x2},...,{xn}[S{y}]
|
|
26
|
+
- K{x1},{x2},...,{xn}[C] or K{x1},{x2},...,{xn}[C{y}]
|
|
27
|
+
いずれもK{x1},{x2},...,{xn}[>={y}]のショートカットです。({y}省略時は固定値6で処理します。)
|
|
28
|
+
出力時のテキストが、Sの場合は「サツバツ!」に、Cの場合は「クリティカル!」になります。
|
|
29
|
+
こちらも複数記述することで、それぞれで追加判定が可能です。
|
|
30
|
+
|
|
31
|
+
- SB or SB@{x}
|
|
32
|
+
{x}(1-6/省略時はd6)に対応したサツバツ([S]atz-[B]atz)・クリティカル表の内容を返します。
|
|
33
|
+
|
|
34
|
+
- WS{x}
|
|
35
|
+
{x}(1-12/省略不可)に対応する[W]as[s]hoi!判定(2d6<={x})を行います
|
|
36
|
+
|
|
37
|
+
- WSE or WSE@{x}
|
|
38
|
+
{x}(1-6/省略時はd6)に対応する死神のエントリー決定表([W]as[s]hoi! [E]ntry)の内容を返します。
|
|
39
|
+
|
|
40
|
+
- NRS_E{x} or NRS_E{x}@{y} or NRS@{y}
|
|
41
|
+
ダイス{x}個で難易度[E]asy(>=3)のNRS判定({x}省略時はスキップ)を行い、失敗した場合は{y}(1~7/省略時は難易度に応じたダイス目)に対応するNRS発狂表を返します。
|
|
42
|
+
「_E」部分を変更することで、難易度N,H,U,UHでも利用可能です。(Kはありません)
|
|
43
|
+
TEXT
|
|
44
|
+
|
|
45
|
+
# Base::eval_game_system_specific_commandの実装
|
|
46
|
+
# @param command [String]
|
|
47
|
+
# @return [String, nil]
|
|
48
|
+
def eval_game_system_specific_command(command)
|
|
49
|
+
# @debug = true
|
|
50
|
+
debug("input: #{command}")
|
|
51
|
+
|
|
52
|
+
begin
|
|
53
|
+
case command
|
|
54
|
+
when RE_JUDGE_DICEROLL
|
|
55
|
+
# 2版用のダイス判定
|
|
56
|
+
proc_result = proc_dice_2nd(Regexp.last_match)
|
|
57
|
+
|
|
58
|
+
# 結果は文字列と達成値という形で受け取る
|
|
59
|
+
if proc_result[1] > 0
|
|
60
|
+
return Result.success(proc_result[0])
|
|
61
|
+
else
|
|
62
|
+
return Result.failure(proc_result[0])
|
|
63
|
+
end
|
|
64
|
+
else
|
|
65
|
+
# ダイスでなければ定型文処理
|
|
66
|
+
return proc_text(command)
|
|
67
|
+
end
|
|
68
|
+
rescue StandardError => e
|
|
69
|
+
# 解析できずにエラーが出たら構文ミスと皆してnilを返す
|
|
70
|
+
debug("#{e.message} \n#{e.backtrace}")
|
|
71
|
+
return nil
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
private
|
|
76
|
+
|
|
77
|
+
# 文字列stringを数値化する。nilの場合はdefaultで指定された値を返す
|
|
78
|
+
# @param string [String]
|
|
79
|
+
# @param default [Integer]
|
|
80
|
+
# @return [Integer]
|
|
81
|
+
def s_to_i(string, default)
|
|
82
|
+
return string.nil? ? default : string.to_i
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# 判定結果の出力テキストと成功数のカウントを返す。
|
|
86
|
+
# @param dice_array [Array<Integer>]
|
|
87
|
+
# @param difficulty [Integer]
|
|
88
|
+
# @param cmp_op [String]
|
|
89
|
+
# @param title_text [String]
|
|
90
|
+
# @return [String, Integer]
|
|
91
|
+
def check_difficulty(dice_array, difficulty, cmp_op, title_text)
|
|
92
|
+
success_num = 0
|
|
93
|
+
success_dice = []
|
|
94
|
+
dice_array.each do |dice_value|
|
|
95
|
+
if dice_value.send(Normalize.comparison_operator(cmp_op), difficulty)
|
|
96
|
+
success_num += 1
|
|
97
|
+
success_dice.push(dice_value)
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
success_dice_s = success_dice.empty? ? "" : "[#{success_dice.sort.reverse.join(',')}]"
|
|
102
|
+
return "#{title_text}:#{success_num}#{success_dice_s}", success_num
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# ダイス処理(2版用)
|
|
106
|
+
# @param command [String]
|
|
107
|
+
# @return [String, Integer]
|
|
108
|
+
def proc_dice_2nd(match)
|
|
109
|
+
output_text = ''
|
|
110
|
+
total_success_num = 0
|
|
111
|
+
|
|
112
|
+
difficulty = DIFFICULTY_SYMBOL_TO_INTEGER.fetch(match[1])
|
|
113
|
+
appendix = match[3]
|
|
114
|
+
|
|
115
|
+
match[2].split(",").each do |sub_command|
|
|
116
|
+
dice_num = sub_command.to_i
|
|
117
|
+
|
|
118
|
+
# D6バラバラロール
|
|
119
|
+
roll_command = "#{dice_num}B6>=#{difficulty}"
|
|
120
|
+
roll_result = BCDice::CommonCommand::BarabaraDice.eval(roll_command, self, @randomizer)
|
|
121
|
+
|
|
122
|
+
output_text += "(#{roll_command}) > #{roll_result.last_dice_list.join(',')} > 成功数:#{roll_result.success_num}"
|
|
123
|
+
success_num = roll_result.success_num
|
|
124
|
+
|
|
125
|
+
# Appendix部分の処理
|
|
126
|
+
unless appendix.nil?
|
|
127
|
+
debug("---- appendix: [#{appendix}]")
|
|
128
|
+
ap_command_array = appendix.split("\]\[")
|
|
129
|
+
ap_command_array.each do |ap_command|
|
|
130
|
+
debug("----- ap_command: #{ap_command}")
|
|
131
|
+
case ap_command
|
|
132
|
+
when RE_COUNT_SATZ_BATZ
|
|
133
|
+
# サツバツ!カウント
|
|
134
|
+
check_result = check_difficulty(roll_result.last_dice_list, s_to_i(Regexp.last_match[1], 6), ">=", "サツバツ!")
|
|
135
|
+
output_text += ", #{check_result[0]}"
|
|
136
|
+
success_num += check_result[1]
|
|
137
|
+
when RE_COUNT_CRITICAL
|
|
138
|
+
# クリティカル!カウント
|
|
139
|
+
check_result = check_difficulty(roll_result.last_dice_list, s_to_i(Regexp.last_match[1], 6), ">=", "クリティカル!")
|
|
140
|
+
output_text += ", #{check_result[0]}"
|
|
141
|
+
success_num += check_result[1]
|
|
142
|
+
when RE_COUNT_JUDGE
|
|
143
|
+
# 追加判定カウント
|
|
144
|
+
check_result = check_difficulty(roll_result.last_dice_list, Regexp.last_match[2].to_i, Regexp.last_match[1], "追加判定")
|
|
145
|
+
output_text += ", #{check_result[0]}"
|
|
146
|
+
success_num += check_result[1]
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
output_text += " \n"
|
|
151
|
+
|
|
152
|
+
total_success_num += success_num
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
return output_text, total_success_num
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
# サツバツ!の処理を実行する
|
|
159
|
+
# @param type [Integer]
|
|
160
|
+
# @return [Result]
|
|
161
|
+
def proc_satz_batz(type)
|
|
162
|
+
# サツバツ判定(d6)
|
|
163
|
+
if type > 0
|
|
164
|
+
return "サツバツ!!(#{type}) > #{translate('NinjaSlayer2.table.SATSUBATSU.items')[type - 1]}"
|
|
165
|
+
else
|
|
166
|
+
return DiceTable::Table.from_i18n("NinjaSlayer2.table.SATSUBATSU", @locale).roll(@randomizer)
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
# Wasshoi!判定の処理を実行する
|
|
171
|
+
# @param dkk [Integer]
|
|
172
|
+
# @return [Result]
|
|
173
|
+
def proc_wasshoi(dkk)
|
|
174
|
+
dice_array = @randomizer.roll_barabara(2, 6)
|
|
175
|
+
output_text = "Wasshoi!判定(2D6) > (#{dice_array.join('+')}) > #{dice_array.sum()}"
|
|
176
|
+
|
|
177
|
+
if dice_array.sum() > dkk
|
|
178
|
+
output_text += "(>#{dkk}) 判定失敗"
|
|
179
|
+
return Result.success(output_text)
|
|
180
|
+
else
|
|
181
|
+
output_text += "(<=#{dkk}) 判定成功!! \nニンジャスレイヤー=サンのエントリーだ!!"
|
|
182
|
+
return Result.failure(output_text)
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
# Wasshoi!の処理を実行する
|
|
187
|
+
# @param type [Integer]
|
|
188
|
+
# @return [Result]
|
|
189
|
+
def proc_wasshoi_entry(type)
|
|
190
|
+
# Wasshoi!判定
|
|
191
|
+
output_text = ""
|
|
192
|
+
if type > 0
|
|
193
|
+
output_text += "ニンジャスレイヤー=サンのエントリー!!(#{type}) > #{translate('NinjaSlayer2.table.WASSHOI.items')[type - 1]}"
|
|
194
|
+
else
|
|
195
|
+
# DKKの指定無し、もしくはロール結果がDKKを超えたら死神のエントリー決定表(d6)
|
|
196
|
+
table = DiceTable::Table.from_i18n("NinjaSlayer2.table.WASSHOI", @locale)
|
|
197
|
+
output_text += table.roll(@randomizer).to_s
|
|
198
|
+
end
|
|
199
|
+
return output_text
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
# NRS判定の処理を実行する
|
|
203
|
+
# @param dice_num [Integer]
|
|
204
|
+
# @param dificulty_s [String]
|
|
205
|
+
# @param type [Integer]
|
|
206
|
+
# @return [Result]
|
|
207
|
+
def proc_nrs(dice_num, dificulty_s, type)
|
|
208
|
+
# 難易度も乱数表の番号も指定が無ければコマンドミス
|
|
209
|
+
dificulty_i = dificulty_s.nil? ? 0 : DIFFICULTY_SYMBOL_TO_INTEGER.fetch(dificulty_s)
|
|
210
|
+
if dificulty_i == 0 && type == 0
|
|
211
|
+
return nil
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
# NRS判定
|
|
215
|
+
output_text = ""
|
|
216
|
+
if dificulty_i > 0
|
|
217
|
+
roll_command = "#{dice_num}B6>=#{dificulty_i}"
|
|
218
|
+
roll_result = BCDice::CommonCommand::BarabaraDice.eval(roll_command, self, @randomizer)
|
|
219
|
+
output_text += "NRS判定(#{roll_command}) > #{roll_result.last_dice_list.join(',')} > 成功数:#{roll_result.success_num}"
|
|
220
|
+
if roll_result.success_num > 0
|
|
221
|
+
output_text += " NRS克服!!"
|
|
222
|
+
return Result.success(output_text)
|
|
223
|
+
else
|
|
224
|
+
output_text += " NRS発症!! \n"
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
# NRS発狂表の決定
|
|
229
|
+
dice_face = 0
|
|
230
|
+
additional = 0
|
|
231
|
+
if type == 0
|
|
232
|
+
case dificulty_s
|
|
233
|
+
when "E"
|
|
234
|
+
dice_face = 3
|
|
235
|
+
when "N"
|
|
236
|
+
dice_face = 6
|
|
237
|
+
when "H", "U"
|
|
238
|
+
dice_face = 6
|
|
239
|
+
additional = 1
|
|
240
|
+
end
|
|
241
|
+
type = @randomizer.roll_once(dice_face) + additional
|
|
242
|
+
end
|
|
243
|
+
roll_command = "1D#{dice_face}#{additional > 0 ? '+' + additional.to_s : ''}"
|
|
244
|
+
output_text += "NRS発狂#{dice_face > 0 ? "(#{roll_command}) > " : ''}(#{type}) > #{translate('NinjaSlayer2.table.NRS.items')[type - 1]}"
|
|
245
|
+
return Result.failure(output_text)
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
# テキスト系処理
|
|
249
|
+
# @param command [String]
|
|
250
|
+
# @return [String, Integer]
|
|
251
|
+
def proc_text(command)
|
|
252
|
+
debug("text: #{command}")
|
|
253
|
+
case command
|
|
254
|
+
when RE_JUDGE_SATZ_BATZ
|
|
255
|
+
# サツバツ判定(d6)
|
|
256
|
+
return proc_satz_batz(Regexp.last_match[1].to_i)
|
|
257
|
+
when RE_JUDGE_WASSHOI
|
|
258
|
+
# Wasshoi!判定
|
|
259
|
+
return proc_wasshoi(Regexp.last_match[1].to_i)
|
|
260
|
+
when RE_JUDGE_WASSHOI_ENTRY
|
|
261
|
+
# Wasshoi!判定
|
|
262
|
+
return proc_wasshoi_entry(Regexp.last_match[1].to_i)
|
|
263
|
+
when RE_JUDGE_NRS
|
|
264
|
+
# NRS判定
|
|
265
|
+
return proc_nrs(Regexp.last_match[2].to_i, Regexp.last_match[1], Regexp.last_match[3].to_i)
|
|
266
|
+
end
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
RE_COUNT_SATZ_BATZ = /S([1-6])?/i.freeze
|
|
270
|
+
RE_COUNT_CRITICAL = /C([1-6])?/i.freeze
|
|
271
|
+
RE_COUNT_JUDGE = /(=|!=|>=|>|<=|<)([1-6])/.freeze
|
|
272
|
+
|
|
273
|
+
RE_JUDGE_DICEROLL = /^(UH|[KENHU])([\d,]+)(?:\[((?:(?:S([1-6])?|C([1-6])?|(=|!=|>=|>|<=|<)([1-6]))(?:\]\[)?)+)\])?$/i.freeze
|
|
274
|
+
RE_JUDGE_SATZ_BATZ = /^SB(?:@([1-6]))?$/i.freeze
|
|
275
|
+
RE_JUDGE_WASSHOI = /^WS([1-9]|10|11|12)$/i.freeze
|
|
276
|
+
RE_JUDGE_WASSHOI_ENTRY = /^WSE(?:@([1-6]))?$/i.freeze
|
|
277
|
+
RE_JUDGE_NRS = /^NRS(?:_(E|N|H|U|UH)(\d+))?(?:@([1-7]))?$/i.freeze
|
|
278
|
+
|
|
279
|
+
# 難易度の文字表現から整数値への対応
|
|
280
|
+
DIFFICULTY_SYMBOL_TO_INTEGER = {
|
|
281
|
+
'K' => 2,
|
|
282
|
+
'E' => 3,
|
|
283
|
+
'N' => 4,
|
|
284
|
+
'H' => 5,
|
|
285
|
+
'U' => 6,
|
|
286
|
+
'UH' => 6
|
|
287
|
+
}.freeze
|
|
288
|
+
|
|
289
|
+
register_prefix(
|
|
290
|
+
"UH",
|
|
291
|
+
"[KENHU]",
|
|
292
|
+
"SB",
|
|
293
|
+
"WS",
|
|
294
|
+
"WSE",
|
|
295
|
+
"NRS"
|
|
296
|
+
)
|
|
297
|
+
end
|
|
298
|
+
end
|
|
299
|
+
end
|