bcdice 3.11.0 → 3.13.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|