bcdice 3.1.3 → 3.5.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 +186 -76
- data/README.md +3 -2
- data/i18n/BeginningIdol/ja_jp.yml +2806 -0
- data/i18n/BeginningIdol/ko_kr.yml +1400 -0
- data/i18n/Cthulhu/zh_hans.yml +11 -0
- data/i18n/KillDeathBusiness/ja_jp.yml +1 -1
- data/i18n/MagicaLogia/ja_jp.yml +1 -1
- data/i18n/MagicaLogia/zh_hans.yml +564 -0
- data/i18n/MonotoneMuseum/ko_kr.yml +526 -53
- 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 +82 -7
- data/lib/bcdice/common_command/tally_dice/node.rb +135 -0
- data/lib/bcdice/common_command/tally_dice/parser.rb +302 -0
- data/lib/bcdice/common_command/tally_dice.rb +19 -0
- data/lib/bcdice/common_command.rb +2 -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/dice_table/d66_table.rb +5 -1
- data/lib/bcdice/dice_table.rb +3 -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/Aoharubaan.rb +91 -0
- data/lib/bcdice/game_system/Arianrhod.rb +6 -8
- data/lib/bcdice/game_system/AssaultEngine.rb +91 -0
- data/lib/bcdice/game_system/Avandner.rb +1 -1
- data/lib/bcdice/game_system/BadLife.rb +264 -289
- data/lib/bcdice/game_system/Bakenokawa.rb +244 -0
- 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 +118 -2392
- data/lib/bcdice/game_system/BeginningIdol_Korean.rb +10 -2312
- 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/CastleInGray.rb +133 -0
- 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 +3 -3
- data/lib/bcdice/game_system/Cthulhu7th.rb +56 -18
- 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 +8 -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/FateCoreSystem.rb +117 -0
- 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/Karukami.rb +84 -0
- 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 +142 -3
- data/lib/bcdice/game_system/LiveraDoll.rb +254 -304
- data/lib/bcdice/game_system/LogHorizon.rb +10 -7
- 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/MonotoneMuseum_Korean.rb +4 -4
- 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 +1 -1
- 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 → StellarLife.rb} +162 -226
- 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 +22 -9
- data/lib/bcdice/game_system/SwordWorld2_0.rb +22 -7
- data/lib/bcdice/game_system/SwordWorld2_5.rb +8 -2
- data/lib/bcdice/game_system/TalesFromTheLoop.rb +83 -0
- 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/YearZeroEngine.rb +40 -19
- data/lib/bcdice/game_system/Yggdrasill.rb +1 -1
- data/lib/bcdice/game_system/ZettaiReido.rb +20 -25
- data/lib/bcdice/game_system/beginning_idol/accessories_table.rb +31 -0
- data/lib/bcdice/game_system/beginning_idol/bad_status_table.rb +43 -0
- data/lib/bcdice/game_system/beginning_idol/chain_d66_table.rb +29 -0
- data/lib/bcdice/game_system/beginning_idol/chain_table.rb +37 -0
- data/lib/bcdice/game_system/beginning_idol/costume_table.rb +37 -0
- data/lib/bcdice/game_system/beginning_idol/d6_twice_table.rb +36 -0
- data/lib/bcdice/game_system/beginning_idol/item_table.rb +51 -0
- data/lib/bcdice/game_system/beginning_idol/my_skill_name_table.rb +44 -0
- data/lib/bcdice/game_system/beginning_idol/random_event_table.rb +31 -0
- data/lib/bcdice/game_system/beginning_idol/skill_table.rb +63 -0
- data/lib/bcdice/game_system/beginning_idol/table.rb +193 -0
- data/lib/bcdice/game_system/beginning_idol/with_abnormality.rb +74 -0
- data/lib/bcdice/game_system/beginning_idol/work_table.rb +57 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/kingdom_table.rb +1 -1
- data/lib/bcdice/game_system/one_way_heroics/random_event_table.rb +4 -4
- data/lib/bcdice/game_system/sword_world/rating_parsed.rb +50 -7
- data/lib/bcdice/game_system/sword_world/rating_parser.rb +148 -107
- data/lib/bcdice/game_system/sword_world/transcendent_test.rb +26 -8
- data/lib/bcdice/game_system.rb +18 -1
- data/lib/bcdice/repl.rb +1 -1
- data/lib/bcdice/result.rb +26 -0
- data/lib/bcdice/version.rb +1 -1
- metadata +48 -6
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "bcdice/format"
|
|
4
|
+
|
|
3
5
|
module BCDice
|
|
4
6
|
module GameSystem
|
|
5
7
|
class ColossalHunter < Base
|
|
@@ -14,10 +16,12 @@ module BCDice
|
|
|
14
16
|
|
|
15
17
|
# ダイスボットの使い方
|
|
16
18
|
HELP_MESSAGE = <<~MESSAGETEXT
|
|
17
|
-
・判定(
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
・判定(nCH±x>=y)
|
|
20
|
+
nD6の判定。クリティカル、ファンブルの自動判定を行います。
|
|
21
|
+
n:ダイス数。省略可能。省略した場合3。
|
|
22
|
+
x:修正値。省略可能。
|
|
23
|
+
y:目標値。省略可能。
|
|
24
|
+
例) CH CH+1 CH+2>=10 4CH+1
|
|
21
25
|
・BIG-6表(B6T)
|
|
22
26
|
・覚醒表(AWT)
|
|
23
27
|
・現状表(CST)
|
|
@@ -45,65 +49,48 @@ module BCDice
|
|
|
45
49
|
def getCheckRollDiceCommandResult(command)
|
|
46
50
|
debug("getCheckRollDiceCommandResult command", command)
|
|
47
51
|
|
|
48
|
-
|
|
52
|
+
parser = Command::Parser.new(/\d*CH/, round_type: round_type)
|
|
53
|
+
.restrict_cmp_op_to(nil, :>=)
|
|
49
54
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
55
|
+
parsed = parser.parse(command)
|
|
56
|
+
unless parsed
|
|
57
|
+
return nil
|
|
58
|
+
end
|
|
53
59
|
|
|
54
|
-
|
|
55
|
-
modify = getValue(modifyText, 0)
|
|
60
|
+
parsed.command = "3CH" unless parsed.command.start_with?(/\d/)
|
|
56
61
|
|
|
57
|
-
|
|
58
|
-
|
|
62
|
+
dice_count = parsed.command.to_i
|
|
63
|
+
modify = parsed.modify_number
|
|
59
64
|
|
|
60
65
|
# ダイスロール
|
|
61
|
-
dice_list = @randomizer.roll_barabara(
|
|
66
|
+
dice_list = @randomizer.roll_barabara(dice_count, 6)
|
|
62
67
|
dice = dice_list.sum()
|
|
63
68
|
dice_str = dice_list.join(",")
|
|
64
69
|
|
|
65
70
|
total = dice + modify
|
|
66
71
|
|
|
67
|
-
# 出力用ダイスコマンドを生成
|
|
68
|
-
command = "#{diceCount}CH#{modifyText}"
|
|
69
|
-
command += ">=#{difficulty}" unless difficulty.nil?
|
|
70
|
-
|
|
71
72
|
# 出力文の生成
|
|
72
|
-
|
|
73
|
+
text = "(#{parsed}) > #{dice}[#{dice_str}]#{Format.modifier(modify)} > #{total}"
|
|
73
74
|
|
|
74
|
-
|
|
75
|
-
if isFamble(dice)
|
|
76
|
-
result += " > ファンブル"
|
|
77
|
-
elsif isCritical(total)
|
|
78
|
-
result += " > クリティカル"
|
|
79
|
-
else
|
|
80
|
-
result += getJudgeResultString(difficulty, total)
|
|
81
|
-
end
|
|
75
|
+
result = get_judge_result(dice, total, parsed)
|
|
82
76
|
|
|
77
|
+
result.text = text + result.text
|
|
83
78
|
return result
|
|
84
79
|
end
|
|
85
80
|
|
|
86
81
|
# 成否判定
|
|
87
|
-
def
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
def isCritical(total)
|
|
102
|
-
(total >= 16)
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
def isFamble(total)
|
|
106
|
-
(total <= 5)
|
|
82
|
+
def get_judge_result(dice, total, parsed)
|
|
83
|
+
if dice <= 5
|
|
84
|
+
Result.fumble(" > ファンブル")
|
|
85
|
+
elsif total >= 16
|
|
86
|
+
Result.critical(" > クリティカル")
|
|
87
|
+
elsif parsed.cmp_op.nil?
|
|
88
|
+
Result.new("")
|
|
89
|
+
elsif total >= parsed.target_number
|
|
90
|
+
Result.success(" > 成功")
|
|
91
|
+
else
|
|
92
|
+
Result.failure(" > 失敗")
|
|
93
|
+
end
|
|
107
94
|
end
|
|
108
95
|
|
|
109
96
|
def getSourceSceneDiceCommandResult(command)
|
|
@@ -562,7 +549,7 @@ module BCDice
|
|
|
562
549
|
|
|
563
550
|
}.freeze
|
|
564
551
|
|
|
565
|
-
register_prefix(
|
|
552
|
+
register_prefix('\d*CH', "B6T", "CNP", TABLES.keys)
|
|
566
553
|
end
|
|
567
554
|
end
|
|
568
555
|
end
|
|
@@ -48,7 +48,7 @@ module BCDice
|
|
|
48
48
|
|
|
49
49
|
INFO_MESSAGE_TEXT
|
|
50
50
|
|
|
51
|
-
register_prefix('
|
|
51
|
+
register_prefix('CCB?', 'RESB?', 'CBRB?')
|
|
52
52
|
|
|
53
53
|
def initialize(command)
|
|
54
54
|
super(command)
|
|
@@ -193,12 +193,12 @@ module BCDice
|
|
|
193
193
|
end
|
|
194
194
|
|
|
195
195
|
def getRegistResult(command)
|
|
196
|
-
m = /^
|
|
196
|
+
m = /^RESB?(-?\d+)$/i.match(command)
|
|
197
197
|
unless m
|
|
198
198
|
return nil
|
|
199
199
|
end
|
|
200
200
|
|
|
201
|
-
value = m[
|
|
201
|
+
value = m[1].to_i
|
|
202
202
|
target = value * 5 + 50
|
|
203
203
|
|
|
204
204
|
if target < 5
|
|
@@ -17,13 +17,19 @@ module BCDice
|
|
|
17
17
|
|
|
18
18
|
# ダイスボットの使い方
|
|
19
19
|
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
|
|
20
|
-
※コマンドは入力内容の前方一致で検出しています。
|
|
21
20
|
・判定 CC(x)<=(目標値)
|
|
22
|
-
x
|
|
21
|
+
x:ボーナス・ペナルティダイス。省略可。
|
|
23
22
|
目標値が無くても1D100は表示される。
|
|
24
23
|
ファンブル/失敗/ レギュラー成功/ハード成功/
|
|
25
24
|
イクストリーム成功/クリティカル を自動判定。
|
|
26
|
-
|
|
25
|
+
例)CC<=30 CC(2)<=50 CC(+2)<=50 CC(-1)<=75 CC-1<=50 CC1<=65 CC+1<=65 CC
|
|
26
|
+
|
|
27
|
+
・技能ロールの難易度指定 CC(x)<=(目標値)(難易度)
|
|
28
|
+
目標値の後に難易度を指定することで
|
|
29
|
+
成功/失敗/クリティカル/ファンブル を自動判定する。
|
|
30
|
+
難易度の指定:
|
|
31
|
+
r:レギュラー h:ハード e:イクストリーム c:クリティカル
|
|
32
|
+
例)CC<=70r CC1<=60h CC-2<=50e CC2<=99c
|
|
27
33
|
|
|
28
34
|
・組み合わせ判定 (CBR(x,y))
|
|
29
35
|
目標値 x と y で%ロールを行い、成否を判定。
|
|
@@ -48,7 +54,7 @@ module BCDice
|
|
|
48
54
|
強力でない呪文の場合 FCL/強力な呪文の場合 FCM
|
|
49
55
|
INFO_MESSAGE_TEXT
|
|
50
56
|
|
|
51
|
-
register_prefix('CC', 'CBR
|
|
57
|
+
register_prefix('CC', 'CBR', 'FAR', 'BMR', 'BMS', 'FCL', 'FCM', 'PH', 'MA')
|
|
52
58
|
|
|
53
59
|
def eval_game_system_specific_command(command)
|
|
54
60
|
case command
|
|
@@ -58,17 +64,17 @@ module BCDice
|
|
|
58
64
|
combine_roll(command)
|
|
59
65
|
when /^FAR/i
|
|
60
66
|
getFullAutoResult(command)
|
|
61
|
-
when
|
|
67
|
+
when "BMR" # 狂気の発作(リアルタイム)
|
|
62
68
|
roll_bmr_table()
|
|
63
|
-
when
|
|
69
|
+
when "BMS" # 狂気の発作(サマリー)
|
|
64
70
|
roll_bms_table()
|
|
65
|
-
when
|
|
71
|
+
when "FCL" # キャスティング・ロールのプッシュに失敗した場合(小)
|
|
66
72
|
roll_1d8_table("キャスティング・ロール失敗(小)表", FAILED_CASTING_L_TABLE)
|
|
67
|
-
when
|
|
73
|
+
when "FCM" # キャスティング・ロールのプッシュに失敗した場合(大)
|
|
68
74
|
roll_1d8_table("キャスティング・ロール失敗(大)表", FAILED_CASTING_M_TABLE)
|
|
69
|
-
when
|
|
75
|
+
when "PH" # 恐怖症表
|
|
70
76
|
roll_1d100_table("恐怖症表", PHOBIAS_TABLE)
|
|
71
|
-
when
|
|
77
|
+
when "MA" # マニア表
|
|
72
78
|
roll_1d100_table("マニア表", MANIAS_TABLE)
|
|
73
79
|
end
|
|
74
80
|
end
|
|
@@ -77,6 +83,7 @@ module BCDice
|
|
|
77
83
|
LEVEL = [
|
|
78
84
|
:fumble,
|
|
79
85
|
:failure,
|
|
86
|
+
:success,
|
|
80
87
|
:regular_success,
|
|
81
88
|
:hard_success,
|
|
82
89
|
:extreme_success,
|
|
@@ -88,23 +95,38 @@ module BCDice
|
|
|
88
95
|
extreme_success: "イクストリーム成功",
|
|
89
96
|
hard_success: "ハード成功",
|
|
90
97
|
regular_success: "レギュラー成功",
|
|
98
|
+
success: "成功",
|
|
91
99
|
fumble: "ファンブル",
|
|
92
100
|
failure: "失敗",
|
|
93
101
|
}.freeze
|
|
94
102
|
|
|
103
|
+
def self.with_difficulty_level(total, difficulty)
|
|
104
|
+
fumble = difficulty < 50 ? 96 : 100
|
|
105
|
+
|
|
106
|
+
if total == 1
|
|
107
|
+
ResultLevel.new(:critical)
|
|
108
|
+
elsif total >= fumble
|
|
109
|
+
ResultLevel.new(:fumble)
|
|
110
|
+
elsif total <= difficulty
|
|
111
|
+
ResultLevel.new(:success)
|
|
112
|
+
else
|
|
113
|
+
ResultLevel.new(:failure)
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
95
117
|
def self.from_values(total, difficulty, fumbleable = false)
|
|
96
118
|
fumble = difficulty < 50 || fumbleable ? 96 : 100
|
|
97
119
|
|
|
98
120
|
if total == 1
|
|
99
121
|
ResultLevel.new(:critical)
|
|
122
|
+
elsif total >= fumble
|
|
123
|
+
ResultLevel.new(:fumble)
|
|
100
124
|
elsif total <= (difficulty / 5)
|
|
101
125
|
ResultLevel.new(:extreme_success)
|
|
102
126
|
elsif total <= (difficulty / 2)
|
|
103
127
|
ResultLevel.new(:hard_success)
|
|
104
128
|
elsif total <= difficulty
|
|
105
129
|
ResultLevel.new(:regular_success)
|
|
106
|
-
elsif total >= fumble
|
|
107
|
-
ResultLevel.new(:fumble)
|
|
108
130
|
else
|
|
109
131
|
ResultLevel.new(:failure)
|
|
110
132
|
end
|
|
@@ -117,7 +139,7 @@ module BCDice
|
|
|
117
139
|
end
|
|
118
140
|
|
|
119
141
|
def success?
|
|
120
|
-
@level_index >= LEVEL.index(:
|
|
142
|
+
@level_index >= LEVEL.index(:success)
|
|
121
143
|
end
|
|
122
144
|
|
|
123
145
|
def failure?
|
|
@@ -160,15 +182,26 @@ module BCDice
|
|
|
160
182
|
end
|
|
161
183
|
|
|
162
184
|
def skill_roll(command)
|
|
163
|
-
m = /^CC([-+]?\d+)?(?:<=(\d+))?$/.match(command)
|
|
185
|
+
m = /^CC([-+]?\d+)?(?:<=(\d+)([RHEC])?)?$/.match(command)
|
|
164
186
|
unless m
|
|
165
187
|
return nil
|
|
166
188
|
end
|
|
167
189
|
|
|
168
190
|
bonus_dice = m[1].to_i
|
|
169
|
-
difficulty = m[2]
|
|
191
|
+
difficulty = m[2]&.to_i
|
|
192
|
+
difficulty_level = m[3]
|
|
193
|
+
|
|
194
|
+
if difficulty == 0
|
|
195
|
+
difficulty = nil
|
|
196
|
+
elsif difficulty_level == "H"
|
|
197
|
+
difficulty /= 2
|
|
198
|
+
elsif difficulty_level == "E"
|
|
199
|
+
difficulty /= 5
|
|
200
|
+
elsif difficulty_level == "C"
|
|
201
|
+
difficulty = 0
|
|
202
|
+
end
|
|
170
203
|
|
|
171
|
-
if bonus_dice == 0 && difficulty
|
|
204
|
+
if bonus_dice == 0 && difficulty.nil?
|
|
172
205
|
dice = @randomizer.roll_once(100)
|
|
173
206
|
return "1D100 > #{dice}"
|
|
174
207
|
end
|
|
@@ -179,8 +212,13 @@ module BCDice
|
|
|
179
212
|
|
|
180
213
|
total, total_list = roll_with_bonus(bonus_dice)
|
|
181
214
|
|
|
182
|
-
expr = difficulty.
|
|
183
|
-
result =
|
|
215
|
+
expr = difficulty.nil? ? "1D100" : "1D100<=#{difficulty}"
|
|
216
|
+
result =
|
|
217
|
+
if difficulty_level
|
|
218
|
+
ResultLevel.with_difficulty_level(total, difficulty)
|
|
219
|
+
elsif difficulty
|
|
220
|
+
ResultLevel.from_values(total, difficulty)
|
|
221
|
+
end
|
|
184
222
|
|
|
185
223
|
sequence = [
|
|
186
224
|
"(#{expr}) ボーナス・ペナルティダイス[#{bonus_dice}]",
|
|
@@ -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
|
|
|
@@ -30,6 +30,11 @@ module BCDice
|
|
|
30
30
|
・D66ダイスあり
|
|
31
31
|
INFO_MESSAGE_TEXT
|
|
32
32
|
|
|
33
|
+
def initialize(command)
|
|
34
|
+
super(command)
|
|
35
|
+
@sides_implicit_d = 10
|
|
36
|
+
end
|
|
37
|
+
|
|
33
38
|
register_prefix('\d+DX', 'ET')
|
|
34
39
|
|
|
35
40
|
# 成功判定コマンドのノード
|
|
@@ -117,6 +122,8 @@ module BCDice
|
|
|
117
122
|
achieved_value.to_s
|
|
118
123
|
end
|
|
119
124
|
|
|
125
|
+
r.critical = value_groups.length > 1
|
|
126
|
+
|
|
120
127
|
parts = [
|
|
121
128
|
"(#{@expression})",
|
|
122
129
|
"#{value_groups.join('+')}#{@modifier_str}",
|
|
@@ -239,7 +246,7 @@ module BCDice
|
|
|
239
246
|
end
|
|
240
247
|
|
|
241
248
|
# 疾風怒濤式の成功判定コマンドの正規表現マッチ情報からノードを作る
|
|
242
|
-
# @param [
|
|
249
|
+
# @param command [String]
|
|
243
250
|
# @return [DX]
|
|
244
251
|
def parse_dx_shippu_doto(command)
|
|
245
252
|
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
|