bcdice 3.12.0 → 3.14.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 +72 -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/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/dice_table/range_table.rb +24 -0
- data/lib/bcdice/game_system/Agnostos.rb +248 -0
- 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 +261 -0
- data/lib/bcdice/game_system/Arianrhod_Korean.rb +30 -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/BlackJacket.rb +244 -0
- data/lib/bcdice/game_system/Chill3.rb +6 -6
- 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/DarkSouls.rb +1 -1
- data/lib/bcdice/game_system/DivineCharger.rb +841 -0
- data/lib/bcdice/game_system/Elric.rb +1 -1
- 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 +121 -0
- data/lib/bcdice/game_system/FutariSousa.rb +88 -8
- data/lib/bcdice/game_system/InfiniteFantasia.rb +4 -1
- data/lib/bcdice/game_system/Insane_Korean.rb +1 -1
- data/lib/bcdice/game_system/InvisibleLiar.rb +79 -0
- data/lib/bcdice/game_system/Irisbane.rb +1 -1
- data/lib/bcdice/game_system/KillDeathBusiness.rb +1 -1
- data/lib/bcdice/game_system/KizunaBullet.rb +240 -0
- data/lib/bcdice/game_system/KyokoShinshoku.rb +201 -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/MonotoneMuseum.rb +14 -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/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 +1 -1
- data/lib/bcdice/game_system/Ryutama.rb +4 -4
- data/lib/bcdice/game_system/ShuumatsuBargainWars.rb +203 -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 +45 -130
- data/lib/bcdice/game_system/Strave.rb +1 -1
- 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/TherapieSein.rb +1 -1
- data/lib/bcdice/game_system/TrailOfCthulhu.rb +139 -0
- data/lib/bcdice/game_system/TrinitySeven.rb +1 -1
- 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/VampireTheMasquerade5th.rb +12 -6
- data/lib/bcdice/game_system/Warhammer4.rb +124 -3
- data/lib/bcdice/game_system/WerewolfTheApocalypse5th.rb +12 -6
- data/lib/bcdice/game_system/Yotabana.rb +62 -0
- data/lib/bcdice/game_system/cthulhu7th/full_auto.rb +1 -1
- 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/sword_world/rating_parser.rb +4 -2
- data/lib/bcdice/game_system.rb +24 -0
- data/lib/bcdice/loader.rb +1 -1
- data/lib/bcdice/version.rb +1 -1
- metadata +55 -5
@@ -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
|
@@ -0,0 +1,121 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class FullFace < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = 'FullFace'
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = 'フルフェイス'
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = 'ふるふえいす'
|
14
|
+
|
15
|
+
# ダイスボットの使い方
|
16
|
+
HELP_MESSAGE = <<~INFO_MESSAGETEXT
|
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の目の数,ダメージ,バースト)を表示。
|
24
|
+
|
25
|
+
INFO_MESSAGETEXT
|
26
|
+
|
27
|
+
register_prefix('([+\d]+)*FF')
|
28
|
+
|
29
|
+
def initialize(command)
|
30
|
+
super(command)
|
31
|
+
|
32
|
+
@sort_barabara_dice = true # バラバラロール(Bコマンド)でソート有
|
33
|
+
end
|
34
|
+
|
35
|
+
def eval_game_system_specific_command(command)
|
36
|
+
resolute_action(command)
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
# 戦闘判定
|
42
|
+
# @param [String] command
|
43
|
+
# @return [Result]
|
44
|
+
def resolute_action(command)
|
45
|
+
m = /^(\d*)([+\d]+)*FF<=(\d)(,(\d))?(&(\d))?$/.match(command)
|
46
|
+
return nil unless m
|
47
|
+
|
48
|
+
heat_level = m[1].to_i
|
49
|
+
heat_level = 3 if heat_level == 0
|
50
|
+
modify = Arithmetic.eval("0#{m[2]}", @round_type)
|
51
|
+
status_no = m[3].to_i
|
52
|
+
target_no = m[5].to_i
|
53
|
+
damage_no = m[7].to_i
|
54
|
+
|
55
|
+
dice_array = []
|
56
|
+
|
57
|
+
dice = @randomizer.roll_barabara(heat_level, 6).sort
|
58
|
+
ones = dice.count(1)
|
59
|
+
sixs = dice.count(6)
|
60
|
+
success_num = dice.count { |val| val <= status_no }
|
61
|
+
dice_array.push(dice.join(","))
|
62
|
+
|
63
|
+
if modify > 0
|
64
|
+
dice = @randomizer.roll_barabara(modify, 6).sort
|
65
|
+
ones += dice.count(1)
|
66
|
+
success_num += dice.count { |val| val <= status_no }
|
67
|
+
dice_array.push(dice.join(","))
|
68
|
+
end
|
69
|
+
ones_total = ones
|
70
|
+
|
71
|
+
while ones > 0
|
72
|
+
dice = @randomizer.roll_barabara(ones, 6).sort
|
73
|
+
ones = dice.count(1)
|
74
|
+
ones_total += ones
|
75
|
+
success_num += dice.count { |val| val <= status_no }
|
76
|
+
dice_array.push(dice.join(","))
|
77
|
+
end
|
78
|
+
|
79
|
+
return Result.new.tap do |result|
|
80
|
+
command_out = "(#{heat_level}#{Format.modifier(modify)}FF<=#{status_no}"
|
81
|
+
if sixs >= 2
|
82
|
+
result.fumble = true
|
83
|
+
result.condition = false
|
84
|
+
else
|
85
|
+
result.condition = (success_num > 0)
|
86
|
+
result.critical = (ones_total > 0)
|
87
|
+
end
|
88
|
+
result_txt = []
|
89
|
+
result_txt.push("成功度(#{success_num})")
|
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
|
107
|
+
result_txt.push("バースト") if result.fumble?
|
108
|
+
command_out += ")"
|
109
|
+
|
110
|
+
sequence = [
|
111
|
+
command_out,
|
112
|
+
dice_array.join('+').to_s,
|
113
|
+
result_txt.join(',').to_s,
|
114
|
+
].compact
|
115
|
+
|
116
|
+
result.text = sequence.join(" > ")
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
@@ -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),
|
@@ -13,7 +13,10 @@ module BCDice
|
|
13
13
|
SORT_KEY = 'むけんのふあんたしあ'
|
14
14
|
|
15
15
|
# ダイスボットの使い方
|
16
|
-
HELP_MESSAGE =
|
16
|
+
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
|
17
|
+
1D20に目標値を設定した場合に、成功レベルの自動判定を行います。
|
18
|
+
例: 1D20<=16
|
19
|
+
INFO_MESSAGE_TEXT
|
17
20
|
|
18
21
|
# ゲーム別成功度判定(1d20)
|
19
22
|
def result_1d20(total, _dice_total, cmp_op, target)
|
@@ -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
|
@@ -37,7 +37,7 @@ module BCDice
|
|
37
37
|
SceneSituation, SSi
|
38
38
|
HELP
|
39
39
|
|
40
|
-
ATTACK_ROLL_REG = %r{^AT(TACK|K)?([+\-*/()\d]+)@([+\-*/()\d]+)<=([+\-*/()\d]+)(\[([
|
40
|
+
ATTACK_ROLL_REG = %r{^AT(TACK|K)?([+\-*/()\d]+)@([+\-*/()\d]+)<=([+\-*/()\d]+)(\[([+-])([+\-*/()\d]+)\])?}i.freeze
|
41
41
|
register_prefix('AT(TACK|K)?')
|
42
42
|
|
43
43
|
def initialize(command)
|