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
|
@@ -18,87 +18,92 @@ module BCDice
|
|
|
18
18
|
n個のサイコロで行為判定ロール。ゾロ目の最大個数を成功レベルとして表示。nを省略すると2UK扱い。
|
|
19
19
|
例)3UK :サイコロ3個で行為判定
|
|
20
20
|
例)UK :サイコロ2個で行為判定
|
|
21
|
-
|
|
21
|
+
・難易度付き行為判定ロール(nUK>=t)
|
|
22
|
+
tに難易度を指定した行為判定ロール。
|
|
23
|
+
成功レベルと難易度tを比べて成否を判定します。
|
|
24
|
+
例)6UK>=3 :サイコロ6個で行為判定して、成功レベル3が出れば成功。
|
|
22
25
|
・クリティカルコール付き行為判定ロール(nUK@c or nUKc)
|
|
23
|
-
|
|
24
|
-
ゾロ目ではなく、cと同じ値の出目数x2
|
|
26
|
+
cに「龍のダイス目」を指定した行為判定ロール。
|
|
27
|
+
ゾロ目ではなく、cと同じ値の出目数x2が成功レベルとなります。難易度の指定も可能です。
|
|
25
28
|
例)3UK@5 :龍のダイス「月」でクリティカルコール宣言したサイコロ3個の行為判定
|
|
26
29
|
MESSAGETEXT
|
|
27
30
|
|
|
28
|
-
register_prefix('\d*UK
|
|
29
|
-
|
|
30
|
-
def initialize(command)
|
|
31
|
-
super(command)
|
|
32
|
-
@arrayDragonDiceName = ['', '風', '雨', '雲', '影', '月', '歌']
|
|
33
|
-
@enabled_upcase_input = false
|
|
34
|
-
end
|
|
31
|
+
register_prefix('\d*UK')
|
|
35
32
|
|
|
36
33
|
def eval_game_system_specific_command(command)
|
|
37
34
|
debug('eval_game_system_specific_command command', command)
|
|
38
35
|
|
|
39
|
-
|
|
36
|
+
check_roll(command)
|
|
37
|
+
end
|
|
40
38
|
|
|
41
|
-
|
|
42
|
-
when /(\d+)?UK(@?(\d))?(>=(\d+))?/i
|
|
43
|
-
base = (Regexp.last_match(1) || 2).to_i
|
|
44
|
-
crit = Regexp.last_match(3).to_i
|
|
45
|
-
diff = Regexp.last_match(5).to_i
|
|
46
|
-
result = checkRoll(base, crit, diff)
|
|
47
|
-
end
|
|
39
|
+
private
|
|
48
40
|
|
|
49
|
-
|
|
41
|
+
DRAGON_DICE_NAME = {
|
|
42
|
+
1 => "風",
|
|
43
|
+
2 => "雨",
|
|
44
|
+
3 => "雲",
|
|
45
|
+
4 => "影",
|
|
46
|
+
5 => "月",
|
|
47
|
+
6 => "歌"
|
|
48
|
+
}.freeze
|
|
50
49
|
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
def check_roll(command)
|
|
51
|
+
m = /^(\d+)?UK(@?(\d))?(>=(\d+))?$/i.match(command)
|
|
52
|
+
return nil unless m
|
|
53
53
|
|
|
54
|
-
|
|
55
|
-
|
|
54
|
+
base = (m[1] || 2).to_i
|
|
55
|
+
crit = m[3].to_i
|
|
56
|
+
diff = m[5].to_i
|
|
56
57
|
|
|
57
58
|
base = getValue(base)
|
|
58
59
|
crit = getValue(crit)
|
|
59
60
|
|
|
60
|
-
return
|
|
61
|
+
return nil if base < 1
|
|
61
62
|
|
|
62
63
|
crit = 6 if crit > 6
|
|
63
64
|
|
|
64
|
-
|
|
65
|
+
dice_list = @randomizer.roll_barabara(base, 6).sort
|
|
66
|
+
result = get_roll_result(dice_list, crit, diff)
|
|
65
67
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
sequence = [
|
|
69
|
+
command,
|
|
70
|
+
"(#{base}D6)",
|
|
71
|
+
"[#{dice_list.join(',')}]",
|
|
72
|
+
result.text
|
|
73
|
+
]
|
|
74
|
+
result.text = sequence.join(" > ")
|
|
70
75
|
|
|
71
76
|
return result
|
|
72
77
|
end
|
|
73
78
|
|
|
74
|
-
def
|
|
75
|
-
success, maxnum, setCount = getSuccessInfo(diceList, crit
|
|
79
|
+
def get_roll_result(diceList, crit, diff)
|
|
80
|
+
success, maxnum, setCount = getSuccessInfo(diceList, crit)
|
|
76
81
|
|
|
77
|
-
|
|
82
|
+
sequence = []
|
|
78
83
|
|
|
79
84
|
if isDragonDice(crit)
|
|
80
|
-
|
|
85
|
+
sequence.push("龍のダイス「#{DRAGON_DICE_NAME[crit]}」(#{crit})を使用")
|
|
81
86
|
end
|
|
82
87
|
|
|
83
|
-
if
|
|
84
|
-
|
|
85
|
-
if diff != 0
|
|
86
|
-
diffSuccess = (maxnum >= diff)
|
|
87
|
-
if diffSuccess
|
|
88
|
-
result += " > 成功"
|
|
89
|
-
else
|
|
90
|
-
result += " > 失敗"
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
|
|
88
|
+
if success
|
|
89
|
+
sequence.push("成功レベル:#{maxnum} (#{setCount}セット)")
|
|
94
90
|
else
|
|
95
|
-
|
|
91
|
+
sequence.push("失敗")
|
|
92
|
+
return Result.failure(sequence.join(" > "))
|
|
96
93
|
end
|
|
97
94
|
|
|
98
|
-
|
|
95
|
+
if diff == 0
|
|
96
|
+
return Result.success(sequence.join(" > ")) # 難易度なしでも成功として扱う
|
|
97
|
+
elsif maxnum >= diff
|
|
98
|
+
sequence.push("成功")
|
|
99
|
+
return Result.success(sequence.join(" > "))
|
|
100
|
+
else
|
|
101
|
+
sequence.push("失敗")
|
|
102
|
+
return Result.failure(sequence.join(" > "))
|
|
103
|
+
end
|
|
99
104
|
end
|
|
100
105
|
|
|
101
|
-
def getSuccessInfo(diceList, crit
|
|
106
|
+
def getSuccessInfo(diceList, crit)
|
|
102
107
|
debug("checkSuccess diceList, crit", diceList, crit)
|
|
103
108
|
|
|
104
109
|
diceCountHash = getDiceCountHash(diceList, crit)
|
|
@@ -109,7 +114,7 @@ module BCDice
|
|
|
109
114
|
countThreshold = (isDragonDice(crit) ? 1 : 2)
|
|
110
115
|
|
|
111
116
|
diceCountHash.each do |dice, count|
|
|
112
|
-
maxnum = count if
|
|
117
|
+
maxnum = count if count > maxnum
|
|
113
118
|
successDiceList << dice if count >= countThreshold
|
|
114
119
|
end
|
|
115
120
|
|
|
@@ -47,7 +47,7 @@ module BCDice
|
|
|
47
47
|
・改良種表 IS
|
|
48
48
|
MESSAGETEXT
|
|
49
49
|
|
|
50
|
-
register_prefix('
|
|
50
|
+
register_prefix('\d+VBS(>=\d+)?', '\d+VF', '\d+VM', '\d+VG', 'PJ[VA]?', 'PQ[VA]?', 'AC', 'MM([IAD]|V[VA]?)', 'F[LRWGBCS]', 'IP[VA]?', 'EP[VA]?', 'MP', 'IS')
|
|
51
51
|
|
|
52
52
|
def initialize(command)
|
|
53
53
|
super(command)
|
|
@@ -15,17 +15,19 @@ module BCDice
|
|
|
15
15
|
# ダイスボットの使い方
|
|
16
16
|
HELP_MESSAGE = "失敗、成功度の自動判定を行います。\n"
|
|
17
17
|
|
|
18
|
-
def
|
|
18
|
+
def result_2d6(total, dice_total, _dice_list, cmp_op, target)
|
|
19
|
+
return nil unless cmp_op == :<=
|
|
20
|
+
|
|
19
21
|
if dice_total <= 2
|
|
20
|
-
"
|
|
22
|
+
Result.critical("クリティカル")
|
|
21
23
|
elsif dice_total >= 12
|
|
22
|
-
"
|
|
23
|
-
elsif
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
24
|
+
Result.fumble("ファンブル")
|
|
25
|
+
elsif target == "?"
|
|
26
|
+
Result.nothing
|
|
27
|
+
elsif total <= target
|
|
28
|
+
Result.success("#{target - total}成功")
|
|
29
|
+
else
|
|
30
|
+
Result.failure("失敗")
|
|
29
31
|
end
|
|
30
32
|
end
|
|
31
33
|
end
|
|
@@ -15,18 +15,13 @@ module BCDice
|
|
|
15
15
|
# ダイスボットの使い方
|
|
16
16
|
HELP_MESSAGE = "nD10>=m 方式の判定で成否、完全成功、完全失敗を自動判定します。\n"
|
|
17
17
|
|
|
18
|
-
def
|
|
19
|
-
return
|
|
20
|
-
return '' unless cmp_op == :>=
|
|
18
|
+
def result_nd10(_total, _dice_total, dice_list, cmp_op, _target)
|
|
19
|
+
return nil unless cmp_op == :>=
|
|
21
20
|
|
|
22
21
|
if dice_list.count(10) == dice_list.size
|
|
23
|
-
|
|
22
|
+
Result.critical("完全成功")
|
|
24
23
|
elsif dice_list.count(1) == dice_list.size
|
|
25
|
-
|
|
26
|
-
elsif total >= target
|
|
27
|
-
' > 成功'
|
|
28
|
-
else
|
|
29
|
-
' > 失敗'
|
|
24
|
+
Result.fumble("絶対失敗")
|
|
30
25
|
end
|
|
31
26
|
end
|
|
32
27
|
end
|
|
@@ -51,14 +51,23 @@ module BCDice
|
|
|
51
51
|
return output_msg
|
|
52
52
|
end
|
|
53
53
|
|
|
54
|
-
def
|
|
55
|
-
return
|
|
56
|
-
return
|
|
54
|
+
def result_1d100(total, _dice_total, cmp_op, target)
|
|
55
|
+
return Result.nothing if target == '?'
|
|
56
|
+
return nil unless cmp_op == :<=
|
|
57
57
|
|
|
58
58
|
if total <= target
|
|
59
|
-
"
|
|
59
|
+
Result.success("成功(成功度#{(target - total) / 10})")
|
|
60
60
|
else
|
|
61
|
-
"
|
|
61
|
+
Result.failure("失敗(失敗度#{(total - target) / 10})")
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def result_1d100_text(total, dice_total, cmp_op, target)
|
|
66
|
+
result = result_1d100(total, dice_total, cmp_op, target)&.text
|
|
67
|
+
if result.nil?
|
|
68
|
+
""
|
|
69
|
+
else
|
|
70
|
+
" > #{result}"
|
|
62
71
|
end
|
|
63
72
|
end
|
|
64
73
|
|
|
@@ -322,7 +331,7 @@ module BCDice
|
|
|
322
331
|
total_n = @randomizer.roll_once(100)
|
|
323
332
|
|
|
324
333
|
output = "(#{string}) > #{total_n}"
|
|
325
|
-
output +=
|
|
334
|
+
output += result_1d100_text(total_n, total_n, :<=, diff)
|
|
326
335
|
|
|
327
336
|
pos_num = (total_n % 10) * 10 + (total_n / 10).to_i
|
|
328
337
|
pos_num = 100 if total_n >= 100
|
|
@@ -28,7 +28,7 @@ module BCDice
|
|
|
28
28
|
|
|
29
29
|
■ 命中判定 (WHx)
|
|
30
30
|
"WH(命中値)"の形で指定します。
|
|
31
|
-
|
|
31
|
+
命中判定を行って、クリティカルかファンブルでなければ部位も表示します。
|
|
32
32
|
例)wh60 wh(43-20)
|
|
33
33
|
INFO_MESSAGE_TEXT
|
|
34
34
|
|
|
@@ -44,9 +44,9 @@ module BCDice
|
|
|
44
44
|
roll_critical_table(command) || roll_attack(command) || roll_tables(command, TABLES)
|
|
45
45
|
end
|
|
46
46
|
|
|
47
|
-
def
|
|
48
|
-
return
|
|
49
|
-
return
|
|
47
|
+
def result_1d100(total, _dice_total, cmp_op, target)
|
|
48
|
+
return Result.nothing if target == '?'
|
|
49
|
+
return nil unless cmp_op == :<=
|
|
50
50
|
|
|
51
51
|
t10 = total / 10
|
|
52
52
|
d10 = target / 10
|
|
@@ -62,18 +62,19 @@ module BCDice
|
|
|
62
62
|
|
|
63
63
|
result =
|
|
64
64
|
if total <= 5
|
|
65
|
-
"自動成功"
|
|
65
|
+
Result.success("自動成功")
|
|
66
66
|
elsif total >= 96
|
|
67
|
-
"自動失敗"
|
|
67
|
+
Result.failure("自動失敗")
|
|
68
68
|
elsif total <= target
|
|
69
|
-
"成功"
|
|
69
|
+
Result.success("成功")
|
|
70
70
|
else
|
|
71
|
-
"失敗"
|
|
71
|
+
Result.failure("失敗")
|
|
72
72
|
end
|
|
73
73
|
|
|
74
74
|
sl_text = format("(SL%+d)", sl)
|
|
75
|
+
result.text += "#{sl_text} > #{result_detail(sl, total, target)}"
|
|
75
76
|
|
|
76
|
-
|
|
77
|
+
return result
|
|
77
78
|
end
|
|
78
79
|
|
|
79
80
|
private
|
|
@@ -249,7 +250,7 @@ module BCDice
|
|
|
249
250
|
|
|
250
251
|
target_number = m[1].to_i
|
|
251
252
|
total = @randomizer.roll_once(100)
|
|
252
|
-
result =
|
|
253
|
+
result = result_1d100(total, total, :<=, target_number)&.text
|
|
253
254
|
|
|
254
255
|
sequence = [
|
|
255
256
|
"(#{command})",
|
|
@@ -266,6 +267,9 @@ module BCDice
|
|
|
266
267
|
if (total > target_number) || (total > 95) # 自動失敗時のファンブル処理も
|
|
267
268
|
if ones == tens
|
|
268
269
|
"ファンブル"
|
|
270
|
+
else
|
|
271
|
+
# 一の位と十の位を入れ替えて参照する
|
|
272
|
+
"(#{HIT_PARTS_TABLE.fetch(merge_d100(ones, tens)).content})"
|
|
269
273
|
end
|
|
270
274
|
elsif ones == tens
|
|
271
275
|
"クリティカル"
|
|
@@ -317,7 +321,7 @@ module BCDice
|
|
|
317
321
|
[61..70, '君はひどく躓きバランスを回復するのに手間取る。次の「移動」を失う。'],
|
|
318
322
|
[71..80, '君は武器を取り回しを誤る。次の「アクション」を失う。'],
|
|
319
323
|
[81..90, '君は筋を違えるか、足首をひねってしまう。「筋断裂(軽度)」の負傷を得る。「致命的負傷」としてカウントされる。'],
|
|
320
|
-
[91..100, '君は射程内のランダムな味方を攻撃してしまう。命中判定の出目の1の位をSL
|
|
324
|
+
[91..100, '君は射程内のランダムな味方を攻撃してしまう。命中判定の出目の1の位をSLとして用いること。攻撃可能な味方が居ない場合は、自己を攻撃してしまい「朦朧状態」1つを得る。'],
|
|
321
325
|
]
|
|
322
326
|
)
|
|
323
327
|
}.freeze
|
|
@@ -49,18 +49,13 @@ module BCDice
|
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
# ゲーム別成功度判定(2D6)
|
|
52
|
-
def
|
|
53
|
-
return
|
|
54
|
-
return '' unless cmp_op == :>=
|
|
52
|
+
def result_2d6(_total, dice_total, _dice_list, cmp_op, _target)
|
|
53
|
+
return nil unless cmp_op == :>=
|
|
55
54
|
|
|
56
55
|
if dice_total <= 2
|
|
57
|
-
"
|
|
56
|
+
Result.fumble("ファンブル(判定失敗。ファンブル表(FT)を振ること)")
|
|
58
57
|
elsif dice_total >= 12
|
|
59
|
-
"
|
|
60
|
-
elsif total >= target
|
|
61
|
-
" > 成功"
|
|
62
|
-
else
|
|
63
|
-
" > 失敗"
|
|
58
|
+
Result.critical("スペシャル(判定成功。【テンション】が1段階上昇)")
|
|
64
59
|
end
|
|
65
60
|
end
|
|
66
61
|
|
|
@@ -88,7 +88,7 @@ module BCDice
|
|
|
88
88
|
|
|
89
89
|
add_dice_randomizer = CommonCommand::AddDice::Randomizer.new(@randomizer, self)
|
|
90
90
|
total = node.lhs.eval(self, add_dice_randomizer)
|
|
91
|
-
rand_values =
|
|
91
|
+
rand_values = add_dice_randomizer.rand_results.map(&:value)
|
|
92
92
|
|
|
93
93
|
n1 = count_fumble(rand_values, lucky_state)
|
|
94
94
|
n_max = count_critical(rand_values, lucky_state)
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'bcdice/base'
|
|
4
|
+
|
|
3
5
|
module BCDice
|
|
4
6
|
module GameSystem
|
|
5
7
|
class ZettaiReido < Base
|
|
@@ -38,20 +40,23 @@ module BCDice
|
|
|
38
40
|
mod, modText = getModInfo(modText)
|
|
39
41
|
diff, diffText = getDiffInfo(diffValue)
|
|
40
42
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
output += " > #{baseAvility}-#{diceTotal}[#{diceText}]#{modText}"
|
|
44
|
-
|
|
43
|
+
baseCommandText = "(#{baseAvility}-2DR#{modText}#{diffText})"
|
|
44
|
+
diceCommandText = "#{baseAvility}-#{diceTotal}[#{diceText}]#{modText}"
|
|
45
45
|
total = baseAvility - diceTotal + mod
|
|
46
|
-
output += " > #{total}"
|
|
47
46
|
|
|
48
|
-
|
|
49
|
-
output += successText
|
|
47
|
+
result = getResult(diceTotal, total, diff)
|
|
50
48
|
|
|
51
|
-
darkPointText =
|
|
52
|
-
output += darkPointText
|
|
49
|
+
darkPointText = "#{darkPoint}DP" if darkPoint > 0
|
|
53
50
|
|
|
54
|
-
|
|
51
|
+
result.text = [
|
|
52
|
+
baseCommandText,
|
|
53
|
+
diceCommandText,
|
|
54
|
+
total.to_i,
|
|
55
|
+
result.text,
|
|
56
|
+
darkPointText,
|
|
57
|
+
].compact.join(" > ")
|
|
58
|
+
|
|
59
|
+
return result
|
|
55
60
|
end
|
|
56
61
|
|
|
57
62
|
def roll2DarkDice()
|
|
@@ -107,23 +112,13 @@ module BCDice
|
|
|
107
112
|
return diffValue, diffText
|
|
108
113
|
end
|
|
109
114
|
|
|
110
|
-
def
|
|
111
|
-
text = ''
|
|
112
|
-
|
|
113
|
-
if darkPoint > 0
|
|
114
|
-
text = " > #{darkPoint}DP"
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
return text
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
def getSuccessText(diceTotal, total, diff)
|
|
115
|
+
def getResult(diceTotal, total, diff)
|
|
121
116
|
if diceTotal == 0
|
|
122
|
-
return "
|
|
117
|
+
return Result.critical("クリティカル")
|
|
123
118
|
end
|
|
124
119
|
|
|
125
120
|
if diceTotal == 10
|
|
126
|
-
return "
|
|
121
|
+
return Result.fumble("ファンブル")
|
|
127
122
|
end
|
|
128
123
|
|
|
129
124
|
if diff.nil?
|
|
@@ -132,10 +127,10 @@ module BCDice
|
|
|
132
127
|
|
|
133
128
|
successLevel = (total - diff)
|
|
134
129
|
if successLevel >= 0
|
|
135
|
-
return "
|
|
130
|
+
return Result.success("#{successLevel} 成功")
|
|
136
131
|
end
|
|
137
132
|
|
|
138
|
-
return
|
|
133
|
+
return Result.failure("失敗")
|
|
139
134
|
end
|
|
140
135
|
end
|
|
141
136
|
end
|