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
|
@@ -126,15 +126,13 @@ module BCDice
|
|
|
126
126
|
|
|
127
127
|
# 正規表現の都合で先頭に ',' が残っているので取っておく
|
|
128
128
|
text = text[1..-1]
|
|
129
|
-
|
|
129
|
+
text.split(',').map do |rule|
|
|
130
130
|
v = rule.split('>').map(&:to_i)
|
|
131
131
|
{
|
|
132
132
|
from: v[0],
|
|
133
133
|
to: v[1],
|
|
134
134
|
}
|
|
135
135
|
end
|
|
136
|
-
|
|
137
|
-
rules
|
|
138
136
|
end
|
|
139
137
|
|
|
140
138
|
def roll_all_situation_b2_tables
|
|
@@ -104,7 +104,7 @@ module BCDice
|
|
|
104
104
|
|
|
105
105
|
def getJudgeResult(command)
|
|
106
106
|
case command
|
|
107
|
-
when /(\d+)*DA([\d
|
|
107
|
+
when /(\d+)*DA([\d+*\-]*\d)?\[(\d+),(\d+)(,(\d+))?\]/i
|
|
108
108
|
number = (Regexp.last_match(1) || 1).to_i
|
|
109
109
|
correction = (Regexp.last_match(2) || 0).to_i
|
|
110
110
|
single = (Regexp.last_match(3) || 4).to_i
|
|
@@ -46,7 +46,7 @@ module BCDice
|
|
|
46
46
|
debug("checkRoll begin command", command)
|
|
47
47
|
|
|
48
48
|
result = ''
|
|
49
|
-
return result unless command =~ /^(\d+)SR([
|
|
49
|
+
return result unless command =~ /^(\d+)SR([+\-]?\d+)?(>=(\d+))?$/i
|
|
50
50
|
|
|
51
51
|
diceCount = Regexp.last_match(1).to_i
|
|
52
52
|
modify = Regexp.last_match(2).to_i
|
|
@@ -17,15 +17,14 @@ module BCDice
|
|
|
17
17
|
|
|
18
18
|
VOT, GUT, BAT, KEYT, DRT: (ボーカル、ギター、ベース、キーボード、ドラム)トラブル表
|
|
19
19
|
EMO: 感情表
|
|
20
|
-
|
|
20
|
+
ATn, RTTn: 特技表(n=分野。空:ランダム 1:主義 2:身体 3:モチーフ 4:エモーション 5:行動 6:逆境)
|
|
21
|
+
RCT: 分野ランダム表
|
|
21
22
|
SCENE, MACHI, GAKKO, BAND: (汎用、街角、学校、バンド)シーン表 接近シーンで使用
|
|
22
23
|
TENKAI: シーン展開表 奔走シーン 練習シーンで使用
|
|
23
24
|
|
|
24
|
-
|
|
25
|
+
D66入れ替えあり
|
|
25
26
|
INFO_MESSAGE_TEXT
|
|
26
27
|
|
|
27
|
-
register_prefix('AT[1-6]?')
|
|
28
|
-
|
|
29
28
|
def initialize(command)
|
|
30
29
|
super(command)
|
|
31
30
|
|
|
@@ -52,37 +51,7 @@ module BCDice
|
|
|
52
51
|
end
|
|
53
52
|
|
|
54
53
|
def eval_game_system_specific_command(command)
|
|
55
|
-
|
|
56
|
-
value = m[1].to_i
|
|
57
|
-
return getSkillList(value)
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
roll_tables(command, self.class::TABLES)
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def getSkillList(field = 0)
|
|
64
|
-
title = translate("StratoShout.AT.name")
|
|
65
|
-
table = translate("StratoShout.AT.table")
|
|
66
|
-
|
|
67
|
-
number1 = 0
|
|
68
|
-
if field == 0
|
|
69
|
-
table, number1 = get_table_by_1d6(table)
|
|
70
|
-
else
|
|
71
|
-
table = table[field - 1]
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
fieldName, table = table
|
|
75
|
-
skill, number2 = get_table_by_2d6(table)
|
|
76
|
-
|
|
77
|
-
text = title
|
|
78
|
-
if field == 0
|
|
79
|
-
text += " > [#{number1},#{number2}]"
|
|
80
|
-
else
|
|
81
|
-
skill_class = translate("StratoShout.AT.skill_class", name: fieldName)
|
|
82
|
-
text += "#{skill_class} > [#{number2}]"
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
return "#{text} > 《#{skill}/#{fieldName}#{number2}》"
|
|
54
|
+
roll_tables(command, self.class::TABLES) || self.class::RTT.roll_command(@randomizer, command)
|
|
86
55
|
end
|
|
87
56
|
|
|
88
57
|
class << self
|
|
@@ -103,11 +72,16 @@ module BCDice
|
|
|
103
72
|
"TENKAI" => DiceTable::D66Table.from_i18n("StratoShout.table.TENKAI", locale),
|
|
104
73
|
}
|
|
105
74
|
end
|
|
75
|
+
|
|
76
|
+
def translate_rtt(locale)
|
|
77
|
+
DiceTable::SaiFicSkillTable.from_i18n("StratoShout.RTT", locale, rtt: 'AT', rttn: ['AT1', 'AT2', 'AT3', 'AT4', 'AT5', 'AT6'])
|
|
78
|
+
end
|
|
106
79
|
end
|
|
107
80
|
|
|
108
81
|
TABLES = translate_tables(:ja_jp)
|
|
82
|
+
RTT = translate_rtt(:ja_jp)
|
|
109
83
|
|
|
110
|
-
register_prefix(TABLES.keys)
|
|
84
|
+
register_prefix(TABLES.keys, RTT.prefixes)
|
|
111
85
|
end
|
|
112
86
|
end
|
|
113
87
|
end
|
|
@@ -18,7 +18,7 @@ module BCDice
|
|
|
18
18
|
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
|
|
19
19
|
VOT, GUT, BAT, KEYT, DRT: (보컬, 기타, 베이스, 키보드, 드럼)트러블표
|
|
20
20
|
EMO: 감정표
|
|
21
|
-
AT[1-6]: 특기표(공백: 랜덤 1: 주의 2: 신체 3: 모티브 4: 이모션 5: 행동 6: 역경)
|
|
21
|
+
RTT[1-6], AT[1-6]: 특기표(공백: 랜덤 1: 주의 2: 신체 3: 모티브 4: 이모션 5: 행동 6: 역경)
|
|
22
22
|
SCENE, MACHI, GAKKO, BAND: (범용, 거리, 학교, 밴드)장면표. 접근 장면에 사용
|
|
23
23
|
TENKAI: 장면 전개표. 분주 장면, 연습 장면에 사용
|
|
24
24
|
[]내는 생략가능 D66는 변동있음
|
|
@@ -33,6 +33,7 @@ module BCDice
|
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
TABLES = translate_tables(:ko_kr).freeze
|
|
36
|
+
RTT = translate_rtt(:ko_kr)
|
|
36
37
|
end
|
|
37
38
|
end
|
|
38
39
|
end
|
|
@@ -71,7 +71,7 @@ module BCDice
|
|
|
71
71
|
|
|
72
72
|
commands = getRatingCommandStrings
|
|
73
73
|
|
|
74
|
-
m = /^S?(H?K[\d
|
|
74
|
+
m = /^S?(H?K[\d+\-]+([#{commands}]\[([\d+\-]+)\])*([\d+\-]*)([CMR]\[([\d+\-]+)\]|GF|H)*)/i.match(string)
|
|
75
75
|
unless m
|
|
76
76
|
debug("not matched")
|
|
77
77
|
return '1'
|
|
@@ -86,7 +86,7 @@ module BCDice
|
|
|
86
86
|
|
|
87
87
|
key, addValue = getKeyAndAddValueFromString(string)
|
|
88
88
|
|
|
89
|
-
return '1' unless key =~ /(
|
|
89
|
+
return '1' unless key =~ /(\d+)/
|
|
90
90
|
|
|
91
91
|
key = Regexp.last_match(1).to_i
|
|
92
92
|
|
|
@@ -204,12 +204,12 @@ module BCDice
|
|
|
204
204
|
firstDiceChanteTo = 0
|
|
205
205
|
firstDiceChangeModify = 0
|
|
206
206
|
|
|
207
|
-
regexp = /m\[([\d
|
|
207
|
+
regexp = /m\[([\d+\-]+)\]/i
|
|
208
208
|
|
|
209
209
|
if regexp =~ string
|
|
210
210
|
firstDiceChangeModify = Regexp.last_match(1)
|
|
211
211
|
|
|
212
|
-
unless /[
|
|
212
|
+
unless /[+\-]/ =~ firstDiceChangeModify
|
|
213
213
|
firstDiceChanteTo = firstDiceChangeModify.to_i
|
|
214
214
|
firstDiceChangeModify = 0
|
|
215
215
|
end
|
|
@@ -229,7 +229,7 @@ module BCDice
|
|
|
229
229
|
key = nil
|
|
230
230
|
addValue = 0
|
|
231
231
|
|
|
232
|
-
if /K(\d+)([\d
|
|
232
|
+
if /K(\d+)([\d+\-]*)/i =~ string # ボーナスの抽出
|
|
233
233
|
key = Regexp.last_match(1)
|
|
234
234
|
if Regexp.last_match(2)
|
|
235
235
|
addValue = ArithmeticEvaluator.eval(Regexp.last_match(2))
|
|
@@ -108,7 +108,7 @@ module BCDice
|
|
|
108
108
|
|
|
109
109
|
def getKeptDiceChangesFromString(string)
|
|
110
110
|
keptDiceChangeModify = 0
|
|
111
|
-
regexp = /a\[([
|
|
111
|
+
regexp = /a\[([+\-]\d+)\]/i
|
|
112
112
|
if regexp =~ string
|
|
113
113
|
keptDiceChangeModify = Regexp.last_match(1)
|
|
114
114
|
string = string.gsub(regexp, '')
|
|
@@ -36,13 +36,13 @@ module BCDice
|
|
|
36
36
|
output =
|
|
37
37
|
case command.upcase
|
|
38
38
|
|
|
39
|
-
when /(TS|OP)(\d+)?(([
|
|
39
|
+
when /(TS|OP)(\d+)?(([+\-]\d+)*)(@(\d+))?$/i
|
|
40
40
|
hasCritical = (Regexp.last_match(1) == "OP")
|
|
41
41
|
target = (Regexp.last_match(6) || 0).to_i
|
|
42
42
|
modify = (Regexp.last_match(2) || 0).to_i
|
|
43
43
|
modifyAddString = Regexp.last_match(3)
|
|
44
44
|
|
|
45
|
-
modify_list = modifyAddString.scan(/[
|
|
45
|
+
modify_list = modifyAddString.scan(/[+\-]\d+/) # 修正値を分割して配列へ
|
|
46
46
|
modify_list.each { |i| modify += i.to_i }
|
|
47
47
|
|
|
48
48
|
checkRoll(hasCritical, modify, target)
|
|
@@ -26,10 +26,10 @@ module BCDice
|
|
|
26
26
|
@sort_add_dice = true
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
-
register_prefix('\d+D6
|
|
29
|
+
register_prefix('\d+D6')
|
|
30
30
|
|
|
31
31
|
def eval_game_system_specific_command(command)
|
|
32
|
-
parser =
|
|
32
|
+
parser = Command::Parser.new(/\d+D6/, round_type: round_type)
|
|
33
33
|
cmd = parser.parse(command)
|
|
34
34
|
unless cmd
|
|
35
35
|
return nil
|
|
@@ -42,9 +42,6 @@ module BCDice
|
|
|
42
42
|
・ロールボーナス表「BTx+y or BONUSx+y or TOTALx+y」 xは数値, yは技能基本値
|
|
43
43
|
INFO_MESSAGE_TEXT
|
|
44
44
|
register_prefix('TE.*', 'UP.*', 'POS.*', '\d+BD.*', 'TG.*', 'RT.*', 'Result.*', 'DT.*', 'damage.*', 'BT.*', 'bonus.*', 'total.*', '1R20.*')
|
|
45
|
-
def initialize(command)
|
|
46
|
-
super(command)
|
|
47
|
-
end
|
|
48
45
|
|
|
49
46
|
def eval_game_system_specific_command(command)
|
|
50
47
|
torg_check(command) ||
|
|
@@ -176,7 +173,7 @@ module BCDice
|
|
|
176
173
|
# ダメージボーナスコマンド
|
|
177
174
|
def getBonusDamageDiceCommandResult(command)
|
|
178
175
|
debug("TorgEternity Bonus Damage Roll Command ? ", command)
|
|
179
|
-
m = /(\d+)(BD)(([
|
|
176
|
+
m = /(\d+)(BD)(([+\-]\d+)*)/i.match(command)
|
|
180
177
|
unless m
|
|
181
178
|
return nil
|
|
182
179
|
end
|
|
@@ -196,7 +193,7 @@ module BCDice
|
|
|
196
193
|
# 成功レベル表コマンド
|
|
197
194
|
def getSuccessLevelDiceCommandResult(command)
|
|
198
195
|
debug("TorgEternity Success Level Table Command ? ", command)
|
|
199
|
-
m = /(RT|Result)(
|
|
196
|
+
m = /(RT|Result)(-*\d+([+\-]\d+)*)/i.match(command)
|
|
200
197
|
unless m
|
|
201
198
|
return nil
|
|
202
199
|
end
|
|
@@ -216,7 +213,7 @@ module BCDice
|
|
|
216
213
|
# ダメージ結果表コマンド
|
|
217
214
|
def getDamageResultDiceCommandResult(command)
|
|
218
215
|
debug("TorgEternity Damage Result Table Command ? ", command)
|
|
219
|
-
m = /(DT|Damage)(
|
|
216
|
+
m = /(DT|Damage)(-*\d+([+\-]\d+)*)/i.match(command)
|
|
220
217
|
unless m
|
|
221
218
|
return nil
|
|
222
219
|
end
|
|
@@ -232,7 +229,7 @@ module BCDice
|
|
|
232
229
|
# ロールボーナス表コマンド
|
|
233
230
|
def getRollBonusDiceCommandResult(command)
|
|
234
231
|
debug("TorgEternity Roll Bonus Table Command ? ", command)
|
|
235
|
-
m = /(BT|Bonus)(\d+)(([
|
|
232
|
+
m = /(BT|Bonus)(\d+)(([+\-]\d+)*)/i.match(command)
|
|
236
233
|
unless m
|
|
237
234
|
return nil
|
|
238
235
|
end
|
|
@@ -44,14 +44,14 @@ module BCDice
|
|
|
44
44
|
return "#{firstName} , #{secondName}"
|
|
45
45
|
end
|
|
46
46
|
|
|
47
|
-
if /^TR([
|
|
47
|
+
if /^TR([+\-\d]*)<=(\d*)([+\-\d]*)/ =~ command
|
|
48
48
|
critical = Regexp.last_match(1).to_i + 7
|
|
49
49
|
target = Regexp.last_match(2).to_i
|
|
50
50
|
modify = Regexp.last_match(3).to_i
|
|
51
51
|
return rollHit(command, critical, target, modify)
|
|
52
52
|
end
|
|
53
53
|
|
|
54
|
-
if /^(
|
|
54
|
+
if /^(\d*)DM(\d*)([+\-\d]*)$/ =~ command
|
|
55
55
|
diceCount = Regexp.last_match(1).to_i
|
|
56
56
|
critical = Regexp.last_match(2).to_i
|
|
57
57
|
modify = Regexp.last_match(3).to_i
|
|
@@ -42,9 +42,9 @@ module BCDice
|
|
|
42
42
|
|
|
43
43
|
def replace_text(string)
|
|
44
44
|
if /BS/i =~ string
|
|
45
|
-
string = string.gsub(/(\d+)HBS([^\d\s][
|
|
45
|
+
string = string.gsub(/(\d+)HBS([^\d\s][+\-\d]+)/i) { "#{Regexp.last_match(1)}R6#{Regexp.last_match(2)}[H]" }
|
|
46
46
|
string = string.gsub(/(\d+)HBS/i) { "#{Regexp.last_match(1)}R6[H]" }
|
|
47
|
-
string = string.gsub(/(\d+)BS([^\d\s][
|
|
47
|
+
string = string.gsub(/(\d+)BS([^\d\s][+\-\d]+)/i) { "#{Regexp.last_match(1)}R6#{Regexp.last_match(2)}" }
|
|
48
48
|
string = string.gsub(/(\d+)BS/i) { "#{Regexp.last_match(1)}R6" }
|
|
49
49
|
end
|
|
50
50
|
|
|
@@ -61,7 +61,7 @@ module BCDice
|
|
|
61
61
|
|
|
62
62
|
output = "1"
|
|
63
63
|
|
|
64
|
-
return output unless (m = /(^|\s)S?((\d+)[rR]6([
|
|
64
|
+
return output unless (m = /(^|\s)S?((\d+)[rR]6([+\-\d]*)(\[(\w+)\])?)(\s|$)/i.match(string))
|
|
65
65
|
|
|
66
66
|
debug('tandt_berserk matched')
|
|
67
67
|
|
|
@@ -184,9 +184,9 @@ module BCDice
|
|
|
184
184
|
command = command
|
|
185
185
|
.sub(/\d+LV$/i) { |level| level.to_i * 5 + 15 }
|
|
186
186
|
|
|
187
|
-
parser =
|
|
188
|
-
|
|
189
|
-
|
|
187
|
+
parser = Command::Parser.new(/\d+D6/, round_type: round_type)
|
|
188
|
+
.restrict_cmp_op_to(nil, :>=)
|
|
189
|
+
.enable_question_target()
|
|
190
190
|
cmd = parser.parse(command)
|
|
191
191
|
unless cmd
|
|
192
192
|
return nil
|
|
@@ -255,18 +255,18 @@ module BCDice
|
|
|
255
255
|
debug("pos_type", pos_type)
|
|
256
256
|
if pos_type != ""
|
|
257
257
|
case pos_type
|
|
258
|
-
when
|
|
258
|
+
when /@(2W|W2)/i
|
|
259
259
|
pos_t = 1
|
|
260
|
-
when
|
|
260
|
+
when /@(4W|W4)/i
|
|
261
261
|
pos_t = 4
|
|
262
|
-
when
|
|
262
|
+
when /@(4H|H4)/i
|
|
263
263
|
pos_t = 3
|
|
264
|
-
when
|
|
264
|
+
when /@4/i
|
|
265
265
|
pos_t = 2
|
|
266
|
-
when
|
|
266
|
+
when /@W/i
|
|
267
267
|
pos_t = 5
|
|
268
268
|
else
|
|
269
|
-
unless
|
|
269
|
+
unless /@(2H|H2|2)/i =~ pos_type
|
|
270
270
|
pos_t = -1
|
|
271
271
|
end
|
|
272
272
|
end
|
|
@@ -263,19 +263,16 @@ module BCDice
|
|
|
263
263
|
|
|
264
264
|
def additional_result(total, target_number)
|
|
265
265
|
tens, ones = split_d100(total)
|
|
266
|
-
|
|
267
|
-
if
|
|
268
|
-
|
|
269
|
-
"ファンブル"
|
|
270
|
-
end
|
|
271
|
-
elsif ones == tens
|
|
272
|
-
"クリティカル"
|
|
273
|
-
else
|
|
274
|
-
# 一の位と十の位を入れ替えて参照する
|
|
275
|
-
HIT_PARTS_TABLE.fetch(merge_d100(ones, tens)).content
|
|
266
|
+
if (total > target_number) || (total > 95) # 自動失敗時のファンブル処理も
|
|
267
|
+
if ones == tens
|
|
268
|
+
"ファンブル"
|
|
276
269
|
end
|
|
277
|
-
|
|
278
|
-
|
|
270
|
+
elsif ones == tens
|
|
271
|
+
"クリティカル"
|
|
272
|
+
else
|
|
273
|
+
# 一の位と十の位を入れ替えて参照する
|
|
274
|
+
HIT_PARTS_TABLE.fetch(merge_d100(ones, tens)).content
|
|
275
|
+
end
|
|
279
276
|
end
|
|
280
277
|
|
|
281
278
|
def split_d100(dice)
|
|
@@ -23,7 +23,7 @@ module BCDice
|
|
|
23
23
|
register_prefix('\d+\-2DR.*')
|
|
24
24
|
|
|
25
25
|
def eval_game_system_specific_command(command)
|
|
26
|
-
return nil unless command =~ /^(\d+)-2DR([
|
|
26
|
+
return nil unless command =~ /^(\d+)-2DR([+\-\d]*)(>=(\d+))?$/i
|
|
27
27
|
|
|
28
28
|
baseAvility = Regexp.last_match(1).to_i
|
|
29
29
|
modText = Regexp.last_match(2)
|
data/lib/bcdice/normalize.rb
CHANGED
data/lib/bcdice/preprocessor.rb
CHANGED
|
@@ -29,7 +29,7 @@ module BCDice
|
|
|
29
29
|
|
|
30
30
|
@text = @game_system.change_text(@text)
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
replace_implicit_d()
|
|
33
33
|
|
|
34
34
|
return @text
|
|
35
35
|
end
|
|
@@ -45,18 +45,22 @@ module BCDice
|
|
|
45
45
|
def replace_parentheses
|
|
46
46
|
loop do
|
|
47
47
|
prev = @text
|
|
48
|
-
@text = @text.gsub(%r{\([\d
|
|
49
|
-
|
|
50
|
-
val = ae.eval
|
|
51
|
-
ae.error? ? expr : val
|
|
48
|
+
@text = @text.gsub(%r{\([\d/+*\-CURF]+\)}) do |expr|
|
|
49
|
+
Arithmetic.eval(expr, @game_system.round_type) || expr
|
|
52
50
|
end
|
|
53
51
|
break if prev == @text
|
|
54
52
|
end
|
|
55
53
|
end
|
|
56
54
|
|
|
57
|
-
# nD
|
|
58
|
-
def
|
|
59
|
-
@text = @text.gsub(/(\d+)D([^\w]|$)/i)
|
|
55
|
+
# nDをゲームシステムに応じて置き換える
|
|
56
|
+
def replace_implicit_d
|
|
57
|
+
@text = @text.gsub(/(\d+)D([^\w]|$)/i) do
|
|
58
|
+
times = Regexp.last_match(1)
|
|
59
|
+
sides = @game_system.sides_implicit_d
|
|
60
|
+
trailer = Regexp.last_match(2)
|
|
61
|
+
|
|
62
|
+
"#{times}D#{sides}#{trailer}"
|
|
63
|
+
end
|
|
60
64
|
end
|
|
61
65
|
end
|
|
62
66
|
end
|