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
|
@@ -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
|
|
@@ -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
|