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,8 +18,8 @@ module BCDice
|
|
|
18
18
|
INFO_MESSAGE_TEXT
|
|
19
19
|
|
|
20
20
|
# ゲーム別成功度判定(1d100)
|
|
21
|
-
def
|
|
22
|
-
return
|
|
21
|
+
def result_1d100(total, _dice_total, cmp_op, target)
|
|
22
|
+
return Result.nothing if target == '?'
|
|
23
23
|
return nil unless cmp_op == :<=
|
|
24
24
|
|
|
25
25
|
# RuneQuest QUICK-START RULESを元に修正
|
|
@@ -28,18 +28,18 @@ module BCDice
|
|
|
28
28
|
|
|
29
29
|
if (total <= 1) || (total <= critical_value)
|
|
30
30
|
# 1は常に決定的成功
|
|
31
|
-
"
|
|
31
|
+
Result.critical("決定的成功")
|
|
32
32
|
elsif total >= 100
|
|
33
33
|
# 100は常に致命的失敗
|
|
34
|
-
"
|
|
34
|
+
Result.fumble("致命的失敗")
|
|
35
35
|
elsif total <= (target.to_f / 5).round
|
|
36
|
-
"
|
|
36
|
+
Result.success("効果的成功")
|
|
37
37
|
elsif total <= target
|
|
38
|
-
"
|
|
38
|
+
Result.success("成功")
|
|
39
39
|
elsif total >= 95 + critical_value
|
|
40
|
-
"
|
|
40
|
+
Result.fumble("致命的失敗")
|
|
41
41
|
else
|
|
42
|
-
"
|
|
42
|
+
Result.failure("失敗")
|
|
43
43
|
end
|
|
44
44
|
end
|
|
45
45
|
end
|
|
@@ -219,7 +219,7 @@ module BCDice
|
|
|
219
219
|
|
|
220
220
|
# 固有のダイスロールコマンドを実行する
|
|
221
221
|
# @param [String] command 入力されたコマンド
|
|
222
|
-
# @return [
|
|
222
|
+
# @return [Result, nil] ダイスロールコマンドの実行結果
|
|
223
223
|
def eval_game_system_specific_command(command)
|
|
224
224
|
alias_replaced_with_2d6 = replace_alias_for_srs_roll_with_2d6(command)
|
|
225
225
|
|
|
@@ -297,7 +297,7 @@ module BCDice
|
|
|
297
297
|
|
|
298
298
|
# 成功判定を実行する
|
|
299
299
|
# @param [SRSRollNode] srs_roll 成功判定ノード
|
|
300
|
-
# @return [
|
|
300
|
+
# @return [Result] 成功判定結果
|
|
301
301
|
def execute_srs_roll(srs_roll)
|
|
302
302
|
dice_list = @randomizer.roll_barabara(2, 6)
|
|
303
303
|
dice_list.sort! if @sort_add_dice
|
|
@@ -307,35 +307,36 @@ module BCDice
|
|
|
307
307
|
|
|
308
308
|
modified_sum = sum + srs_roll.modifier
|
|
309
309
|
|
|
310
|
+
result = compare_result(srs_roll, sum, modified_sum)
|
|
311
|
+
|
|
310
312
|
parts = [
|
|
311
313
|
"(#{srs_roll})",
|
|
312
314
|
"#{sum}[#{dice_str}]#{Format.modifier(srs_roll.modifier)}",
|
|
313
315
|
modified_sum,
|
|
314
|
-
|
|
316
|
+
result.text
|
|
315
317
|
]
|
|
316
318
|
|
|
317
|
-
|
|
319
|
+
result.text = parts.compact.join(' > ')
|
|
320
|
+
result
|
|
318
321
|
end
|
|
319
322
|
|
|
320
323
|
# ダイスロール結果を目標値、クリティカル値、ファンブル値と比較する
|
|
321
324
|
# @param [SRSRollNode] srs_roll 成功判定ノード
|
|
322
325
|
# @param [Integer] sum 出目の合計
|
|
323
326
|
# @param [Integer] modified_sum 修正後の値
|
|
324
|
-
# @return [
|
|
327
|
+
# @return [Result] 比較結果
|
|
325
328
|
def compare_result(srs_roll, sum, modified_sum)
|
|
326
329
|
if sum >= srs_roll.critical_value
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
330
|
+
Result.critical("自動成功")
|
|
331
|
+
elsif sum <= srs_roll.fumble_value
|
|
332
|
+
Result.fumble("自動失敗")
|
|
333
|
+
elsif srs_roll.target_value.nil?
|
|
334
|
+
Result.new
|
|
335
|
+
elsif modified_sum >= srs_roll.target_value
|
|
336
|
+
Result.success("成功")
|
|
337
|
+
else
|
|
338
|
+
Result.failure("失敗")
|
|
336
339
|
end
|
|
337
|
-
|
|
338
|
-
return nil
|
|
339
340
|
end
|
|
340
341
|
end
|
|
341
342
|
end
|
|
@@ -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 SamsaraBallad < Base
|
|
@@ -59,38 +61,63 @@ module BCDice
|
|
|
59
61
|
total = 100 if total == 0
|
|
60
62
|
end
|
|
61
63
|
|
|
62
|
-
|
|
64
|
+
result = compare(total, cmd)
|
|
65
|
+
|
|
66
|
+
result_str =
|
|
67
|
+
if result.failure?
|
|
68
|
+
"失敗"
|
|
69
|
+
elsif result.success?
|
|
70
|
+
"成功"
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
additional_str =
|
|
74
|
+
if result.fumble?
|
|
75
|
+
"ファンブル"
|
|
76
|
+
elsif result.critical?
|
|
77
|
+
"クリティカル"
|
|
78
|
+
end
|
|
63
79
|
|
|
64
80
|
sequence = [
|
|
65
81
|
"(D100#{cmd.cmp_op}#{cmd.target_number})",
|
|
66
82
|
places_text,
|
|
67
83
|
total.to_s,
|
|
68
|
-
|
|
84
|
+
result_str,
|
|
85
|
+
additional_str,
|
|
69
86
|
].compact
|
|
70
87
|
|
|
71
|
-
|
|
88
|
+
result.text = sequence.join(" > ")
|
|
89
|
+
|
|
90
|
+
return result
|
|
72
91
|
end
|
|
73
92
|
|
|
74
93
|
private
|
|
75
94
|
|
|
76
|
-
# @return [
|
|
77
|
-
# @return [nil]
|
|
95
|
+
# @return [Result]
|
|
78
96
|
def compare(total, cmd)
|
|
79
97
|
if [:<=, :<].include?(cmd.cmp_op)
|
|
80
98
|
if !total.send(cmd.cmp_op, cmd.target_number)
|
|
81
|
-
|
|
99
|
+
Result.failure(nil)
|
|
82
100
|
elsif fumble_?(total, cmd.fumble)
|
|
83
|
-
|
|
101
|
+
Result.new.tap do |r|
|
|
102
|
+
r.success = true
|
|
103
|
+
r.fumble = true
|
|
104
|
+
end
|
|
84
105
|
elsif critical_?(total, cmd.critical)
|
|
85
|
-
|
|
106
|
+
Result.critical(nil)
|
|
86
107
|
else
|
|
87
|
-
|
|
108
|
+
Result.success(nil)
|
|
88
109
|
end
|
|
89
110
|
elsif fumble_?(total, cmd.fumble)
|
|
90
111
|
# ファンブル優先
|
|
91
|
-
|
|
112
|
+
Result.new.tap do |r|
|
|
113
|
+
r.fumble = true
|
|
114
|
+
end
|
|
92
115
|
elsif critical_?(total, cmd.critical)
|
|
93
|
-
|
|
116
|
+
Result.new.tap do |r|
|
|
117
|
+
r.critical = true
|
|
118
|
+
end
|
|
119
|
+
else
|
|
120
|
+
Result.new
|
|
94
121
|
end
|
|
95
122
|
end
|
|
96
123
|
|
|
@@ -49,7 +49,7 @@ module BCDice
|
|
|
49
49
|
・D66ダイスあり
|
|
50
50
|
INFO_MESSAGE_TEXT
|
|
51
51
|
|
|
52
|
-
register_prefix('\d+R', 'SR
|
|
52
|
+
register_prefix('\d+R', 'SR', 'TAGT', 'GETSST', 'NPCT', TABLES.keys, ALIASES.keys)
|
|
53
53
|
|
|
54
54
|
CREATE_ARMS_STRUCT = Struct.new(:base_parts, :accessory_parts, :parts_effect, :hit, :damage, :life, :kutibeni, :kiba, :abilities)
|
|
55
55
|
|
|
@@ -64,7 +64,7 @@ module BCDice
|
|
|
64
64
|
debug("eval_game_system_specific_command begin string", command)
|
|
65
65
|
|
|
66
66
|
result = checkRoll(command)
|
|
67
|
-
return result unless result.
|
|
67
|
+
return result unless result.nil?
|
|
68
68
|
|
|
69
69
|
debug("判定ロールではなかった")
|
|
70
70
|
|
|
@@ -81,13 +81,13 @@ module BCDice
|
|
|
81
81
|
debug("checkRoll begin string", string)
|
|
82
82
|
|
|
83
83
|
m = /^(\d+)R>=(\d+)(\[(\d+)?(,|,\d+)?(,\d+(S)?)?\])?$/i.match(string)
|
|
84
|
-
return
|
|
84
|
+
return nil unless m
|
|
85
85
|
|
|
86
86
|
roll_times = m[1].to_i
|
|
87
87
|
target = m[2].to_i
|
|
88
88
|
params = m[3]
|
|
89
89
|
|
|
90
|
-
min_suc, fumble, critical,
|
|
90
|
+
min_suc, fumble, critical, is_critical_stop = get_roll_params(params)
|
|
91
91
|
|
|
92
92
|
result = ""
|
|
93
93
|
|
|
@@ -104,8 +104,8 @@ module BCDice
|
|
|
104
104
|
end
|
|
105
105
|
|
|
106
106
|
if fumble >= 6
|
|
107
|
-
result += "#{
|
|
108
|
-
return result
|
|
107
|
+
result += "#{get_judge_info(target, fumble, critical)} > ファンブル率が6を超えたため自動失敗!"
|
|
108
|
+
return Result.failure(result)
|
|
109
109
|
end
|
|
110
110
|
|
|
111
111
|
if target < 5
|
|
@@ -113,23 +113,30 @@ module BCDice
|
|
|
113
113
|
target = 5
|
|
114
114
|
end
|
|
115
115
|
|
|
116
|
-
dice_str, total_suc,
|
|
116
|
+
dice_str, total_suc, is_critical, is_fumble = check_roll_loop(roll_times, min_suc, target, critical, fumble, is_critical_stop)
|
|
117
117
|
|
|
118
|
-
result += "#{
|
|
118
|
+
result += "#{get_judge_info(target, fumble, critical)} > #{dice_str} > 成功度#{total_suc}"
|
|
119
119
|
|
|
120
|
-
if
|
|
120
|
+
if is_fumble
|
|
121
121
|
result += " > ファンブル"
|
|
122
122
|
end
|
|
123
123
|
|
|
124
|
-
if
|
|
124
|
+
if is_critical && (total_suc > 0)
|
|
125
125
|
result += " > 必殺発動可能!"
|
|
126
126
|
end
|
|
127
127
|
|
|
128
128
|
debug('checkRoll result result', result)
|
|
129
|
-
|
|
129
|
+
|
|
130
|
+
return Result.new.tap do |r|
|
|
131
|
+
r.text = result
|
|
132
|
+
r.success = !is_fumble && min_suc > 0 && total_suc >= min_suc
|
|
133
|
+
r.failure = is_fumble
|
|
134
|
+
r.critical = is_critical
|
|
135
|
+
r.fumble = is_fumble
|
|
136
|
+
end
|
|
130
137
|
end
|
|
131
138
|
|
|
132
|
-
def
|
|
139
|
+
def get_roll_params(params)
|
|
133
140
|
min_suc = 0
|
|
134
141
|
fumble = 1
|
|
135
142
|
critical = 13
|
|
@@ -154,19 +161,14 @@ module BCDice
|
|
|
154
161
|
return min_suc, fumble, critical, isCriticalStop
|
|
155
162
|
end
|
|
156
163
|
|
|
157
|
-
def
|
|
158
|
-
"【難易度#{target}、ファンブル率#{fumble}
|
|
164
|
+
def get_judge_info(target, fumble, critical)
|
|
165
|
+
return "【難易度#{target}、ファンブル率#{fumble}、必殺#{critical == 13 ? 'なし' : critical.to_s}】"
|
|
159
166
|
end
|
|
160
167
|
|
|
161
|
-
def
|
|
162
|
-
criticalString = (critical == 13 ? "なし" : critical.to_s)
|
|
163
|
-
return "、必殺#{criticalString}"
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
def checkRollLoop(roll_times, min_suc, target, critical, fumble, isCriticalStop)
|
|
168
|
+
def check_roll_loop(roll_times, min_suc, target, critical, fumble, is_critical_stop)
|
|
167
169
|
dice_str = ''
|
|
168
|
-
|
|
169
|
-
|
|
170
|
+
is_fumble = false
|
|
171
|
+
is_critical = false
|
|
170
172
|
total_suc = 0
|
|
171
173
|
|
|
172
174
|
roll_times.times do |_i|
|
|
@@ -193,38 +195,36 @@ module BCDice
|
|
|
193
195
|
total_suc += dice_suc
|
|
194
196
|
|
|
195
197
|
if critical <= d1 + d2
|
|
196
|
-
|
|
198
|
+
is_critical = true
|
|
197
199
|
dice_str += "『必殺!』"
|
|
198
200
|
end
|
|
199
201
|
|
|
200
202
|
if (d1 == d2) && (d1 <= fumble) # ファンブルの確認
|
|
201
|
-
|
|
202
|
-
|
|
203
|
+
is_fumble = true
|
|
204
|
+
is_critical = false
|
|
203
205
|
break
|
|
204
206
|
end
|
|
205
207
|
|
|
206
|
-
if
|
|
208
|
+
if is_critical && is_critical_stop # 必殺止めの確認
|
|
207
209
|
break
|
|
208
210
|
end
|
|
209
211
|
end
|
|
210
212
|
|
|
211
|
-
return dice_str, total_suc,
|
|
213
|
+
return dice_str, total_suc, is_critical, is_fumble
|
|
212
214
|
end
|
|
213
215
|
|
|
214
216
|
def check_seigou(string)
|
|
215
217
|
debug("check_seigou begin string", string)
|
|
216
218
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
target = m[1].to_i
|
|
221
|
-
sr_parser = Command::Parser.new(/SR\d+/i, round_type: round_type)
|
|
219
|
+
sr_parser = Command::Parser.new("SR", round_type: round_type)
|
|
220
|
+
.has_suffix_number
|
|
222
221
|
.restrict_cmp_op_to(nil)
|
|
223
222
|
cmd = sr_parser.parse(string)
|
|
224
223
|
return '' unless cmd
|
|
225
224
|
|
|
226
225
|
dice = @randomizer.roll_sum(2, 6)
|
|
227
226
|
diceTotal = dice + cmd.modify_number
|
|
227
|
+
target = cmd.suffix_number
|
|
228
228
|
|
|
229
229
|
seigou = if target < diceTotal
|
|
230
230
|
"「激」"
|
|
@@ -37,8 +37,8 @@ module BCDice
|
|
|
37
37
|
INFO_MESSAGE_TEXT
|
|
38
38
|
|
|
39
39
|
register_prefix(
|
|
40
|
-
'(SH|SHS)
|
|
41
|
-
'(EM|TR|FE)
|
|
40
|
+
'(SH|SHS)',
|
|
41
|
+
'(EM|TR|FE)',
|
|
42
42
|
'DC(SL|BL|IM|BR|RF|EL).+'
|
|
43
43
|
)
|
|
44
44
|
|
|
@@ -73,13 +73,13 @@ module BCDice
|
|
|
73
73
|
|
|
74
74
|
dice_value = @randomizer.roll_once(100)
|
|
75
75
|
result = get_check_result(dice_value, success_rate, critical_border, fumble_border)
|
|
76
|
-
title, supplementary = get_supplementary(command_type, result)
|
|
76
|
+
title, supplementary = get_supplementary(command_type, result.text)
|
|
77
77
|
unless supplementary.empty?
|
|
78
78
|
supplementary = "(#{supplementary})"
|
|
79
79
|
end
|
|
80
80
|
|
|
81
|
-
text = "#{title}判定 D100<=#{success_rate}@#{critical_border} > #{dice_value} > #{result}#{supplementary}"
|
|
82
|
-
return
|
|
81
|
+
result.text = "#{title}判定 D100<=#{success_rate}@#{critical_border} > #{dice_value} > #{result.text}#{supplementary}"
|
|
82
|
+
return result
|
|
83
83
|
end
|
|
84
84
|
|
|
85
85
|
def get_supplementary(command_type, result)
|
|
@@ -24,11 +24,12 @@ module BCDice
|
|
|
24
24
|
register_prefix('SF', 'ST')
|
|
25
25
|
|
|
26
26
|
def change_text(string)
|
|
27
|
-
string.gsub(/
|
|
27
|
+
string.gsub(/S[FT]/i, "2D6")
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
def
|
|
31
|
-
return
|
|
30
|
+
def result_2d6(total, dice_total, _dice_list, cmp_op, target)
|
|
31
|
+
return Result.nothing if target == '?'
|
|
32
|
+
return nil unless [:>=, :>].include?(cmp_op)
|
|
32
33
|
|
|
33
34
|
critical = false
|
|
34
35
|
fumble = false
|
|
@@ -39,28 +40,23 @@ module BCDice
|
|
|
39
40
|
fumble = true
|
|
40
41
|
end
|
|
41
42
|
|
|
42
|
-
totalValueBonus = 0
|
|
43
|
-
if cmp_op == :>=
|
|
44
|
-
totalValueBonus = 1
|
|
45
|
-
end
|
|
43
|
+
totalValueBonus = (cmp_op == :>= ? 1 : 0)
|
|
46
44
|
|
|
47
|
-
if
|
|
48
|
-
if
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
45
|
+
if (total + totalValueBonus) > target
|
|
46
|
+
if critical
|
|
47
|
+
Result.critical("自動成功(劇的成功)")
|
|
48
|
+
elsif fumble
|
|
49
|
+
Result.failure("自動失敗")
|
|
50
|
+
else
|
|
51
|
+
Result.success("成功")
|
|
52
|
+
end
|
|
53
|
+
else
|
|
54
|
+
if critical
|
|
55
|
+
Result.success("自動成功")
|
|
56
|
+
elsif fumble
|
|
57
|
+
Result.fumble("自動失敗(致命的失敗)")
|
|
56
58
|
else
|
|
57
|
-
|
|
58
|
-
return " > 自動成功"
|
|
59
|
-
elsif fumble
|
|
60
|
-
return " > 自動失敗(致命的失敗)"
|
|
61
|
-
else
|
|
62
|
-
return " > 失敗"
|
|
63
|
-
end
|
|
59
|
+
Result.failure("失敗")
|
|
64
60
|
end
|
|
65
61
|
end
|
|
66
62
|
end
|
|
@@ -16,12 +16,13 @@ module BCDice
|
|
|
16
16
|
|
|
17
17
|
# ダイスボットの使い方
|
|
18
18
|
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
|
|
19
|
-
・行為判定
|
|
20
|
-
2D6
|
|
19
|
+
・行為判定 nSG@s#f>=x
|
|
20
|
+
2D6の行為判定を行う。ダイス数が指定された場合、大きい出目2個を採用する。
|
|
21
|
+
n: ダイス数 (省略時 2)
|
|
21
22
|
s: スペシャル値 (省略時 12)
|
|
22
23
|
f: ファンブル値 (省略時 2)
|
|
23
24
|
x: 目標値 (省略可)
|
|
24
|
-
例)SG, SG@11, SG@11#3, SG#3>=7
|
|
25
|
+
例)SG, SG@11, SG@11#3, SG#3>=7, 3SG>=7
|
|
25
26
|
・各種表
|
|
26
27
|
・(無印)シーン表 ST/ファンブル表 FT/感情表 ET
|
|
27
28
|
/変調表 WT/戦場表 BT/異形表 MT
|
|
@@ -68,7 +69,7 @@ module BCDice
|
|
|
68
69
|
end
|
|
69
70
|
end
|
|
70
71
|
|
|
71
|
-
register_prefix(
|
|
72
|
+
register_prefix('\d*SG')
|
|
72
73
|
|
|
73
74
|
def eval_game_system_specific_command(command)
|
|
74
75
|
result = action_roll(command) || roll_tables(command, TABLES) || RTT.roll_command(@randomizer, command)
|
|
@@ -94,17 +95,23 @@ module BCDice
|
|
|
94
95
|
private
|
|
95
96
|
|
|
96
97
|
def action_roll(command)
|
|
97
|
-
parser = Command::Parser.new(
|
|
98
|
+
parser = Command::Parser.new(/\d*SG/, round_type: round_type)
|
|
98
99
|
.restrict_cmp_op_to(:>=, nil)
|
|
99
100
|
.enable_critical
|
|
100
101
|
.enable_fumble
|
|
101
102
|
cmd = parser.parse(command)
|
|
102
103
|
return nil unless cmd
|
|
103
104
|
|
|
105
|
+
times = cmd.command.start_with?(/\d/) ? cmd.command.to_i : 2
|
|
106
|
+
return nil if times <= 1
|
|
107
|
+
|
|
104
108
|
cmd.critical ||= 12
|
|
105
109
|
cmd.fumble ||= 2
|
|
106
110
|
|
|
107
|
-
|
|
111
|
+
dice_list_full = @randomizer.roll_barabara(times, 6).sort
|
|
112
|
+
dice_list_full_str = "[#{dice_list_full.join(',')}]" if times > 2
|
|
113
|
+
|
|
114
|
+
dice_list = dice_list_full[-2, 2]
|
|
108
115
|
dice_total = dice_list.sum()
|
|
109
116
|
total = dice_total + cmd.modify_number
|
|
110
117
|
|
|
@@ -123,6 +130,7 @@ module BCDice
|
|
|
123
130
|
|
|
124
131
|
sequence = [
|
|
125
132
|
"(#{cmd.to_s(:after_modify_number)})",
|
|
133
|
+
dice_list_full_str,
|
|
126
134
|
"#{dice_total}[#{dice_list.join(',')}]#{Format.modifier(cmd.modify_number)}",
|
|
127
135
|
total,
|
|
128
136
|
result.text
|