bcdice 3.16.1 → 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 +111 -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/Dracurouge/ko_kr.yml +1284 -205
- data/i18n/Emoklore/ja_jp.yml +1 -0
- data/i18n/Emoklore/ko_kr.yml +1 -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/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/Emoklore.rb +34 -9
- data/lib/bcdice/game_system/Emoklore_Korean.rb +10 -2
- 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/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 +8 -213
- 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/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 +7 -81
- 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 +6 -95
- 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/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 +42 -0
- data/lib/bcdice/version.rb +1 -1
- metadata +87 -2
|
@@ -22,21 +22,21 @@ module BCDice
|
|
|
22
22
|
2WAF6+3
|
|
23
23
|
2WAI9R3
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
難易度指定:達成数のカウント、判定成功と失敗、(Rageダイスがある場合)Brutal outcome、クリティカル処理、完全失敗/Total Failure、クリティカル成功のチェックを行う
|
|
26
26
|
例) (難易度)WAF(通常ダイス)+(Rageダイス)
|
|
27
27
|
(難易度)WAF(通常ダイス)
|
|
28
28
|
(難易度)WAI(通常ダイス)R(Rageダイス)
|
|
29
29
|
(難易度)WAI(通常ダイス)
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
難易度省略:達成数のカウント、判定失敗、(Rageダイスがある場合)Brutal outcome、クリティカル処理、完全失敗のチェックを行う
|
|
32
32
|
判定成功チェックを行わない
|
|
33
|
-
Critical Winのヒントを出力
|
|
33
|
+
クリティカル成功/Critical Winのヒントを出力
|
|
34
34
|
例) WAF(通常ダイス)+(Rageダイス)
|
|
35
35
|
WAF(通常ダイス)
|
|
36
36
|
WAI(通常ダイス)R(Rageダイス)
|
|
37
37
|
WAI(通常ダイス)
|
|
38
38
|
|
|
39
|
-
難易度0
|
|
39
|
+
難易度0指定:クリティカル処理と達成数のカウントを行い、全てのチェックを行わない
|
|
40
40
|
例) 0WAF(通常ダイス)+(Rageダイス)
|
|
41
41
|
0WAF(通常ダイス)
|
|
42
42
|
0WAI(通常ダイス)+(Rageダイス)
|
|
@@ -57,15 +57,12 @@ module BCDice
|
|
|
57
57
|
register_prefix('\d*(WAF|(WAI\d*(R\d?)?))')
|
|
58
58
|
|
|
59
59
|
def eval_game_system_specific_command(command)
|
|
60
|
-
m = /\A(\d+)?(((WAF)(
|
|
60
|
+
m = /\A(\d+)?(((WAF)(-?\d+)(\+(\d+))?)|((WAI)(-?\d+)(R(\d+))?))$/.match(command)
|
|
61
61
|
unless m
|
|
62
62
|
return ''
|
|
63
63
|
end
|
|
64
64
|
|
|
65
65
|
dice_pool, rage_dice_pool = get_dice_pools(m)
|
|
66
|
-
if dice_pool < 0
|
|
67
|
-
return "ダイスプール0のときにRageダイスは指定できません。"
|
|
68
|
-
end
|
|
69
66
|
if rage_dice_pool > 5
|
|
70
67
|
return "5を超えるRageダイス指定はできません。"
|
|
71
68
|
end
|
|
@@ -102,6 +99,10 @@ module BCDice
|
|
|
102
99
|
# Rage Diceを内数処理するの場合
|
|
103
100
|
rage_dice_pool = m[RAGE_DICE_INCLUDED_INDEX].nil? ? -1 : m[RAGE_DICE_INCLUDED_INDEX].to_i
|
|
104
101
|
dice_pool_value = m[DICE_POOL_RAGE_DICE_INCLUDED_INDEX].to_i
|
|
102
|
+
if dice_pool_value <= 0
|
|
103
|
+
# ダイスプールが0のとき、最低保証ダイスプールであるダイスプール1にする
|
|
104
|
+
dice_pool_value = 1
|
|
105
|
+
end
|
|
105
106
|
dice_pool = dice_pool_value - (rage_dice_pool < 0 ? 0 : rage_dice_pool)
|
|
106
107
|
if dice_pool_value > 0 && rage_dice_pool >= dice_pool_value
|
|
107
108
|
# 1 以上のダイスプール、かつ、Rageダイスがダイスプール以上のとき、ダイスプールが全てRageダイスになる。
|
|
@@ -112,6 +113,10 @@ module BCDice
|
|
|
112
113
|
# Rage DiceがPLによる内数指定の場合
|
|
113
114
|
rage_dice_pool = m[RAGE_DICE_NO_INCLUDED_INDEX].nil? ? -1 : m[RAGE_DICE_NO_INCLUDED_INDEX].to_i
|
|
114
115
|
dice_pool = m[DICE_POOL_RAGE_DICE_NO_INCLUDED_INDEX].to_i
|
|
116
|
+
if dice_pool <= 0 && rage_dice_pool <= 0
|
|
117
|
+
# ダイスプールとrageダイスどちらも0指定のとき、最低保証ダイスプールである1ダイスプールにする
|
|
118
|
+
dice_pool = 1
|
|
119
|
+
end
|
|
115
120
|
end
|
|
116
121
|
return dice_pool, rage_dice_pool
|
|
117
122
|
end
|
|
@@ -121,35 +126,35 @@ module BCDice
|
|
|
121
126
|
|
|
122
127
|
if brutal_outcome > 0 && difficulty != 0
|
|
123
128
|
success_dice += 4
|
|
124
|
-
result_text = "#{result_text} [Brutal outcome] 自動失敗、または
|
|
129
|
+
result_text = "#{result_text} [Brutal outcome] 自動失敗、または 達成数=#{success_dice}"
|
|
125
130
|
else
|
|
126
|
-
result_text = "#{result_text}
|
|
131
|
+
result_text = "#{result_text} 達成数=#{success_dice}"
|
|
127
132
|
end
|
|
128
133
|
|
|
129
134
|
if difficulty > 0
|
|
130
135
|
result_text = "#{result_text} 難易度=#{difficulty}"
|
|
131
136
|
if success_dice >= difficulty
|
|
132
|
-
result_text = "#{result_text}
|
|
137
|
+
result_text = "#{result_text} 上回り=#{success_dice - difficulty}"
|
|
133
138
|
|
|
134
139
|
if is_critical
|
|
135
|
-
result_data = Result.critical("#{result_text}:判定成功! [Critical Win]")
|
|
140
|
+
result_data = Result.critical("#{result_text}:判定成功! [クリティカル成功/Critical Win]")
|
|
136
141
|
return brutal_outcome > 0 ? result_data.text : result_data
|
|
137
142
|
end
|
|
138
143
|
result_data = Result.success("#{result_text}:判定成功!")
|
|
139
144
|
return brutal_outcome > 0 ? result_data.text : result_data
|
|
140
145
|
else
|
|
141
146
|
if success_dice == 0
|
|
142
|
-
return Result.fumble("#{result_text}:判定失敗! [Total Failure]")
|
|
147
|
+
return Result.fumble("#{result_text}:判定失敗! [完全失敗/Total Failure]")
|
|
143
148
|
else
|
|
144
149
|
return Result.failure("#{result_text}:判定失敗!")
|
|
145
150
|
end
|
|
146
151
|
end
|
|
147
152
|
elsif difficulty < 0
|
|
148
153
|
if success_dice == 0
|
|
149
|
-
return Result.fumble("#{result_text}:判定失敗! [Total Failure]")
|
|
154
|
+
return Result.fumble("#{result_text}:判定失敗! [完全失敗/Total Failure]")
|
|
150
155
|
else
|
|
151
156
|
if is_critical
|
|
152
|
-
result_text = "#{result_text}\n 判定成功なら [Critical Win]"
|
|
157
|
+
result_text = "#{result_text}\n 判定成功なら [クリティカル成功/Critical Win]"
|
|
153
158
|
end
|
|
154
159
|
return result_text.to_s
|
|
155
160
|
end
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module BCDice
|
|
4
|
+
module GameSystem
|
|
5
|
+
class WorldEndScrapyard < Base
|
|
6
|
+
# ゲームシステムの識別子
|
|
7
|
+
ID = 'WorldEndScrapyard'
|
|
8
|
+
|
|
9
|
+
# ゲームシステム名
|
|
10
|
+
NAME = 'World End scrapyard'
|
|
11
|
+
|
|
12
|
+
# ゲームシステム名の読みがな
|
|
13
|
+
SORT_KEY = 'わあるとえんとすくらつふやあと'
|
|
14
|
+
|
|
15
|
+
# ダイスボットの使い方
|
|
16
|
+
HELP_MESSAGE = <<~INFO_MESSAGETEXT
|
|
17
|
+
■判定 WES<=t t:成功率({能力値}+{悪運})
|
|
18
|
+
能力値は(筋力・敏捷・器用・知識・魅力)のいずれか。
|
|
19
|
+
成功・失敗・差分値を表示する。
|
|
20
|
+
|
|
21
|
+
例)WES<=20+10:能力値20,悪運10で判定し、その結果を表示する。
|
|
22
|
+
WES<=30: 悪運30で判定し、その結果を表示する。
|
|
23
|
+
|
|
24
|
+
■各種表
|
|
25
|
+
・《変異表》 HEN HENC(任意選択,RoCのC)
|
|
26
|
+
・《発掘表》 HAK HAKC( 同上 )
|
|
27
|
+
・《PC/NPC関係性表》 KAN
|
|
28
|
+
・《シナリオの目的表》 MOK
|
|
29
|
+
・《シナリオの場所表》 BAS
|
|
30
|
+
・《登場NPC表》 TOJ
|
|
31
|
+
・《探索表》 TANx+b (x:レベル,1~5 b:修正+5)
|
|
32
|
+
INFO_MESSAGETEXT
|
|
33
|
+
|
|
34
|
+
register_prefix("WES", "HEN", "HAK", "KAN", "MOK", "BAS", "TOJ", "TAN")
|
|
35
|
+
|
|
36
|
+
def initialize(command)
|
|
37
|
+
super(command)
|
|
38
|
+
|
|
39
|
+
@round_type = RoundType::CEIL
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def eval_game_system_specific_command(command)
|
|
43
|
+
resolute_action(command) ||
|
|
44
|
+
roll_roc_table(command) ||
|
|
45
|
+
roll_search_table(command) ||
|
|
46
|
+
roll_tables(command, TABLES)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
|
|
51
|
+
# 技能判定
|
|
52
|
+
# @param [String] command
|
|
53
|
+
# @return [Result]
|
|
54
|
+
def resolute_action(command)
|
|
55
|
+
m = /^WES<=((\d+)([+]\d+)?)/.match(command)
|
|
56
|
+
return nil unless m
|
|
57
|
+
|
|
58
|
+
target =
|
|
59
|
+
if m[1].empty?
|
|
60
|
+
nil
|
|
61
|
+
else
|
|
62
|
+
Arithmetic.eval(m[1], @round_type)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
if target.nil?
|
|
66
|
+
return nil
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
dice = @randomizer.roll_once(100)
|
|
70
|
+
|
|
71
|
+
return Result.new.tap do |result|
|
|
72
|
+
result.condition = (dice <= target)
|
|
73
|
+
diff = target - dice
|
|
74
|
+
|
|
75
|
+
sequence = [
|
|
76
|
+
"(WES<=#{target})",
|
|
77
|
+
dice.to_s,
|
|
78
|
+
result.success? ? "成功" : "失敗",
|
|
79
|
+
"差分値#{diff}"
|
|
80
|
+
].compact
|
|
81
|
+
|
|
82
|
+
result.text = sequence.join(" > ")
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# 変異表
|
|
87
|
+
VARIATION_TABLE = [
|
|
88
|
+
"0:[回復不能]状態になります。",
|
|
89
|
+
"1:[異形]状態になります。",
|
|
90
|
+
"2:[大型]状態になります([小柄]状態だった場合でも)",
|
|
91
|
+
"3: 特に効果はありませんが『外見』を自由に変更させても構いません。",
|
|
92
|
+
"4:《悪運》以外の《能力値》を【2つ】を『ランダム』で選んで、その《能力値》の数値を入れ替えます。",
|
|
93
|
+
"5:《悪運》以外の《能力値》を【2つ】を『任意』で選んで、その《能力値》の数値を入れ替えます。",
|
|
94
|
+
"6: 特に効果はありません。",
|
|
95
|
+
"7:[小柄]状態になります([大型]状態だった場合でも)",
|
|
96
|
+
"8:《悪運》以外の《能力値》【5つ】の数値を【10点単位】で再分配します。",
|
|
97
|
+
"9:[異形]状態を打ち消します。",
|
|
98
|
+
].freeze
|
|
99
|
+
|
|
100
|
+
# 発掘表
|
|
101
|
+
EXCAVATION_TABLE = [
|
|
102
|
+
"0: なにも発見できなかった。",
|
|
103
|
+
"1:《悪運》を【レベル×3点】減少させる。",
|
|
104
|
+
"2: なにも発見できなかった。",
|
|
105
|
+
"3:《悪運》を【レベル×3点】上昇させる。",
|
|
106
|
+
"4: 何かの『物資・材料?』を発見する(内容はGM/PCで相談する)",
|
|
107
|
+
"5:《煙草》3本分、または《弾薬》3発分のどちらか【1つ】を得る。",
|
|
108
|
+
"6: 壊れた『日用品?』を発見する(内容はGM/PCの相談で決める)",
|
|
109
|
+
"7:《消費アイテム》をランダムで【1つ】を得る。",
|
|
110
|
+
"8: 壊れた『家具類?』を発見する(内容はGM/PCの相談で決める)",
|
|
111
|
+
"9:《装備アイテム》をランダムで【1つ】を得る。",
|
|
112
|
+
].freeze
|
|
113
|
+
|
|
114
|
+
# 探索表
|
|
115
|
+
SEARCH_TABLE = [
|
|
116
|
+
"06:エネミー:レベル1『スカベンジャー』PC数×1体と遭遇する。",
|
|
117
|
+
"07:なにもなし。",
|
|
118
|
+
"08:エネミー:レベル1『下水ネズミの群れ』PC数×2体と遭遇する。",
|
|
119
|
+
"09:なにもなし。",
|
|
120
|
+
"10:《対抗判定:魅力/成功率35》を行い、勝利時に《発掘表》を1回振る。",
|
|
121
|
+
"11:なにもなし。",
|
|
122
|
+
"12:《行為判定:魅力》の成功時、次回《探索表》の結果に【+5】を加える。",
|
|
123
|
+
"13:なにもなし。",
|
|
124
|
+
"14:《悪運》を【PCのレベル×3点】上昇させる。",
|
|
125
|
+
"15:行商人から【1レベル】までの《消費/装備アイテム》を交換・購入できる。",
|
|
126
|
+
"16:エネミー:レベル2『粗暴な自警団』PC数×1体と遭遇する。",
|
|
127
|
+
"17:なにもなし。",
|
|
128
|
+
"18:エネミー:レベル2『バイオゾンビ』PC数×2体と遭遇する。",
|
|
129
|
+
"19:なにもなし。",
|
|
130
|
+
"20:《対抗判定:知識/成功率40》を行い、勝利時に《発掘表》を1回振る。",
|
|
131
|
+
"21:なにもなし。",
|
|
132
|
+
"22:《行為判定:知識》の成功時、次回《探索表》の結果に【+5】を加える。",
|
|
133
|
+
"23:なにもなし。",
|
|
134
|
+
"24:《悪運》を【PCのレベル×3点】上昇させる。",
|
|
135
|
+
"25:行商人から【3レベル】までの《消費/装備アイテム》を交換・購入できる。",
|
|
136
|
+
"26:エネミー:レベル3『ピットスパイダー』PC数×1体と遭遇する。",
|
|
137
|
+
"27:なにもなし。",
|
|
138
|
+
"28:エネミー:レベル3『バイオグール』PC数×2体と遭遇する。",
|
|
139
|
+
"29:なにもなし。",
|
|
140
|
+
"30:《対抗判定:器用/成功率45》を行い、勝利時に《発掘表》を1回振る。",
|
|
141
|
+
"31:なにもなし。",
|
|
142
|
+
"32:《行為判定:器用》の成功時、次回《探索表》の結果に【+5】を加える。",
|
|
143
|
+
"33:なにもなし。",
|
|
144
|
+
"34:《悪運》を【PCのレベル×3点】上昇させる。",
|
|
145
|
+
"35:行商人から【5レベル】までの《消費/装備アイテム》を交換・購入できる。",
|
|
146
|
+
"36:エネミー:レベル4『暴走オートマトン』PC数×1体と遭遇する。",
|
|
147
|
+
"37:なにもなし。",
|
|
148
|
+
"38:エネミー:レベル4『ネクロソルジャー』PC数×2体と遭遇する。",
|
|
149
|
+
"39:なにもなし。",
|
|
150
|
+
"40:《対抗判定:敏捷/成功率50》を行い、勝利時に《発掘表》を1回振る。",
|
|
151
|
+
].freeze
|
|
152
|
+
|
|
153
|
+
def roll_roc_table(command)
|
|
154
|
+
m = /^(HEN|HAK)(C)?/.match(command)
|
|
155
|
+
return nil unless m
|
|
156
|
+
|
|
157
|
+
sequence = []
|
|
158
|
+
result_text = ""
|
|
159
|
+
cmd = m[1]
|
|
160
|
+
|
|
161
|
+
target_table = []
|
|
162
|
+
case cmd
|
|
163
|
+
when "HEN"
|
|
164
|
+
sequence.push("変異表")
|
|
165
|
+
target_table = VARIATION_TABLE
|
|
166
|
+
when "HAK"
|
|
167
|
+
sequence.push("発掘表")
|
|
168
|
+
target_table = EXCAVATION_TABLE
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
if m[2].nil?
|
|
172
|
+
result_text = target_table[@randomizer.roll_once(10) - 1]
|
|
173
|
+
else
|
|
174
|
+
roc_table_all = []
|
|
175
|
+
[0..9].each do |i|
|
|
176
|
+
roc_table_all.push(target_table[i])
|
|
177
|
+
end
|
|
178
|
+
result_text = roc_table_all.join("\n")
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
return Result.new.tap do |result|
|
|
182
|
+
sequence.push(result_text)
|
|
183
|
+
result.text = sequence.join(" > ")
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
def roll_search_table(command)
|
|
188
|
+
m = /^(TAN)([1-5])([+]5)?/.match(command)
|
|
189
|
+
return nil unless m
|
|
190
|
+
|
|
191
|
+
sequence = ["探索表"]
|
|
192
|
+
level = m[2].to_i
|
|
193
|
+
mod =
|
|
194
|
+
if m[3].nil?
|
|
195
|
+
0
|
|
196
|
+
else
|
|
197
|
+
Arithmetic.eval(m[3], @round_type)
|
|
198
|
+
end
|
|
199
|
+
idx = level * 5 + @randomizer.roll_once(10) + mod
|
|
200
|
+
result_text = SEARCH_TABLE[idx - 6]
|
|
201
|
+
|
|
202
|
+
return Result.new.tap do |result|
|
|
203
|
+
sequence.push(result_text)
|
|
204
|
+
result.text = sequence.join(" > ")
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
TABLES = {
|
|
208
|
+
"KAN" => DiceTable::RangeTable.new(
|
|
209
|
+
"PC/NPC関係性表",
|
|
210
|
+
"1D10",
|
|
211
|
+
[
|
|
212
|
+
[1, '物心付いた時からの長い幼馴染'],
|
|
213
|
+
[2..3, '旅立った頃からの始まりの仲間'],
|
|
214
|
+
[4..5, 'なにかどうしようもない腐れ縁'],
|
|
215
|
+
[6..7, '既に互いの腕を信用できる同志'],
|
|
216
|
+
[8..9, '未だ相手を良く知らない同業者'],
|
|
217
|
+
[10, 'いま出会ったばかりの仕事相手'],
|
|
218
|
+
]
|
|
219
|
+
),
|
|
220
|
+
"MOK" => DiceTable::RangeTable.new(
|
|
221
|
+
"シナリオの目的表",
|
|
222
|
+
"1D100",
|
|
223
|
+
[
|
|
224
|
+
[1..6, '目的の物品を入手する'],
|
|
225
|
+
[7..12, '目的の情報を入手する'],
|
|
226
|
+
[13..18, '目的の人物と接触する'],
|
|
227
|
+
[19..24, '目的の人物を防衛する'],
|
|
228
|
+
[25..30, '目的の人物を救出する'],
|
|
229
|
+
[31..37, '場所を調査・探索する'],
|
|
230
|
+
[38..44, '場所を通過・突破する'],
|
|
231
|
+
[45..51, '場所を制圧・破壊する'],
|
|
232
|
+
[52..58, '場所から脱出する'],
|
|
233
|
+
[59..65, '場所を防衛する'],
|
|
234
|
+
[66..73, '敵目標を討伐する'],
|
|
235
|
+
[74..80, '敵目標を捕獲する'],
|
|
236
|
+
[81..87, '敵目標と和解する'],
|
|
237
|
+
[88..94, '敵目標を追跡する'],
|
|
238
|
+
[95..99, '敵目標から逃走する'],
|
|
239
|
+
[100, 'その他(GMの裁量で決めて良い)'],
|
|
240
|
+
]
|
|
241
|
+
),
|
|
242
|
+
"BAS" => DiceTable::RangeTable.new(
|
|
243
|
+
"シナリオの場所表",
|
|
244
|
+
"1D100",
|
|
245
|
+
[
|
|
246
|
+
[1..7, '小規模コミュニティ〈シヴィラツィオ〉が主体。'],
|
|
247
|
+
[8..9, '小規模コミュニティ〈ペルディトゥス〉小種族区分が混在している。'],
|
|
248
|
+
[10, '小規模コミュニティ〈ペルディトゥス:トロウル〉が主体。'],
|
|
249
|
+
[11, '小規模コミュニティ〈ペルディトゥス:オーガ〉が主体。'],
|
|
250
|
+
[12, '小規模コミュニティ〈ペルディトゥス:ゴブ〉が主体。'],
|
|
251
|
+
[13, '小規模コミュニティ〈ペルディトゥス:アドラー〉が主体。'],
|
|
252
|
+
[14, '小規模コミュニティ〈ペルディトゥス:ドヴェルク〉が主体。'],
|
|
253
|
+
[15..19, '小規模コミュニティ〈フラグメンテ・マキナ〉が主体。'],
|
|
254
|
+
[20..24, '小規模コミュニティ〈サバイバーズ〉が主体。'],
|
|
255
|
+
[25..29, '小規模コミュニティ〈チルドレンズ〉が主体。'],
|
|
256
|
+
[30..35, '大規模コミュニティ(すべての種族が混在している)'],
|
|
257
|
+
[36..38, '廃墟〈シヴィラツィオ〉の住居跡など。'],
|
|
258
|
+
[39..41, '廃墟〈ペルディトゥス〉の森林や洞窟。'],
|
|
259
|
+
[42..44, '廃墟〈フラグメンテ・マキナ〉の機械施設。'],
|
|
260
|
+
[45..47, '廃墟〈サバイバーズ〉のバラックやキャンプ跡。'],
|
|
261
|
+
[48..50, '廃墟〈チルドレンズ〉のスラム跡や下水道など。'],
|
|
262
|
+
[51, '遺跡《テックレベル》2(神域の神殿など)'],
|
|
263
|
+
[52..56, '遺跡《テックレベル》3(古代の城塞など)'],
|
|
264
|
+
[57..64, '遺跡《テックレベル》5(廃ビルや研究所など)'],
|
|
265
|
+
[65..69, '遺跡《テックレベル》7(壊れた軌道エレベータなど)'],
|
|
266
|
+
[70, '遺跡《テックレベル》8(墜された恒星間宇宙艦など)'],
|
|
267
|
+
[71..80, '荒野'],
|
|
268
|
+
[81..86, '森林'],
|
|
269
|
+
[87..92, '沼沢'],
|
|
270
|
+
[93..99, '汚染領域(放射能や高密度魔力や生物汚染で汚染されている)'],
|
|
271
|
+
[100, 'その他(GMの裁量で決めて良い)'],
|
|
272
|
+
]
|
|
273
|
+
),
|
|
274
|
+
"TOJ" => DiceTable::RangeTable.new(
|
|
275
|
+
"登場NPC表",
|
|
276
|
+
"1D100",
|
|
277
|
+
[
|
|
278
|
+
[1..2, '勇敢な小動物(子犬など)'],
|
|
279
|
+
[3..4, '温厚な乗輓用生物(ロバなど)'],
|
|
280
|
+
[5..6, '何もかも諦めた無気力な孤児'],
|
|
281
|
+
[7..8, '汚染で奇病を抱える賢い子供'],
|
|
282
|
+
[9..10, 'トラウマで言葉を失った無口な子供'],
|
|
283
|
+
[11..12, '暴力しか知らない戦闘狂の野生少年'],
|
|
284
|
+
[13..14, '昔の歌を歌い続ける夢見がちな少女'],
|
|
285
|
+
[15..16, '仲間を守るために戦う熱血漢の少年'],
|
|
286
|
+
[17..18, '物資を溜め込む利己主義な銭ゲバ少女'],
|
|
287
|
+
[19..20, '盗みが得意で小生意気なスラムの少年'],
|
|
288
|
+
[21..22, '人を裏切ることに躊躇しない狡猾な少女'],
|
|
289
|
+
[23..24, '機械いじりが得意な天才メカニック少年'],
|
|
290
|
+
[25..26, '大人を信用せず一人で生き延びる孤独な少女'],
|
|
291
|
+
[27..28, '早く大人にならざるを得なかった冷徹な少年兵'],
|
|
292
|
+
[29..30, '過去の文明に憧れ、古い本を読み漁る知識少女'],
|
|
293
|
+
[31..32, '復讐に燃える元軍人'],
|
|
294
|
+
[33..34, '薬物中毒の荒くれ戦士'],
|
|
295
|
+
[35..36, '冷酷だが仲間思いの傭兵'],
|
|
296
|
+
[37..38, '汚染地帯に潜む孤独な狩人'],
|
|
297
|
+
[39..40, 'カルト教団の狂信な宣教師'],
|
|
298
|
+
[41..42, '医術を独学で身につけた流れ者'],
|
|
299
|
+
[43..44, '金儲けと裏切りが得意な詐欺師'],
|
|
300
|
+
[45..46, '植物栽培に没頭する農業主義者'],
|
|
301
|
+
[47..48, '家族を探し続ける高潔な放浪者'],
|
|
302
|
+
[49..50, '話題を売りさばく胡散臭い情報屋'],
|
|
303
|
+
[51..52, 'コミュニティを守る厳格すぎる保安官'],
|
|
304
|
+
[53..54, '機械やロボットを操る天才エンジニア'],
|
|
305
|
+
[55..56, '奴隷売買を生業とする冷血な奴隷商人'],
|
|
306
|
+
[57..58, '倫理を失ったマッドサイエンティスト'],
|
|
307
|
+
[59..60, 'ロックで人々を鼓舞する放浪の演奏者'],
|
|
308
|
+
[61..62, '酒とギャンブルに溺れる自暴自棄な中年'],
|
|
309
|
+
[63..64, '汚染地帯を探索するトレジャーハンター'],
|
|
310
|
+
[65..66, '美しい外見で人を操るサイコパスな美女'],
|
|
311
|
+
[67..68, '過去の罪に苛まれる贖罪意識の強い戦士'],
|
|
312
|
+
[69..70, 'コミュニティ周辺を操る豪腕フィクサー'],
|
|
313
|
+
[71..72, '戦争の記憶を引きずる老兵'],
|
|
314
|
+
[73..74, '何も信じず虚無的な哲学者'],
|
|
315
|
+
[75..76, '権力欲が強く独裁的な集落支配者'],
|
|
316
|
+
[77..78, '過去の文明の知識を伝える語り部'],
|
|
317
|
+
[79..80, '薬草や民間療法に詳しい薬師の老婆'],
|
|
318
|
+
[81..82, '隠し物資を山ほど持つ強欲な蓄財家'],
|
|
319
|
+
[83..84, '落ちぶれたかつてのカリスマ的預言者'],
|
|
320
|
+
[85..86, '最後の正義を信じる老いた保安官代理'],
|
|
321
|
+
[87..88, 'コミュニティの厳しくも公正な指導者'],
|
|
322
|
+
[89..90, '疲れ果てたが諦めきれない不屈の老婆'],
|
|
323
|
+
[91..92, '汚染に体を蝕まれながらも戦う頑固親父'],
|
|
324
|
+
[93..94, '最高の銃を作る頑固なガンスミスの職人'],
|
|
325
|
+
[95..96, '交易路を熟知した熟練のキャラバン隊長'],
|
|
326
|
+
[97..98, '情報データベースの無機質な対話型AI'],
|
|
327
|
+
[99..100, '古い時空に存在していた高慢な魔法知性'],
|
|
328
|
+
]
|
|
329
|
+
),
|
|
330
|
+
}.freeze
|
|
331
|
+
end
|
|
332
|
+
end
|
|
333
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'bcdice/game_system/WorldsEndFrontline'
|
|
4
|
+
|
|
5
|
+
module BCDice
|
|
6
|
+
module GameSystem
|
|
7
|
+
class WorldsEndFrontline_Korean < WorldsEndFrontline
|
|
8
|
+
# ゲームシステムの識別子
|
|
9
|
+
ID = 'WorldsEndFrontline:Korean'
|
|
10
|
+
|
|
11
|
+
# ゲームシステム名
|
|
12
|
+
NAME = '월드 엔드 프론트라인'
|
|
13
|
+
|
|
14
|
+
# ゲームシステム名の読みがな
|
|
15
|
+
SORT_KEY = '国際化:Korean:월드 엔드 프론트라인'
|
|
16
|
+
|
|
17
|
+
register_prefix_from_super_class()
|
|
18
|
+
|
|
19
|
+
def initialize(command)
|
|
20
|
+
super(command)
|
|
21
|
+
|
|
22
|
+
@locale = :ko_kr
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -196,26 +196,26 @@ module BCDice
|
|
|
196
196
|
end
|
|
197
197
|
|
|
198
198
|
def make_result_with_yze(dice_count_text, dice_text)
|
|
199
|
-
result_text = "#{dice_count_text} > #{dice_text}
|
|
199
|
+
result_text = "#{dice_count_text} > #{dice_text} #{translate('YearZeroEngine.success_count')}:#{@total_success_dice}"
|
|
200
200
|
if @difficulty > 0
|
|
201
201
|
if @total_success_dice >= @difficulty
|
|
202
|
-
return Result.success("#{result_text}
|
|
202
|
+
return Result.success("#{result_text} #{translate('YearZeroEngine.difficulty')}=#{@difficulty}:#{translate('YearZeroEngine.success_msg')}")
|
|
203
203
|
else
|
|
204
|
-
return Result.failure("#{result_text}
|
|
204
|
+
return Result.failure("#{result_text} #{translate('YearZeroEngine.difficulty')}=#{@difficulty}:#{translate('YearZeroEngine.failure_msg')}")
|
|
205
205
|
end
|
|
206
206
|
end
|
|
207
207
|
return result_text
|
|
208
208
|
end
|
|
209
209
|
|
|
210
210
|
def make_result_with_myz(dice_count_text, dice_text)
|
|
211
|
-
result_text = "#{dice_count_text} > #{dice_text}
|
|
212
|
-
atter_text = "\n
|
|
211
|
+
result_text = "#{dice_count_text} > #{dice_text} #{translate('YearZeroEngine.success_count')}:#{@total_success_dice}"
|
|
212
|
+
atter_text = "\n#{translate('YearZeroEngine.roll_one')}:[#{translate('YearZeroEngine.ability')}:#{@base_botch_dice},#{translate('YearZeroEngine.skill')}:#{@skill_botch_dice},#{translate('YearZeroEngine.item')}:#{@gear_botch_dice}) #{translate('YearZeroEngine.pushable')}=#{@push_dice}#{translate('YearZeroEngine.dice')}"
|
|
213
213
|
|
|
214
214
|
if @difficulty > 0
|
|
215
215
|
if @total_success_dice >= @difficulty
|
|
216
|
-
return Result.success("#{result_text}
|
|
216
|
+
return Result.success("#{result_text} #{translate('YearZeroEngine.difficulty')}=#{@difficulty}:#{translate('YearZeroEngine.success_msg')}#{atter_text}")
|
|
217
217
|
else
|
|
218
|
-
return Result.failure("#{result_text}
|
|
218
|
+
return Result.failure("#{result_text} #{translate('YearZeroEngine.difficulty')}=#{@difficulty}:#{translate('YearZeroEngine.failure_msg')}#{atter_text}")
|
|
219
219
|
end
|
|
220
220
|
end
|
|
221
221
|
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'bcdice/game_system/YearZeroEngine'
|
|
4
|
+
|
|
5
|
+
module BCDice
|
|
6
|
+
module GameSystem
|
|
7
|
+
class YearZeroEngine_Korean < YearZeroEngine
|
|
8
|
+
# ゲームシステムの識別
|
|
9
|
+
ID = 'YearZeroEngine:Korean'
|
|
10
|
+
|
|
11
|
+
# ゲームシステム名
|
|
12
|
+
NAME = '이어 제로 엔진(Year Zero Engine)'
|
|
13
|
+
|
|
14
|
+
# ゲームシステム名の読みがな
|
|
15
|
+
SORT_KEY = '国際化:Korean:이어 제로 엔진(Year Zero Engine)'
|
|
16
|
+
|
|
17
|
+
# ダイスボットの使い方
|
|
18
|
+
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
|
|
19
|
+
・다이스 풀 판정 커맨드(nYZEx+x+x+m)
|
|
20
|
+
(난이도)YZE(능력 주사위 수)+(기능 주사위 수)+(아이템 주사위 수)+(수정치) # (6만 셈함)
|
|
21
|
+
(난이도)YZE(능력 주사위 수)+(기능 주사위 수)+(아이템 주사위 수)-(수정치) # (6만 셈함)
|
|
22
|
+
|
|
23
|
+
・다이스 풀 판정 커맨드(nMYZx+x+x)
|
|
24
|
+
(난이도)MYZ(능력 주사위 수)+(기능 주사위 수)+(아이템 주사위 수) # (1과 6을 세어 푸시 가능 수 표시)
|
|
25
|
+
(난이도)MYZ(능력 주사위 수)-(기능 주사위 수)+(아이템 주사위 수) # (1과 6을 세어 푸시 가능 수 표시, 기능 마이너스 지정)
|
|
26
|
+
|
|
27
|
+
※ 난이도, 기능 주사위 수, 아이템 주사위 수는 생략 가능
|
|
28
|
+
|
|
29
|
+
・스텝 다이스 판정 커맨드(nYZSx+x+m+f)
|
|
30
|
+
(난이도)YZS(능력 주사위 면 수)+(기능 주사위 면 수)+(수정치) # (1, 6을 세어 푸시 가능 수 표시)
|
|
31
|
+
(난이도)YZS(능력 주사위 면 수)+(기능 주사위 면 수)-(수정치) # (1, 6을 세어 푸시 가능 수 표시)
|
|
32
|
+
(난이도)YZS(능력 주사위 면 수)+(기능 주사위 면 수)+(수정치)A # (1, 6을 세어 푸시 가능 수 표시, 유리)
|
|
33
|
+
(난이도)YZS(능력 주사위 면 수)+(기능 주사위 면 수)-(수정치)A # (1, 6을 세어 푸시 가능 수 표시, 유리)
|
|
34
|
+
(난이도)YZS(능력 주사위 면 수)+(기능 주사위 면 수)+(수정치)D # (1, 6을 세어 푸시 가능 수 표시, 불리)
|
|
35
|
+
(난이도)YZS(능력 주사위 면 수)+(기능 주사위 면 수)-(수정치)D # (1, 6을 세어 푸시 가능 수 표시, 불리)
|
|
36
|
+
INFO_MESSAGE_TEXT
|
|
37
|
+
|
|
38
|
+
register_prefix_from_super_class()
|
|
39
|
+
|
|
40
|
+
def initialize(command)
|
|
41
|
+
super(command)
|
|
42
|
+
@locale = :ko_kr
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -28,7 +28,7 @@ module BCDice
|
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
def eval_game_system_specific_command(command)
|
|
31
|
-
return check_action(command) || roll_tables(command, TABLES)
|
|
31
|
+
return check_action(command) || roll_tables(command, self.class::TABLES)
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
def check_action(command)
|
|
@@ -37,9 +37,7 @@ module BCDice
|
|
|
37
37
|
.disable_modifier
|
|
38
38
|
.restrict_cmp_op_to(:<=)
|
|
39
39
|
parsed = parser.parse(command)
|
|
40
|
-
unless parsed
|
|
41
|
-
return nil
|
|
42
|
-
end
|
|
40
|
+
return nil unless parsed
|
|
43
41
|
|
|
44
42
|
dice_count = parsed.prefix_number || 1
|
|
45
43
|
target_num = parsed.target_number
|
|
@@ -50,6 +48,7 @@ module BCDice
|
|
|
50
48
|
is_success = dice_list.any? { |i| i <= target_num }
|
|
51
49
|
is_critical = dice_list.any? { |i| i <= 5 }
|
|
52
50
|
is_fumble = dice_list.any? { |i| i >= 96 && i > target_num }
|
|
51
|
+
|
|
53
52
|
if is_critical && is_fumble
|
|
54
53
|
is_critical = false
|
|
55
54
|
is_fumble = false
|
|
@@ -57,16 +56,17 @@ module BCDice
|
|
|
57
56
|
|
|
58
57
|
success_message =
|
|
59
58
|
if is_success && is_critical
|
|
60
|
-
"
|
|
59
|
+
translate("ZombiLine.success_critical")
|
|
61
60
|
elsif is_success && is_fumble
|
|
62
|
-
"
|
|
61
|
+
translate("ZombiLine.success_fumble")
|
|
63
62
|
elsif is_success
|
|
64
|
-
"
|
|
63
|
+
translate("ZombiLine.success")
|
|
65
64
|
elsif is_fumble
|
|
66
|
-
"
|
|
65
|
+
translate("ZombiLine.failure_fumble")
|
|
67
66
|
else
|
|
68
|
-
"
|
|
67
|
+
translate("ZombiLine.failure")
|
|
69
68
|
end
|
|
69
|
+
|
|
70
70
|
sequence = [
|
|
71
71
|
"(#{parsed})",
|
|
72
72
|
"[#{dice_list.join(',')}]",
|
|
@@ -81,33 +81,26 @@ module BCDice
|
|
|
81
81
|
end
|
|
82
82
|
end
|
|
83
83
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
'
|
|
90
|
-
'
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
[
|
|
105
|
-
[1..50, '生モノ食材'],
|
|
106
|
-
[51..80, '怪しい食材'],
|
|
107
|
-
[81..100, '危ない食材']
|
|
108
|
-
]
|
|
109
|
-
)
|
|
110
|
-
}.freeze
|
|
84
|
+
class << self
|
|
85
|
+
private
|
|
86
|
+
|
|
87
|
+
def translate_tables(locale)
|
|
88
|
+
{
|
|
89
|
+
'SST' => DiceTable::Table.from_i18n("ZombiLine.SST", locale),
|
|
90
|
+
'IT' => DiceTable::RangeTable.new(
|
|
91
|
+
I18n.t("ZombiLine.IT.name", locale: locale),
|
|
92
|
+
'1d100',
|
|
93
|
+
[
|
|
94
|
+
[1..50, I18n.t("ZombiLine.IT.items.raw", locale: locale)],
|
|
95
|
+
[51..80, I18n.t("ZombiLine.IT.items.suspicious", locale: locale)],
|
|
96
|
+
[81..100, I18n.t("ZombiLine.IT.items.dangerous", locale: locale)]
|
|
97
|
+
]
|
|
98
|
+
)
|
|
99
|
+
}
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
TABLES = translate_tables(:ja_jp).freeze
|
|
111
104
|
|
|
112
105
|
register_prefix('\d*ZL', TABLES.keys)
|
|
113
106
|
end
|