bcdice 3.1.0 → 3.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +78 -1
- data/README.md +1 -1
- 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/dice_table.rb +2 -0
- data/lib/bcdice/dice_table/d66_half_grid_table.rb +33 -0
- data/lib/bcdice/dice_table/d66_one_third_table.rb +34 -0
- data/lib/bcdice/dice_table/sai_fic_skill_table.rb +1 -1
- data/lib/bcdice/game_system.rb +6 -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 +2 -2
- 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 +48 -10
- data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +2 -2
- data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +2 -2
- data/lib/bcdice/game_system/Cthulhu_ChineseTraditional.rb +1 -1
- data/lib/bcdice/game_system/Cthulhu_Korean.rb +1 -1
- 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 +1 -1
- 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 +205 -1272
- 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 +18 -11
- 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/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 +5 -4
- 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/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 +11 -6
- 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/StrangerOfSwordCity.rb +1 -1
- 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/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/filled_with/enemy_data_tables.rb +322 -0
- data/lib/bcdice/game_system/filled_with/event_tables.rb +392 -0
- data/lib/bcdice/game_system/filled_with/tresure_tables.rb +179 -0
- 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 +18 -4
@@ -128,27 +128,30 @@ module BCDice
|
|
128
128
|
dice_total = dice_list.sum()
|
129
129
|
total = dice_total + parsed.modify_number
|
130
130
|
|
131
|
+
result = result_text(dice_count, dice_list, total, parsed)
|
132
|
+
|
131
133
|
sequence = [
|
132
134
|
"(#{parsed})",
|
133
135
|
"#{dice_total}[#{dice_list.join(',')}]#{Format.modifier(parsed.modify_number)}",
|
134
136
|
total,
|
135
|
-
|
137
|
+
result.text,
|
136
138
|
].compact
|
137
139
|
|
138
|
-
|
140
|
+
result.text = sequence.join(" > ")
|
141
|
+
result
|
139
142
|
end
|
140
143
|
|
141
144
|
def result_text(dice_count, dice_list, total, parsed)
|
142
145
|
if dice_list.count(6) >= 2
|
143
|
-
translate("LogHorizon.LH.critical")
|
146
|
+
Result.critical(translate("LogHorizon.LH.critical"))
|
144
147
|
elsif dice_list.count(1) >= dice_count
|
145
|
-
translate("LogHorizon.LH.fumble")
|
148
|
+
Result.fumble(translate("LogHorizon.LH.fumble"))
|
146
149
|
elsif parsed.cmp_op.nil?
|
147
|
-
|
150
|
+
Result.new
|
148
151
|
elsif total >= parsed.target_number
|
149
|
-
translate(
|
152
|
+
Result.success(translate("success"))
|
150
153
|
else
|
151
|
-
translate(
|
154
|
+
Result.failure(translate("failure"))
|
152
155
|
end
|
153
156
|
end
|
154
157
|
|
@@ -244,7 +247,7 @@ module BCDice
|
|
244
247
|
|
245
248
|
# 財宝表ロール
|
246
249
|
def roll_treasure(command)
|
247
|
-
m = /^TRS(\d+)
|
250
|
+
m = /^TRS(\d+)?([+\-\d]+)?$/.match(command)
|
248
251
|
return nil unless m
|
249
252
|
|
250
253
|
character_rank = m[1].to_i
|
@@ -261,7 +264,7 @@ module BCDice
|
|
261
264
|
|
262
265
|
### 財宝表 ###
|
263
266
|
def roll_treasure_table(command)
|
264
|
-
m = /^([CMIHG]TRS)(\d+)
|
267
|
+
m = /^([CMIHG]TRS)(\d+)?([+\-\d]+)?(\$)?$/.match(command)
|
265
268
|
return nil unless m
|
266
269
|
|
267
270
|
type = m[1]
|
@@ -286,7 +289,7 @@ module BCDice
|
|
286
289
|
|
287
290
|
# 拡張ルール財宝表
|
288
291
|
def roll_treasure_table_b2(command)
|
289
|
-
m = /^([CMIO]TRSE)(\d+)
|
292
|
+
m = /^([CMIO]TRSE)(\d+)?([+\-\d]+)?(\$)?$/.match(command)
|
290
293
|
return nil unless m
|
291
294
|
|
292
295
|
type = m[1]
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "bcdice/game_system/MagicaLogia"
|
4
|
+
|
5
|
+
module BCDice
|
6
|
+
module GameSystem
|
7
|
+
class MagicaLogia_SimplifiedChinese < MagicaLogia
|
8
|
+
# ゲームシステムの識別子
|
9
|
+
ID = "MagicaLogia:SimplifiedChinese"
|
10
|
+
|
11
|
+
# ゲームシステム名
|
12
|
+
NAME = "魔导书大战"
|
13
|
+
|
14
|
+
# ゲームシステム名の読みがな
|
15
|
+
SORT_KEY = "国際化:Simplified Chinese:魔导书大战"
|
16
|
+
|
17
|
+
# ダイスボットの使い方
|
18
|
+
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
|
19
|
+
・判定
|
20
|
+
可以判定大成功/大失败/成功/失败
|
21
|
+
・各种表
|
22
|
+
经历表 BGT/初期锚点表 DAT/命运属性表 FAT
|
23
|
+
愿望表 WIT/战利品表 PT
|
24
|
+
时间流逝表 TPT/大判时间流逝表 TPTB
|
25
|
+
事件表 AT
|
26
|
+
大失败表 FT/变调表 WT
|
27
|
+
命运转变表表 FCT
|
28
|
+
典型性灾厄 TCT/物理性灾厄 PCT/精神性灾厄 MCT/狂气性灾厄 ICT
|
29
|
+
社会性灾厄 SCT/超自然灾厄 XCT/不可思议的灾厄 WCT/喜剧性灾厄 CCT
|
30
|
+
魔法使的灾厄 MGCT
|
31
|
+
场景表 ST/大判场景表 STB
|
32
|
+
极限环境 XEST/内心世界 IWST/魔法都市 MCST
|
33
|
+
死后世界 WDST/迷宫世界 LWST
|
34
|
+
魔法书架 MBST/魔法学院 MAST/克雷德塔 TCST
|
35
|
+
平行世界 PWST/终末世界 PAST/异世界酒吧 GBST
|
36
|
+
星影 SLST/旧图书馆 OLST
|
37
|
+
世界法则追加表 WLAT/徘徊怪物表 WMT
|
38
|
+
随机领域表 RCT
|
39
|
+
随机特技表 RTT
|
40
|
+
星领域随机特技表 RTS, RTT1
|
41
|
+
兽领域随机特技表 RTB, RTT2
|
42
|
+
力领域随机特技表 RTF, RTT3
|
43
|
+
歌领域随机特技表 RTP, RTT4
|
44
|
+
梦领域随机特技表 RTD, RTT5
|
45
|
+
暗领域随机特技表 RTN, RTT6
|
46
|
+
空白秘密表 BST
|
47
|
+
宿敌表 MIT/谋略表 MOT/因缘表 MAT
|
48
|
+
奇人表 MUT/力场表 MFT/同盟表 MLT
|
49
|
+
落花表 FFT
|
50
|
+
那之后表 FLT
|
51
|
+
・可以使用D66
|
52
|
+
INFO_MESSAGE_TEXT
|
53
|
+
|
54
|
+
register_prefix_from_super_class()
|
55
|
+
|
56
|
+
def initialize(command)
|
57
|
+
super(command)
|
58
|
+
|
59
|
+
@locale = :zh_hans
|
60
|
+
end
|
61
|
+
|
62
|
+
SKILL_TABLE = translate_skill_table(:zh_hans)
|
63
|
+
TABLES = translate_tables(:zh_hans, SKILL_TABLE)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -44,18 +44,19 @@ module BCDice
|
|
44
44
|
return string
|
45
45
|
end
|
46
46
|
|
47
|
-
def
|
48
|
-
return
|
49
|
-
return '' unless cmp_op == :>=
|
47
|
+
def result_2d6(total, dice_total, _dice_list, cmp_op, target)
|
48
|
+
return nil unless cmp_op == :>=
|
50
49
|
|
51
50
|
if dice_total <= 2
|
52
|
-
"
|
51
|
+
Result.fumble("絶対失敗")
|
53
52
|
elsif dice_total >= 12
|
54
|
-
"
|
53
|
+
Result.critical("絶対成功")
|
54
|
+
elsif target == "?"
|
55
|
+
Result.nothing
|
55
56
|
elsif total >= target
|
56
|
-
"
|
57
|
+
Result.success("成功")
|
57
58
|
else
|
58
|
-
"
|
59
|
+
Result.failure("失敗")
|
59
60
|
end
|
60
61
|
end
|
61
62
|
|
@@ -104,7 +105,8 @@ module BCDice
|
|
104
105
|
|
105
106
|
if signOfInequality != "" # 成功度判定処理
|
106
107
|
cmp_op = Normalize.comparison_operator(signOfInequality)
|
107
|
-
|
108
|
+
result = result_2d6(total_n, dice_now, dice_num, cmp_op, diff)
|
109
|
+
output += " > #{result.text}" if result
|
108
110
|
end
|
109
111
|
|
110
112
|
return output
|
@@ -51,12 +51,12 @@ module BCDice
|
|
51
51
|
'TT', 'NT', 'ET', 'MPT',
|
52
52
|
'T1T', 'T2T', 'T3T', 'T4T', 'T5T',
|
53
53
|
'NAME',
|
54
|
-
'DFT', 'IDT
|
54
|
+
'DFT', 'IDT',
|
55
55
|
'WIT', 'LIT', 'RIT', 'SIT', 'RWIT', 'RUIT',
|
56
56
|
'IFT',
|
57
57
|
'\d+RET',
|
58
|
-
'PNT
|
59
|
-
'KNT
|
58
|
+
'PNT', 'MLT',
|
59
|
+
'KNT', 'WORD'
|
60
60
|
)
|
61
61
|
|
62
62
|
def initialize(command)
|
@@ -77,38 +77,38 @@ module BCDice
|
|
77
77
|
return string
|
78
78
|
end
|
79
79
|
|
80
|
-
def
|
81
|
-
return
|
80
|
+
def result_nd6(total, dice_total, dice_list, cmp_op, target)
|
81
|
+
return Result.nothing if target == "?"
|
82
|
+
return nil unless cmp_op == :>=
|
82
83
|
|
83
|
-
result =
|
84
|
-
result +=
|
84
|
+
result = result_nd6_only(total, dice_total, cmp_op, target)
|
85
|
+
result.text += kiryoku_result(total, dice_list, target)
|
85
86
|
|
86
87
|
return result
|
87
88
|
end
|
88
89
|
|
89
|
-
|
90
|
+
def result_nd6_only(total, dice_total, cmp_op, target)
|
91
|
+
return nil unless cmp_op == :>=
|
90
92
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
" > 絶対成功"
|
93
|
+
if dice_total <= 2
|
94
|
+
Result.fumble("絶対失敗")
|
95
|
+
elsif dice_total >= 12
|
96
|
+
Result.critical("絶対成功")
|
97
|
+
elsif total >= target
|
98
|
+
Result.success("成功")
|
98
99
|
else
|
99
|
-
|
100
|
+
Result.failure("失敗")
|
100
101
|
end
|
101
102
|
end
|
102
103
|
|
103
|
-
def
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
end
|
104
|
+
def result_2d6_text(total, dice_total, cmp_op, target)
|
105
|
+
text = result_nd6_only(total, dice_total, cmp_op, target)&.text
|
106
|
+
return "" if text.nil?
|
107
|
+
|
108
|
+
return " > #{text}"
|
109
109
|
end
|
110
110
|
|
111
|
-
def
|
111
|
+
def kiryoku_result(total_n, dice_list, diff)
|
112
112
|
num_6 = dice_list.count(6)
|
113
113
|
|
114
114
|
if num_6 == 0
|
@@ -131,7 +131,7 @@ module BCDice
|
|
131
131
|
none6Dice_n = maxDice1 + maxDice2
|
132
132
|
debug("none6Dice_n", none6Dice_n)
|
133
133
|
debug("diff", diff)
|
134
|
-
none6DiceReuslt =
|
134
|
+
none6DiceReuslt = (none6Total_n >= diff ? " > 成功" : " > 失敗")
|
135
135
|
|
136
136
|
return " (もしくは) #{none6Total_n}#{none6DiceReuslt} & 《気力》1点獲得"
|
137
137
|
end
|
@@ -180,8 +180,8 @@ module BCDice
|
|
180
180
|
|
181
181
|
if signOfInequality != "" # 成功度判定処理
|
182
182
|
cmp_op = Normalize.comparison_operator(signOfInequality)
|
183
|
-
output +=
|
184
|
-
output +=
|
183
|
+
output += result_2d6_text(total_n, dice_now, cmp_op, diff)
|
184
|
+
output += kiryoku_result(total_n, dice_list, diff)
|
185
185
|
end
|
186
186
|
|
187
187
|
return output
|
@@ -13,7 +13,7 @@ module BCDice
|
|
13
13
|
NAME = '迷宮キングダム 基本ルールブック'
|
14
14
|
|
15
15
|
# ゲームシステム名の読みがな
|
16
|
-
SORT_KEY = '
|
16
|
+
SORT_KEY = 'めいきゆうきんくたむきほんるうるふつく'
|
17
17
|
|
18
18
|
# ダイスボットの使い方
|
19
19
|
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
|
@@ -65,14 +65,15 @@ module BCDice
|
|
65
65
|
'BDT', 'TBO', 'CBO', 'SBO', 'VBO',
|
66
66
|
'ET', 'FET', 'HET', 'SDT', 'IEQ', 'FRT',
|
67
67
|
'T1T', 'T2T', 'T3T', 'T4T', 'T5T',
|
68
|
-
'MPT', 'KNT
|
68
|
+
'MPT', 'KNT', 'WORD', 'NAME', 'NNAME', 'NM',
|
69
69
|
'RT', 'CIR', 'RUIR', 'RWIR',
|
70
70
|
'WIT', 'LIT', 'RIT', 'SIT', 'NRWT', 'NRUT', 'ARWT', 'ARUT',
|
71
71
|
'KET', 'TET', 'NST', 'RET', 'FAT', 'HRT', 'BLT',
|
72
72
|
'BUS', 'SHS', 'ASS', 'SUS', 'SCS', 'LAS', 'NES', 'COS', 'ENS', 'TOS',
|
73
73
|
'ABUS', 'ASHS', 'AASS', 'ASUS', 'ASCS', 'ALAS', 'ANES', 'ACOS', 'AENS', 'ATOS',
|
74
74
|
'SE', 'ARN', 'WEN', 'NEN', 'CEN', 'SEN', 'OEN',
|
75
|
-
'DFT
|
75
|
+
'DFT',
|
76
|
+
'PNT', 'MLT'
|
76
77
|
)
|
77
78
|
|
78
79
|
def initialize(command)
|
@@ -82,7 +83,7 @@ module BCDice
|
|
82
83
|
@d66_sort_type = D66SortType::ASC
|
83
84
|
end
|
84
85
|
|
85
|
-
def
|
86
|
+
def kiryoku_result(_total_n, dice_list, _diff)
|
86
87
|
num_6 = dice_list.count(6)
|
87
88
|
|
88
89
|
if num_6 == 0
|
@@ -35,7 +35,7 @@ module BCDice
|
|
35
35
|
例)CRCM98 対物で数値98の戦闘結果を参照する。
|
36
36
|
MESSAGETEXT
|
37
37
|
|
38
|
-
register_prefix('AR', 'SR', 'HR
|
38
|
+
register_prefix('AR', 'SR', 'HR<=', 'CC', 'ACT', 'ACL', 'ACS', 'CRC[A-Z]')
|
39
39
|
|
40
40
|
def eval_game_system_specific_command(command)
|
41
41
|
result = roll_tables(command, TABLES)
|
@@ -62,17 +62,13 @@ module BCDice
|
|
62
62
|
return string
|
63
63
|
end
|
64
64
|
|
65
|
-
def
|
66
|
-
return
|
65
|
+
def result_2d6(_total, dice_total, _dice_list, cmp_op, _target)
|
66
|
+
return nil if cmp_op != :>=
|
67
67
|
|
68
68
|
if dice_total >= 12
|
69
|
-
"
|
69
|
+
Result.critical("絶対成功")
|
70
70
|
elsif dice_total <= 2
|
71
|
-
"
|
72
|
-
elsif total >= target
|
73
|
-
" > 成功"
|
74
|
-
else
|
75
|
-
" > 失敗"
|
71
|
+
Result.fumble("絶対失敗")
|
76
72
|
end
|
77
73
|
end
|
78
74
|
|
@@ -85,11 +81,14 @@ module BCDice
|
|
85
81
|
return text
|
86
82
|
end
|
87
83
|
|
88
|
-
def
|
89
|
-
return
|
90
|
-
return '' unless cmp_op == :<=
|
84
|
+
def result_1d100(_total, dice_total, cmp_op, _target)
|
85
|
+
return nil unless cmp_op == :<=
|
91
86
|
|
92
|
-
|
87
|
+
if dice_total <= 5
|
88
|
+
Result.critical("絶対成功")
|
89
|
+
elsif dice_total >= 96
|
90
|
+
Result.fumble("絶対失敗")
|
91
|
+
end
|
93
92
|
end
|
94
93
|
|
95
94
|
def getHitResult(total_n, _dice_n, diff)
|
@@ -106,15 +105,6 @@ module BCDice
|
|
106
105
|
return ' > 成功'
|
107
106
|
end
|
108
107
|
|
109
|
-
def getResult(total_n, dice_n, diff)
|
110
|
-
return ' > 絶対成功' if dice_n <= 5
|
111
|
-
return ' > 絶対失敗' if dice_n >= 96
|
112
|
-
|
113
|
-
return ' > 成功' if total_n <= diff
|
114
|
-
|
115
|
-
return ' > 失敗'
|
116
|
-
end
|
117
|
-
|
118
108
|
# 戦闘結果チャートを振る
|
119
109
|
# @param [String] suv 耐久レベル
|
120
110
|
# @param [String] num 数値
|
@@ -51,11 +51,11 @@ module BCDice
|
|
51
51
|
MESSAGETEXT
|
52
52
|
|
53
53
|
register_prefix(
|
54
|
-
'[AS]R
|
55
|
-
'(HU|BK|WA|SC|BG|IN|PT|HT|TA|AC|HE|TR|VT|BO|CS|TH|AM|GD|HC|BI|BT|AI)HIT
|
56
|
-
'SUV[A-Z]
|
57
|
-
'CRT
|
58
|
-
'SEC', 'NAC', 'LDC', '[W]ENC
|
54
|
+
'[AS]R',
|
55
|
+
'(HU|BK|WA|SC|BG|IN|PT|HT|TA|AC|HE|TR|VT|BO|CS|TH|AM|GD|HC|BI|BT|AI)HIT',
|
56
|
+
'SUV[A-Z]', '[HTALMEBPD]DMG[LMHO]',
|
57
|
+
'CRT', '[GSME]AC', '[ASL]MA',
|
58
|
+
'SEC', 'NAC', 'LDC', '[W]ENC'
|
59
59
|
)
|
60
60
|
|
61
61
|
def eval_game_system_specific_command(command)
|
@@ -77,23 +77,25 @@ module BCDice
|
|
77
77
|
|
78
78
|
result =
|
79
79
|
if dice_value <= fumble
|
80
|
-
translate("MonotoneMuseum.automatic_failure")
|
80
|
+
Result.fumble(translate("MonotoneMuseum.automatic_failure"))
|
81
81
|
elsif dice_value >= critical
|
82
|
-
translate("MonotoneMuseum.automatic_success")
|
82
|
+
Result.critical(translate("MonotoneMuseum.automatic_success"))
|
83
83
|
elsif total >= target
|
84
|
-
translate("success")
|
84
|
+
Result.success(translate("success"))
|
85
85
|
else
|
86
|
-
translate("failure")
|
86
|
+
Result.failure(translate("failure"))
|
87
87
|
end
|
88
88
|
|
89
89
|
sequence = [
|
90
90
|
"(#{command})",
|
91
91
|
"#{dice_value}[#{dice_str}]#{Format.modifier(modify_number)}",
|
92
92
|
total.to_s,
|
93
|
-
result,
|
93
|
+
result.text,
|
94
94
|
]
|
95
95
|
|
96
|
-
|
96
|
+
result.text = sequence.join(" > ")
|
97
|
+
|
98
|
+
result
|
97
99
|
end
|
98
100
|
|
99
101
|
# モノトーンミュージアム用のテーブル
|
@@ -17,10 +17,10 @@ module BCDice
|
|
17
17
|
# ダイスボットの使い方
|
18
18
|
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
|
19
19
|
・判定 (nNC+m)
|
20
|
-
ダイス数n、修正値m
|
20
|
+
ダイス数n、修正値mで判定ロールを行います(省略=1)
|
21
21
|
ダイス数が2以上の時のパーツ破損数も表示します。
|
22
22
|
・攻撃判定 (nNA+m)
|
23
|
-
ダイス数n、修正値m
|
23
|
+
ダイス数n、修正値mで攻撃判定ロールを行います(省略=1)
|
24
24
|
命中部位とダイス数が2以上の時のパーツ破損数も表示します。
|
25
25
|
|
26
26
|
表
|
@@ -37,119 +37,92 @@ module BCDice
|
|
37
37
|
@default_target_number = 6 # 目標値が空欄の時の目標値
|
38
38
|
end
|
39
39
|
|
40
|
-
|
41
|
-
|
42
|
-
def replace_text(string)
|
43
|
-
string = string.gsub(/(\d+)NC(10)?([+\-][+\-\d]+)/i) { "#{Regexp.last_match(1)}R10#{Regexp.last_match(3)}[0]" }
|
44
|
-
string = string.gsub(/(\d+)NC(10)?/i) { "#{Regexp.last_match(1)}R10[0]" }
|
45
|
-
string = string.gsub(/(\d+)NA(10)?([+\-][+\-\d]+)/i) { "#{Regexp.last_match(1)}R10#{Regexp.last_match(3)}[1]" }
|
46
|
-
string = string.gsub(/(\d+)NA(10)?/i) { "#{Regexp.last_match(1)}R10[1]" }
|
47
|
-
|
48
|
-
return string
|
40
|
+
def eval_game_system_specific_command(command)
|
41
|
+
roll_tables(command, self.class::TABLES) || nechronica_check(command)
|
49
42
|
end
|
50
43
|
|
51
|
-
|
44
|
+
def result_nd10(total, _dice_total, value_list, cmp_op, target)
|
45
|
+
# 後方互換を維持するため、1d10>=nを目標値nの1NCとして処理
|
46
|
+
if value_list.count != 1 || cmp_op != :>= || target.nil? || target == "?"
|
47
|
+
return nil
|
48
|
+
end
|
52
49
|
|
53
|
-
|
54
|
-
return roll_tables(command, self.class::TABLES) || nechronica_check(command)
|
50
|
+
result_nechronica([total], target)
|
55
51
|
end
|
56
52
|
|
57
53
|
private
|
58
54
|
|
59
|
-
def
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
result =
|
64
|
-
if total >= 11
|
65
|
-
translate("Nechronica.critical")
|
66
|
-
elsif total >= target
|
67
|
-
translate("success")
|
68
|
-
elsif dice_list.count { |i| i <= 1 } == 0
|
69
|
-
translate("failure")
|
70
|
-
elsif dice_list.size > 1
|
71
|
-
fumble = translate("Nechronica.fumble")
|
72
|
-
break_all_parts = translate("Nechronica.break_all_parts")
|
73
|
-
"#{fumble} > #{break_all_parts}"
|
55
|
+
def result_nechronica(value_list, target)
|
56
|
+
if value_list.max >= target
|
57
|
+
if value_list.max >= 11
|
58
|
+
Result.critical(translate("Nechronica.critical"))
|
74
59
|
else
|
75
|
-
translate("
|
60
|
+
Result.success(translate("success"))
|
76
61
|
end
|
77
|
-
|
78
|
-
|
62
|
+
elsif value_list.count { |i| i <= 1 } == 0
|
63
|
+
Result.failure(translate("failure"))
|
64
|
+
elsif value_list.size > 1
|
65
|
+
break_all_parts = translate("Nechronica.break_all_parts")
|
66
|
+
fumble = translate("Nechronica.fumble")
|
67
|
+
Result.fumble("#{fumble} > #{break_all_parts}")
|
68
|
+
else
|
69
|
+
Result.fumble(translate("Nechronica.fumble"))
|
70
|
+
end
|
79
71
|
end
|
80
72
|
|
81
|
-
|
82
|
-
|
83
|
-
|
73
|
+
# Rコマンドの後方互換を維持する
|
74
|
+
def r_backward_compatibility(command)
|
75
|
+
m = command.match(/^(\d)?R10([+\-\d]+)?(\[(\d+)\])?$/)
|
76
|
+
return command unless m
|
84
77
|
|
85
|
-
|
86
|
-
|
78
|
+
if m[4] == "1"
|
79
|
+
"#{m[1]}NA#{m[2]}"
|
80
|
+
else
|
81
|
+
"#{m[1]}NC#{m[2]}"
|
87
82
|
end
|
83
|
+
end
|
88
84
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
modText = Regexp.last_match(4)
|
97
|
-
mod = ArithmeticEvaluator.eval(modText)
|
98
|
-
|
99
|
-
# 0=判定モード, 1=戦闘モード
|
100
|
-
isBattleMode = (battleMode == 1)
|
101
|
-
debug("nechronica_check string", string)
|
102
|
-
debug("isBattleMode", isBattleMode)
|
103
|
-
|
104
|
-
diff = 6
|
105
|
-
|
106
|
-
dice = @randomizer.roll_barabara(dice_n, 10).sort
|
107
|
-
n_max = dice.max
|
108
|
-
|
109
|
-
total_n = n_max + mod
|
85
|
+
def nechronica_check(command)
|
86
|
+
command = r_backward_compatibility(command)
|
87
|
+
# 歴史的経緯で10を受理する
|
88
|
+
cmd = Command::Parser.new(/N[CA](10)?/, round_type: round_type)
|
89
|
+
.enable_prefix_number.parse(command)
|
90
|
+
return nil unless cmd
|
110
91
|
|
111
|
-
|
112
|
-
|
113
|
-
output += mod.to_s
|
114
|
-
elsif mod > 0
|
115
|
-
output += "+#{mod}"
|
116
|
-
end
|
92
|
+
dice_count = [1, cmd.prefix_number.to_i].max
|
93
|
+
modify_number = cmd.modify_number || 0
|
117
94
|
|
118
|
-
dice
|
95
|
+
dice = @randomizer.roll_barabara(dice_count, 10).sort
|
96
|
+
dice_mod = dice.map { |i| i + modify_number }
|
97
|
+
total = dice_mod.max
|
119
98
|
|
120
|
-
|
121
|
-
output += " > #{total_n}[#{dice_str}]"
|
99
|
+
na = get_hit_location(total) if cmd.command.start_with?("NA")
|
122
100
|
|
123
|
-
|
101
|
+
result = result_nechronica(dice_mod, 6)
|
124
102
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
103
|
+
sequence = [
|
104
|
+
"(#{cmd})",
|
105
|
+
"[#{dice.join(',')}]#{Format.modifier(modify_number)}",
|
106
|
+
"#{total}[#{dice_mod.join(',')}]",
|
107
|
+
result.text,
|
108
|
+
na,
|
109
|
+
].compact
|
131
110
|
|
132
|
-
|
111
|
+
result.text = sequence.join(" > ")
|
112
|
+
return result
|
133
113
|
end
|
134
114
|
|
135
|
-
def
|
136
|
-
|
137
|
-
|
138
|
-
debug("getHitLocation dice", dice)
|
139
|
-
return output if dice <= 5
|
115
|
+
def get_hit_location(value)
|
116
|
+
return nil if value <= 5
|
140
117
|
|
141
118
|
table = translate("Nechronica.hit_location.table")
|
142
|
-
|
119
|
+
text = table[(value - 6).clamp(0, 5)]
|
143
120
|
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
121
|
+
if value > 10
|
122
|
+
text + translate("Nechronica.hit_location.additional_damage", damage: value - 10)
|
123
|
+
else
|
124
|
+
text
|
148
125
|
end
|
149
|
-
|
150
|
-
output = table[index] + addDamage
|
151
|
-
|
152
|
-
return output
|
153
126
|
end
|
154
127
|
|
155
128
|
class << self
|
@@ -166,7 +139,7 @@ module BCDice
|
|
166
139
|
|
167
140
|
TABLES = translate_tables(:ja_jp)
|
168
141
|
|
169
|
-
register_prefix('\d
|
142
|
+
register_prefix('\d?NC', '\d?NA', '\dR10', TABLES.keys)
|
170
143
|
end
|
171
144
|
end
|
172
145
|
end
|