bcdice 3.13.0 → 3.14.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 +45 -0
- data/i18n/Arianrhod/ko_kr.yml +3 -0
- data/i18n/Cthulhu/en_us.yml +11 -0
- data/i18n/CyberpunkRed/ja_jp.yml +389 -0
- data/i18n/FinalFantasyXIV/en_us.yml +4 -0
- data/i18n/FinalFantasyXIV/ja_jp.yml +4 -0
- data/i18n/FutariSousa/ja_jp.yml +158 -1
- data/i18n/KizunaBullet/ja_jp.yml +653 -0
- data/i18n/MonotoneMuseum/ja_jp.yml +246 -14
- data/i18n/SkynautsBouken/ja_jp.yml +114 -0
- data/i18n/TensaiGunshiNiNaro/ja_jp.yml +126 -0
- data/i18n/UnsungDuet/ja_jp.yml +62 -0
- data/i18n/UnsungDuet/ko_kr.yml +62 -0
- data/i18n/en_us.yml +5 -0
- data/lib/bcdice/dice_table/range_table.rb +24 -0
- data/lib/bcdice/game_system/Agnostos.rb +248 -0
- data/lib/bcdice/game_system/AniMalus.rb +99 -59
- data/lib/bcdice/game_system/Arianrhod_Korean.rb +30 -0
- data/lib/bcdice/game_system/BlackJacket.rb +244 -0
- data/lib/bcdice/game_system/ConvictorDrive.rb +5 -4
- data/lib/bcdice/game_system/Cthulhu_English.rb +59 -0
- data/lib/bcdice/game_system/CyberpunkRed.rb +14 -4
- data/lib/bcdice/game_system/DivineCharger.rb +841 -0
- data/lib/bcdice/game_system/FinalFantasyXIV.rb +115 -0
- data/lib/bcdice/game_system/FinalFantasyXIV_English.rb +39 -0
- data/lib/bcdice/game_system/FullFace.rb +39 -10
- data/lib/bcdice/game_system/FutariSousa.rb +88 -8
- data/lib/bcdice/game_system/Insane_Korean.rb +1 -1
- data/lib/bcdice/game_system/InvisibleLiar.rb +79 -0
- data/lib/bcdice/game_system/KizunaBullet.rb +240 -0
- data/lib/bcdice/game_system/KyokoShinshoku.rb +51 -8
- data/lib/bcdice/game_system/MonotoneMuseum.rb +14 -1
- data/lib/bcdice/game_system/NRR.rb +2 -2
- data/lib/bcdice/game_system/ShuumatsuBargainWars.rb +203 -0
- data/lib/bcdice/game_system/SkynautsBouken.rb +45 -130
- data/lib/bcdice/game_system/SwordWorld.rb +1 -1
- data/lib/bcdice/game_system/TensaiGunshiNiNaro.rb +228 -0
- data/lib/bcdice/game_system/TheOneRing2nd.rb +406 -0
- data/lib/bcdice/game_system/TheUnofficialHollowKnightRPG.rb +185 -0
- data/lib/bcdice/game_system/TrailOfCthulhu.rb +139 -0
- data/lib/bcdice/game_system/UnsungDuet.rb +17 -75
- data/lib/bcdice/game_system/UnsungDuet_Korean.rb +41 -0
- data/lib/bcdice/game_system/Utakaze.rb +55 -2
- data/lib/bcdice/game_system/Warhammer4.rb +124 -3
- data/lib/bcdice/game_system/Yotabana.rb +62 -0
- data/lib/bcdice/game_system/cyberpunk_red/tables.rb +111 -473
- data/lib/bcdice/game_system/kizuna_bullet/tables.rb +171 -0
- data/lib/bcdice/game_system.rb +16 -0
- data/lib/bcdice/version.rb +1 -1
- metadata +30 -2
@@ -0,0 +1,115 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class FinalFantasyXIV < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = "FinalFantasyXIV"
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = "FINAL FANTSY XIV TTRPG"
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = "ふあいなるふあんたしい14TTRPG"
|
14
|
+
|
15
|
+
HELP_MESSAGE = <<~TEXT
|
16
|
+
・アビリティ判定 nAB+m>=x
|
17
|
+
d20のアビリティ判定を行う。ダイス数が指定された場合、大きい出目1個を採用する。
|
18
|
+
n: ダイス数(省略時 1)
|
19
|
+
m: 修正値(省略可)
|
20
|
+
x: 目標値(省略可)
|
21
|
+
基本効果のみ、ダイレクトヒット、クリティカルを自動判定。
|
22
|
+
例)AB, AB+5, AB+5>=14, 2AB+5>=14
|
23
|
+
・行為判定 nDC+m>=x
|
24
|
+
アビリティ判定と同様。
|
25
|
+
失敗、成功を自動判定。
|
26
|
+
TEXT
|
27
|
+
|
28
|
+
register_prefix('\d*AB', '\d*DC')
|
29
|
+
|
30
|
+
def eval_game_system_specific_command(command)
|
31
|
+
return abirity_roll(command) || action_roll(command)
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def abirity_roll(command)
|
37
|
+
parser = Command::Parser.new("AB", round_type: round_type)
|
38
|
+
.enable_prefix_number()
|
39
|
+
.restrict_cmp_op_to(:>=, nil)
|
40
|
+
cmd = parser.parse(command)
|
41
|
+
return nil unless cmd
|
42
|
+
|
43
|
+
times = cmd.prefix_number || 1
|
44
|
+
|
45
|
+
dice_list_full = @randomizer.roll_barabara(times, 20).sort
|
46
|
+
dice_list_full_str = "[#{dice_list_full.join(',')}]" if times > 1
|
47
|
+
|
48
|
+
dice_list = dice_list_full[-1, 1]
|
49
|
+
dice_result = dice_list[0]
|
50
|
+
|
51
|
+
total = dice_result + cmd.modify_number
|
52
|
+
|
53
|
+
result =
|
54
|
+
if dice_result == 20
|
55
|
+
Result.critical(translate("critical"))
|
56
|
+
elsif cmd.cmp_op.nil?
|
57
|
+
Result.new
|
58
|
+
elsif total >= cmd.target_number
|
59
|
+
Result.success(translate("FinalFantasyXIV.directhit"))
|
60
|
+
else
|
61
|
+
Result.failure(translate("FinalFantasyXIV.normalhit"))
|
62
|
+
end
|
63
|
+
|
64
|
+
sequence = [
|
65
|
+
"(#{cmd.to_s(:after_modify_number)})",
|
66
|
+
dice_list_full_str,
|
67
|
+
"#{dice_result}[#{dice_list.join(',')}]#{Format.modifier(cmd.modify_number)}",
|
68
|
+
total,
|
69
|
+
result.text
|
70
|
+
].compact
|
71
|
+
|
72
|
+
result.text = sequence.join(" > ")
|
73
|
+
result
|
74
|
+
end
|
75
|
+
|
76
|
+
def action_roll(command)
|
77
|
+
parser = Command::Parser.new("DC", round_type: round_type)
|
78
|
+
.enable_prefix_number()
|
79
|
+
.restrict_cmp_op_to(:>=, nil)
|
80
|
+
cmd = parser.parse(command)
|
81
|
+
return nil unless cmd
|
82
|
+
|
83
|
+
times = cmd.prefix_number || 1
|
84
|
+
|
85
|
+
dice_list_full = @randomizer.roll_barabara(times, 20).sort
|
86
|
+
dice_list_full_str = "[#{dice_list_full.join(',')}]" if times > 1
|
87
|
+
|
88
|
+
dice_list = dice_list_full[-1, 1]
|
89
|
+
dice_result = dice_list[0]
|
90
|
+
|
91
|
+
total = dice_result + cmd.modify_number
|
92
|
+
|
93
|
+
result =
|
94
|
+
if cmd.cmp_op.nil?
|
95
|
+
Result.new
|
96
|
+
elsif total >= cmd.target_number
|
97
|
+
Result.success(translate("success"))
|
98
|
+
else
|
99
|
+
Result.failure(translate("failure"))
|
100
|
+
end
|
101
|
+
|
102
|
+
sequence = [
|
103
|
+
"(#{cmd.to_s(:after_modify_number)})",
|
104
|
+
dice_list_full_str,
|
105
|
+
"#{dice_result}[#{dice_list.join(',')}]#{Format.modifier(cmd.modify_number)}",
|
106
|
+
total,
|
107
|
+
result.text
|
108
|
+
].compact
|
109
|
+
|
110
|
+
result.text = sequence.join(" > ")
|
111
|
+
result
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "bcdice/game_system/FinalFantasyXIV"
|
4
|
+
|
5
|
+
module BCDice
|
6
|
+
module GameSystem
|
7
|
+
class FinalFantasyXIV_English < FinalFantasyXIV
|
8
|
+
# ゲームシステムの識別子
|
9
|
+
ID = "FinalFantasyXIV:English"
|
10
|
+
|
11
|
+
# ゲームシステム名
|
12
|
+
NAME = "FINAL FANTSY XIV TTRPG(English)"
|
13
|
+
|
14
|
+
# ゲームシステム名の読みがな
|
15
|
+
SORT_KEY = "国際化:English:FINAL FANTASY XIV TTRPG"
|
16
|
+
|
17
|
+
HELP_MESSAGE = <<~TEXT
|
18
|
+
Ability Checks nAB+m>=CR
|
19
|
+
Perform a d20 ability check. If a die count is specified, the highest roll is adopted.
|
20
|
+
n: die count(optional)
|
21
|
+
m: modifiy number(optional)
|
22
|
+
CR: Challenge Ratting(optional)
|
23
|
+
Base Effect only, Direct hit and Critical are automatically evaluated.
|
24
|
+
Example: AB, AB+5, AB+5>=14, 2AB+5>=14
|
25
|
+
Making checks nDC+m>=CR
|
26
|
+
Same as ability check.
|
27
|
+
Success and Failure ar automatically evaluated.
|
28
|
+
TEXT
|
29
|
+
|
30
|
+
register_prefix_from_super_class()
|
31
|
+
|
32
|
+
def initialize(command)
|
33
|
+
super(command)
|
34
|
+
|
35
|
+
@locale = :en_us
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -14,43 +14,54 @@ module BCDice
|
|
14
14
|
|
15
15
|
# ダイスボットの使い方
|
16
16
|
HELP_MESSAGE = <<~INFO_MESSAGETEXT
|
17
|
-
■判定 x+bFF<=t x:ヒート(省略時は3) b:判定修正 t
|
17
|
+
■判定 x+bFF<=a[,t][&d] x:ヒート(省略時は3) b:判定修正 a:能力値 t:難易度(省略可) d:基本ダメージ(省略可)
|
18
|
+
|
19
|
+
例)FF<=2: 能力値2で判定し、その結果(成功数,1の目の数,6の目の数,バースト)を表示。
|
20
|
+
6FF<=3: ヒート6,能力値3で戦闘判定し、その結果( 〃 )を表示。
|
21
|
+
8+2FF<=3: ヒート8,判定修正+2,能力値3で戦闘判定し、その結果( 〃 )を表示。
|
22
|
+
FF<=2,1: 能力値2,難易度1で判定し、その結果(成功数,1の目の数,6の目の数,成功・失敗,バースト)を表示。
|
23
|
+
6FF<=3,2&1:ヒート6,能力値3,難易度2,基本ダメージ1で戦闘判定し、その結果(成功数,1の目の数,6の目の数,ダメージ,バースト)を表示。
|
18
24
|
|
19
|
-
例)FF<=2: 能力値2で判定し、その結果(成功数,1の目の数,バースト)を表示。
|
20
|
-
6FF<=3: ヒート6,能力値3で戦闘判定し、その結果( 〃 )を表示。
|
21
|
-
8+2FF<=3:ヒート8,判定修正+2,能力値3で戦闘判定し、その結果( 〃 )を表示。
|
22
25
|
INFO_MESSAGETEXT
|
23
26
|
|
24
27
|
register_prefix('([+\d]+)*FF')
|
25
28
|
|
29
|
+
def initialize(command)
|
30
|
+
super(command)
|
31
|
+
|
32
|
+
@sort_barabara_dice = true # バラバラロール(Bコマンド)でソート有
|
33
|
+
end
|
34
|
+
|
26
35
|
def eval_game_system_specific_command(command)
|
27
36
|
resolute_action(command)
|
28
37
|
end
|
29
38
|
|
30
39
|
private
|
31
40
|
|
32
|
-
#
|
41
|
+
# 戦闘判定
|
33
42
|
# @param [String] command
|
34
43
|
# @return [Result]
|
35
44
|
def resolute_action(command)
|
36
|
-
m = /^(\d*)([+\d]+)*FF<=(\d)
|
45
|
+
m = /^(\d*)([+\d]+)*FF<=(\d)(,(\d))?(&(\d))?$/.match(command)
|
37
46
|
return nil unless m
|
38
47
|
|
39
48
|
heat_level = m[1].to_i
|
40
49
|
heat_level = 3 if heat_level == 0
|
41
50
|
modify = Arithmetic.eval("0#{m[2]}", @round_type)
|
42
51
|
status_no = m[3].to_i
|
52
|
+
target_no = m[5].to_i
|
53
|
+
damage_no = m[7].to_i
|
43
54
|
|
44
55
|
dice_array = []
|
45
56
|
|
46
|
-
dice = @randomizer.roll_barabara(heat_level, 6)
|
57
|
+
dice = @randomizer.roll_barabara(heat_level, 6).sort
|
47
58
|
ones = dice.count(1)
|
48
59
|
sixs = dice.count(6)
|
49
60
|
success_num = dice.count { |val| val <= status_no }
|
50
61
|
dice_array.push(dice.join(","))
|
51
62
|
|
52
63
|
if modify > 0
|
53
|
-
dice = @randomizer.roll_barabara(modify, 6)
|
64
|
+
dice = @randomizer.roll_barabara(modify, 6).sort
|
54
65
|
ones += dice.count(1)
|
55
66
|
success_num += dice.count { |val| val <= status_no }
|
56
67
|
dice_array.push(dice.join(","))
|
@@ -58,7 +69,7 @@ module BCDice
|
|
58
69
|
ones_total = ones
|
59
70
|
|
60
71
|
while ones > 0
|
61
|
-
dice = @randomizer.roll_barabara(ones, 6)
|
72
|
+
dice = @randomizer.roll_barabara(ones, 6).sort
|
62
73
|
ones = dice.count(1)
|
63
74
|
ones_total += ones
|
64
75
|
success_num += dice.count { |val| val <= status_no }
|
@@ -66,6 +77,7 @@ module BCDice
|
|
66
77
|
end
|
67
78
|
|
68
79
|
return Result.new.tap do |result|
|
80
|
+
command_out = "(#{heat_level}#{Format.modifier(modify)}FF<=#{status_no}"
|
69
81
|
if sixs >= 2
|
70
82
|
result.fumble = true
|
71
83
|
result.condition = false
|
@@ -76,10 +88,27 @@ module BCDice
|
|
76
88
|
result_txt = []
|
77
89
|
result_txt.push("成功度(#{success_num})")
|
78
90
|
result_txt.push("1の目(#{ones_total})") if ones_total > 0
|
91
|
+
result_txt.push("6の目(#{sixs})") if sixs > 0
|
92
|
+
if target_no > 0
|
93
|
+
command_out += ",#{target_no}"
|
94
|
+
if success_num >= target_no
|
95
|
+
result_txt.push("成功")
|
96
|
+
result.condition = true
|
97
|
+
else
|
98
|
+
result_txt.push("失敗")
|
99
|
+
result.condition = false
|
100
|
+
end
|
101
|
+
end
|
102
|
+
if damage_no > 0
|
103
|
+
command_out += "&#{damage_no}"
|
104
|
+
damage = damage_no + ones_total
|
105
|
+
result_txt.push("ダメージ(#{damage})")
|
106
|
+
end
|
79
107
|
result_txt.push("バースト") if result.fumble?
|
108
|
+
command_out += ")"
|
80
109
|
|
81
110
|
sequence = [
|
82
|
-
|
111
|
+
command_out,
|
83
112
|
dice_array.join('+').to_s,
|
84
113
|
result_txt.join(',').to_s,
|
85
114
|
].compact
|
@@ -21,15 +21,17 @@ module BCDice
|
|
21
21
|
【セッション時】
|
22
22
|
異常な癖決定表 SHRD/新・異常な癖決定表 SHND
|
23
23
|
普通の?・異常な癖決定表 SHAD/ケイジ異常な癖決定表 SHKD
|
24
|
+
超探偵向け異常な癖表 SHLD
|
24
25
|
口から出る表 SHFM/強引な捜査表 SHBT/すっとぼけ表 SHPI
|
25
|
-
事件に夢中表 SHEG/パートナーと……表
|
26
|
+
事件に夢中表 SHEG/パートナーと……表 SHWP/何かしている表 SHDS
|
26
27
|
奇想天外表 SHFT/急なひらめき表 SHIN/喜怒哀楽表 SHEM
|
27
28
|
人間エミュレート表 SHHE/人間エミュレート失敗表 SHHF/パートナーへのいたずら表 SHMP
|
28
29
|
思わせぶり表 SHSB/もどかしい表 SHFR/突然どうした表 SHIS
|
29
30
|
わがままを言う表 SHSE/普通に見える表 SHLM/嫉妬に狂う表 SHJS
|
30
31
|
傲慢な態度表 SHAR/比較的軽度なもの表 SHRM/ノータイム表 SHNT
|
31
32
|
捜査のやり方表 SHIM/貴族表 SHNO/説明しない表 SHNE
|
32
|
-
刑事としての癖表 SHHD
|
33
|
+
刑事としての癖表 SHHD/名誉ある探偵表 SHGD/超すごい表 SHSA
|
34
|
+
超事件に夢中表 SHEP/超パートナーと……表 SHXP
|
33
35
|
イベント表
|
34
36
|
現場にて EVS/なぜ? EVW/協力者と共に EVN
|
35
37
|
向こうから EVC/VS容疑者 EVV
|
@@ -38,7 +40,8 @@ module BCDice
|
|
38
40
|
思わぬヒント EVH/実験をしてみよう EVX/ゲスト捜査 EVG
|
39
41
|
ケイジ聞き込み捜査 EVQ/ケイジ大規模捜査 EVM/こっそり情報の受け渡し EVP
|
40
42
|
同僚たちと一緒に捜査する EVO/頻染みの店シチュエーション EVF/ハードBデカアクション EVB
|
41
|
-
探偵を大人しくさせる捜査 EVL/伝統的捜査
|
43
|
+
探偵を大人しくさせる捜査 EVL/伝統的捜査 EVZ/原始的捜査 EVR
|
44
|
+
超探偵調査 EV6S/神速捜査 EV6F
|
42
45
|
感情表
|
43
46
|
感情表A/B FLT66・FLT10
|
44
47
|
気に入っているところ FLTL66 /気に入らないところ FLTD66
|
@@ -131,10 +134,70 @@ module BCDice
|
|
131
134
|
|
132
135
|
def translate_tables(locale)
|
133
136
|
{
|
134
|
-
"SHRD" => DiceTable::
|
135
|
-
|
136
|
-
|
137
|
-
|
137
|
+
"SHRD" => DiceTable::ChainTable.new(
|
138
|
+
I18n.translate("FutariSousa.table.SHRD.name", locale: locale),
|
139
|
+
"1D10",
|
140
|
+
[
|
141
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHFM", locale),
|
142
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHBT", locale),
|
143
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHPI", locale),
|
144
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHEG", locale),
|
145
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHWP", locale),
|
146
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHDS", locale),
|
147
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHIN", locale),
|
148
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHEM", locale),
|
149
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHFT", locale),
|
150
|
+
I18n.translate("FutariSousa.table.SHRD.items", locale: locale)[9],
|
151
|
+
]
|
152
|
+
),
|
153
|
+
"SHND" => DiceTable::ChainTable.new(
|
154
|
+
I18n.translate("FutariSousa.table.SHND.name", locale: locale),
|
155
|
+
"1D6",
|
156
|
+
[
|
157
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHHE", locale),
|
158
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHHF", locale),
|
159
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHMP", locale),
|
160
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHSB", locale),
|
161
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHFR", locale),
|
162
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHIS", locale),
|
163
|
+
]
|
164
|
+
),
|
165
|
+
"SHAD" => DiceTable::ChainTable.new(
|
166
|
+
I18n.translate("FutariSousa.table.SHAD.name", locale: locale),
|
167
|
+
"1D6",
|
168
|
+
[
|
169
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHSE", locale),
|
170
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHLM", locale),
|
171
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHJS", locale),
|
172
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHAR", locale),
|
173
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHRM", locale),
|
174
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHNT", locale),
|
175
|
+
]
|
176
|
+
),
|
177
|
+
"SHKD" => DiceTable::ChainTable.new(
|
178
|
+
I18n.translate("FutariSousa.table.SHKD.name", locale: locale),
|
179
|
+
"1D6",
|
180
|
+
[
|
181
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHIM", locale),
|
182
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHNO", locale),
|
183
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHNE", locale),
|
184
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHHD", locale),
|
185
|
+
I18n.translate("FutariSousa.table.SHKD.items", locale: locale)[4],
|
186
|
+
I18n.translate("FutariSousa.table.SHKD.items", locale: locale)[5],
|
187
|
+
]
|
188
|
+
),
|
189
|
+
"SHLD" => DiceTable::ChainTable.new(
|
190
|
+
I18n.translate("FutariSousa.table.SHLD.name", locale: locale),
|
191
|
+
"1D6",
|
192
|
+
[
|
193
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHGD", locale),
|
194
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHSA", locale),
|
195
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHEP", locale),
|
196
|
+
DiceTable::Table.from_i18n("FutariSousa.table.SHXP", locale),
|
197
|
+
I18n.translate("FutariSousa.table.SHLD.items", locale: locale)[4],
|
198
|
+
I18n.translate("FutariSousa.table.SHLD.items", locale: locale)[5],
|
199
|
+
]
|
200
|
+
),
|
138
201
|
"SHFM" => DiceTable::Table.from_i18n("FutariSousa.table.SHFM", locale),
|
139
202
|
"SHBT" => DiceTable::Table.from_i18n("FutariSousa.table.SHBT", locale),
|
140
203
|
"SHPI" => DiceTable::Table.from_i18n("FutariSousa.table.SHPI", locale),
|
@@ -160,6 +223,10 @@ module BCDice
|
|
160
223
|
"SHNO" => DiceTable::Table.from_i18n("FutariSousa.table.SHNO", locale),
|
161
224
|
"SHNE" => DiceTable::Table.from_i18n("FutariSousa.table.SHNE", locale),
|
162
225
|
"SHHD" => DiceTable::Table.from_i18n("FutariSousa.table.SHHD", locale),
|
226
|
+
"SHGD" => DiceTable::Table.from_i18n("FutariSousa.table.SHGD", locale),
|
227
|
+
"SHSA" => DiceTable::Table.from_i18n("FutariSousa.table.SHSA", locale),
|
228
|
+
"SHEP" => DiceTable::Table.from_i18n("FutariSousa.table.SHEP", locale),
|
229
|
+
"SHXP" => DiceTable::Table.from_i18n("FutariSousa.table.SHXP", locale),
|
163
230
|
"EVS" => DiceTable::Table.from_i18n("FutariSousa.table.EVS", locale),
|
164
231
|
"EVW" => DiceTable::Table.from_i18n("FutariSousa.table.EVW", locale),
|
165
232
|
"EVN" => DiceTable::Table.from_i18n("FutariSousa.table.EVN", locale),
|
@@ -181,6 +248,8 @@ module BCDice
|
|
181
248
|
"EVL" => DiceTable::Table.from_i18n("FutariSousa.table.EVL", locale),
|
182
249
|
"EVZ" => DiceTable::Table.from_i18n("FutariSousa.table.EVZ", locale),
|
183
250
|
"EVR" => DiceTable::Table.from_i18n("FutariSousa.table.EVR", locale),
|
251
|
+
"EV6S" => DiceTable::Table.from_i18n("FutariSousa.table.EV6S", locale),
|
252
|
+
"EV6F" => DiceTable::Table.from_i18n("FutariSousa.table.EV6F", locale),
|
184
253
|
"OBT" => DiceTable::D66Table.from_i18n("FutariSousa.table.OBT", locale),
|
185
254
|
"ACT" => DiceTable::Table.from_i18n("FutariSousa.table.ACT", locale),
|
186
255
|
"EWT" => DiceTable::Table.from_i18n("FutariSousa.table.EWT", locale),
|
@@ -206,7 +275,18 @@ module BCDice
|
|
206
275
|
"FLT10" => DiceTable::Table.from_i18n("FutariSousa.table.FLT10", locale),
|
207
276
|
"FLTL66" => DiceTable::D66Table.from_i18n("FutariSousa.table.FLTL66", locale),
|
208
277
|
"FLTD66" => DiceTable::D66Table.from_i18n("FutariSousa.table.FLTD66", locale),
|
209
|
-
"FLTRA" => DiceTable::
|
278
|
+
"FLTRA" => DiceTable::ChainTable.new(
|
279
|
+
I18n.translate("FutariSousa.table.FLTRA.name", locale: locale),
|
280
|
+
"1D6",
|
281
|
+
[
|
282
|
+
DiceTable::D66Table.from_i18n("FutariSousa.table.FLTF66", locale),
|
283
|
+
DiceTable::D66Table.from_i18n("FutariSousa.table.FLTB66", locale),
|
284
|
+
DiceTable::D66Table.from_i18n("FutariSousa.table.FLTH66", locale),
|
285
|
+
DiceTable::D66Table.from_i18n("FutariSousa.table.FLTS66", locale),
|
286
|
+
DiceTable::D66Table.from_i18n("FutariSousa.table.FLTA66", locale),
|
287
|
+
DiceTable::D66Table.from_i18n("FutariSousa.table.FLTW66", locale),
|
288
|
+
]
|
289
|
+
),
|
210
290
|
"FLTF66" => DiceTable::D66Table.from_i18n("FutariSousa.table.FLTF66", locale),
|
211
291
|
"FLTB66" => DiceTable::D66Table.from_i18n("FutariSousa.table.FLTB66", locale),
|
212
292
|
"FLTH66" => DiceTable::D66Table.from_i18n("FutariSousa.table.FLTH66", locale),
|
@@ -0,0 +1,79 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class InvisibleLiar < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = 'InvisibleLiar'
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = 'インビジブルライアー'
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = 'いんひしふるらいああ'
|
14
|
+
|
15
|
+
# ダイスボットの使い方
|
16
|
+
HELP_MESSAGE = <<~HELP
|
17
|
+
■ 採取表
|
18
|
+
WOODSn 森
|
19
|
+
PRAIRIEn 草原
|
20
|
+
LAKEn 湖
|
21
|
+
RIVERn 川辺
|
22
|
+
SWAMPn 沼地
|
23
|
+
CAVEn 洞窟
|
24
|
+
ROCKYn 岩場
|
25
|
+
MOUNTAINn 山岳
|
26
|
+
n: 採取時間(1〜5)
|
27
|
+
HELP
|
28
|
+
|
29
|
+
def eval_game_system_specific_command(command)
|
30
|
+
roll_tables(command, TABLES)
|
31
|
+
end
|
32
|
+
|
33
|
+
TABLES = {
|
34
|
+
"WOODS1" => DiceTable::Table.new("森 1時間", "1D6", ["麗し草", "麗し草", "麗し草", "神秘のキノコ", "妖精の羽", "成果なし"]),
|
35
|
+
"WOODS2" => DiceTable::Table.new("森 2時間", "1D6", ["麗し草", "麗し草", "神秘のキノコ", "神秘のキノコ", "妖精の羽", "成果なし"]),
|
36
|
+
"WOODS3" => DiceTable::Table.new("森 3時間", "1D6", ["麗し草", "神秘のキノコ", "神秘のキノコ", "神秘のキノコ", "妖精の羽", "成果なし"]),
|
37
|
+
"WOODS4" => DiceTable::Table.new("森 4時間", "1D6", ["麗し草", "神秘のキノコ", "神秘のキノコ", "妖精の羽", "妖精の羽", "成果なし"]),
|
38
|
+
"WOODS5" => DiceTable::Table.new("森 5時間", "1D6", ["麗し草", "神秘のキノコ", "妖精の羽", "妖精の羽", "妖精の羽", "成果なし"]),
|
39
|
+
"PRAIRIE1" => DiceTable::Table.new("草原 1時間", "1D6", ["太陽の花", "太陽の花", "太陽の花", "生命の虫", "妖精の羽", "成果なし"]),
|
40
|
+
"PRAIRIE2" => DiceTable::Table.new("草原 2時間", "1D6", ["太陽の花", "太陽の花", "生命の虫", "生命の虫", "妖精の羽", "成果なし"]),
|
41
|
+
"PRAIRIE3" => DiceTable::Table.new("草原 3時間", "1D6", ["太陽の花", "生命の虫", "生命の虫", "生命の虫", "妖精の羽", "成果なし"]),
|
42
|
+
"PRAIRIE4" => DiceTable::Table.new("草原 4時間", "1D6", ["太陽の花", "生命の虫", "生命の虫", "妖精の羽", "妖精の羽", "成果なし"]),
|
43
|
+
"PRAIRIE5" => DiceTable::Table.new("草原 5時間", "1D6", ["太陽の花", "生命の虫", "妖精の羽", "妖精の羽", "妖精の羽", "成果なし"]),
|
44
|
+
"LAKE1" => DiceTable::Table.new("湖 1時間", "1D6", ["竜の鱗", "竜の鱗", "竜の鱗", "マンドレイク", "幻獣の涙", "成果なし"]),
|
45
|
+
"LAKE2" => DiceTable::Table.new("湖 2時間", "1D6", ["竜の鱗", "竜の鱗", "マンドレイク", "マンドレイク", "幻獣の涙", "成果なし"]),
|
46
|
+
"LAKE3" => DiceTable::Table.new("湖 3時間", "1D6", ["竜の鱗", "マンドレイク", "マンドレイク", "マンドレイク", "幻獣の涙", "成果なし"]),
|
47
|
+
"LAKE4" => DiceTable::Table.new("湖 4時間", "1D6", ["竜の鱗", "マンドレイク", "マンドレイク", "幻獣の涙", "幻獣の涙", "成果なし"]),
|
48
|
+
"LAKE5" => DiceTable::Table.new("湖 5時間", "1D6", ["竜の鱗", "マンドレイク", "幻獣の涙", "幻獣の涙", "幻獣の涙", "成果なし"]),
|
49
|
+
"RIVER1" => DiceTable::Table.new("川辺 1時間", "1D6", ["魔魚", "魔魚", "魔魚", "麗し草", "幻獣の涙", "成果なし"]),
|
50
|
+
"RIVER2" => DiceTable::Table.new("川辺 2時間", "1D6", ["魔魚", "魔魚", "麗し草", "麗し草", "幻獣の涙", "成果なし"]),
|
51
|
+
"RIVER3" => DiceTable::Table.new("川辺 3時間", "1D6", ["魔魚", "麗し草", "麗し草", "麗し草", "幻獣の涙", "成果なし"]),
|
52
|
+
"RIVER4" => DiceTable::Table.new("川辺 4時間", "1D6", ["魔魚", "麗し草", "麗し草", "幻獣の涙", "幻獣の涙", "成果なし"]),
|
53
|
+
"RIVER5" => DiceTable::Table.new("川辺 5時間", "1D6", ["魔魚", "麗し草", "幻獣の涙", "幻獣の涙", "幻獣の涙", "成果なし"]),
|
54
|
+
"SWAMP1" => DiceTable::Table.new("沼地 1時間", "1D6", ["マンドレイク", "マンドレイク", "マンドレイク", "魔魚", "畏怖の化石", "成果なし"]),
|
55
|
+
"SWAMP2" => DiceTable::Table.new("沼地 2時間", "1D6", ["マンドレイク", "マンドレイク", "魔魚", "魔魚", "畏怖の化石", "成果なし"]),
|
56
|
+
"SWAMP3" => DiceTable::Table.new("沼地 3時間", "1D6", ["マンドレイク", "魔魚", "魔魚", "魔魚", "畏怖の化石", "成果なし"]),
|
57
|
+
"SWAMP4" => DiceTable::Table.new("沼地 4時間", "1D6", ["マンドレイク", "魔魚", "魔魚", "畏怖の化石", "畏怖の化石", "成果なし"]),
|
58
|
+
"SWAMP5" => DiceTable::Table.new("沼地 5時間", "1D6", ["マンドレイク", "魔魚", "畏怖の化石", "畏怖の化石", "畏怖の化石", "成果なし"]),
|
59
|
+
"CAVE1" => DiceTable::Table.new("洞窟 1時間", "1D6", ["神秘のキノコ", "神秘のキノコ", "神秘のキノコ", "魔素の結晶", "畏怖の化石", "成果なし"]),
|
60
|
+
"CAVE2" => DiceTable::Table.new("洞窟 2時間", "1D6", ["神秘のキノコ", "神秘のキノコ", "魔素の結晶", "魔素の結晶", "畏怖の化石", "成果なし"]),
|
61
|
+
"CAVE3" => DiceTable::Table.new("洞窟 3時間", "1D6", ["神秘のキノコ", "魔素の結晶", "魔素の結晶", "魔素の結晶", "畏怖の化石", "成果なし"]),
|
62
|
+
"CAVE4" => DiceTable::Table.new("洞窟 4時間", "1D6", ["神秘のキノコ", "魔素の結晶", "魔素の結晶", "畏怖の化石", "畏怖の化石", "成果なし"]),
|
63
|
+
"CAVE5" => DiceTable::Table.new("洞窟 5時間", "1D6", ["神秘のキノコ", "魔素の結晶", "畏怖の化石", "畏怖の化石", "畏怖の化石", "成果なし"]),
|
64
|
+
"ROCKY1" => DiceTable::Table.new("岩場 1時間", "1D6", ["生命の虫", "生命の虫", "生命の虫", "竜の鱗", "星の欠片", "成果なし"]),
|
65
|
+
"ROCKY2" => DiceTable::Table.new("岩場 2時間", "1D6", ["生命の虫", "生命の虫", "竜の鱗", "竜の鱗", "星の欠片", "成果なし"]),
|
66
|
+
"ROCKY3" => DiceTable::Table.new("岩場 3時間", "1D6", ["生命の虫", "竜の鱗", "竜の鱗", "竜の鱗", "星の欠片", "成果なし"]),
|
67
|
+
"ROCKY4" => DiceTable::Table.new("岩場 4時間", "1D6", ["生命の虫", "竜の鱗", "竜の鱗", "星の欠片", "星の欠片", "成果なし"]),
|
68
|
+
"ROCKY5" => DiceTable::Table.new("岩場 5時間", "1D6", ["生命の虫", "竜の鱗", "星の欠片", "星の欠片", "星の欠片", "成果なし"]),
|
69
|
+
"MOUNTAIN1" => DiceTable::Table.new("山岳 1時間", "1D6", ["魔素の結晶", "魔素の結晶", "魔素の結晶", "太陽の花", "星の欠片", "成果なし"]),
|
70
|
+
"MOUNTAIN2" => DiceTable::Table.new("山岳 2時間", "1D6", ["魔素の結晶", "魔素の結晶", "太陽の花", "太陽の花", "星の欠片", "成果なし"]),
|
71
|
+
"MOUNTAIN3" => DiceTable::Table.new("山岳 3時間", "1D6", ["魔素の結晶", "太陽の花", "太陽の花", "太陽の花", "星の欠片", "成果なし"]),
|
72
|
+
"MOUNTAIN4" => DiceTable::Table.new("山岳 4時間", "1D6", ["魔素の結晶", "太陽の花", "太陽の花", "星の欠片", "星の欠片", "成果なし"]),
|
73
|
+
"MOUNTAIN5" => DiceTable::Table.new("山岳 5時間", "1D6", ["魔素の結晶", "太陽の花", "星の欠片", "星の欠片", "星の欠片", "成果なし"]),
|
74
|
+
}.freeze
|
75
|
+
|
76
|
+
register_prefix(TABLES.keys)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|