bcdice 3.0.0.pre.alpha.2 → 3.0.0.pre.rc.1
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 +6 -0
- data/README.md +1 -0
- data/i18n/KillDeathBusiness/ja_jp.yml +4 -4
- data/i18n/KillDeathBusiness/ko_kr.yml +5 -4
- data/i18n/MagicaLogia/ko_kr.yml +564 -0
- data/i18n/MonotoneMuseum/ja_jp.yml +37 -1
- data/i18n/StratoShout/ja_jp.yml +4 -4
- data/i18n/StratoShout/ko_kr.yml +4 -4
- data/lib/bcdice.rb +2 -1
- data/lib/bcdice/arithmetic.rb +22 -0
- data/lib/bcdice/arithmetic/node.rb +112 -43
- data/lib/bcdice/arithmetic/parser.rb +240 -0
- data/lib/bcdice/arithmetic_evaluator.rb +5 -156
- data/lib/bcdice/base.rb +8 -1
- data/lib/bcdice/command/lexer.rb +57 -0
- data/lib/bcdice/command/parsed.rb +65 -0
- data/lib/bcdice/command/parser.rb +489 -0
- data/lib/bcdice/common_command/add_dice.rb +1 -1
- data/lib/bcdice/common_command/add_dice/node.rb +142 -69
- data/lib/bcdice/common_command/add_dice/parser.rb +100 -83
- data/lib/bcdice/common_command/barabara_dice/node.rb +7 -1
- data/lib/bcdice/common_command/barabara_dice/result.rb +22 -0
- data/lib/bcdice/common_command/calc/node.rb +10 -1
- data/lib/bcdice/common_command/calc/parser.rb +1 -1
- data/lib/bcdice/common_command/d66_dice.rb +3 -1
- data/lib/bcdice/common_command/lexer.rb +2 -1
- data/lib/bcdice/common_command/upper_dice/parser.rb +118 -97
- data/lib/bcdice/common_command/version.rb +1 -1
- data/lib/bcdice/deprecated/checker.rb +6 -6
- data/lib/bcdice/dice_table.rb +1 -0
- data/lib/bcdice/dice_table/d66_parity_table.rb +34 -0
- data/lib/bcdice/game_system.rb +3 -0
- data/lib/bcdice/game_system/AceKillerGene.rb +1 -1
- data/lib/bcdice/game_system/AlchemiaStruggle.rb +312 -0
- data/lib/bcdice/game_system/Alshard.rb +0 -1
- data/lib/bcdice/game_system/Amadeus.rb +1 -1
- data/lib/bcdice/game_system/AnimaAnimus.rb +1 -5
- data/lib/bcdice/game_system/BadLife.rb +1 -1
- data/lib/bcdice/game_system/BeastBindTrinity.rb +1 -10
- data/lib/bcdice/game_system/BeginningIdol.rb +4 -4
- data/lib/bcdice/game_system/BeginningIdol_Korean.rb +4 -4
- data/lib/bcdice/game_system/BladeOfArcana.rb +4 -4
- data/lib/bcdice/game_system/BlindMythos.rb +12 -9
- data/lib/bcdice/game_system/BloodCrusade.rb +12 -38
- data/lib/bcdice/game_system/BloodMoon.rb +2 -2
- data/lib/bcdice/game_system/CardRanker.rb +23 -63
- data/lib/bcdice/game_system/ChaosFlare.rb +3 -3
- data/lib/bcdice/game_system/CodeLayerd.rb +1 -1
- data/lib/bcdice/game_system/ColossalHunter.rb +2 -2
- data/lib/bcdice/game_system/Cthulhu7th.rb +2 -2
- data/lib/bcdice/game_system/CthulhuTech.rb +0 -1
- data/lib/bcdice/game_system/DarkBlaze.rb +4 -4
- data/lib/bcdice/game_system/DeadlineHeroes.rb +1 -1
- data/lib/bcdice/game_system/DoubleCross.rb +60 -93
- data/lib/bcdice/game_system/EmbryoMachine.rb +5 -5
- data/lib/bcdice/game_system/EtrianOdysseySRS.rb +0 -1
- data/lib/bcdice/game_system/FilledWith.rb +3 -3
- data/lib/bcdice/game_system/FullMetalPanic.rb +0 -1
- data/lib/bcdice/game_system/GURPS.rb +1 -1
- data/lib/bcdice/game_system/Garako.rb +3 -2
- data/lib/bcdice/game_system/GardenOrder.rb +1 -1
- data/lib/bcdice/game_system/GehennaAn.rb +3 -3
- data/lib/bcdice/game_system/Gundog.rb +1 -1
- data/lib/bcdice/game_system/GundogRevised.rb +3 -3
- data/lib/bcdice/game_system/GundogZero.rb +2 -2
- data/lib/bcdice/game_system/GurpsFW.rb +2 -5
- data/lib/bcdice/game_system/HatsuneMiku.rb +1 -1
- data/lib/bcdice/game_system/HuntersMoon.rb +17 -110
- data/lib/bcdice/game_system/JuinKansen.rb +251 -0
- data/lib/bcdice/game_system/KanColle.rb +17 -166
- data/lib/bcdice/game_system/KillDeathBusiness.rb +35 -44
- data/lib/bcdice/game_system/KillDeathBusiness_Korean.rb +2 -1
- data/lib/bcdice/game_system/LogHorizon.rb +8 -8
- data/lib/bcdice/game_system/LostRoyal.rb +1 -3
- data/lib/bcdice/game_system/MagicaLogia.rb +3 -3
- data/lib/bcdice/game_system/MagicaLogia_Korean.rb +66 -0
- data/lib/bcdice/game_system/MeikyuDays.rb +1 -1
- data/lib/bcdice/game_system/MeikyuKingdom.rb +1 -1
- data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +1 -1
- data/lib/bcdice/game_system/MetalHeadExtream.rb +4 -4
- data/lib/bcdice/game_system/MetallicGuardian.rb +0 -1
- data/lib/bcdice/game_system/MonotoneMuseum.rb +3 -2
- data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +1 -1
- data/lib/bcdice/game_system/NSSQ.rb +2 -2
- data/lib/bcdice/game_system/Nechronica.rb +3 -3
- data/lib/bcdice/game_system/NightWizard.rb +1 -1
- data/lib/bcdice/game_system/NightmareHunterDeep.rb +3 -4
- data/lib/bcdice/game_system/NinjaSlayer.rb +26 -28
- data/lib/bcdice/game_system/OracleEngine.rb +13 -17
- data/lib/bcdice/game_system/Paradiso.rb +2 -2
- data/lib/bcdice/game_system/PhantasmAdventure.rb +0 -4
- data/lib/bcdice/game_system/Raisondetre.rb +1 -1
- data/lib/bcdice/game_system/RecordOfLodossWar.rb +2 -3
- data/lib/bcdice/game_system/RokumonSekai2.rb +2 -2
- data/lib/bcdice/game_system/RuinBreakers.rb +1 -1
- data/lib/bcdice/game_system/Ryutama.rb +1 -1
- data/lib/bcdice/game_system/SRS.rb +0 -5
- data/lib/bcdice/game_system/SamsaraBallad.rb +4 -3
- data/lib/bcdice/game_system/Satasupe.rb +22 -14
- data/lib/bcdice/game_system/ScreamHighSchool.rb +2 -2
- data/lib/bcdice/game_system/ShinkuuGakuen.rb +1 -1
- data/lib/bcdice/game_system/ShinobiGami.rb +75 -39
- data/lib/bcdice/game_system/StellarKnights.rb +1 -3
- data/lib/bcdice/game_system/SterileLife.rb +1 -1
- data/lib/bcdice/game_system/StrangerOfSwordCity.rb +1 -1
- data/lib/bcdice/game_system/StratoShout.rb +10 -36
- data/lib/bcdice/game_system/StratoShout_Korean.rb +2 -1
- data/lib/bcdice/game_system/SwordWorld.rb +5 -5
- data/lib/bcdice/game_system/SwordWorld2_5.rb +1 -1
- data/lib/bcdice/game_system/TherapieSein.rb +2 -2
- data/lib/bcdice/game_system/TokumeiTenkousei.rb +2 -2
- data/lib/bcdice/game_system/Torg.rb +1 -1
- data/lib/bcdice/game_system/TorgEternity.rb +4 -7
- data/lib/bcdice/game_system/TrinitySeven.rb +2 -2
- data/lib/bcdice/game_system/TunnelsAndTrolls.rb +6 -6
- data/lib/bcdice/game_system/TwilightGunsmoke.rb +1 -1
- data/lib/bcdice/game_system/Utakaze.rb +1 -1
- data/lib/bcdice/game_system/Warhammer.rb +6 -6
- data/lib/bcdice/game_system/Warhammer4.rb +9 -12
- data/lib/bcdice/game_system/ZettaiReido.rb +1 -1
- data/lib/bcdice/normalize.rb +1 -1
- data/lib/bcdice/preprocessor.rb +12 -8
- data/lib/bcdice/randomizer.rb +12 -0
- data/lib/bcdice/repl.rb +1 -1
- data/lib/bcdice/result.rb +2 -0
- data/lib/bcdice/user_defined_dice_table.rb +26 -15
- data/lib/bcdice/version.rb +1 -1
- metadata +14 -25
- data/.editorconfig +0 -21
- data/.github/.codecov.yaml +0 -10
- data/.github/workflows/coverage.yaml +0 -21
- data/.github/workflows/lint.yaml +0 -13
- data/.github/workflows/test.yml +0 -20
- data/.gitignore +0 -14
- data/.rubocop.yml +0 -108
- data/.rubocop_todo.yml +0 -114
- data/Gemfile +0 -14
- data/ROADMAP.md +0 -30
- data/Rakefile +0 -152
- data/bcdice.gemspec +0 -29
- data/bin/repl.rb +0 -21
- data/docs/README.txt +0 -2028
- data/docs/dicebot_sort_key.md +0 -72
- data/docs/how_to_make_dicebot.md +0 -453
- data/lib/bcdice/command_parser.rb +0 -242
- data/lib/bcdice/common_command/add_dice/parser.y +0 -153
- data/lib/bcdice/common_command/barabara_dice/parser.y +0 -107
- data/lib/bcdice/common_command/calc/parser.y +0 -79
- data/lib/bcdice/common_command/reroll_dice/parser.y +0 -158
- data/lib/bcdice/common_command/upper_dice/parser.y +0 -143
|
@@ -53,7 +53,7 @@ module BCDice
|
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
def amadeusDice(command)
|
|
56
|
-
return nil unless /^(R([A-DS])([
|
|
56
|
+
return nil unless /^(R([A-DS])([+\-\d]*))(@(\d))?((>(=)?)([+\-\d]*))?(@(\d))?$/i =~ command
|
|
57
57
|
|
|
58
58
|
commandText = Regexp.last_match(1)
|
|
59
59
|
skillRank = Regexp.last_match(2)
|
|
@@ -31,13 +31,9 @@ module BCDice
|
|
|
31
31
|
情報収集表 IGT/喪失表 LT
|
|
32
32
|
MESSAGETEXT
|
|
33
33
|
|
|
34
|
-
def initialize(command)
|
|
35
|
-
super(command)
|
|
36
|
-
end
|
|
37
|
-
|
|
38
34
|
def eval_game_system_specific_command(command)
|
|
39
35
|
case command
|
|
40
|
-
when /(\d+)AN<=(\d+([
|
|
36
|
+
when /(\d+)AN<=(\d+([+\-]\d+)*)/i
|
|
41
37
|
return check_action(Regexp.last_match)
|
|
42
38
|
else
|
|
43
39
|
return roll_tables(command, TABLES)
|
|
@@ -65,7 +65,7 @@ module BCDice
|
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
def judgeDice(command)
|
|
68
|
-
unless (m = /(\d+)?(BAD|BL|GL)([-+\d]*)((C|F)([-+\d]*)?)?((C|F)([-+\d]*))?(
|
|
68
|
+
unless (m = /(\d+)?(BAD|BL|GL)([-+\d]*)((C|F)([-+\d]*)?)?((C|F)([-+\d]*))?(@([-+\d]*))?(!(\D*))?/i.match(command))
|
|
69
69
|
return nil
|
|
70
70
|
end
|
|
71
71
|
|
|
@@ -6,15 +6,6 @@ require 'bcdice/normalize'
|
|
|
6
6
|
require 'bcdice/dice_table/table'
|
|
7
7
|
require 'bcdice/dice_table/d66_grid_table'
|
|
8
8
|
|
|
9
|
-
# ビーストバインド トリニティのダイスボット
|
|
10
|
-
#
|
|
11
|
-
# = 前ver(1.43.07)からの変更・修正
|
|
12
|
-
# * nBBで判定を行う際、「ダイスを1個しか振らない場合」の達成値計算が正しくなかった誤りを修正。
|
|
13
|
-
# * @x(クリティカル値指定)、を加減式で入力できるように仕様変更。クリティカル値は、加減式での入力なら%w(人間性からのクリティカル値計算)と併用可能に。
|
|
14
|
-
# * #y(ファンブル値指定)を加減式で入力できるように仕様変更。また、「ファンブルしても達成値が0にならない」モード#Ayを追加。
|
|
15
|
-
# * &v(出目v未満のダイスを出目vとして扱う)のモードを追加。2018年12月現在、ゲーマーズ・フィールド誌先行収録データでのみ使用するモードです。
|
|
16
|
-
# * 「暴露表」および「正体判明チャート」をダイスボットに組み込み。
|
|
17
|
-
# * どどんとふ以外のボーンズ&カーズを用いたオンラインセッション用ツールにあわせ、ヘルプメッセージ部分からイニシアティブ表についての言及を削除。
|
|
18
9
|
module BCDice
|
|
19
10
|
module GameSystem
|
|
20
11
|
class BeastBindTrinity < Base
|
|
@@ -106,7 +97,7 @@ module BCDice
|
|
|
106
97
|
private
|
|
107
98
|
|
|
108
99
|
def parse()
|
|
109
|
-
m = /^(\d+)(?:R6|BB6?)((?:[
|
|
100
|
+
m = /^(\d+)(?:R6|BB6?)((?:[+\-]\d+)+)?(?:%(-?\d+))?(?:@([+\-\d]+))?(?:#(A)?([+\-\d]+))?(?:\$([1-6]+))?(?:&([1-6]))?(?:([>=]+)(\d+))?$/.match(@command)
|
|
110
101
|
unless m
|
|
111
102
|
@parse_error = true
|
|
112
103
|
return
|
|
@@ -170,7 +170,7 @@ module BCDice
|
|
|
170
170
|
|
|
171
171
|
def eval_game_system_specific_command(command)
|
|
172
172
|
case command.upcase
|
|
173
|
-
when /^([1-7]*)PD(\d+)([
|
|
173
|
+
when /^([1-7]*)PD(\d+)([+\-]\d+)?$/
|
|
174
174
|
counts = Regexp.last_match(2).to_i
|
|
175
175
|
return nil if counts <= 0
|
|
176
176
|
|
|
@@ -1951,7 +1951,7 @@ module BCDice
|
|
|
1951
1951
|
]
|
|
1952
1952
|
return textFrom1D6Table(title, table)
|
|
1953
1953
|
|
|
1954
|
-
when /^(\d+)(S?)A([1-6]*)([
|
|
1954
|
+
when /^(\d+)(S?)A([1-6]*)([+\-]\d+)?$/
|
|
1955
1955
|
title = '攻撃'
|
|
1956
1956
|
counts = Regexp.last_match(1).to_i
|
|
1957
1957
|
return nil if counts <= 0
|
|
@@ -2261,7 +2261,7 @@ module BCDice
|
|
|
2261
2261
|
return text, skill unless text =~ /チャンスが(\d{1,2})以下ならオフ。/
|
|
2262
2262
|
|
|
2263
2263
|
target = Regexp.last_match(1).to_i
|
|
2264
|
-
matchedText =
|
|
2264
|
+
matchedText = Regexp.last_match(0)
|
|
2265
2265
|
|
|
2266
2266
|
if target >= chance.to_i
|
|
2267
2267
|
text = "オフ"
|
|
@@ -2433,7 +2433,7 @@ module BCDice
|
|
|
2433
2433
|
end
|
|
2434
2434
|
|
|
2435
2435
|
substitution = text.clone
|
|
2436
|
-
substitution = substitution.gsub(
|
|
2436
|
+
substitution = substitution.gsub(Regexp.last_match(0), '')
|
|
2437
2437
|
substitution += "\n" unless substitution.empty? || /\n$/ =~ substitution
|
|
2438
2438
|
|
|
2439
2439
|
return substitution + badStatus(counts)
|
|
@@ -165,7 +165,7 @@ module BCDice
|
|
|
165
165
|
|
|
166
166
|
def eval_game_system_specific_command(command)
|
|
167
167
|
case command.upcase
|
|
168
|
-
when /^([1-7]*)PD(\d+)([
|
|
168
|
+
when /^([1-7]*)PD(\d+)([+\-]\d+)?$/
|
|
169
169
|
counts = Regexp.last_match(2).to_i
|
|
170
170
|
return nil if counts <= 0
|
|
171
171
|
|
|
@@ -1802,7 +1802,7 @@ module BCDice
|
|
|
1802
1802
|
]
|
|
1803
1803
|
return textFrom1D6Table(title, table)
|
|
1804
1804
|
|
|
1805
|
-
when /^(\d+)(S?)A([1-6]*)([
|
|
1805
|
+
when /^(\d+)(S?)A([1-6]*)([+\-]\d+)?$/
|
|
1806
1806
|
title = '攻撃'
|
|
1807
1807
|
counts = Regexp.last_match(1).to_i
|
|
1808
1808
|
return nil if counts <= 0
|
|
@@ -2112,7 +2112,7 @@ module BCDice
|
|
|
2112
2112
|
return text, skill unless text =~ /チャンスが(\d{1,2})以下なら오프。/
|
|
2113
2113
|
|
|
2114
2114
|
target = Regexp.last_match(1).to_i
|
|
2115
|
-
matchedText =
|
|
2115
|
+
matchedText = Regexp.last_match(0)
|
|
2116
2116
|
|
|
2117
2117
|
if target >= chance.to_i
|
|
2118
2118
|
text = "오프"
|
|
@@ -2284,7 +2284,7 @@ module BCDice
|
|
|
2284
2284
|
end
|
|
2285
2285
|
|
|
2286
2286
|
substitution = text.clone
|
|
2287
|
-
substitution = substitution.gsub(
|
|
2287
|
+
substitution = substitution.gsub(Regexp.last_match(0), '')
|
|
2288
2288
|
substitution += "\n" unless substitution.empty? || /\n$/ =~ substitution
|
|
2289
2289
|
|
|
2290
2290
|
return substitution + badStatus(counts)
|
|
@@ -66,7 +66,7 @@ module BCDice
|
|
|
66
66
|
end
|
|
67
67
|
return rollAct(counts, judgment, critical, fumble)
|
|
68
68
|
|
|
69
|
-
when /^CT3([
|
|
69
|
+
when /^CT3([+\-]?)$/
|
|
70
70
|
sign = Regexp.last_match(1)
|
|
71
71
|
title = '因縁表(The 3rd) 『BoA3』P292'
|
|
72
72
|
table = [
|
|
@@ -95,7 +95,7 @@ module BCDice
|
|
|
95
95
|
]
|
|
96
96
|
return tableText(title, table, sign)
|
|
97
97
|
|
|
98
|
-
when /^CTR([
|
|
98
|
+
when /^CTR([+\-]?)$/
|
|
99
99
|
sign = Regexp.last_match(1)
|
|
100
100
|
title = '因縁表(リインカーネイション) 『BAR』P51、299'
|
|
101
101
|
table = [
|
|
@@ -124,7 +124,7 @@ module BCDice
|
|
|
124
124
|
]
|
|
125
125
|
return tableText(title, table, sign)
|
|
126
126
|
|
|
127
|
-
when /^DJV(
|
|
127
|
+
when /^DJV(-?)$/
|
|
128
128
|
sign = Regexp.last_match(1)
|
|
129
129
|
title = '前世邂逅表(デジャブ) 『BAR』P235'
|
|
130
130
|
table = [
|
|
@@ -153,7 +153,7 @@ module BCDice
|
|
|
153
153
|
]
|
|
154
154
|
return tableText(title, table, sign)
|
|
155
155
|
|
|
156
|
-
when /^AKST([
|
|
156
|
+
when /^AKST([+\-]?)$/
|
|
157
157
|
sign = Regexp.last_match(1)
|
|
158
158
|
title = '悪徳シーン表 『GoV』P16、164'
|
|
159
159
|
table = [
|
|
@@ -100,8 +100,8 @@ module BCDice
|
|
|
100
100
|
debug("commandText", commandText)
|
|
101
101
|
|
|
102
102
|
message = ""
|
|
103
|
-
if rerollCounts.size > 1
|
|
104
|
-
message += "(#{commandText})"
|
|
103
|
+
if rerollCounts.size > 1 && isStop
|
|
104
|
+
message += "(#{commandText})"
|
|
105
105
|
end
|
|
106
106
|
message += "\n"
|
|
107
107
|
isReRoll = true
|
|
@@ -167,13 +167,16 @@ module BCDice
|
|
|
167
167
|
|
|
168
168
|
canReRoll = !rerollCommand.empty?
|
|
169
169
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
170
|
+
# frozen_string_literal: true
|
|
171
|
+
# ゲームシステムの識別子
|
|
172
|
+
# ゲームシステム名
|
|
173
|
+
# ゲームシステム名の読みがな
|
|
174
|
+
# ダイスボットの使い方
|
|
175
|
+
if canReRoll && !isStop
|
|
176
|
+
text, successListTmp, countOneListTmp, = reRoll(rerollCommand, isStop)
|
|
177
|
+
message += text
|
|
178
|
+
successList += successListTmp
|
|
179
|
+
countOneList += countOneListTmp
|
|
177
180
|
end
|
|
178
181
|
|
|
179
182
|
return message, bitList, successList, countOneList, canReRoll
|
|
@@ -60,8 +60,18 @@ module BCDice
|
|
|
60
60
|
end
|
|
61
61
|
|
|
62
62
|
def eval_game_system_specific_command(command)
|
|
63
|
-
roll_tables(command, TABLES)
|
|
63
|
+
roll_tables(command, TABLES) || RTT.roll_command(randomizer, command)
|
|
64
64
|
end
|
|
65
|
+
RTT = DiceTable::SaiFicSkillTable.new(
|
|
66
|
+
[["社会", ["怯える", "脅す", "考えない", "自信", "黙る", "伝える", "だます", "地位", "笑う", "話す", "怒る"]],
|
|
67
|
+
["頭部", ["聴く", "感覚器", "見る", "反応", "考える", "脳", "閃く", "予感", "叫ぶ", "口", "噛む"]],
|
|
68
|
+
["腕部", ["締める", "殴る", "斬る", "利き腕", "撃つ", "操作", "刺す", "逆腕", "振る", "掴む", "投げる"]],
|
|
69
|
+
["胴部", ["塞ぐ", "呼吸器", "止める", "受ける", "測る", "心臓", "逸らす", "かわす", "耐える", "消化器", "落ちる"]],
|
|
70
|
+
["脚部", ["走る", "迫る", "蹴る", "利き脚", "跳ぶ", "仕掛ける", "踏む", "逆脚", "這う", "伏せる", "歩く"]],
|
|
71
|
+
["環境", ["休む", "日常", "隠れる", "待つ", "現れる", "人脈", "捕らえる", "開ける", "逃げる", "退路", "休まない"]],],
|
|
72
|
+
rtt: 'AST',
|
|
73
|
+
rtt_format: "ランダム全特技表(%<category_dice>d) > %<category_name>s(%<row_dice>d) > %<skill_name>s"
|
|
74
|
+
)
|
|
65
75
|
|
|
66
76
|
TABLES_WITH_BLOOD_MOON = {
|
|
67
77
|
"ST" => DiceTable::Table.new(
|
|
@@ -110,42 +120,6 @@ module BCDice
|
|
|
110
120
|
"《心臓》"
|
|
111
121
|
]
|
|
112
122
|
),
|
|
113
|
-
"AST" => DiceTable::ChainTable.new(
|
|
114
|
-
"ランダム全特技表",
|
|
115
|
-
"1D6",
|
|
116
|
-
[
|
|
117
|
-
DiceTable::Table.new(
|
|
118
|
-
"社会",
|
|
119
|
-
"2D6",
|
|
120
|
-
["怯える", "脅す", "考えない", "自信", "黙る", "伝える", "だます", "地位", "笑う", "話す", "怒る"]
|
|
121
|
-
),
|
|
122
|
-
DiceTable::Table.new(
|
|
123
|
-
"頭部",
|
|
124
|
-
"2D6",
|
|
125
|
-
["聴く", "感覚器", "見る", "反応", "考える", "脳", "閃く", "予感", "叫ぶ", "口", "噛む"]
|
|
126
|
-
),
|
|
127
|
-
DiceTable::Table.new(
|
|
128
|
-
"腕部",
|
|
129
|
-
"2D6",
|
|
130
|
-
["締める", "殴る", "斬る", "利き腕", "撃つ", "操作", "刺す", "逆腕", "振る", "掴む", "投げる"]
|
|
131
|
-
),
|
|
132
|
-
DiceTable::Table.new(
|
|
133
|
-
"胴部",
|
|
134
|
-
"2D6",
|
|
135
|
-
["塞ぐ", "呼吸器", "止める", "受ける", "測る", "心臓", "逸らす", "かわす", "耐える", "消化器", "落ちる"]
|
|
136
|
-
),
|
|
137
|
-
DiceTable::Table.new(
|
|
138
|
-
"脚部",
|
|
139
|
-
"2D6",
|
|
140
|
-
["走る", "迫る", "蹴る", "利き脚", "跳ぶ", "仕掛ける", "踏む", "逆脚", "這う", "伏せる", "歩く"]
|
|
141
|
-
),
|
|
142
|
-
DiceTable::Table.new(
|
|
143
|
-
"環境",
|
|
144
|
-
"2D6",
|
|
145
|
-
["休む", "日常", "隠れる", "待つ", "現れる", "人脈", "捕らえる", "開ける", "逃げる", "退路", "休まない"]
|
|
146
|
-
)
|
|
147
|
-
]
|
|
148
|
-
),
|
|
149
123
|
"MIT" => DiceTable::Table.new(
|
|
150
124
|
"軽度狂気表",
|
|
151
125
|
"1D6",
|
|
@@ -416,7 +390,7 @@ module BCDice
|
|
|
416
390
|
),
|
|
417
391
|
}.merge(TABLES_WITH_BLOOD_MOON).freeze
|
|
418
392
|
|
|
419
|
-
register_prefix(TABLES.keys)
|
|
393
|
+
register_prefix(RTT.prefixes, TABLES.keys)
|
|
420
394
|
end
|
|
421
395
|
end
|
|
422
396
|
end
|
|
@@ -59,7 +59,7 @@ module BCDice
|
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
def eval_game_system_specific_command(command)
|
|
62
|
-
return roll_tables(command, TABLES)
|
|
62
|
+
return roll_tables(command, TABLES) || BloodCrusade::RTT.roll_command(randomizer, command)
|
|
63
63
|
end
|
|
64
64
|
|
|
65
65
|
TABLES = {
|
|
@@ -206,7 +206,7 @@ module BCDice
|
|
|
206
206
|
),
|
|
207
207
|
}.merge(BloodCrusade::TABLES_WITH_BLOOD_MOON).freeze
|
|
208
208
|
|
|
209
|
-
register_prefix(TABLES.keys)
|
|
209
|
+
register_prefix(BloodCrusade::RTT.prefixes, TABLES.keys)
|
|
210
210
|
end
|
|
211
211
|
end
|
|
212
212
|
end
|
|
@@ -14,7 +14,8 @@ module BCDice
|
|
|
14
14
|
|
|
15
15
|
# ダイスボットの使い方
|
|
16
16
|
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
|
|
17
|
-
ランダムでモンスターカードを選ぶ (RM)
|
|
17
|
+
ランダムでモンスターカードを選ぶ (RM) (RTTn n:色番号、省略可能)
|
|
18
|
+
ランダム分野表 RCT
|
|
18
19
|
特定のモンスターカードを選ぶ (CMxy x:色、y:番号)
|
|
19
20
|
白:W、青:U、緑:V、金:G、赤:R、黒:B
|
|
20
21
|
例)CMW1→白の2:白竜 CMG12→金の12:土精霊
|
|
@@ -43,7 +44,7 @@ module BCDice
|
|
|
43
44
|
if dice_total <= 2
|
|
44
45
|
return " > ファンブル"
|
|
45
46
|
elsif dice_total >= 12
|
|
46
|
-
return " > スペシャル > " +
|
|
47
|
+
return " > スペシャル > " + RTT.roll_command(@randomizer, "RM")
|
|
47
48
|
elsif total >= target
|
|
48
49
|
return " > 成功"
|
|
49
50
|
else
|
|
@@ -52,72 +53,31 @@ module BCDice
|
|
|
52
53
|
end
|
|
53
54
|
|
|
54
55
|
def eval_game_system_specific_command(command)
|
|
55
|
-
command
|
|
56
|
-
|
|
57
|
-
case command
|
|
58
|
-
when /^RM$/i
|
|
59
|
-
return getRandumMonster
|
|
60
|
-
when /^CM(\w)(\d+)$/i
|
|
61
|
-
color = Regexp.last_match(1).upcase
|
|
62
|
-
index = Regexp.last_match(2).to_i
|
|
63
|
-
return getMonster(color, index)
|
|
64
|
-
else
|
|
65
|
-
return roll_tables(command, TABLES)
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
def getRandumMonster
|
|
70
|
-
type = "ランダムモンスター選択"
|
|
71
|
-
colorTable = getColorTable
|
|
72
|
-
color, colorIndex = get_table_by_1d6(colorTable)
|
|
73
|
-
|
|
74
|
-
monsters = getMonsterTables(colorIndex - 1)
|
|
75
|
-
monsterName, monsterIndex = get_table_by_2d6(monsters)
|
|
76
|
-
|
|
77
|
-
output = "#{type}(#{colorIndex},#{monsterIndex}) > #{color}の#{monsterIndex}:#{monsterName}"
|
|
78
|
-
return output
|
|
56
|
+
roll_tables(command, TABLES) || get_monster(command) || RTT.roll_command(randomizer, command)
|
|
79
57
|
end
|
|
80
58
|
|
|
81
|
-
|
|
82
|
-
['白', '青', '緑', '金', '赤', '黒']
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
def getMonsterTables(colorIndex)
|
|
86
|
-
tables = [
|
|
87
|
-
['白竜', '僧侶', '格闘家', '斧使い', '剣士', '槍士', '歩兵', '弓兵', '砲兵', '天使', '軍神'],
|
|
88
|
-
['水竜', '魚', '魚人', 'イカ', '蟹', '探偵', '海賊', '魔術師', '使い魔', '雲', '水精霊'],
|
|
89
|
-
['緑竜', 'ワーム', '鳥人', '鳥', '獣', '獣人', 'エルフ', '妖精', '昆虫', '植物', '森精霊'],
|
|
90
|
-
['金竜', '宝石', '岩石', '鋼', '錬金術師', '魔法生物', 'ドワーフ', '機械', '運命', '女神', '土精霊'],
|
|
91
|
-
['火竜', '竜人', '恐竜', '戦車', '蛮族', '小鬼', '大鬼', '巨人', '雷', '炎', '火精霊'],
|
|
92
|
-
['黒竜', '闇騎士', '怪物', '忍者', '妖怪', '蝙蝠', '吸血鬼', '不死者', '幽霊', '悪魔', '邪神'],
|
|
93
|
-
]
|
|
94
|
-
|
|
95
|
-
return tables[colorIndex]
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
def getMonster(color, monsterIndex)
|
|
99
|
-
return nil if monsterIndex < 2
|
|
100
|
-
|
|
101
|
-
type = "モンスター選択"
|
|
102
|
-
|
|
103
|
-
colorWords = ['W', 'U', 'V', 'G', 'R', 'B']
|
|
104
|
-
colorIndex = colorWords.index(color)
|
|
105
|
-
debug("colorIndex")
|
|
106
|
-
|
|
107
|
-
return nil if colorIndex.nil?
|
|
59
|
+
COLOR_TABLE = ['W', 'U', 'V', 'G', 'R', 'B'].freeze
|
|
108
60
|
|
|
109
|
-
|
|
110
|
-
|
|
61
|
+
RTT = DiceTable::SaiFicSkillTable.new([
|
|
62
|
+
['白', ['白竜', '僧侶', '格闘家', '斧使い', '剣士', '槍士', '歩兵', '弓兵', '砲兵', '天使', '軍神']],
|
|
63
|
+
['青', ['水竜', '魚', '魚人', 'イカ', '蟹', '探偵', '海賊', '魔術師', '使い魔', '雲', '水精霊']],
|
|
64
|
+
['緑', ['緑竜', 'ワーム', '鳥人', '鳥', '獣', '獣人', 'エルフ', '妖精', '昆虫', '植物', '森精霊']],
|
|
65
|
+
['金', ['金竜', '宝石', '岩石', '鋼', '錬金術師', '魔法生物', 'ドワーフ', '機械', '運命', '女神', '土精霊']],
|
|
66
|
+
['赤', ['火竜', '竜人', '恐竜', '戦車', '蛮族', '小鬼', '大鬼', '巨人', '雷', '炎', '火精霊']],
|
|
67
|
+
['黒', ['黒竜', '闇騎士', '怪物', '忍者', '妖怪', '蝙蝠', '吸血鬼', '不死者', '幽霊', '悪魔', '邪神']],
|
|
68
|
+
], rtt: "RM", rtt_format: "ランダムモンスター選択(%<category_dice>d,%<row_dice>d) > %<text>s", s_format: "%<category_name>sの%<row_dice>d:%<skill_name>s")
|
|
111
69
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
monsterName = monsters[monsterIndex - 2]
|
|
70
|
+
def get_monster(command)
|
|
71
|
+
m = command.match(/^CM(\w)(\d+)$/i)
|
|
72
|
+
return nil unless m
|
|
116
73
|
|
|
117
|
-
|
|
74
|
+
cat = COLOR_TABLE.index(m[1])
|
|
75
|
+
row_dice = m[2].to_i
|
|
76
|
+
return nil unless cat
|
|
77
|
+
return nil unless row_dice.between?(2, 12)
|
|
118
78
|
|
|
119
|
-
|
|
120
|
-
return
|
|
79
|
+
skill = RTT.categories[cat].skills[row_dice - 2]
|
|
80
|
+
return "モンスター選択 > #{skill}"
|
|
121
81
|
end
|
|
122
82
|
|
|
123
83
|
TABLES = {
|
|
@@ -242,7 +202,7 @@ module BCDice
|
|
|
242
202
|
]
|
|
243
203
|
),
|
|
244
204
|
}.freeze
|
|
245
|
-
register_prefix(
|
|
205
|
+
register_prefix(RTT.prefixes, 'CM.*', TABLES.keys)
|
|
246
206
|
end
|
|
247
207
|
end
|
|
248
208
|
end
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require 'bcdice/command_parser'
|
|
4
|
-
|
|
5
3
|
module BCDice
|
|
6
4
|
module GameSystem
|
|
7
5
|
class ChaosFlare < Base
|
|
@@ -108,7 +106,9 @@ module BCDice
|
|
|
108
106
|
# @param command [String]
|
|
109
107
|
# @return [String, nil]
|
|
110
108
|
def cf_roll(command)
|
|
111
|
-
parser =
|
|
109
|
+
parser = Command::Parser.new(/\d*CF/, round_type: round_type)
|
|
110
|
+
.enable_critical
|
|
111
|
+
.enable_fumble
|
|
112
112
|
|
|
113
113
|
@cmd = parser.parse(command)
|
|
114
114
|
unless @cmd
|
|
@@ -36,7 +36,7 @@ module BCDice
|
|
|
36
36
|
result = ''
|
|
37
37
|
|
|
38
38
|
case command
|
|
39
|
-
when /([+-]?\d+)?CL([+-]\d+)?(
|
|
39
|
+
when /([+-]?\d+)?CL([+-]\d+)?(@(\d))?(\[(\d+)\])?([+-]\d+)?(>=(\d+))?/i
|
|
40
40
|
m = Regexp.last_match
|
|
41
41
|
base = (m[1] || 1).to_i
|
|
42
42
|
modifier1 = m[2].to_i
|
|
@@ -45,7 +45,7 @@ module BCDice
|
|
|
45
45
|
def getCheckRollDiceCommandResult(command)
|
|
46
46
|
debug("getCheckRollDiceCommandResult command", command)
|
|
47
47
|
|
|
48
|
-
return nil unless command =~ /(\d+)?CH([
|
|
48
|
+
return nil unless command =~ /(\d+)?CH([+\-\d]*)(>=([+\-\d]*))?$/i
|
|
49
49
|
|
|
50
50
|
diceCount = (Regexp.last_match(1) || 3).to_i
|
|
51
51
|
modifyText = (Regexp.last_match(2) || '')
|
|
@@ -134,7 +134,7 @@ module BCDice
|
|
|
134
134
|
def getYear(yearText)
|
|
135
135
|
text = yearText.gsub(/(\d+)D(6+)/) { getD6xResult(Regexp.last_match(1).to_i, Regexp.last_match(2).length) }
|
|
136
136
|
|
|
137
|
-
unless text.match?(%r{^[
|
|
137
|
+
unless text.match?(%r{^[+\-*/\d]+$})
|
|
138
138
|
return nil
|
|
139
139
|
end
|
|
140
140
|
|