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
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "bcdice/game_system/Cthulhu"
|
|
4
|
+
|
|
5
|
+
module BCDice
|
|
6
|
+
module GameSystem
|
|
7
|
+
class Cthulhu_SimplifiedChinese < Cthulhu
|
|
8
|
+
# ゲームシステムの識別子
|
|
9
|
+
ID = 'Cthulhu:SimplifiedChinese'
|
|
10
|
+
|
|
11
|
+
# ゲームシステム名
|
|
12
|
+
NAME = '克苏鲁的呼唤 第六版'
|
|
13
|
+
|
|
14
|
+
# ゲームシステム名の読みがな
|
|
15
|
+
SORT_KEY = '国際化:Simplified Chinese:克苏鲁的呼唤 第六版'
|
|
16
|
+
|
|
17
|
+
# ダイスボットの使い方
|
|
18
|
+
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
|
|
19
|
+
c=大成功值 / f=大失败值 / s=极难成功
|
|
20
|
+
|
|
21
|
+
1d100<=n c・f・s全部关闭(只进行数值比较判定)
|
|
22
|
+
|
|
23
|
+
・带cfs判定的判定指令
|
|
24
|
+
|
|
25
|
+
CC 掷1d100骰 c=1、f=100
|
|
26
|
+
CCB 同上,c=5、f=96
|
|
27
|
+
|
|
28
|
+
例:CC<=80 (以80技能値进行行为判定。并以1%的标准使用cf的值)
|
|
29
|
+
例:CCB<=55 (以55技能値进行行为判定。并以5%的标准使用cf的值)
|
|
30
|
+
|
|
31
|
+
・关于组合骰
|
|
32
|
+
|
|
33
|
+
CBR(x,y) c=1、f=100
|
|
34
|
+
CBRB(x,y) c=5、f=96
|
|
35
|
+
|
|
36
|
+
・关于对抗骰
|
|
37
|
+
RES(x-y) c=1、f=100
|
|
38
|
+
RESB(x-y) c=5、f=96
|
|
39
|
+
|
|
40
|
+
※故障值判定
|
|
41
|
+
|
|
42
|
+
・CC(x) c=1、f=100
|
|
43
|
+
x=故障值。骰点在x以上并且发生大失败时,会和大失败一起显示(文本为「大失败&故障」)
|
|
44
|
+
没有发生大失败时,与成功或失败无关,文斗都会显示为「故障」(不显示成功或失败的情况下进行覆盖显示)
|
|
45
|
+
|
|
46
|
+
・CCB(x) c=5、f=96
|
|
47
|
+
同上
|
|
48
|
+
|
|
49
|
+
INFO_MESSAGE_TEXT
|
|
50
|
+
|
|
51
|
+
register_prefix_from_super_class()
|
|
52
|
+
|
|
53
|
+
def initialize(command)
|
|
54
|
+
super(command)
|
|
55
|
+
|
|
56
|
+
@locale = :zh_hans
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -43,17 +43,6 @@ module BCDice
|
|
|
43
43
|
return string
|
|
44
44
|
end
|
|
45
45
|
|
|
46
|
-
# ゲーム別成功度判定(nD6)
|
|
47
|
-
def check_nD6(total, _dice_total, _dice_list, cmp_op, target)
|
|
48
|
-
if cmp_op != :>= || target == "?"
|
|
49
|
-
''
|
|
50
|
-
elsif total >= target
|
|
51
|
-
" > 成功"
|
|
52
|
-
else
|
|
53
|
-
" > 失敗"
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
|
|
57
46
|
def check_roll(string)
|
|
58
47
|
string = replace_text(string)
|
|
59
48
|
return nil unless (m = /(^|\s)S?(3[rR]6([+\-\d]+)?(\[(\d+),(\d+)\])(([>=]+)(\d+))?)(\s|$)/i.match(string))
|
|
@@ -51,18 +51,19 @@ module BCDice
|
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
# ゲーム別成功度判定(2D6)
|
|
54
|
-
def
|
|
55
|
-
return
|
|
56
|
-
return '' unless cmp_op == :>=
|
|
54
|
+
def result_2d6(total, dice_total, _dice_list, cmp_op, target)
|
|
55
|
+
return nil unless cmp_op == :>=
|
|
57
56
|
|
|
58
57
|
if dice_total <= 2
|
|
59
|
-
"
|
|
58
|
+
Result.fumble("ファンブル(判定失敗。失敗表(FT)を追加で1回振る)")
|
|
60
59
|
elsif dice_total >= 12
|
|
61
|
-
"
|
|
60
|
+
Result.critical("スペシャル(判定成功。大成功表(GJT)を1回使用可能)")
|
|
61
|
+
elsif target == "?"
|
|
62
|
+
Result.nothing
|
|
62
63
|
elsif total >= target
|
|
63
|
-
"
|
|
64
|
+
Result.success("成功")
|
|
64
65
|
else
|
|
65
|
-
"
|
|
66
|
+
Result.failure("失敗")
|
|
66
67
|
end
|
|
67
68
|
end
|
|
68
69
|
|
|
@@ -33,8 +33,8 @@ module BCDice
|
|
|
33
33
|
INFO_MESSAGE_TEXT
|
|
34
34
|
|
|
35
35
|
register_prefix(
|
|
36
|
-
'DLH
|
|
37
|
-
'DC
|
|
36
|
+
'DLH',
|
|
37
|
+
'DC[LSC]',
|
|
38
38
|
'RNC[JO]',
|
|
39
39
|
'HNC'
|
|
40
40
|
)
|
|
@@ -71,10 +71,11 @@ module BCDice
|
|
|
71
71
|
"行為判定(成功率:#{success_rate}%)",
|
|
72
72
|
"1D100[#{dice10},#{dice01}]=#{roll_result_text}",
|
|
73
73
|
roll_result_text.to_s,
|
|
74
|
-
result
|
|
74
|
+
result.text
|
|
75
75
|
]
|
|
76
76
|
|
|
77
|
-
|
|
77
|
+
result.text = sequence.join(" > ")
|
|
78
|
+
result
|
|
78
79
|
end
|
|
79
80
|
|
|
80
81
|
SUCCESS_STR = "成功"
|
|
@@ -84,19 +85,19 @@ module BCDice
|
|
|
84
85
|
|
|
85
86
|
def action_result(total, tens, ones, success_rate)
|
|
86
87
|
if total == 100 || success_rate <= 0
|
|
87
|
-
FUMBLE_STR
|
|
88
|
+
Result.fumble(FUMBLE_STR)
|
|
88
89
|
elsif total <= success_rate - 100
|
|
89
|
-
CRITICAL_STR
|
|
90
|
+
Result.critical(CRITICAL_STR)
|
|
90
91
|
elsif tens == ones
|
|
91
92
|
if total <= success_rate
|
|
92
|
-
CRITICAL_STR
|
|
93
|
+
Result.critical(CRITICAL_STR)
|
|
93
94
|
else
|
|
94
|
-
FUMBLE_STR
|
|
95
|
+
Result.fumble(FUMBLE_STR)
|
|
95
96
|
end
|
|
96
97
|
elsif total <= success_rate
|
|
97
|
-
SUCCESS_STR
|
|
98
|
+
Result.success(SUCCESS_STR)
|
|
98
99
|
else
|
|
99
|
-
FAILURE_STR
|
|
100
|
+
Result.failure(FAILURE_STR)
|
|
100
101
|
end
|
|
101
102
|
end
|
|
102
103
|
|
|
@@ -28,7 +28,7 @@ module BCDice
|
|
|
28
28
|
・D66ダイスあり
|
|
29
29
|
INFO_MESSAGE_TEXT
|
|
30
30
|
|
|
31
|
-
register_prefix('[NAMUC]?URGE
|
|
31
|
+
register_prefix('[NAMUC]?URGE')
|
|
32
32
|
|
|
33
33
|
def initialize(command)
|
|
34
34
|
super(command)
|
|
@@ -38,21 +38,13 @@ module BCDice
|
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
# ゲーム別成功度判定(nD6)
|
|
41
|
-
def
|
|
41
|
+
def result_nd6(_total, _dice_total, dice_list, _cmp_op, target)
|
|
42
42
|
if dice_list.count(1) >= 2 # 1の目が2個以上ならファンブル
|
|
43
|
-
|
|
43
|
+
Result.fumble("致命的失敗")
|
|
44
44
|
elsif dice_list.count(6) >= 2 # 6の目が2個以上あったらクリティカル
|
|
45
|
-
|
|
45
|
+
Result.critical("効果的成功")
|
|
46
46
|
elsif target == "?"
|
|
47
|
-
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
if [:>=, :>].include?(cmp_op)
|
|
51
|
-
if total.send(cmp_op, target)
|
|
52
|
-
" > 成功"
|
|
53
|
-
else
|
|
54
|
-
" > 失敗"
|
|
55
|
-
end
|
|
47
|
+
Result.nothing
|
|
56
48
|
end
|
|
57
49
|
end
|
|
58
50
|
|
|
@@ -117,6 +117,8 @@ module BCDice
|
|
|
117
117
|
achieved_value.to_s
|
|
118
118
|
end
|
|
119
119
|
|
|
120
|
+
r.critical = value_groups.length > 1
|
|
121
|
+
|
|
120
122
|
parts = [
|
|
121
123
|
"(#{@expression})",
|
|
122
124
|
"#{value_groups.join('+')}#{@modifier_str}",
|
|
@@ -239,7 +241,7 @@ module BCDice
|
|
|
239
241
|
end
|
|
240
242
|
|
|
241
243
|
# 疾風怒濤式の成功判定コマンドの正規表現マッチ情報からノードを作る
|
|
242
|
-
# @param [
|
|
244
|
+
# @param command [String]
|
|
243
245
|
# @return [DX]
|
|
244
246
|
def parse_dx_shippu_doto(command)
|
|
245
247
|
parser = Command::Parser.new(/\d+DX\d*/, round_type: round_type)
|
|
@@ -115,8 +115,9 @@ module BCDice
|
|
|
115
115
|
dice_count = 4 if dice_count == 0
|
|
116
116
|
|
|
117
117
|
dice_list = @randomizer.roll_barabara(dice_count, 6).sort
|
|
118
|
+
total = dice_list.sum()
|
|
118
119
|
|
|
119
|
-
return "(#{command}) > #{dice_count}D6 > [ #{dice_list.join(', ')} ]"
|
|
120
|
+
return "(#{command}) > #{dice_count}D6 > [ #{dice_list.join(', ')} ] > #{total}"
|
|
120
121
|
end
|
|
121
122
|
|
|
122
123
|
def getReactionDiceCommandResult(command)
|
|
@@ -548,7 +549,7 @@ module BCDice
|
|
|
548
549
|
|
|
549
550
|
TABLES = translate_tables(:ja_jp)
|
|
550
551
|
|
|
551
|
-
register_prefix('DR', 'RT', 'HRT', 'CT
|
|
552
|
+
register_prefix('DR', 'RT', 'HRT', 'CT', TABLES.keys)
|
|
552
553
|
end
|
|
553
554
|
end
|
|
554
555
|
end
|
|
@@ -16,34 +16,34 @@ module BCDice
|
|
|
16
16
|
HELP_MESSAGE =
|
|
17
17
|
'1D100<=m 方式の判定で成否、クリティカル・ファンブルを自動判定'
|
|
18
18
|
|
|
19
|
-
def
|
|
20
|
-
return
|
|
21
|
-
return
|
|
19
|
+
def result_1d100(total, _dice_total, cmp_op, target)
|
|
20
|
+
return nil if target == '?'
|
|
21
|
+
return nil unless cmp_op == :<=
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
dice_ten_place =
|
|
25
|
-
dice_one_place =
|
|
23
|
+
dice_value = total % 100 # 出目00は100ではなく00とする
|
|
24
|
+
dice_ten_place = dice_value / 10
|
|
25
|
+
dice_one_place = dice_value % 10
|
|
26
26
|
|
|
27
27
|
if dice_ten_place == dice_one_place
|
|
28
|
-
return '
|
|
29
|
-
return '
|
|
30
|
-
return '
|
|
28
|
+
return Result.fumble('決定的失敗') if dice_value == 99
|
|
29
|
+
return Result.critical('00 > 決定的成功') if dice_value == 0
|
|
30
|
+
return Result.critical('決定的成功') if total <= target
|
|
31
31
|
|
|
32
|
-
return '
|
|
32
|
+
return Result.fumble('決定的失敗')
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
diff_threshold = 30
|
|
36
36
|
|
|
37
37
|
if total <= target
|
|
38
38
|
if total >= diff_threshold
|
|
39
|
-
'
|
|
39
|
+
Result.success('エクセレント')
|
|
40
40
|
else
|
|
41
|
-
'
|
|
41
|
+
Result.success('成功')
|
|
42
42
|
end
|
|
43
43
|
elsif (total - target) >= diff_threshold
|
|
44
|
-
'
|
|
44
|
+
Result.failure('シビア')
|
|
45
45
|
else
|
|
46
|
-
'
|
|
46
|
+
Result.failure('失敗')
|
|
47
47
|
end
|
|
48
48
|
end
|
|
49
49
|
end
|
|
@@ -16,20 +16,24 @@ module BCDice
|
|
|
16
16
|
HELP_MESSAGE = "貫通、クリティカル、ファンブルの自動判定を行います。\n"
|
|
17
17
|
|
|
18
18
|
# ゲーム別成功度判定(1d100)
|
|
19
|
-
def
|
|
20
|
-
return
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
19
|
+
def result_1d100(total, _dice_total, cmp_op, target)
|
|
20
|
+
return nil unless cmp_op == :<=
|
|
21
|
+
|
|
22
|
+
if total <= 1
|
|
23
|
+
Result.critical("貫通") # 1は常に貫通
|
|
24
|
+
elsif total >= 100
|
|
25
|
+
Result.fumble("致命的失敗") # 100は常に致命的失敗
|
|
26
|
+
elsif target == '?'
|
|
27
|
+
Result.nothing
|
|
28
|
+
elsif total <= (target / 5.0).ceil
|
|
29
|
+
Result.critical("決定的成功")
|
|
30
|
+
elsif total <= target
|
|
31
|
+
Result.success("成功")
|
|
32
|
+
elsif (total >= 99) && (target < 100)
|
|
33
|
+
Result.fumble("致命的失敗")
|
|
34
|
+
else
|
|
35
|
+
Result.failure("失敗")
|
|
36
|
+
end
|
|
33
37
|
end
|
|
34
38
|
end
|
|
35
39
|
end
|
|
@@ -1205,7 +1205,7 @@ module BCDice
|
|
|
1205
1205
|
'RBT', 'SBT', 'BBT', 'CBT', 'DBT', 'IBT', 'FBT', 'LBT', 'PBT', 'NBT', 'ABT', 'VBT', 'GBT', 'HBT',
|
|
1206
1206
|
'BFT', 'FWT', 'FT',
|
|
1207
1207
|
'SRT', 'ORT', 'DRT', 'URT',
|
|
1208
|
-
'NJ
|
|
1208
|
+
'NJ', 'BS', TABLES.keys
|
|
1209
1209
|
)
|
|
1210
1210
|
end
|
|
1211
1211
|
end
|
|
@@ -24,7 +24,7 @@ module BCDice
|
|
|
24
24
|
・射撃攻撃ファンブル表 SFT
|
|
25
25
|
INFO_MESSAGE_TEXT
|
|
26
26
|
|
|
27
|
-
register_prefix('EM
|
|
27
|
+
register_prefix('EM', 'HLT', 'MFT', 'SFT', '2R10')
|
|
28
28
|
|
|
29
29
|
def initialize(command)
|
|
30
30
|
super(command)
|
|
@@ -45,18 +45,19 @@ module BCDice
|
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
# ゲーム別成功度判定(nD10)
|
|
48
|
-
def
|
|
49
|
-
return
|
|
50
|
-
return '' unless cmp_op == :>=
|
|
48
|
+
def result_nd10(total, dice_total, _dice_list, cmp_op, target)
|
|
49
|
+
return nil unless cmp_op == :>=
|
|
51
50
|
|
|
52
51
|
if dice_total <= 2
|
|
53
|
-
"
|
|
52
|
+
Result.fumble("ファンブル")
|
|
54
53
|
elsif dice_total >= 20
|
|
55
|
-
"
|
|
54
|
+
Result.critical("クリティカル")
|
|
55
|
+
elsif target == "?"
|
|
56
|
+
Result.nothing
|
|
56
57
|
elsif total >= target
|
|
57
|
-
"
|
|
58
|
+
Result.success("成功")
|
|
58
59
|
else
|
|
59
|
-
"
|
|
60
|
+
Result.failure("失敗")
|
|
60
61
|
end
|
|
61
62
|
end
|
|
62
63
|
|
|
@@ -7,13 +7,13 @@ module BCDice
|
|
|
7
7
|
ID = "Emoklore"
|
|
8
8
|
|
|
9
9
|
# ゲームシステム名
|
|
10
|
-
NAME = "エモクロア"
|
|
10
|
+
NAME = "エモクロアTRPG"
|
|
11
11
|
|
|
12
12
|
# ゲームシステム名の読みがな
|
|
13
13
|
#
|
|
14
14
|
# 「ゲームシステム名の読みがなの設定方法」(docs/dicebot_sort_key.md)を参考にして
|
|
15
15
|
# 設定してください
|
|
16
|
-
SORT_KEY = "えもくろあ"
|
|
16
|
+
SORT_KEY = "えもくろあTRPG"
|
|
17
17
|
|
|
18
18
|
# ダイスボットの使い方
|
|
19
19
|
HELP_MESSAGE = <<~MESSAGETEXT
|
|
@@ -30,7 +30,7 @@ module BCDice
|
|
|
30
30
|
MESSAGETEXT
|
|
31
31
|
|
|
32
32
|
# ダイスボットで使用するコマンドを配列で列挙する
|
|
33
|
-
register_prefix('\d*DM
|
|
33
|
+
register_prefix('\d*DM<=', '(B|\d*)DA')
|
|
34
34
|
|
|
35
35
|
CRITICAL_VALUE = 1
|
|
36
36
|
FUMBLE_VALUE = 10
|
|
@@ -53,7 +53,7 @@ module BCDice
|
|
|
53
53
|
# ダイスロールの共通処理
|
|
54
54
|
# @param [Integer] num_dice
|
|
55
55
|
# @param [Integer] success_threshold
|
|
56
|
-
# @return [
|
|
56
|
+
# @return [Result]
|
|
57
57
|
def dice_roll(num_dice, success_threshold)
|
|
58
58
|
# ダイスを振った結果を配列として取得
|
|
59
59
|
values = @randomizer.roll_barabara(num_dice, 10)
|
|
@@ -65,33 +65,35 @@ module BCDice
|
|
|
65
65
|
|
|
66
66
|
# 成功値
|
|
67
67
|
success_value = 2 * critical + success - fumble
|
|
68
|
+
result = compare_result(success_value)
|
|
68
69
|
|
|
69
|
-
"#{values} > #{success_value} > #{
|
|
70
|
+
result.text = "#{values} > #{success_value} > #{result.text}"
|
|
71
|
+
return result
|
|
70
72
|
end
|
|
71
73
|
|
|
72
74
|
# @param [Integer] success
|
|
73
|
-
# @return [
|
|
74
|
-
def
|
|
75
|
+
# @return [Result]
|
|
76
|
+
def compare_result(success)
|
|
75
77
|
if success < 0
|
|
76
|
-
"ファンブル!"
|
|
78
|
+
Result.fumble("ファンブル!")
|
|
77
79
|
elsif success == 0
|
|
78
|
-
"失敗!"
|
|
80
|
+
Result.failure("失敗!")
|
|
79
81
|
elsif success == 1
|
|
80
|
-
"成功!"
|
|
82
|
+
Result.success("成功!")
|
|
81
83
|
elsif success == 2
|
|
82
|
-
"ダブル!"
|
|
84
|
+
Result.critical("ダブル!")
|
|
83
85
|
elsif success == 3
|
|
84
|
-
"トリプル!"
|
|
86
|
+
Result.critical("トリプル!")
|
|
85
87
|
elsif success <= 9
|
|
86
|
-
"ミラクル!"
|
|
88
|
+
Result.critical("ミラクル!")
|
|
87
89
|
else
|
|
88
|
-
"カタストロフ!"
|
|
90
|
+
Result.critical("カタストロフ!")
|
|
89
91
|
end
|
|
90
92
|
end
|
|
91
93
|
|
|
92
94
|
# 技能判定
|
|
93
95
|
# @param [String] command コマンド
|
|
94
|
-
# @return [
|
|
96
|
+
# @return [Result, nil] コマンドの結果
|
|
95
97
|
def roll_dm(command)
|
|
96
98
|
m = /^(\d+)?DM<=(\d+)$/.match(command)
|
|
97
99
|
unless m
|
|
@@ -105,14 +107,15 @@ module BCDice
|
|
|
105
107
|
end
|
|
106
108
|
|
|
107
109
|
# ダイスロール本体
|
|
108
|
-
|
|
110
|
+
result = dice_roll(num_dice, success_threshold)
|
|
109
111
|
|
|
110
|
-
|
|
112
|
+
result.text = "(#{num_dice}DM<=#{success_threshold}) > #{result.text}"
|
|
113
|
+
return result
|
|
111
114
|
end
|
|
112
115
|
|
|
113
116
|
# 取得技能判定
|
|
114
117
|
# @param [String] command コマンド
|
|
115
|
-
# @return [
|
|
118
|
+
# @return [Result, nil] コマンドの結果
|
|
116
119
|
def roll_da(command)
|
|
117
120
|
m = /^(B|\d+)?DA(\d+)(\+\d+)?$/.match(command)
|
|
118
121
|
unless m
|
|
@@ -123,8 +126,10 @@ module BCDice
|
|
|
123
126
|
num_dice = (m[1] == "B" ? 1 : (m[1]&.to_i || 1)) + bonus
|
|
124
127
|
success_threshold = m[1].to_i + m[2].to_i
|
|
125
128
|
|
|
126
|
-
|
|
127
|
-
|
|
129
|
+
result = dice_roll(num_dice, success_threshold)
|
|
130
|
+
|
|
131
|
+
result.text = "(#{command}) > (#{num_dice}DM<=#{success_threshold}) > #{result.text}"
|
|
132
|
+
return result
|
|
128
133
|
end
|
|
129
134
|
end
|
|
130
135
|
end
|