bcdice 3.1.2 → 3.4.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 +154 -75
- data/README.md +3 -2
- data/i18n/Cthulhu/zh_hans.yml +11 -0
- data/i18n/MagicaLogia/zh_hans.yml +564 -0
- data/i18n/StellarKnights/ja_jp.yml +498 -0
- data/i18n/StellarKnights/ko_kr.yml +498 -0
- data/i18n/zh_hans.yml +7 -0
- data/lib/bcdice/command/parsed.rb +11 -3
- data/lib/bcdice/command/parser.rb +179 -100
- data/lib/bcdice/common_command/add_dice.rb +1 -1
- data/lib/bcdice/common_command/barabara_dice/node.rb +2 -2
- data/lib/bcdice/common_command/barabara_dice/result.rb +6 -0
- data/lib/bcdice/common_command/calc.rb +1 -1
- data/lib/bcdice/common_command/choice.rb +78 -7
- data/lib/bcdice/dice_table.rb +3 -0
- data/lib/bcdice/dice_table/d66_half_grid_table.rb +33 -0
- data/lib/bcdice/dice_table/d66_left_range_table.rb +29 -0
- data/lib/bcdice/dice_table/d66_one_third_table.rb +34 -0
- data/lib/bcdice/game_system.rb +10 -0
- data/lib/bcdice/game_system/AceKillerGene.rb +1 -1
- data/lib/bcdice/game_system/Ainecadette.rb +68 -0
- data/lib/bcdice/game_system/Airgetlamh.rb +1 -1
- data/lib/bcdice/game_system/Alsetto.rb +1 -1
- data/lib/bcdice/game_system/AlterRaise.rb +2 -2
- data/lib/bcdice/game_system/Amadeus.rb +110 -93
- data/lib/bcdice/game_system/AngelGear.rb +10 -5
- data/lib/bcdice/game_system/AnimaAnimus.rb +16 -9
- data/lib/bcdice/game_system/Arianrhod.rb +6 -8
- data/lib/bcdice/game_system/Avandner.rb +1 -1
- data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
- data/lib/bcdice/game_system/BattleTech.rb +109 -28
- data/lib/bcdice/game_system/BeastBindTrinity.rb +28 -12
- data/lib/bcdice/game_system/BeginningIdol.rb +5 -5
- data/lib/bcdice/game_system/BeginningIdol_Korean.rb +5 -5
- data/lib/bcdice/game_system/BladeOfArcana.rb +1 -1
- data/lib/bcdice/game_system/BlindMythos.rb +39 -38
- data/lib/bcdice/game_system/BloodCrusade.rb +6 -7
- data/lib/bcdice/game_system/BloodMoon.rb +9 -8
- data/lib/bcdice/game_system/CardRanker.rb +8 -7
- data/lib/bcdice/game_system/ChaosFlare.rb +21 -15
- data/lib/bcdice/game_system/Chill.rb +10 -10
- data/lib/bcdice/game_system/Chill3.rb +9 -9
- data/lib/bcdice/game_system/CodeLayerd.rb +39 -39
- data/lib/bcdice/game_system/ColossalHunter.rb +34 -47
- data/lib/bcdice/game_system/CrashWorld.rb +1 -1
- data/lib/bcdice/game_system/Cthulhu.rb +1 -1
- data/lib/bcdice/game_system/Cthulhu7th.rb +50 -12
- data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +1 -1
- data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +1 -1
- data/lib/bcdice/game_system/Cthulhu_SimplifiedChinese.rb +60 -0
- data/lib/bcdice/game_system/DarkBlaze.rb +0 -11
- data/lib/bcdice/game_system/DarkDaysDrive.rb +8 -7
- data/lib/bcdice/game_system/DeadlineHeroes.rb +11 -10
- data/lib/bcdice/game_system/DemonParasite.rb +5 -13
- data/lib/bcdice/game_system/DesperateRun.rb +1 -1
- data/lib/bcdice/game_system/DoubleCross.rb +3 -1
- data/lib/bcdice/game_system/Dracurouge.rb +3 -2
- data/lib/bcdice/game_system/EclipsePhase.rb +14 -14
- data/lib/bcdice/game_system/Elric.rb +18 -14
- data/lib/bcdice/game_system/Elysion.rb +1 -1
- data/lib/bcdice/game_system/EmbryoMachine.rb +9 -8
- data/lib/bcdice/game_system/Emoklore.rb +25 -20
- data/lib/bcdice/game_system/Fiasco.rb +1 -1
- data/lib/bcdice/game_system/FilledWith.rb +4 -0
- data/lib/bcdice/game_system/FutariSousa.rb +12 -10
- data/lib/bcdice/game_system/GURPS.rb +17 -28
- data/lib/bcdice/game_system/Garako.rb +1 -1
- data/lib/bcdice/game_system/GardenOrder.rb +12 -7
- data/lib/bcdice/game_system/GeishaGirlwithKatana.rb +1 -1
- data/lib/bcdice/game_system/GoblinSlayer.rb +1 -1
- data/lib/bcdice/game_system/Gorilla.rb +2 -8
- data/lib/bcdice/game_system/GranCrest.rb +189 -417
- data/lib/bcdice/game_system/Gundog.rb +9 -8
- data/lib/bcdice/game_system/GundogRevised.rb +10 -9
- data/lib/bcdice/game_system/GundogZero.rb +1 -1
- data/lib/bcdice/game_system/GurpsFW.rb +16 -16
- data/lib/bcdice/game_system/HarnMaster.rb +19 -26
- data/lib/bcdice/game_system/HatsuneMiku.rb +1 -1
- data/lib/bcdice/game_system/Hieizan.rb +12 -21
- data/lib/bcdice/game_system/HouraiGakuen.rb +1 -1
- data/lib/bcdice/game_system/HuntersMoon.rb +5 -10
- data/lib/bcdice/game_system/InfiniteFantasia.rb +19 -17
- data/lib/bcdice/game_system/Insane.rb +13 -20
- data/lib/bcdice/game_system/Irisbane.rb +154 -0
- data/lib/bcdice/game_system/IthaWenUa.rb +8 -15
- data/lib/bcdice/game_system/JamesBond.rb +10 -10
- data/lib/bcdice/game_system/JekyllAndHyde.rb +1 -1
- data/lib/bcdice/game_system/Kamigakari.rb +1 -1
- data/lib/bcdice/game_system/KanColle.rb +4 -9
- data/lib/bcdice/game_system/KemonoNoMori.rb +26 -39
- data/lib/bcdice/game_system/KillDeathBusiness.rb +7 -15
- data/lib/bcdice/game_system/KurayamiCrying.rb +141 -2
- data/lib/bcdice/game_system/LiveraDoll.rb +254 -304
- data/lib/bcdice/game_system/LogHorizon.rb +13 -10
- data/lib/bcdice/game_system/MagicaLogia_SimplifiedChinese.rb +66 -0
- data/lib/bcdice/game_system/MeikyuDays.rb +10 -8
- data/lib/bcdice/game_system/MeikyuKingdom.rb +26 -26
- data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +4 -3
- data/lib/bcdice/game_system/MetalHead.rb +12 -22
- data/lib/bcdice/game_system/MetalHeadExtream.rb +5 -5
- data/lib/bcdice/game_system/MonotoneMuseum.rb +8 -6
- data/lib/bcdice/game_system/Nechronica.rb +63 -90
- data/lib/bcdice/game_system/NinjaSlayer.rb +6 -7
- data/lib/bcdice/game_system/NjslyrBattle.rb +8 -11
- data/lib/bcdice/game_system/OneWayHeroics.rb +1 -1
- data/lib/bcdice/game_system/Paradiso.rb +3 -3
- data/lib/bcdice/game_system/ParasiteBlood.rb +1 -1
- data/lib/bcdice/game_system/Peekaboo.rb +4 -9
- data/lib/bcdice/game_system/Pendragon.rb +7 -7
- data/lib/bcdice/game_system/PersonaO.rb +86 -0
- data/lib/bcdice/game_system/PhantasmAdventure.rb +8 -8
- data/lib/bcdice/game_system/Postman.rb +1 -1
- data/lib/bcdice/game_system/PulpCthulhu.rb +1 -1
- data/lib/bcdice/game_system/Raisondetre.rb +2 -2
- data/lib/bcdice/game_system/Revulture.rb +123 -0
- data/lib/bcdice/game_system/RuneQuest.rb +8 -8
- data/lib/bcdice/game_system/Ryutama.rb +1 -1
- data/lib/bcdice/game_system/SRS.rb +17 -16
- data/lib/bcdice/game_system/SamsaraBallad.rb +38 -11
- data/lib/bcdice/game_system/Satasupe.rb +32 -32
- data/lib/bcdice/game_system/ScreamHighSchool.rb +5 -5
- data/lib/bcdice/game_system/SharedFantasia.rb +19 -23
- data/lib/bcdice/game_system/ShinobiGami.rb +14 -6
- data/lib/bcdice/game_system/Skynauts.rb +103 -142
- data/lib/bcdice/game_system/SkynautsBouken.rb +228 -0
- data/lib/bcdice/game_system/StarryDolls.rb +318 -0
- data/lib/bcdice/game_system/SteamPunkers.rb +25 -7
- data/lib/bcdice/game_system/StellarKnights.rb +85 -706
- data/lib/bcdice/game_system/StellarKnights_Korean.rb +79 -0
- data/lib/bcdice/game_system/SterileLife.rb +2 -3
- data/lib/bcdice/game_system/StratoShout.rb +8 -16
- data/lib/bcdice/game_system/Strave.rb +1 -1
- data/lib/bcdice/game_system/SwordWorld.rb +16 -7
- data/lib/bcdice/game_system/SwordWorld2_0.rb +2 -2
- data/lib/bcdice/game_system/SwordWorld2_5.rb +2 -2
- data/lib/bcdice/game_system/TherapieSein.rb +1 -1
- data/lib/bcdice/game_system/TokumeiTenkousei.rb +4 -3
- data/lib/bcdice/game_system/TokyoGhostResearch.rb +1 -1
- data/lib/bcdice/game_system/TorgEternity.rb +2 -2
- data/lib/bcdice/game_system/ToshiakiHolyGrailWar.rb +92 -0
- data/lib/bcdice/game_system/TrinitySeven.rb +279 -280
- data/lib/bcdice/game_system/TunnelsAndTrolls.rb +1 -1
- data/lib/bcdice/game_system/Utakaze.rb +53 -48
- data/lib/bcdice/game_system/Villaciel.rb +1 -1
- data/lib/bcdice/game_system/WARPS.rb +11 -9
- data/lib/bcdice/game_system/WaresBlade.rb +4 -9
- data/lib/bcdice/game_system/Warhammer.rb +15 -6
- data/lib/bcdice/game_system/Warhammer4.rb +15 -11
- data/lib/bcdice/game_system/WitchQuest.rb +1 -1
- data/lib/bcdice/game_system/YankeeYogSothoth.rb +4 -9
- data/lib/bcdice/game_system/Yggdrasill.rb +1 -1
- data/lib/bcdice/game_system/ZettaiReido.rb +20 -25
- data/lib/bcdice/game_system/meikyu_kingdom_basic/kingdom_table.rb +1 -1
- data/lib/bcdice/game_system/sword_world/rating_parsed.rb +4 -4
- data/lib/bcdice/game_system/sword_world/rating_parser.rb +1 -1
- data/lib/bcdice/game_system/sword_world/transcendent_test.rb +26 -8
- data/lib/bcdice/repl.rb +1 -1
- data/lib/bcdice/result.rb +26 -0
- data/lib/bcdice/version.rb +1 -1
- metadata +22 -5
|
@@ -43,8 +43,8 @@ module BCDice
|
|
|
43
43
|
Result.new.tap do |r|
|
|
44
44
|
r.secret = @secret
|
|
45
45
|
r.text = sequence.join(" > ")
|
|
46
|
-
r.
|
|
47
|
-
r.
|
|
46
|
+
r.last_dice_list_list = dice_list_list
|
|
47
|
+
r.last_dice_list = dice_list
|
|
48
48
|
r.success_num = success_num
|
|
49
49
|
end
|
|
50
50
|
end
|
|
@@ -7,6 +7,10 @@ module BCDice
|
|
|
7
7
|
module BarabaraDice
|
|
8
8
|
# バラバラロールの結果を表すクラス
|
|
9
9
|
class Result < ::BCDice::Result
|
|
10
|
+
# @return [Array<Array<Integer>>] 出目のグループの配列
|
|
11
|
+
attr_accessor :last_dice_list_list
|
|
12
|
+
# @return [Array<Integer>] すべての出目が格納される配列
|
|
13
|
+
attr_accessor :last_dice_list
|
|
10
14
|
# @return [Integer] 成功数
|
|
11
15
|
attr_accessor :success_num
|
|
12
16
|
|
|
@@ -14,6 +18,8 @@ module BCDice
|
|
|
14
18
|
def initialize(text = nil)
|
|
15
19
|
super(text)
|
|
16
20
|
|
|
21
|
+
@last_dice_list_list = []
|
|
22
|
+
@last_dice_list = []
|
|
17
23
|
@success_num = 0
|
|
18
24
|
end
|
|
19
25
|
end
|
|
@@ -29,6 +29,17 @@ module BCDice
|
|
|
29
29
|
# choice A,B X,Y -> "A,B" と "X,Y" から選ぶ
|
|
30
30
|
# choice(A[], B[], C[]) -> "A[]", "B[]", "C[]" から選ぶ
|
|
31
31
|
# choice[A(), B(), C()] -> "A()", "B()", "C()" から選ぶ
|
|
32
|
+
#
|
|
33
|
+
# "choise"の後に数を指定することで、列挙した要素から重複なしで複数個を選ぶ
|
|
34
|
+
# choice2[A,B,C] -> "A", "B", "C" から重複なしで2個選ぶ
|
|
35
|
+
#
|
|
36
|
+
# 指定したい要素が「AからD」のように連続する項目の場合に「A-D」と省略して記述できる
|
|
37
|
+
# 略記の展開はアルファベット1文字もしくは数字の範囲に限り、略記1つを指定したときのみ展開される
|
|
38
|
+
# choice[A-D] -> choice[A,B,C,D] と等価
|
|
39
|
+
# choice[b-g] -> choice[b,c,d,e,f,g] と等価
|
|
40
|
+
# choice[3-7] -> choice[3,4,5,6,7] と等価
|
|
41
|
+
# choice[A-D,Z] -> 展開されない。 "A-D", "Z" から選ぶ
|
|
42
|
+
# choice[D-A] -> 展開されない。
|
|
32
43
|
class Choice
|
|
33
44
|
PREFIX_PATTERN = /choice/.freeze
|
|
34
45
|
|
|
@@ -44,6 +55,12 @@ module BCDice
|
|
|
44
55
|
space: /\s+/,
|
|
45
56
|
}.freeze
|
|
46
57
|
|
|
58
|
+
DELIMITER_CHAR = {
|
|
59
|
+
bracket: ", ",
|
|
60
|
+
paren: ", ",
|
|
61
|
+
space: " ",
|
|
62
|
+
}.freeze
|
|
63
|
+
|
|
47
64
|
TERMINATION = {
|
|
48
65
|
bracket: /\]/,
|
|
49
66
|
paren: /\)/,
|
|
@@ -77,6 +94,11 @@ module BCDice
|
|
|
77
94
|
return nil
|
|
78
95
|
end
|
|
79
96
|
|
|
97
|
+
takes = scanner.scan(/\d+/)&.to_i || 1
|
|
98
|
+
if takes == 0
|
|
99
|
+
return nil
|
|
100
|
+
end
|
|
101
|
+
|
|
80
102
|
type =
|
|
81
103
|
case scanner.scan(/\(|\[|\s+/)
|
|
82
104
|
when "["
|
|
@@ -105,47 +127,96 @@ module BCDice
|
|
|
105
127
|
items.push(last_item.delete_suffix(SUFFIX[type]))
|
|
106
128
|
|
|
107
129
|
items = items.map(&:strip).reject(&:empty?)
|
|
108
|
-
if items.
|
|
130
|
+
if items.size == 1
|
|
131
|
+
items = parse_multi_item_shorthand(items.first)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
if items.empty? || items.size < takes
|
|
109
135
|
return nil
|
|
110
136
|
end
|
|
111
137
|
|
|
112
138
|
new(
|
|
113
139
|
secret: secret,
|
|
114
140
|
block_delimiter: type,
|
|
141
|
+
takes: takes,
|
|
115
142
|
items: items
|
|
116
143
|
)
|
|
117
144
|
end
|
|
145
|
+
|
|
146
|
+
def parse_multi_item_shorthand(str)
|
|
147
|
+
parse_multi_nums_shorthand(str) || parse_multi_chars_shorthand(str) || []
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def parse_multi_nums_shorthand(str)
|
|
151
|
+
m = /^(\d+)-(\d+)$/.match(str)
|
|
152
|
+
unless m
|
|
153
|
+
return nil
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
first = m[1].to_i
|
|
157
|
+
last = m[2].to_i
|
|
158
|
+
if first > last
|
|
159
|
+
return nil
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
return first.upto(last).to_a
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def parse_multi_chars_shorthand(str)
|
|
166
|
+
m = /^([a-z])-([a-z])$/.match(str) || /^([A-Z])-([A-Z])$/.match(str)
|
|
167
|
+
unless m
|
|
168
|
+
return nil
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
first = m[1]
|
|
172
|
+
last = m[2]
|
|
173
|
+
if first > last
|
|
174
|
+
return nil
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
return first.upto(last).to_a
|
|
178
|
+
end
|
|
118
179
|
end
|
|
119
180
|
|
|
120
181
|
# @param secret [Boolean]
|
|
121
182
|
# @param block_delimiter [BlockDelimiter::BRACKET, BlockDelimiter::PAREN, BlockDelimiter::SPACE]
|
|
183
|
+
# @param takes [Integer] 何個チョイスするか
|
|
122
184
|
# @param items [Array<String>]
|
|
123
|
-
def initialize(secret:, block_delimiter:, items:)
|
|
185
|
+
def initialize(secret:, block_delimiter:, takes:, items:)
|
|
124
186
|
@secret = secret
|
|
125
187
|
@block_delimiter = block_delimiter
|
|
188
|
+
@takes = takes
|
|
126
189
|
@items = items
|
|
127
190
|
end
|
|
128
191
|
|
|
129
192
|
# @param randomizer [Randomizer]
|
|
130
193
|
# @return [Result]
|
|
131
194
|
def roll(randomizer)
|
|
132
|
-
|
|
133
|
-
|
|
195
|
+
items = @items.dup
|
|
196
|
+
chosens = []
|
|
197
|
+
@takes.times do
|
|
198
|
+
index = randomizer.roll_index(items.size)
|
|
199
|
+
chosens << items.delete_at(index)
|
|
200
|
+
end
|
|
134
201
|
|
|
135
202
|
Result.new.tap do |r|
|
|
203
|
+
chosen = chosens.join(DELIMITER_CHAR[@block_delimiter])
|
|
204
|
+
|
|
136
205
|
r.secret = @secret
|
|
137
206
|
r.text = "(#{expr()}) > #{chosen}"
|
|
138
207
|
end
|
|
139
208
|
end
|
|
140
209
|
|
|
141
210
|
def expr
|
|
211
|
+
takes = @takes == 1 ? nil : @takes
|
|
212
|
+
|
|
142
213
|
case @block_delimiter
|
|
143
214
|
when BlockDelimiter::SPACE
|
|
144
|
-
"choice #{@items.join(' ')}"
|
|
215
|
+
"choice#{takes} #{@items.join(' ')}"
|
|
145
216
|
when BlockDelimiter::BRACKET
|
|
146
|
-
"choice[#{@items.join(',')}]"
|
|
217
|
+
"choice#{takes}[#{@items.join(',')}]"
|
|
147
218
|
when BlockDelimiter::PAREN
|
|
148
|
-
"choice(#{@items.join(',')})"
|
|
219
|
+
"choice#{takes}(#{@items.join(',')})"
|
|
149
220
|
end
|
|
150
221
|
end
|
|
151
222
|
end
|
data/lib/bcdice/dice_table.rb
CHANGED
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
require "bcdice/dice_table/roll_result"
|
|
4
4
|
require "bcdice/dice_table/chain_table"
|
|
5
5
|
require "bcdice/dice_table/d66_grid_table"
|
|
6
|
+
require "bcdice/dice_table/d66_half_grid_table"
|
|
7
|
+
require "bcdice/dice_table/d66_one_third_table"
|
|
8
|
+
require "bcdice/dice_table/d66_left_range_table"
|
|
6
9
|
require "bcdice/dice_table/d66_parity_table"
|
|
7
10
|
require "bcdice/dice_table/d66_range_table"
|
|
8
11
|
require "bcdice/dice_table/d66_table"
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "bcdice/dice_table/d66_grid_table"
|
|
4
|
+
|
|
5
|
+
module BCDice
|
|
6
|
+
module DiceTable
|
|
7
|
+
# D66を振って6x6マスの表を参照する
|
|
8
|
+
class D66HalfGridTable < D66GridTable
|
|
9
|
+
# @param key [String]
|
|
10
|
+
# @param locale [Symbol]
|
|
11
|
+
# @return [D66HalfGridTable]
|
|
12
|
+
def self.from_i18n(key, locale)
|
|
13
|
+
table = I18n.t(key, locale: locale, raise: true)
|
|
14
|
+
new(table[:name], table[:items_1_2_3], table[:items_4_5_6])
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# @param [String] name 表の名前
|
|
18
|
+
# @param [Array<String>] items_1_2_3
|
|
19
|
+
# @param [Array<String>] items_4_5_6
|
|
20
|
+
def initialize(name, items_1_2_3, items_4_5_6)
|
|
21
|
+
@name = name
|
|
22
|
+
@items = [
|
|
23
|
+
items_1_2_3,
|
|
24
|
+
items_1_2_3,
|
|
25
|
+
items_1_2_3,
|
|
26
|
+
items_4_5_6,
|
|
27
|
+
items_4_5_6,
|
|
28
|
+
items_4_5_6,
|
|
29
|
+
].freeze
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "bcdice/dice_table/d66_table"
|
|
4
|
+
|
|
5
|
+
module BCDice
|
|
6
|
+
module DiceTable
|
|
7
|
+
# 左側(十の位)のみ Range を用いる D66 表
|
|
8
|
+
class D66LeftRangeTable < D66Table
|
|
9
|
+
# @param name [String] 表の名前
|
|
10
|
+
# @param sort_type [Symbol] 出目入れ替えの方式 BCDice::D66SortType
|
|
11
|
+
# @param items [Array<(Range, Array<String>)>] 表の項目の配列
|
|
12
|
+
def initialize(name, sort_type, items)
|
|
13
|
+
expanded_items = {}
|
|
14
|
+
items.each do |item|
|
|
15
|
+
range, right_items = item
|
|
16
|
+
|
|
17
|
+
range.each do |left_value|
|
|
18
|
+
right_items.each_with_index do |right_item, right_value|
|
|
19
|
+
key = left_value * 10 + (right_value + 1)
|
|
20
|
+
expanded_items[key] = right_item
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
super(name, sort_type, expanded_items)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "bcdice/dice_table/d66_grid_table"
|
|
4
|
+
|
|
5
|
+
module BCDice
|
|
6
|
+
module DiceTable
|
|
7
|
+
# D66を振って6x6マスの表を参照する
|
|
8
|
+
class D66OneThirdTable < D66GridTable
|
|
9
|
+
# @param key [String]
|
|
10
|
+
# @param locale [Symbol]
|
|
11
|
+
# @return [D66OneThirdTable]
|
|
12
|
+
def self.from_i18n(key, locale)
|
|
13
|
+
table = I18n.t(key, locale: locale, raise: true)
|
|
14
|
+
new(table[:name], table[:items_1_2], table[:items_3_4], table[:items_5_6])
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# @param [String] name 表の名前
|
|
18
|
+
# @param [Array<String>] items_1_2
|
|
19
|
+
# @param [Array<String>] items_3_4
|
|
20
|
+
# @param [Array<String>] items_5_6
|
|
21
|
+
def initialize(name, items_1_2, items_3_4, items_5_6)
|
|
22
|
+
@name = name
|
|
23
|
+
@items = [
|
|
24
|
+
items_1_2,
|
|
25
|
+
items_1_2,
|
|
26
|
+
items_3_4,
|
|
27
|
+
items_3_4,
|
|
28
|
+
items_5_6,
|
|
29
|
+
items_5_6,
|
|
30
|
+
].freeze
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
data/lib/bcdice/game_system.rb
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
require "bcdice/game_system/AFF2e"
|
|
4
4
|
require "bcdice/game_system/AceKillerGene"
|
|
5
|
+
require "bcdice/game_system/Ainecadette"
|
|
5
6
|
require "bcdice/game_system/Airgetlamh"
|
|
6
7
|
require "bcdice/game_system/AlchemiaStruggle"
|
|
7
8
|
require "bcdice/game_system/Alsetto"
|
|
@@ -40,6 +41,7 @@ require "bcdice/game_system/Cthulhu7th_Korean"
|
|
|
40
41
|
require "bcdice/game_system/CthulhuTech"
|
|
41
42
|
require "bcdice/game_system/Cthulhu_ChineseTraditional"
|
|
42
43
|
require "bcdice/game_system/Cthulhu_Korean"
|
|
44
|
+
require "bcdice/game_system/Cthulhu_SimplifiedChinese"
|
|
43
45
|
require "bcdice/game_system/DarkBlaze"
|
|
44
46
|
require "bcdice/game_system/DarkDaysDrive"
|
|
45
47
|
require "bcdice/game_system/DarkSouls"
|
|
@@ -94,6 +96,7 @@ require "bcdice/game_system/InfiniteBabeL"
|
|
|
94
96
|
require "bcdice/game_system/InfiniteFantasia"
|
|
95
97
|
require "bcdice/game_system/Insane"
|
|
96
98
|
require "bcdice/game_system/Insane_Korean"
|
|
99
|
+
require "bcdice/game_system/Irisbane"
|
|
97
100
|
require "bcdice/game_system/IthaWenUa"
|
|
98
101
|
require "bcdice/game_system/JamesBond"
|
|
99
102
|
require "bcdice/game_system/JekyllAndHyde"
|
|
@@ -112,6 +115,7 @@ require "bcdice/game_system/LostRecord"
|
|
|
112
115
|
require "bcdice/game_system/LostRoyal"
|
|
113
116
|
require "bcdice/game_system/MagicaLogia"
|
|
114
117
|
require "bcdice/game_system/MagicaLogia_Korean"
|
|
118
|
+
require "bcdice/game_system/MagicaLogia_SimplifiedChinese"
|
|
115
119
|
require "bcdice/game_system/MeikyuDays"
|
|
116
120
|
require "bcdice/game_system/MeikyuKingdom"
|
|
117
121
|
require "bcdice/game_system/MeikyuKingdomBasic"
|
|
@@ -141,12 +145,14 @@ require "bcdice/game_system/ParasiteBlood"
|
|
|
141
145
|
require "bcdice/game_system/Pathfinder"
|
|
142
146
|
require "bcdice/game_system/Peekaboo"
|
|
143
147
|
require "bcdice/game_system/Pendragon"
|
|
148
|
+
require "bcdice/game_system/PersonaO"
|
|
144
149
|
require "bcdice/game_system/PhantasmAdventure"
|
|
145
150
|
require "bcdice/game_system/Postman"
|
|
146
151
|
require "bcdice/game_system/PulpCthulhu"
|
|
147
152
|
require "bcdice/game_system/Raisondetre"
|
|
148
153
|
require "bcdice/game_system/RecordOfLodossWar"
|
|
149
154
|
require "bcdice/game_system/RecordOfSteam"
|
|
155
|
+
require "bcdice/game_system/Revulture"
|
|
150
156
|
require "bcdice/game_system/RokumonSekai2"
|
|
151
157
|
require "bcdice/game_system/RoleMaster"
|
|
152
158
|
require "bcdice/game_system/RuinBreakers"
|
|
@@ -167,8 +173,11 @@ require "bcdice/game_system/ShinkuuGakuen"
|
|
|
167
173
|
require "bcdice/game_system/ShinobiGami"
|
|
168
174
|
require "bcdice/game_system/ShoujoTenrankai"
|
|
169
175
|
require "bcdice/game_system/Skynauts"
|
|
176
|
+
require "bcdice/game_system/SkynautsBouken"
|
|
177
|
+
require "bcdice/game_system/StarryDolls"
|
|
170
178
|
require "bcdice/game_system/SteamPunkers"
|
|
171
179
|
require "bcdice/game_system/StellarKnights"
|
|
180
|
+
require "bcdice/game_system/StellarKnights_Korean"
|
|
172
181
|
require "bcdice/game_system/SterileLife"
|
|
173
182
|
require "bcdice/game_system/StrangerOfSwordCity"
|
|
174
183
|
require "bcdice/game_system/StratoShout"
|
|
@@ -184,6 +193,7 @@ require "bcdice/game_system/TokyoNova"
|
|
|
184
193
|
require "bcdice/game_system/Torg"
|
|
185
194
|
require "bcdice/game_system/Torg1_5"
|
|
186
195
|
require "bcdice/game_system/TorgEternity"
|
|
196
|
+
require "bcdice/game_system/ToshiakiHolyGrailWar"
|
|
187
197
|
require "bcdice/game_system/TrinitySeven"
|
|
188
198
|
require "bcdice/game_system/TunnelsAndTrolls"
|
|
189
199
|
require "bcdice/game_system/TwilightGunsmoke"
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module BCDice
|
|
4
|
+
module GameSystem
|
|
5
|
+
class Ainecadette < Base
|
|
6
|
+
# ゲームシステムの識別子
|
|
7
|
+
ID = "Ainecadette"
|
|
8
|
+
|
|
9
|
+
# ゲームシステム名
|
|
10
|
+
NAME = "エネカデット"
|
|
11
|
+
|
|
12
|
+
# ゲームシステム名の読みがな
|
|
13
|
+
SORT_KEY = "えねかてつと"
|
|
14
|
+
|
|
15
|
+
# ダイスボットの使い方
|
|
16
|
+
HELP_MESSAGE = <<~MESSAGETEXT
|
|
17
|
+
■ 判定
|
|
18
|
+
- 先輩 (AI) 10面ダイスを2つ振って判定します。『有利』なら【3AI】、『不利』なら【1AI】を使います。
|
|
19
|
+
- 後輩 (CA) 6面ダイスを2つ振って判定します。『有利』なら【3CA】、『不利』なら【1CA】を使います。
|
|
20
|
+
MESSAGETEXT
|
|
21
|
+
|
|
22
|
+
register_prefix('(\d+)?AI', '(\d+)?CA')
|
|
23
|
+
|
|
24
|
+
def eval_game_system_specific_command(command)
|
|
25
|
+
roll_action(command)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
private
|
|
29
|
+
|
|
30
|
+
# 成功の目標値
|
|
31
|
+
SUCCESS_THRESHOLD = 4
|
|
32
|
+
|
|
33
|
+
# スペシャルとなる出目
|
|
34
|
+
SPECIAL_DICE = 6
|
|
35
|
+
|
|
36
|
+
def roll_action(command)
|
|
37
|
+
m = /^(\d+)?(AI|CA)$/.match(command)
|
|
38
|
+
return nil unless m
|
|
39
|
+
|
|
40
|
+
is_senpai = m[2] == "AI"
|
|
41
|
+
|
|
42
|
+
times = m[1]&.to_i || 2
|
|
43
|
+
sides = is_senpai ? 10 : 6
|
|
44
|
+
return nil if times <= 0
|
|
45
|
+
|
|
46
|
+
dice_list = @randomizer.roll_barabara(times, sides)
|
|
47
|
+
max = dice_list.max
|
|
48
|
+
|
|
49
|
+
result =
|
|
50
|
+
if max <= 1
|
|
51
|
+
Result.fumble("ファンブル(もやもやカウンターを2個獲得)")
|
|
52
|
+
elsif dice_list.include?(6)
|
|
53
|
+
me = is_senpai ? "先輩" : "後輩"
|
|
54
|
+
target = is_senpai ? "後輩" : "先輩"
|
|
55
|
+
Result.critical("スペシャル(絆カウンターを1個獲得し、#{target}は#{me}への感情を1つ獲得)")
|
|
56
|
+
elsif max >= SUCCESS_THRESHOLD
|
|
57
|
+
Result.success("成功")
|
|
58
|
+
else
|
|
59
|
+
Result.failure("失敗")
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
result.text = "(#{command}) > [#{dice_list.join(',')}] > #{result.text}"
|
|
63
|
+
|
|
64
|
+
return result
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|