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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +140 -0
- data/i18n/Airgetlamh/ja_jp.yml +5 -0
- data/i18n/Airgetlamh/ko_kr.yml +5 -0
- data/i18n/Alsetto/ja_jp.yml +5 -0
- data/i18n/Alsetto/ko_kr.yml +5 -0
- data/i18n/AnimaAnimus/ja_jp.yml +28 -0
- data/i18n/AnimaAnimus/ko_kr.yml +28 -0
- data/i18n/BlackJacket/ja_jp.yml +79 -0
- data/i18n/BlackJacket/ko_kr.yml +79 -0
- data/i18n/Bloodorium/ja_jp.yml +3 -0
- data/i18n/Bloodorium/ko_kr.yml +3 -0
- data/i18n/Cthulhu/ko_kr.yml +1 -1
- data/i18n/DoubleCross/ja_jp.yml +2 -2
- data/i18n/Dracurouge/ko_kr.yml +1284 -205
- data/i18n/Emoklore/ja_jp.yml +1 -0
- data/i18n/Emoklore/ko_kr.yml +8 -0
- data/i18n/FutariSousa/ja_jp.yml +70 -0
- data/i18n/FutariSousa/ko_kr.yml +157 -0
- data/i18n/HatsuneMiku/ja_jp.yml +579 -0
- data/i18n/HatsuneMiku/ko_kr.yml +579 -0
- data/i18n/Irisbane/ja_jp.yml +27 -0
- data/i18n/Irisbane/ko_kr.yml +27 -0
- data/i18n/JuinKansen/ja_jp.yml +168 -0
- data/i18n/JuinKansen/ko_kr.yml +168 -0
- data/i18n/KemonoNoMori/ja_jp.yml +229 -0
- data/i18n/KemonoNoMori/ko_kr.yml +229 -0
- data/i18n/KizunaBullet/ko_kr.yml +653 -0
- data/i18n/MagicPunk/ja_jp.yml +5 -0
- data/i18n/MagicPunk/ko_kr.yml +5 -0
- data/i18n/MorkBorg/ja_jp.yml +34 -0
- data/i18n/MorkBorg/ko_kr.yml +34 -0
- data/i18n/Nechronica/ko_kr.yml +43 -0
- data/i18n/NegikureNegimaki/ja_jp.yml +6 -0
- data/i18n/NegikureNegimaki/ko_kr.yml +6 -0
- data/i18n/Nuekagami/ja_jp.yml +219 -0
- data/i18n/Nuekagami/ko_kr.yml +219 -0
- data/i18n/Revulture/ja_jp.yml +8 -0
- data/i18n/Revulture/ko_kr.yml +8 -0
- data/i18n/SRS/ja_jp.yml +4 -0
- data/i18n/SRS/ko_kr.yml +4 -0
- data/i18n/ShinobiGami/ja_jp.yml +879 -0
- data/i18n/ShinobiGami/ko_kr.yml +876 -0
- data/i18n/SkynautsBouken/ja_jp.yml +28 -28
- data/i18n/StarryDolls/ja_jp.yml +456 -0
- data/i18n/StarryDolls/ko_kr.yml +456 -0
- data/i18n/StratoShout/ja_jp.yml +8 -8
- data/i18n/SwordWorld2_5/ja_jp.yml +48 -0
- data/i18n/Ventangle/ja_jp.yml +4 -0
- data/i18n/Ventangle/ko_kr.yml +4 -0
- data/i18n/YearZeroEngine/ja_jp.yml +12 -0
- data/i18n/YearZeroEngine/ko_kr.yml +12 -0
- data/i18n/ZombiLine/ja_jp.yml +27 -0
- data/i18n/ZombiLine/ko_kr.yml +27 -0
- data/i18n/ko_kr.yml +2 -0
- data/i18n/zh_hant.yml +2 -2
- data/lib/bcdice/dice_table/d66_left_range_table.rb +21 -0
- data/lib/bcdice/game_system/Aionia.rb +68 -19
- data/lib/bcdice/game_system/Airgetlamh.rb +64 -41
- data/lib/bcdice/game_system/Airgetlamh_Korean.rb +53 -0
- data/lib/bcdice/game_system/Alsetto.rb +63 -50
- data/lib/bcdice/game_system/Alsetto_Korean.rb +51 -0
- data/lib/bcdice/game_system/AnimaAnimus.rb +15 -32
- data/lib/bcdice/game_system/AnimaAnimus_Korean.rb +39 -0
- data/lib/bcdice/game_system/BlackJacket.rb +57 -113
- data/lib/bcdice/game_system/BlackJacket_Korean.rb +8 -206
- data/lib/bcdice/game_system/Bloodorium.rb +1 -1
- data/lib/bcdice/game_system/Bloodorium_Korean.rb +34 -0
- data/lib/bcdice/game_system/ChroniclesOfDarkness2e.rb +163 -0
- data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +471 -300
- data/lib/bcdice/game_system/DeadlineHeroes_Korean.rb +273 -0
- data/lib/bcdice/game_system/Dracurouge_Korean.rb +25 -19
- data/lib/bcdice/game_system/DungeonsAndDragons5.rb +106 -73
- data/lib/bcdice/game_system/DungeonsAndDragons5_Korean.rb +53 -0
- data/lib/bcdice/game_system/DungeonsAndDragons_Korean.rb +61 -0
- data/lib/bcdice/game_system/EdgeFlippers.rb +315 -0
- data/lib/bcdice/game_system/Emoklore.rb +34 -9
- data/lib/bcdice/game_system/Emoklore_Korean.rb +50 -0
- data/lib/bcdice/game_system/FateCoreSystem.rb +10 -6
- data/lib/bcdice/game_system/FullMetalPanic_Korean.rb +28 -0
- data/lib/bcdice/game_system/FutariSousa.rb +37 -12
- data/lib/bcdice/game_system/FutariSousa_Korean.rb +25 -8
- data/lib/bcdice/game_system/GaiaCare.rb +40 -0
- data/lib/bcdice/game_system/Garactier.rb +1 -1
- data/lib/bcdice/game_system/GardenOrder.rb +2 -2
- data/lib/bcdice/game_system/GardenOrderReEdit.rb +849 -0
- data/lib/bcdice/game_system/GardenOrder_Korean.rb +839 -0
- data/lib/bcdice/game_system/HatsuneMiku.rb +51 -605
- data/lib/bcdice/game_system/HatsuneMiku_Korean.rb +56 -0
- data/lib/bcdice/game_system/HunterTheReckoning5th.rb +15 -11
- data/lib/bcdice/game_system/Irisbane.rb +17 -30
- data/lib/bcdice/game_system/Irisbane_Korean.rb +52 -0
- data/lib/bcdice/game_system/JuinKansen.rb +41 -208
- data/lib/bcdice/game_system/JuinKansen_Korean.rb +46 -0
- data/lib/bcdice/game_system/KemonoNoMori.rb +67 -276
- data/lib/bcdice/game_system/KemonoNoMori_Korean.rb +62 -0
- data/lib/bcdice/game_system/KinAriel.rb +117 -0
- data/lib/bcdice/game_system/KizunaBullet_Korean.rb +109 -0
- data/lib/bcdice/game_system/KutuluRevised.rb +94 -0
- data/lib/bcdice/game_system/LiverLabyrinth.rb +321 -0
- data/lib/bcdice/game_system/Lost.rb +89 -0
- data/lib/bcdice/game_system/MagicPunk.rb +85 -0
- data/lib/bcdice/game_system/MagicPunk_Korean.rb +39 -0
- data/lib/bcdice/game_system/MarvelHeroicRoleplaying.rb +144 -0
- data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +122 -2
- data/lib/bcdice/game_system/MetallicGuardian_Korean.rb +28 -0
- data/lib/bcdice/game_system/MorkBorg.rb +170 -0
- data/lib/bcdice/game_system/MorkBorg_Korean.rb +49 -0
- data/lib/bcdice/game_system/NanimonaiMura.rb +112 -0
- data/lib/bcdice/game_system/Nechronica_Korean.rb +6 -6
- data/lib/bcdice/game_system/NegikureNegimaki.rb +140 -0
- data/lib/bcdice/game_system/NegikureNegimaki_Korean.rb +48 -0
- data/lib/bcdice/game_system/NeonUnderRealm.rb +122 -0
- data/lib/bcdice/game_system/NinjaSlayer2.rb +170 -49
- data/lib/bcdice/game_system/Nuekagami.rb +19 -261
- data/lib/bcdice/game_system/Nuekagami_Korean.rb +43 -0
- data/lib/bcdice/game_system/ParanoiaPerfect.rb +74 -0
- data/lib/bcdice/game_system/PastFutureParadox.rb +2245 -55
- data/lib/bcdice/game_system/PreciousDays.rb +170 -0
- data/lib/bcdice/game_system/Revulture.rb +8 -5
- data/lib/bcdice/game_system/Revulture_Korean.rb +51 -0
- data/lib/bcdice/game_system/Ryutama.rb +46 -46
- data/lib/bcdice/game_system/SRS.rb +4 -4
- data/lib/bcdice/game_system/SRS_Korean.rb +67 -0
- data/lib/bcdice/game_system/ShinobiGami.rb +154 -1047
- data/lib/bcdice/game_system/ShinobiGami_Korean.rb +102 -0
- data/lib/bcdice/game_system/StarryDolls.rb +70 -508
- data/lib/bcdice/game_system/StarryDolls_Korean.rb +80 -0
- data/lib/bcdice/game_system/StratoShout.rb +1 -1
- data/lib/bcdice/game_system/SwordWorld.rb +28 -2
- data/lib/bcdice/game_system/SwordWorld2_0.rb +1 -1
- data/lib/bcdice/game_system/SwordWorld2_5.rb +67 -3
- data/lib/bcdice/game_system/TacticalExorcist.rb +222 -0
- data/lib/bcdice/game_system/TenkaRyouran_Korean.rb +30 -0
- data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +38 -33
- data/lib/bcdice/game_system/Ventangle.rb +8 -7
- data/lib/bcdice/game_system/Ventangle_Korean.rb +41 -0
- data/lib/bcdice/game_system/Warhammer4.rb +202 -6
- data/lib/bcdice/game_system/WerewolfTheApocalypse5th.rb +20 -15
- data/lib/bcdice/game_system/WorldEndScrapyard.rb +333 -0
- data/lib/bcdice/game_system/WorldsEndFrontline_Korean.rb +26 -0
- data/lib/bcdice/game_system/YearZeroEngine.rb +7 -7
- data/lib/bcdice/game_system/YearZeroEngine_Korean.rb +46 -0
- data/lib/bcdice/game_system/ZombiLine.rb +29 -36
- data/lib/bcdice/game_system/ZombiLine_Korean.rb +37 -0
- data/lib/bcdice/game_system/cthulhu7th_Korean/full_auto.rb +294 -0
- data/lib/bcdice/game_system/cthulhu7th_Korean/rollable.rb +43 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/atoz_table.rb +1184 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/randr236_table.rb +254 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/table.rb +54 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/tk_table.rb +755 -0
- data/lib/bcdice/game_system/sword_world/rating_options.rb +9 -0
- data/lib/bcdice/game_system/sword_world/rating_parsed.rb +19 -0
- data/lib/bcdice/game_system/sword_world/rating_parser.rb +229 -149
- data/lib/bcdice/game_system/sword_world/transcendent_test.rb +1 -0
- data/lib/bcdice/game_system.rb +47 -0
- data/lib/bcdice/version.rb +1 -1
- metadata +96 -2
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module BCDice
|
|
4
|
+
module GameSystem
|
|
5
|
+
class KutuluRevised < Base
|
|
6
|
+
# ゲームシステムの識別子
|
|
7
|
+
ID = 'KutuluRevised'
|
|
8
|
+
|
|
9
|
+
# ゲームシステム名
|
|
10
|
+
NAME = 'Kutulu リバイズド'
|
|
11
|
+
|
|
12
|
+
# ゲームシステム名の読みがな
|
|
13
|
+
SORT_KEY = 'くとうるうりはいすと'
|
|
14
|
+
|
|
15
|
+
# ダイスボットの使い方
|
|
16
|
+
HELP_MESSAGE = <<~INFO_MESSAGETEXT
|
|
17
|
+
■判定 nKU n: ダイス数(1~9)
|
|
18
|
+
|
|
19
|
+
例)3KU: ダイスを3個振って、その結果を表示(ギリギリでの成功も表示)
|
|
20
|
+
|
|
21
|
+
■対抗判定 nKR n: ダイス数(1~9)
|
|
22
|
+
|
|
23
|
+
例)2KR: ダイスを2個振って、その結果を表示。対抗判定用の3桁の数字も出力。(大きい方が勝利)
|
|
24
|
+
INFO_MESSAGETEXT
|
|
25
|
+
|
|
26
|
+
register_prefix('\dK[UR]')
|
|
27
|
+
|
|
28
|
+
def initialize(command)
|
|
29
|
+
super(command)
|
|
30
|
+
|
|
31
|
+
@sort_barabara_dice = true # バラバラロール(Bコマンド)でソート有
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def eval_game_system_specific_command(command)
|
|
35
|
+
resolute_action(command) || resolute_competition(command)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
|
|
40
|
+
# アクティヴ能力の判定
|
|
41
|
+
# @param [String] command
|
|
42
|
+
# @return [Result]
|
|
43
|
+
def resolute_action(command)
|
|
44
|
+
m = /(\d)KU/.match(command)
|
|
45
|
+
return nil unless m
|
|
46
|
+
|
|
47
|
+
num_dices = m[1].to_i
|
|
48
|
+
|
|
49
|
+
dices = @randomizer.roll_barabara(num_dices, 6).sort
|
|
50
|
+
dice_text = dices.join(",")
|
|
51
|
+
|
|
52
|
+
output = "(#{num_dices}KU) > #{dice_text}"
|
|
53
|
+
|
|
54
|
+
success_num = dices.count { |val| val >= 4 }
|
|
55
|
+
if success_num > 0
|
|
56
|
+
output += " > 成功数#{success_num}"
|
|
57
|
+
if success_num == 1
|
|
58
|
+
output += " > *ギリギリの成功?"
|
|
59
|
+
end
|
|
60
|
+
return Result.success(output)
|
|
61
|
+
else
|
|
62
|
+
output += " > 失敗"
|
|
63
|
+
return Result.failure(output)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# 対抗判定用出力
|
|
68
|
+
# @param [String] command
|
|
69
|
+
# @return [Result]
|
|
70
|
+
def resolute_competition(command)
|
|
71
|
+
m = /(\d)KR/.match(command)
|
|
72
|
+
return nil unless m
|
|
73
|
+
|
|
74
|
+
num_dices = m[1].to_i
|
|
75
|
+
|
|
76
|
+
dices = @randomizer.roll_barabara(num_dices, 6).sort
|
|
77
|
+
dice_text = dices.join(",")
|
|
78
|
+
|
|
79
|
+
counts6 = dices.count(6)
|
|
80
|
+
counts5 = dices.count(5)
|
|
81
|
+
success_num = dices.count { |val| val >= 4 }
|
|
82
|
+
com_text = format("(%d%d%d)", success_num, counts6, counts5)
|
|
83
|
+
|
|
84
|
+
output = "(#{num_dices}KR) > #{dice_text} > #{com_text}"
|
|
85
|
+
|
|
86
|
+
if success_num > 0
|
|
87
|
+
return Result.success(output)
|
|
88
|
+
else
|
|
89
|
+
return Result.failure(output)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module BCDice
|
|
4
|
+
module GameSystem
|
|
5
|
+
class LiverLabyrinth < Base
|
|
6
|
+
# ゲームシステムの識別子
|
|
7
|
+
ID = 'LiverLabyrinth'
|
|
8
|
+
|
|
9
|
+
# ゲームシステム名
|
|
10
|
+
NAME = 'ライバー&ラビリンス'
|
|
11
|
+
|
|
12
|
+
# ゲームシステム名の読みがな
|
|
13
|
+
SORT_KEY = 'らいはああんとらひりんす'
|
|
14
|
+
|
|
15
|
+
# ダイスボットの使い方
|
|
16
|
+
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
|
|
17
|
+
同人TRPGシステム『ライバー&ラビリンス』用ダイスボット。
|
|
18
|
+
・判定コマンド(xLL+y@c$d>=z)
|
|
19
|
+
x:能力値
|
|
20
|
+
+y:ダメージ判定時の攻撃力(省略可。省略時は0)
|
|
21
|
+
c:クリティカル値(省略可。省略時は10)
|
|
22
|
+
d:クリティカル時の加算値(省略可。省略時は1)
|
|
23
|
+
z:難易度(4以下のとき5に。11以上は10になり、サイコロの数が減る)
|
|
24
|
+
(例) 6LL@8>=6
|
|
25
|
+
10LL>=5
|
|
26
|
+
4LL+5@10$2>=10
|
|
27
|
+
・各種表 :
|
|
28
|
+
コマンド末尾に数字を入れると複数回の一括実行が可能 例)GETCT4
|
|
29
|
+
コマンド末尾に"="(イコール)と数字を入れると、特定のダイス目の結果の実行が可能 例)CRITICALT=5
|
|
30
|
+
・クリティカル表(CriticalT)
|
|
31
|
+
・命中ファンブル表(FumbleT)
|
|
32
|
+
・致命傷表(FatalT)
|
|
33
|
+
・休憩表(RestT)
|
|
34
|
+
・痛恨表(TerribleT)
|
|
35
|
+
・お宝表(レベル1~4)(GetCT)
|
|
36
|
+
・お宝表(レベル5~8)(GetRT)
|
|
37
|
+
・お宝表(レベル9~14)(GetSRT)
|
|
38
|
+
・お宝表(レベル15~99)(GetURT)
|
|
39
|
+
INFO_MESSAGE_TEXT
|
|
40
|
+
|
|
41
|
+
def initialize(command)
|
|
42
|
+
super(command)
|
|
43
|
+
|
|
44
|
+
@round_type = RoundType::CEIL
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def eval_game_system_specific_command(command)
|
|
48
|
+
debug("eval_game_system_specific_command begin string", command)
|
|
49
|
+
|
|
50
|
+
return check_roll(command) || roll_table_command(command)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def check_roll(command)
|
|
54
|
+
parser = Command::Parser.new("LL", round_type: RoundType::CEIL).has_prefix_number.enable_critical.enable_dollar.restrict_cmp_op_to(:>=)
|
|
55
|
+
parsed = parser.parse(command)
|
|
56
|
+
return nil if parsed.nil?
|
|
57
|
+
|
|
58
|
+
dice_cnt = parsed.prefix_number
|
|
59
|
+
modify = parsed.modify_number || 0
|
|
60
|
+
critical_target = parsed.critical || 10
|
|
61
|
+
critical_addition = parsed.dollar || 1
|
|
62
|
+
|
|
63
|
+
target = parsed.target_number
|
|
64
|
+
|
|
65
|
+
text = ""
|
|
66
|
+
if target < 5
|
|
67
|
+
text += "【#{command}】 > あらゆる難易度は5未満にはならないため、難易度は5になる!\n"
|
|
68
|
+
target = 5
|
|
69
|
+
elsif target >= 11
|
|
70
|
+
text += "【#{command}】 > 難易度が11を超えたため、超過分、ダイスの数が減少!\n"
|
|
71
|
+
over = target - 10
|
|
72
|
+
target = 10
|
|
73
|
+
dice_cnt -= over
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
dice_cnt = 0 if dice_cnt < 0
|
|
77
|
+
|
|
78
|
+
text += "【ダイスの数#{dice_cnt}、難易度#{target}、クリティカル#{critical_target}#{critical_addition > 1 ? '(+' + critical_addition.to_s + ')' : ''}#{modify > 0 ? '、攻撃力' + modify.to_s : ''}】"
|
|
79
|
+
|
|
80
|
+
dice_arr = @randomizer.roll_barabara(dice_cnt, 10)
|
|
81
|
+
dice_count = dice_arr
|
|
82
|
+
.group_by(&:itself)
|
|
83
|
+
.transform_values(&:length)
|
|
84
|
+
|
|
85
|
+
success_cnt = 0
|
|
86
|
+
critical_cnt = 0
|
|
87
|
+
|
|
88
|
+
dice_count.each do |v, count|
|
|
89
|
+
next if count == 0
|
|
90
|
+
|
|
91
|
+
if v >= target
|
|
92
|
+
success_cnt += count
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
if v >= critical_target
|
|
96
|
+
success_cnt += count * critical_addition
|
|
97
|
+
critical_cnt += count
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
dice_count_strs = (1..10).map do |v|
|
|
102
|
+
count = dice_count.fetch(v, 0)
|
|
103
|
+
next nil if count == 0
|
|
104
|
+
|
|
105
|
+
"[#{v}]×#{dice_count.fetch(v, 0)}"
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
has_critical = critical_cnt >= 3
|
|
109
|
+
has_fumble = dice_cnt > 0 && dice_count.fetch(1, 0) >= (dice_cnt.to_f / 2).ceil
|
|
110
|
+
|
|
111
|
+
if has_fumble
|
|
112
|
+
# ファンブルの場合、クリティカルは無視される
|
|
113
|
+
has_critical = false
|
|
114
|
+
success_cnt = 0
|
|
115
|
+
end
|
|
116
|
+
result = success_cnt > 0
|
|
117
|
+
|
|
118
|
+
text += " > #{dice_count_strs.compact.join(',')} > 成功度#{success_cnt} > #{result ? '成功' : '失敗'}#{has_critical ? '(クリティカル)' : ''}#{has_fumble ? '(ファンブル)' : ''}"
|
|
119
|
+
|
|
120
|
+
if result && modify > 0
|
|
121
|
+
text += " > #{success_cnt + modify}ダメージ"
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
Result.new.tap do |r|
|
|
125
|
+
r.text = text
|
|
126
|
+
r.critical = has_critical
|
|
127
|
+
r.fumble = has_fumble
|
|
128
|
+
r.success = result
|
|
129
|
+
r.failure = !result
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def roll_table_command(command)
|
|
134
|
+
# サタスペのダイスボットを参考に実装
|
|
135
|
+
command = command.upcase
|
|
136
|
+
|
|
137
|
+
m = /([A-Z]+)(\d+)?(=)?(\d+)?/.match(command)
|
|
138
|
+
return nil unless m
|
|
139
|
+
|
|
140
|
+
table_name = m[1]
|
|
141
|
+
table = TABLES[table_name]
|
|
142
|
+
return nil if table.nil?
|
|
143
|
+
|
|
144
|
+
counts = 1
|
|
145
|
+
counts = m[2].to_i if m[2]
|
|
146
|
+
operator = m[3]
|
|
147
|
+
value = m[4].to_i
|
|
148
|
+
|
|
149
|
+
return nil if !operator.nil? && value <= 0 || value >= 11
|
|
150
|
+
|
|
151
|
+
result_texts = []
|
|
152
|
+
|
|
153
|
+
counts.times do |_i|
|
|
154
|
+
if operator == "=" && !value.nil?
|
|
155
|
+
info = table.choice(value)
|
|
156
|
+
text = "#{info.table_name}(#{value}) > #{info.body}"
|
|
157
|
+
else
|
|
158
|
+
text = roll_tables(table_name, TABLES)
|
|
159
|
+
end
|
|
160
|
+
result_texts.push(text)
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
Result.new.tap do |r|
|
|
164
|
+
r.text = result_texts.join("\n")
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
####################
|
|
169
|
+
# 各種表
|
|
170
|
+
|
|
171
|
+
TABLES = {
|
|
172
|
+
"CRITICALT" => DiceTable::Table.new(
|
|
173
|
+
"クリティカル表",
|
|
174
|
+
"1d10",
|
|
175
|
+
[
|
|
176
|
+
"視聴者が沸き立つ一撃!閲覧数を1D10点増加させる。",
|
|
177
|
+
"致命的な一撃!最終的に与えるダメージが2倍になる。",
|
|
178
|
+
"肉体を変容させる一撃!ランダムで対象にバステを付与する。",
|
|
179
|
+
"魔力の消費を最小限に抑えることに成功!最終的にこのアクションで消費する《EP》が0になる。",
|
|
180
|
+
"取れ高発生!《トレダカ》を1点増加させる。",
|
|
181
|
+
"相手の動きを阻害することに成功!対象の《行動値》を0にする。",
|
|
182
|
+
"華麗に素材をゲット!《クレジット》を1D10点獲得する。",
|
|
183
|
+
"狙いが的確に決まった!対象のスキル、アプリ、ツールのうちどれか一つ、この戦闘の間、使用不能にする。",
|
|
184
|
+
"意識の外から刈り取る一撃!このアクションに対して、対象は防御判定を行えない。また、スキル、アプリ、ツールによるダメージ減少も無視する。",
|
|
185
|
+
"次の動作への連携が決まる!次に行う自身のアクションのクリティカル値を2点減少させる。",
|
|
186
|
+
]
|
|
187
|
+
),
|
|
188
|
+
"FUMBLET" => DiceTable::Table.new(
|
|
189
|
+
"命中ファンブル表",
|
|
190
|
+
"1d10",
|
|
191
|
+
[
|
|
192
|
+
"急にコメントが荒れて攻撃を外してしまう。「炎上」のバステを受ける。",
|
|
193
|
+
"攻撃が自分に命中。1D10点のダメージを受ける(防御判定不可)",
|
|
194
|
+
"アクション中に盛大にすっころぶ。「ストップ」のバステを受ける。",
|
|
195
|
+
"アクションが大失敗。配信の空気が冷える。《トレダカ》が1点減少する。",
|
|
196
|
+
"魔力の消費が爆増!このアクションで消費した《EP》を再度消費する。",
|
|
197
|
+
"タンマツの調子が悪い。「オフライン」のバステを受ける。",
|
|
198
|
+
"敵のカウンターを受ける。1D10点のダメージを受ける(防御判定不可)",
|
|
199
|
+
"うっかり武器を落としてしまう。支援行動で武器を拾うまで、汎用アクション以外のアクションを行うことができない。",
|
|
200
|
+
"仲間との連携に失敗。ランダムな味方一人の《EP》を1D10点減少する。",
|
|
201
|
+
"攻撃は失敗だが、ネタとして大ウケ。《閲覧数》が1D10点増加する。",
|
|
202
|
+
]
|
|
203
|
+
),
|
|
204
|
+
"FATALT" => DiceTable::Table.new(
|
|
205
|
+
"致命傷表",
|
|
206
|
+
"1d10",
|
|
207
|
+
[
|
|
208
|
+
"行動不能。ダンジョンに身体を侵食される。異形トロフィーを1つ獲得する。",
|
|
209
|
+
"ドラマチックなやられ方で配信が盛り上がる。《閲覧数》が2D10点増加する。自身は行動不能になる。",
|
|
210
|
+
"お前も道連れだ!自分にダメージを与えた対象に同じダメージを与える。このダメージ減少できない。自身は行動不能になる。",
|
|
211
|
+
"奇跡が起きた!?〔幸運〕で難易度10の判定に成功すると受けたダメージを0にする。",
|
|
212
|
+
"致命傷だがまだ動ける!《EP》を1にする。「スリップ」のバステを受ける。",
|
|
213
|
+
"行動不能。ダンジョンに身体を侵食される。異形トロフィーを1つ獲得する。",
|
|
214
|
+
"行動不能。だが、タンマツにはまだエネルギーが残っている。1ラウンド後、《EP》を1にして戦線に復帰する。",
|
|
215
|
+
"走馬灯が過る!走馬灯に回避のアイデアが!〔反応〕で難易度10の判定に成功すると、受けたダメージを0にする。",
|
|
216
|
+
"死んだかと思ったが、ギリギリのところで持ちこたえる。《EP》を1にする。",
|
|
217
|
+
"行動不能。ダンジョンに身体を侵食される。異形トロフィーを1つ獲得する。",
|
|
218
|
+
]
|
|
219
|
+
),
|
|
220
|
+
"RESTT" => DiceTable::Table.new(
|
|
221
|
+
"休憩表",
|
|
222
|
+
"1d10",
|
|
223
|
+
[
|
|
224
|
+
"辺りを探索すると、ツールを発見する。誰かがここに残していたのだろうか?お宝表(レベル1~4)を一回振る。",
|
|
225
|
+
"希少な鉱床を発見。【ダンジョン資源(中級)】を一つ獲得。",
|
|
226
|
+
"自身の存在が大きくブレる。任意のアクションを一つ、別のアクションに変更してもよい。",
|
|
227
|
+
"素晴らしい戦術を思いつく。次回のバトルフェイズでの行動値判定で振ることができるダイスが1つ増える。",
|
|
228
|
+
"視聴者の無茶振りについつい応えてしまう。調子に乗りすぎて体力が…。 《EP》が1D10点減少する。《トレダカ》を1点獲得。",
|
|
229
|
+
"何気ない雑談配信。だが危うくリテラシーのない発言をしてしまい…。 〔魅力〕で難易度8の判定を行う。閲覧数が成功度分増加。判定に失敗した場合、「炎上」のバステを受ける。",
|
|
230
|
+
"休憩の合間にネットサーフィン。うわ!なんか変なリンク踏んだ!?〔技術〕で難易度9の判定を行う。失敗した場合、「フリーズ」のバステを受ける。成功した場合、奇跡的に冒険者用の通販サイトに繋がる。買い物を行うことができる。",
|
|
231
|
+
"急にタンマツのアプリのアップデートがはじまる。アップデートが重すぎて他の通信がうまくいかない!?〔幸運〕で難易度9の判定を行う。失敗した場合、「オフライン」のバステを受ける。成功した場合、タンマツのアプデが成功し、〔EP〕が全回復する。",
|
|
232
|
+
"バッチリ熟睡。しっかりとした休憩を取ることができた。〔EP〕が2D10点回復する。",
|
|
233
|
+
"やたら魔力の巡りがいい。絶好調ってやつか!?このセッションの間、すべての主能力が1点増加する。副能力の再計算を行うこと。",
|
|
234
|
+
]
|
|
235
|
+
),
|
|
236
|
+
"TERRIBLET" => DiceTable::Table.new(
|
|
237
|
+
"痛恨表",
|
|
238
|
+
"1d10",
|
|
239
|
+
[
|
|
240
|
+
"脳が揺さぶられた!「ブライン」のバステを付与する。",
|
|
241
|
+
"痛恨の一撃!最終的に与えるダメージが2倍になる。",
|
|
242
|
+
"肉体の動きを阻害する一撃!対象の《行動値》を0にする。",
|
|
243
|
+
"致命的な一撃!ダメージを与える代わりに、対象の《EP》を1にする。",
|
|
244
|
+
"追撃を決められてしまった!ダメージを2D10点追加する。",
|
|
245
|
+
"場外へ吹っ飛ばした!対象を戦場から取り除く。取り除かれた対象は、ラウンド終了時に最後尾に再配置する。",
|
|
246
|
+
"悔しいが見栄えする一撃だ!《閲覧数》が1D10点増加する。",
|
|
247
|
+
"衝撃が貫通する!アクションの対象になっていないキャラ1体を選択し、そのキャラにもダメージを与える。",
|
|
248
|
+
"意識の外から刈り取る一撃!このアクションに対して、対象は防御判定を行えない。また、スキル、アプリ、ツールによるダメージ減少も無視する。",
|
|
249
|
+
"魔力を奪う一撃!与えたダメージと同じ値だけ《EP》が回復する。",
|
|
250
|
+
]
|
|
251
|
+
),
|
|
252
|
+
"GETCT" => DiceTable::Table.new(
|
|
253
|
+
"お宝表(レベル1~4)",
|
|
254
|
+
"1d10",
|
|
255
|
+
[
|
|
256
|
+
"携帯食料を1つ手に入れた! ⇒54頁参照",
|
|
257
|
+
"エアバッグを1つ手に入れた! ⇒53頁参照",
|
|
258
|
+
"携帯テントを1つ手に入れた! ⇒54頁参照",
|
|
259
|
+
"特効薬を1つ手に入れた! ⇒52頁参照",
|
|
260
|
+
"ダンジョン資源(低級)を1つ手に入れた! ⇒55頁参照",
|
|
261
|
+
"スモークボールを1つ手に入れた! ⇒53頁参照",
|
|
262
|
+
"ポーションを1つ手に入れた! ⇒52頁参照",
|
|
263
|
+
"クイックポーションを1つ手に入れた! ⇒52頁参照",
|
|
264
|
+
"ダンジョン資源(低級)を1つ手に入れた! ⇒55頁参照",
|
|
265
|
+
"素晴らしい戦果で配信が盛り上がる!現在の閲覧数が1D10点上昇する。",
|
|
266
|
+
]
|
|
267
|
+
),
|
|
268
|
+
"GETRT" => DiceTable::Table.new(
|
|
269
|
+
"お宝表(レベル5~8)",
|
|
270
|
+
"1d10",
|
|
271
|
+
[
|
|
272
|
+
"携帯保健室を1つ手に入れた! ⇒54頁参照",
|
|
273
|
+
"マショウストーンを1つ手に入れた! ⇒55頁参照",
|
|
274
|
+
"ぬいぐるみ爆弾を1つ手に入れた! ⇒54頁参照",
|
|
275
|
+
"生命の粉塵を1つ手に入れた! ⇒52頁参照",
|
|
276
|
+
"ダンジョン資源(中級)を1つ手に入れた! ⇒55頁参照",
|
|
277
|
+
"パワーポーションを1つ手に入れた! ⇒52頁参照",
|
|
278
|
+
"クリティカッターを1つ手に入れた! ⇒53頁参照",
|
|
279
|
+
"ダンジョン資源(中級)を1つ手に入れた! ⇒55頁参照",
|
|
280
|
+
"ハイポーションを1つ手に入れた! ⇒52頁参照",
|
|
281
|
+
"素晴らしい戦果で配信が盛り上がる!現在の閲覧数が2D10点上昇する。",
|
|
282
|
+
]
|
|
283
|
+
),
|
|
284
|
+
"GETSRT" => DiceTable::Table.new(
|
|
285
|
+
"お宝表(レベル9~14)",
|
|
286
|
+
"1d10",
|
|
287
|
+
[
|
|
288
|
+
"携帯食料を1つ手に入れた! ⇒54頁参照",
|
|
289
|
+
"フウマスリケンを1つ手に入れた! ⇒55頁参照",
|
|
290
|
+
"ダンジョン資源(上級)を1つ手に入れた! ⇒55頁参照",
|
|
291
|
+
"生命の粉塵を1つ手に入れた! ⇒52頁参照",
|
|
292
|
+
"コンティニューコインを1つ手に入れた! ⇒52頁参照",
|
|
293
|
+
"ダンジョン資源(低級)を1D10個手に入れた! ⇒55頁参照",
|
|
294
|
+
"フィリピンバクチクを1つ手に入れた! ⇒55頁参照",
|
|
295
|
+
"ダンジョン資源(上級)を1つ手に入れた! ⇒55頁参照",
|
|
296
|
+
"携帯病院を1つ手に入れた! ⇒54頁参照",
|
|
297
|
+
"素晴らしい戦果で配信が盛り上がる!現在の閲覧数が4D10点上昇する。",
|
|
298
|
+
]
|
|
299
|
+
),
|
|
300
|
+
"GETURT" => DiceTable::Table.new(
|
|
301
|
+
"お宝表(レベル15~99)",
|
|
302
|
+
"1d10",
|
|
303
|
+
[
|
|
304
|
+
"ダンジョン資源(伝説)を1つ手に入れた! ⇒55頁参照",
|
|
305
|
+
"マショウストーンを1D10個手に入れた! ⇒55頁参照",
|
|
306
|
+
"エリキシルを1つ手に入れた! ⇒54頁参照",
|
|
307
|
+
"ダンジョン資源(伝説)を1つ手に入れた! ⇒55頁参照",
|
|
308
|
+
"盗賊の鍵を1つ手に入れた! ⇒53頁参照",
|
|
309
|
+
"コンティニューコインを1つ手に入れた! ⇒52頁参照",
|
|
310
|
+
"経験値を1つ手に入れた! ⇒55頁参照",
|
|
311
|
+
"ダイナマイトを1つ手に入れた! ⇒55頁参照",
|
|
312
|
+
"エリキシルを1つ手に入れた! ⇒54頁参照",
|
|
313
|
+
"素晴らしい戦果で配信が盛り上がる!現在の閲覧数が8D10点上昇する。",
|
|
314
|
+
]
|
|
315
|
+
),
|
|
316
|
+
}.freeze
|
|
317
|
+
|
|
318
|
+
register_prefix('\d+LL', TABLES.keys)
|
|
319
|
+
end
|
|
320
|
+
end
|
|
321
|
+
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module BCDice
|
|
4
|
+
module GameSystem
|
|
5
|
+
class Lost < Base
|
|
6
|
+
# ゲームシステムの識別子
|
|
7
|
+
ID = 'Lost'
|
|
8
|
+
|
|
9
|
+
# ゲームシステム名
|
|
10
|
+
NAME = '10_st'
|
|
11
|
+
|
|
12
|
+
# ゲームシステム名の読みがな
|
|
13
|
+
SORT_KEY = 'ろすと'
|
|
14
|
+
|
|
15
|
+
# ダイスボットの使い方
|
|
16
|
+
HELP_MESSAGE = <<~INFO_MESSAGETEXT
|
|
17
|
+
■ exp10_deX
|
|
18
|
+
特殊な10面ダイスをロールして、1の出目の数をカウントします。「a11_0ut」と「s10_th」を判定します。
|
|
19
|
+
X: ダイス数(省略時 1)
|
|
20
|
+
|
|
21
|
+
■ g01_denX
|
|
22
|
+
特殊な20面ダイスをロールして、「0_lation」かの判定をします。
|
|
23
|
+
X: ダイス数(省略時 1)
|
|
24
|
+
INFO_MESSAGETEXT
|
|
25
|
+
|
|
26
|
+
register_prefix('exp10_de', 'g01_den')
|
|
27
|
+
|
|
28
|
+
def eval_game_system_specific_command(command)
|
|
29
|
+
roll_explode(command) || roll_golden(command)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
def roll_explode(command)
|
|
35
|
+
m = /^exp10_de([+\-\d]+)?$/i.match(command)
|
|
36
|
+
unless m
|
|
37
|
+
return nil
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
times = m[1] ? Arithmetic.eval(m[1], round_type: round_type) : 1
|
|
41
|
+
if times.nil? || times <= 0
|
|
42
|
+
return nil
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
values = @randomizer.roll_barabara(times, 10).map do |v|
|
|
46
|
+
v <= 5 ? 1 : 0
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
is_allout = values.all? { |v| v == 1 }
|
|
50
|
+
is_sloth = values.all? { |v| v == 0 }
|
|
51
|
+
|
|
52
|
+
times_str = times > 1 ? times.to_i : ""
|
|
53
|
+
|
|
54
|
+
if is_allout
|
|
55
|
+
Result.success("(exp10_de#{times_str}) > [#{values.join(',')}] > a11_0ut")
|
|
56
|
+
elsif is_sloth
|
|
57
|
+
Result.failure("(exp10_de#{times_str}) > [#{values.join(',')}] > s10_th")
|
|
58
|
+
else
|
|
59
|
+
Result.new("(exp10_de#{times_str}) > [#{values.join(',')}] > #{values.count(1)}")
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def roll_golden(command)
|
|
64
|
+
m = /^g01_den([+\-\d]+)?$/i.match(command)
|
|
65
|
+
unless m
|
|
66
|
+
return nil
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
times = m[1] ? Arithmetic.eval(m[1], round_type: round_type) : 1
|
|
70
|
+
if times.nil? || times <= 0
|
|
71
|
+
return nil
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
values = @randomizer.roll_barabara(times, 20).map do |v|
|
|
75
|
+
v == 1 ? 1 : 0
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
is_olation = values.all? { |v| v == 0 }
|
|
79
|
+
times_str = times > 1 ? times.to_i : ""
|
|
80
|
+
|
|
81
|
+
if is_olation
|
|
82
|
+
Result.failure("(g01_den#{times_str}) > [#{values.join(',')}] > 0_lation")
|
|
83
|
+
else
|
|
84
|
+
Result.new("(g01_den#{times_str}) > [#{values.join(',')}]")
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "bcdice/base"
|
|
4
|
+
|
|
5
|
+
module BCDice
|
|
6
|
+
module GameSystem
|
|
7
|
+
class MagicPunk < Base
|
|
8
|
+
# ゲームシステムの識別子
|
|
9
|
+
ID = "MagicPunk"
|
|
10
|
+
|
|
11
|
+
# ゲームシステム名
|
|
12
|
+
NAME = "マジックパンクTRPG"
|
|
13
|
+
|
|
14
|
+
# ゲームシステム名の読みがな
|
|
15
|
+
SORT_KEY = "ましつくはんくTRPG"
|
|
16
|
+
|
|
17
|
+
HELP_MESSAGE = <<~TEXT
|
|
18
|
+
■ 判定 (nMPm)
|
|
19
|
+
nD20のダイスロールをして、m以下の目があれば成功。
|
|
20
|
+
mと同じ目があればジャックポット(自動成功)。
|
|
21
|
+
すべての目が1ならバッドビート(自動失敗)。
|
|
22
|
+
■ チャレンジ判定 (nMPmCx)
|
|
23
|
+
通常の判定に加えてチャレンジ値x以上の目が必要になる。
|
|
24
|
+
■ ダイス数0 (0MPmCx)
|
|
25
|
+
修正によりダイス数が0になった場合は2d20のダイスロールを行う。
|
|
26
|
+
2つの目からより悪い結果になる方を採用する。
|
|
27
|
+
TEXT
|
|
28
|
+
|
|
29
|
+
register_prefix('^\d*MP\d+')
|
|
30
|
+
|
|
31
|
+
def eval_game_system_specific_command(command)
|
|
32
|
+
return roll_mp(command)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
def roll_mp(command)
|
|
38
|
+
m = /^(\d*)MP(\d+)(C?)(\d*)$/.match(command)
|
|
39
|
+
return nil unless m
|
|
40
|
+
|
|
41
|
+
# 構文解析
|
|
42
|
+
dices = m[1].empty? ? 1 : m[1].to_i
|
|
43
|
+
spec = m[2].to_i
|
|
44
|
+
opt1 = m[3]
|
|
45
|
+
arg1 = m[4].to_i
|
|
46
|
+
# ダイス数0モードフラグ
|
|
47
|
+
is_zero = dices == 0
|
|
48
|
+
# チャレンジ値
|
|
49
|
+
challenge = opt1 == "C" ? arg1 : 0
|
|
50
|
+
# ダイスロール
|
|
51
|
+
dice_list = @randomizer.roll_barabara(is_zero ? 2 : dices, 20)
|
|
52
|
+
# 通常は1つ成功なら成功、0ダイス時はすべて成功したとき成功
|
|
53
|
+
check_method = is_zero ? :all? : :any?
|
|
54
|
+
# 通常はすべて失敗なら失敗、0ダイス時は1つ失敗したら失敗
|
|
55
|
+
fail_method = is_zero ? :any? : :all?
|
|
56
|
+
|
|
57
|
+
check = dice_list.public_send(check_method) { |d| d <= spec && challenge <= d } # 通常判定
|
|
58
|
+
is_jp = dice_list.public_send(check_method) { |d| d == spec } # ジャックポット判定
|
|
59
|
+
is_bb = dice_list.public_send(fail_method) { |d| d == 1 } # バッドビート判定
|
|
60
|
+
|
|
61
|
+
result = if is_bb # 自動失敗優先
|
|
62
|
+
is_jp = false
|
|
63
|
+
check = false
|
|
64
|
+
translate("MagicPunk.bad_beat")
|
|
65
|
+
elsif is_jp
|
|
66
|
+
check = true
|
|
67
|
+
translate("MagicPunk.jackpot")
|
|
68
|
+
elsif check
|
|
69
|
+
value_method = is_zero ? :min : :max
|
|
70
|
+
value = dice_list.select { |d| d <= spec }.public_send(value_method)
|
|
71
|
+
translate("MagicPunk.success", value: value)
|
|
72
|
+
else
|
|
73
|
+
translate("failure")
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
return Result.new.tap do |r|
|
|
77
|
+
r.fumble = is_bb
|
|
78
|
+
r.critical = is_jp
|
|
79
|
+
r.condition = check
|
|
80
|
+
r.text = "(#{dices}MP#{spec}C#{challenge}) > [#{dice_list.join(',')}] > #{result}"
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "bcdice/game_system/MagicPunk"
|
|
4
|
+
|
|
5
|
+
module BCDice
|
|
6
|
+
module GameSystem
|
|
7
|
+
class MagicPunk_Korean < MagicPunk
|
|
8
|
+
# ゲームシステムの識別子
|
|
9
|
+
ID = "MagicPunk:Korean"
|
|
10
|
+
|
|
11
|
+
# ゲームシステム名
|
|
12
|
+
NAME = "매직펑크TRPG"
|
|
13
|
+
|
|
14
|
+
# ゲームシステム名の読みがな
|
|
15
|
+
SORT_KEY = "国際化:Korean:매직펑크TRPG"
|
|
16
|
+
|
|
17
|
+
HELP_MESSAGE = <<~TEXT
|
|
18
|
+
■ 판정 (nMPm)
|
|
19
|
+
nD20을 굴려, m 이하의 눈이 있으면 성공.
|
|
20
|
+
m과 같은 눈이 있으면 잭팟(자동 성공).
|
|
21
|
+
모든 눈이 1이면 배드 비트(자동 실패).
|
|
22
|
+
|
|
23
|
+
■ 챌린지 판정 (nMPmCx)
|
|
24
|
+
통상 판정에 더해, 챌린지 값 x 이상의 눈이 필요.
|
|
25
|
+
|
|
26
|
+
■ 주사위 수 0개 (0MPmCx)
|
|
27
|
+
수정치 등으로 주사위 수가 0개가 된 경우 2d20을 굴림.
|
|
28
|
+
두 개의 눈 중 더 나쁜 쪽의 결과를 적용.
|
|
29
|
+
TEXT
|
|
30
|
+
|
|
31
|
+
register_prefix_from_super_class()
|
|
32
|
+
|
|
33
|
+
def initialize(command)
|
|
34
|
+
super(command)
|
|
35
|
+
@locale = :ko_kr
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|