bcdice 3.0.0 → 3.2.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 +79 -2
- data/README.md +32 -0
- data/i18n/MonotoneMuseum/ja_jp.yml +3 -3
- data/i18n/StellarKnights/ja_jp.yml +496 -0
- data/lib/bcdice/common_command/add_dice.rb +1 -1
- data/lib/bcdice/common_command/calc.rb +1 -1
- data/lib/bcdice/dice_table.rb +2 -0
- data/lib/bcdice/dice_table/d66_half_grid_table.rb +33 -0
- data/lib/bcdice/dice_table/d66_one_third_table.rb +34 -0
- data/lib/bcdice/dice_table/sai_fic_skill_table.rb +1 -1
- data/lib/bcdice/game_system.rb +4 -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/AlchemiaStruggle.rb +1 -1
- data/lib/bcdice/game_system/Alsetto.rb +1 -1
- data/lib/bcdice/game_system/Alshard.rb +1 -1
- data/lib/bcdice/game_system/AlterRaise.rb +2 -2
- data/lib/bcdice/game_system/AngelGear.rb +123 -0
- data/lib/bcdice/game_system/AnimaAnimus.rb +1 -1
- data/lib/bcdice/game_system/Arianrhod.rb +6 -8
- data/lib/bcdice/game_system/ArsMagica.rb +1 -1
- data/lib/bcdice/game_system/Avandner.rb +1 -1
- data/lib/bcdice/game_system/BBN.rb +1 -1
- data/lib/bcdice/game_system/BadLife.rb +1 -1
- data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
- data/lib/bcdice/game_system/BattleTech.rb +1 -1
- data/lib/bcdice/game_system/BeastBindTrinity.rb +2 -2
- 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 +1 -1
- data/lib/bcdice/game_system/BloodCrusade.rb +48 -49
- data/lib/bcdice/game_system/BloodMoon.rb +50 -8
- data/lib/bcdice/game_system/CardRanker.rb +10 -9
- 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 +1 -1
- data/lib/bcdice/game_system/CrashWorld.rb +1 -1
- data/lib/bcdice/game_system/Cthulhu.rb +8 -4
- data/lib/bcdice/game_system/Cthulhu7th.rb +86 -342
- data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +2 -2
- data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +2 -2
- data/lib/bcdice/game_system/CthulhuTech.rb +1 -1
- data/lib/bcdice/game_system/Cthulhu_ChineseTraditional.rb +1 -1
- data/lib/bcdice/game_system/Cthulhu_Korean.rb +1 -1
- data/lib/bcdice/game_system/DarkBlaze.rb +1 -12
- data/lib/bcdice/game_system/DarkDaysDrive.rb +8 -7
- data/lib/bcdice/game_system/DeadlineHeroes.rb +2 -2
- data/lib/bcdice/game_system/DemonParasite.rb +5 -13
- data/lib/bcdice/game_system/DesperateRun.rb +1 -1
- data/lib/bcdice/game_system/DiceOfTheDead.rb +1 -1
- data/lib/bcdice/game_system/DoubleCross.rb +2 -2
- data/lib/bcdice/game_system/Dracurouge.rb +1 -1
- data/lib/bcdice/game_system/EarthDawn.rb +1 -1
- data/lib/bcdice/game_system/EarthDawn3.rb +1 -1
- data/lib/bcdice/game_system/EarthDawn4.rb +1 -1
- 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 +3 -3
- data/lib/bcdice/game_system/EmbryoMachine.rb +9 -8
- data/lib/bcdice/game_system/Emoklore.rb +3 -3
- data/lib/bcdice/game_system/EtrianOdysseySRS.rb +1 -1
- data/lib/bcdice/game_system/Fiasco.rb +1 -1
- data/lib/bcdice/game_system/FilledWith.rb +205 -1272
- data/lib/bcdice/game_system/FullMetalPanic.rb +1 -1
- data/lib/bcdice/game_system/GURPS.rb +17 -28
- data/lib/bcdice/game_system/Garako.rb +12 -4
- data/lib/bcdice/game_system/GardenOrder.rb +1 -1
- data/lib/bcdice/game_system/GehennaAn.rb +1 -1
- 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 +3 -9
- data/lib/bcdice/game_system/GranCrest.rb +18 -11
- 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/Illusio.rb +25 -34
- data/lib/bcdice/game_system/InfiniteFantasia.rb +19 -17
- data/lib/bcdice/game_system/Insane.rb +13 -20
- 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 +1 -1
- data/lib/bcdice/game_system/KillDeathBusiness.rb +7 -15
- data/lib/bcdice/game_system/KurayamiCrying.rb +55 -2
- data/lib/bcdice/game_system/LogHorizon.rb +3 -3
- data/lib/bcdice/game_system/LostRoyal.rb +1 -1
- data/lib/bcdice/game_system/MeikyuDays.rb +11 -9
- data/lib/bcdice/game_system/MeikyuKingdom.rb +28 -28
- data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +5 -5
- data/lib/bcdice/game_system/MetalHead.rb +12 -22
- data/lib/bcdice/game_system/MetalHeadExtream.rb +5 -5
- data/lib/bcdice/game_system/MetallicGuardian.rb +1 -1
- data/lib/bcdice/game_system/MonotoneMuseum.rb +9 -7
- data/lib/bcdice/game_system/Nechronica.rb +28 -21
- data/lib/bcdice/game_system/NeverCloud.rb +540 -5
- data/lib/bcdice/game_system/NightWizard.rb +1 -1
- data/lib/bcdice/game_system/NightWizard3rd.rb +1 -1
- data/lib/bcdice/game_system/NinjaSlayer.rb +4 -13
- data/lib/bcdice/game_system/NjslyrBattle.rb +8 -11
- data/lib/bcdice/game_system/OneWayHeroics.rb +1 -1
- data/lib/bcdice/game_system/OracleEngine.rb +1 -1
- data/lib/bcdice/game_system/OrgaRain.rb +17 -25
- data/lib/bcdice/game_system/Paradiso.rb +3 -3
- data/lib/bcdice/game_system/ParanoiaRebooted.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/PhantasmAdventure.rb +8 -8
- data/lib/bcdice/game_system/Postman.rb +2 -2
- data/lib/bcdice/game_system/PulpCthulhu.rb +1 -1
- data/lib/bcdice/game_system/Raisondetre.rb +2 -2
- data/lib/bcdice/game_system/RecordOfLodossWar.rb +1 -1
- data/lib/bcdice/game_system/RecordOfSteam.rb +1 -1
- data/lib/bcdice/game_system/Revulture.rb +123 -0
- data/lib/bcdice/game_system/RokumonSekai2.rb +1 -1
- 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 +1 -1
- data/lib/bcdice/game_system/SamsaraBallad.rb +1 -1
- data/lib/bcdice/game_system/Satasupe.rb +79 -860
- data/lib/bcdice/game_system/ScreamHighSchool.rb +2 -2
- data/lib/bcdice/game_system/SevenFortressMobius.rb +1 -1
- data/lib/bcdice/game_system/SharedFantasia.rb +20 -24
- data/lib/bcdice/game_system/ShinkuuGakuen.rb +2 -2
- data/lib/bcdice/game_system/ShinobiGami.rb +17 -9
- data/lib/bcdice/game_system/Skynauts.rb +4 -4
- data/lib/bcdice/game_system/SkynautsBouken.rb +228 -0
- data/lib/bcdice/game_system/SteamPunkers.rb +1 -1
- data/lib/bcdice/game_system/StellarKnights.rb +59 -696
- data/lib/bcdice/game_system/SterileLife.rb +2 -3
- data/lib/bcdice/game_system/StrangerOfSwordCity.rb +2 -2
- 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 +58 -185
- data/lib/bcdice/game_system/SwordWorld2_0.rb +22 -150
- data/lib/bcdice/game_system/SwordWorld2_5.rb +127 -41
- data/lib/bcdice/game_system/TherapieSein.rb +1 -1
- data/lib/bcdice/game_system/TokyoGhostResearch.rb +1 -1
- data/lib/bcdice/game_system/Torg.rb +1 -1
- data/lib/bcdice/game_system/TorgEternity.rb +2 -2
- data/lib/bcdice/game_system/TrinitySeven.rb +4 -4
- data/lib/bcdice/game_system/TunnelsAndTrolls.rb +1 -1
- data/lib/bcdice/game_system/TwilightGunsmoke.rb +1 -1
- data/lib/bcdice/game_system/UnsungDuet.rb +1 -1
- data/lib/bcdice/game_system/Utakaze.rb +1 -1
- data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +1 -1
- 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 +16 -7
- data/lib/bcdice/game_system/Warhammer4.rb +16 -12
- data/lib/bcdice/game_system/WitchQuest.rb +1 -1
- data/lib/bcdice/game_system/WorldOfDarkness.rb +1 -1
- data/lib/bcdice/game_system/YankeeYogSothoth.rb +4 -9
- data/lib/bcdice/game_system/YearZeroEngine.rb +1 -1
- data/lib/bcdice/game_system/ZettaiReido.rb +1 -1
- data/lib/bcdice/game_system/cthulhu7th/full_auto.rb +294 -0
- data/lib/bcdice/game_system/cthulhu7th/rollable.rb +41 -0
- data/lib/bcdice/game_system/filled_with/enemy_data_tables.rb +322 -0
- data/lib/bcdice/game_system/filled_with/event_tables.rb +392 -0
- data/lib/bcdice/game_system/filled_with/tresure_tables.rb +179 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/kingdom_table.rb +1 -1
- data/lib/bcdice/game_system/satasupe/tables.rb +723 -0
- data/lib/bcdice/game_system/sword_world/rating_lexer.rb +47 -0
- data/lib/bcdice/game_system/sword_world/rating_parsed.rb +99 -0
- data/lib/bcdice/game_system/sword_world/rating_parser.rb +457 -0
- data/lib/bcdice/game_system/sword_world/transcendent_test.rb +122 -0
- data/lib/bcdice/repl.rb +1 -1
- data/lib/bcdice/result.rb +26 -0
- data/lib/bcdice/version.rb +1 -1
- metadata +20 -4
|
@@ -40,15 +40,6 @@ module BCDice
|
|
|
40
40
|
KIDS=K,EASY=E,NORMAL=N,HARD=H,ULTRA HARD=UH 数字にも対応
|
|
41
41
|
MESSAGETEXT
|
|
42
42
|
|
|
43
|
-
# ダイスボットで使用するコマンドを配列で列挙する
|
|
44
|
-
register_prefix(
|
|
45
|
-
'NJ\d+.*',
|
|
46
|
-
'EV\d+.*',
|
|
47
|
-
'AT\d+.*',
|
|
48
|
-
'EL\d+.*',
|
|
49
|
-
'SB'
|
|
50
|
-
)
|
|
51
|
-
|
|
52
43
|
def initialize(command)
|
|
53
44
|
super(command)
|
|
54
45
|
|
|
@@ -262,10 +253,10 @@ module BCDice
|
|
|
262
253
|
|
|
263
254
|
# ダイスボットで使用するコマンドを配列で列挙する
|
|
264
255
|
register_prefix(
|
|
265
|
-
'NJ
|
|
266
|
-
'EV
|
|
267
|
-
'AT
|
|
268
|
-
'EL
|
|
256
|
+
'NJ',
|
|
257
|
+
'EV',
|
|
258
|
+
'AT',
|
|
259
|
+
'EL',
|
|
269
260
|
TABLES.keys
|
|
270
261
|
)
|
|
271
262
|
end
|
|
@@ -21,21 +21,18 @@ module BCDice
|
|
|
21
21
|
INFO_MESSAGE_TEXT
|
|
22
22
|
|
|
23
23
|
# ゲーム別成功度判定(2D6)
|
|
24
|
-
def
|
|
25
|
-
return
|
|
26
|
-
return
|
|
24
|
+
def result_2d6(total, _dice_total, dice_list, cmp_op, target)
|
|
25
|
+
return Result.nothing if target == "?"
|
|
26
|
+
return nil if cmp_op != :<=
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
result = (total <= target ? Result.success("成功") : Result.failure("失敗"))
|
|
29
|
+
result.text += juuten(dice_list)
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
if total <= target
|
|
33
|
-
" > 成功"
|
|
34
|
-
else
|
|
35
|
-
" > 失敗"
|
|
36
|
-
end
|
|
31
|
+
return result
|
|
37
32
|
end
|
|
38
33
|
|
|
34
|
+
private
|
|
35
|
+
|
|
39
36
|
def juuten(dice_list)
|
|
40
37
|
juuten = dice_list.count(1) + dice_list.count(6)
|
|
41
38
|
|
|
@@ -31,46 +31,38 @@ module BCDice
|
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
register_prefix(
|
|
34
|
-
'(\d+)?OR(
|
|
34
|
+
'(\d+)?OR(\d{0,6})?'
|
|
35
35
|
)
|
|
36
36
|
|
|
37
37
|
def eval_game_system_specific_command(command)
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
countNo = [(Regexp.last_match(2) || -1).to_i, (Regexp.last_match(3) || -1).to_i, (Regexp.last_match(4) || -1).to_i, (Regexp.last_match(5) || -1).to_i, (Regexp.last_match(6) || -1).to_i, (Regexp.last_match(7) || -1).to_i]
|
|
41
|
-
countNo.delete(-1)
|
|
42
|
-
countNo = countNo.sort
|
|
38
|
+
m = command.match(/(\d+)?OR(\d{0,6})$/i)
|
|
39
|
+
return nil unless m
|
|
43
40
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
return nil
|
|
41
|
+
dice_count = (m[1] || 1).to_i
|
|
42
|
+
count_no = (m[2] || "").each_char.map(&:to_i).sort
|
|
43
|
+
return check_roll(dice_count, count_no)
|
|
48
44
|
end
|
|
49
45
|
|
|
50
|
-
def
|
|
51
|
-
|
|
52
|
-
|
|
46
|
+
def check_roll(dice_count, count_no)
|
|
47
|
+
dice_array = @randomizer.roll_barabara(dice_count, 10).sort
|
|
48
|
+
dice_text = dice_array.join(',')
|
|
53
49
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
resultArray = []
|
|
50
|
+
result_array = []
|
|
57
51
|
success = 0
|
|
58
|
-
|
|
59
|
-
multiple =
|
|
52
|
+
dice_array.map { |x| x == 10 ? 0 : x }.each do |i|
|
|
53
|
+
multiple = count_no.count(i)
|
|
60
54
|
if multiple > 0
|
|
61
|
-
|
|
55
|
+
result_array.push("#{i}(x#{multiple})")
|
|
62
56
|
success += multiple
|
|
63
57
|
else
|
|
64
|
-
|
|
58
|
+
result_array.push("×")
|
|
65
59
|
end
|
|
66
60
|
end
|
|
67
61
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
result = "#{diceCount}D10(命数:#{countText}) > #{diceText} > #{resultText} > 成功数:#{success}"
|
|
62
|
+
count_text = count_no.join(',')
|
|
63
|
+
result_text = result_array.join(',')
|
|
72
64
|
|
|
73
|
-
return
|
|
65
|
+
return "#{dice_count}D10(命数:#{count_text}) > #{dice_text} > #{result_text} > 成功数:#{success}"
|
|
74
66
|
end
|
|
75
67
|
end
|
|
76
68
|
end
|
|
@@ -25,7 +25,7 @@ module BCDice
|
|
|
25
25
|
例)DC4:【攻撃力】4でダメージチェック DC5[20]:【攻撃力】5でダメージチェック、うち1つは20mm機銃 DC5[20,30]:【攻撃力】5でダメージチェック、うち1つは20mm機銃、うち1つは30mmガンポッド
|
|
26
26
|
MESSAGETEXT
|
|
27
27
|
|
|
28
|
-
register_prefix('
|
|
28
|
+
register_prefix('\d*D20<=', '\d*CP', 'RMT', 'TOT', 'EXT', 'SUT', 'DC')
|
|
29
29
|
|
|
30
30
|
def eval_game_system_specific_command(command) # ダイスロールコマンド
|
|
31
31
|
# 通常判定部分をgetJudgeResultコマンドに切り分け
|
|
@@ -53,13 +53,13 @@ module BCDice
|
|
|
53
53
|
# 通常判定
|
|
54
54
|
def getJudgeResult(command)
|
|
55
55
|
case command
|
|
56
|
-
when /^(\d+)
|
|
56
|
+
when /^(\d+)?D20<=(\d+)?(\[(\d+)(,(\d+))?\])?(@(\d+))?$/i
|
|
57
57
|
number = (Regexp.last_match(1) || 1).to_i # ダイス数。省略時は1
|
|
58
58
|
target = (Regexp.last_match(2) || 14).to_i # 目標値。省略時は14 if 空白 then 14 else 記載の値
|
|
59
59
|
fumble1 = (Regexp.last_match(4) || 21).to_i # 追加ファンブル値。省略時は21
|
|
60
60
|
fumble2 = (Regexp.last_match(6) || 21).to_i # 追加ファンブル値。省略時は21
|
|
61
61
|
critical = (Regexp.last_match(8) || 21).to_i # 追加クリティカル値。省略時は21
|
|
62
|
-
when /^(\d+)
|
|
62
|
+
when /^(\d+)?CP(\d+)?(\[(\d+)(,(\d+))?\])?(@(\d+))?$/i
|
|
63
63
|
number = (Regexp.last_match(1) || 1).to_i
|
|
64
64
|
target = (Regexp.last_match(2) || 14).to_i
|
|
65
65
|
fumble1 = (Regexp.last_match(4) || 21).to_i
|
|
@@ -45,18 +45,13 @@ module BCDice
|
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
# ゲーム別成功度判定(2D6)
|
|
48
|
-
def
|
|
49
|
-
return
|
|
50
|
-
return '' unless cmp_op == :>=
|
|
48
|
+
def result_2d6(_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("ファンブル(【眠気】が1d6点上昇)")
|
|
54
53
|
elsif dice_total >= 12
|
|
55
|
-
|
|
56
|
-
elsif total >= target
|
|
57
|
-
return " > 成功"
|
|
58
|
-
else
|
|
59
|
-
return " > 失敗"
|
|
54
|
+
Result.critical("スペシャル(【魔力】あるいは【眠気】が1d6点回復)")
|
|
60
55
|
end
|
|
61
56
|
end
|
|
62
57
|
|
|
@@ -18,20 +18,20 @@ module BCDice
|
|
|
18
18
|
INFO_MESSAGE_TEXT
|
|
19
19
|
|
|
20
20
|
# ゲーム別成功度判定(1d20)
|
|
21
|
-
def
|
|
22
|
-
return
|
|
23
|
-
return
|
|
21
|
+
def result_1d20(total, _dice_total, cmp_op, target)
|
|
22
|
+
return Result.nothing if target == '?'
|
|
23
|
+
return nil unless cmp_op == :<=
|
|
24
24
|
|
|
25
25
|
if total <= target
|
|
26
26
|
if (total >= (40 - target)) || (total == target)
|
|
27
|
-
"
|
|
27
|
+
Result.critical("クリティカル")
|
|
28
28
|
else
|
|
29
|
-
"
|
|
29
|
+
Result.success("成功")
|
|
30
30
|
end
|
|
31
31
|
elsif total == 20
|
|
32
|
-
"
|
|
32
|
+
Result.fumble("ファンブル")
|
|
33
33
|
else
|
|
34
|
-
"
|
|
34
|
+
Result.failure("失敗")
|
|
35
35
|
end
|
|
36
36
|
end
|
|
37
37
|
end
|
|
@@ -18,9 +18,9 @@ module BCDice
|
|
|
18
18
|
INFO_MESSAGE_TEXT
|
|
19
19
|
|
|
20
20
|
# ゲーム別成功度判定(1d20)
|
|
21
|
-
def
|
|
22
|
-
return
|
|
23
|
-
return
|
|
21
|
+
def result_1d20(total, _dice_total, cmp_op, diff)
|
|
22
|
+
return Result.nothing if diff == '?'
|
|
23
|
+
return nil unless cmp_op == :<=
|
|
24
24
|
|
|
25
25
|
# 技能値の修正を計算する
|
|
26
26
|
skill_mod = 0
|
|
@@ -46,7 +46,7 @@ module BCDice
|
|
|
46
46
|
else
|
|
47
47
|
fum_str += "-#{skill_mod}=#{fum_num}"
|
|
48
48
|
end
|
|
49
|
-
return "
|
|
49
|
+
return Result.fumble("致命的失敗(#{fum_str})")
|
|
50
50
|
|
|
51
51
|
elsif (total <= critical) || (total <= 1)
|
|
52
52
|
crit_num = dice_now + skill_mod
|
|
@@ -54,14 +54,14 @@ module BCDice
|
|
|
54
54
|
crit_num = 1 if crit_num < 1
|
|
55
55
|
|
|
56
56
|
if skill_mod < 0
|
|
57
|
-
return "
|
|
57
|
+
return Result.success("成功")
|
|
58
58
|
end
|
|
59
59
|
|
|
60
|
-
return "
|
|
60
|
+
return Result.critical("決定的成功(#{dice_now}+#{skill_mod}=#{crit_num})")
|
|
61
61
|
elsif total <= diff
|
|
62
|
-
return "
|
|
62
|
+
return Result.success("成功")
|
|
63
63
|
else
|
|
64
|
-
return "
|
|
64
|
+
return Result.failure("失敗")
|
|
65
65
|
end
|
|
66
66
|
end
|
|
67
67
|
end
|
|
@@ -47,7 +47,7 @@ module BCDice
|
|
|
47
47
|
・プッシュ時のキャスティング・ロールの失敗(Failed Casting Effects)表 FCE
|
|
48
48
|
INFO_MESSAGE_TEXT
|
|
49
49
|
|
|
50
|
-
register_prefix('CC
|
|
50
|
+
register_prefix('CC', 'CBR', 'FAR', 'BMR', 'BMS', 'FCE', 'PH', 'MA', 'IT')
|
|
51
51
|
|
|
52
52
|
def eval_game_system_specific_command(command)
|
|
53
53
|
case command
|
|
@@ -19,7 +19,7 @@ module BCDice
|
|
|
19
19
|
判定と回避判定は、どちらもコマンドだけの場合、出目の表示と自動成功と自動失敗の判定のみを行います。
|
|
20
20
|
INFO_MESSAGE_TEXT
|
|
21
21
|
|
|
22
|
-
register_prefix('LW
|
|
22
|
+
register_prefix('LW')
|
|
23
23
|
|
|
24
24
|
def eval_game_system_specific_command(command)
|
|
25
25
|
parser = Command::Parser.new("LWD", "LW", round_type: round_type)
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module BCDice
|
|
4
|
+
module GameSystem
|
|
5
|
+
class Revulture < Base
|
|
6
|
+
# ゲームシステムの識別子
|
|
7
|
+
ID = 'Revulture'
|
|
8
|
+
|
|
9
|
+
# ゲームシステム名
|
|
10
|
+
NAME = '光砕のリヴァルチャー'
|
|
11
|
+
|
|
12
|
+
# ゲームシステム名の読みがな
|
|
13
|
+
SORT_KEY = 'こうさいのりうあるちやあ'
|
|
14
|
+
|
|
15
|
+
# ダイスボットの使い方
|
|
16
|
+
HELP_MESSAGE = <<~HELP
|
|
17
|
+
■アタック判定( xAT, xATK, xATTACK )
|
|
18
|
+
x: ダイス数(加算 + と除算 / を使用可能)
|
|
19
|
+
例) 3AT, 4ATK, 5+6ATTACK, 15/2AT
|
|
20
|
+
|
|
21
|
+
□アタック判定 目標値つき( xAT<=y, xATK<=y, xATTACK<=y )
|
|
22
|
+
x: ダイス数(加算 + と除算 / を使用可能)
|
|
23
|
+
y: 目標値( 1 以上 6 以下。加算 + を使用可能)
|
|
24
|
+
例) 3AT<=4, 3AT<=2+1
|
|
25
|
+
|
|
26
|
+
□アタック判定 目標値&追加ダメージつき( xAT<=y[>=a:+b], xATK<=y[>=a:+b], xATTACK<=y[z] )
|
|
27
|
+
x: ダイス数(加算 + と除算 / を使用可能)
|
|
28
|
+
y: 目標値( 1 以上 6 以下。加算 + を使用可能)
|
|
29
|
+
z: 追加ダメージの規則(詳細は後述)(※複数同時に指定可能)
|
|
30
|
+
|
|
31
|
+
▽追加ダメージの規則 [a:+b]
|
|
32
|
+
a: ヒット数が a なら
|
|
33
|
+
=a (ヒット数が a に等しい)
|
|
34
|
+
>=a (ヒット数が a 以上)
|
|
35
|
+
b: ダメージを b 点追加
|
|
36
|
+
|
|
37
|
+
例) 3AT<=4[>=2:+3] #ルールブックp056「グレングラントAR」
|
|
38
|
+
例) 2AT<=4[=1:+5][>=2:+8] #ルールブックp067「ファーボル・ドラゴンブレス」
|
|
39
|
+
HELP
|
|
40
|
+
|
|
41
|
+
ATTACK_ROLL_REG = %r{^(\d+([+/]\d+)*)?AT(TACK|K)?(<=([1-6](\+\d)*))?((\[>?=\d+:\+\d+\])+)?}i.freeze
|
|
42
|
+
register_prefix('\d+([+\/]\d+)*AT')
|
|
43
|
+
|
|
44
|
+
def eval_game_system_specific_command(command)
|
|
45
|
+
if (m = ATTACK_ROLL_REG.match(command))
|
|
46
|
+
roll_attack(m[1], m[5], m[7])
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
private
|
|
51
|
+
|
|
52
|
+
def roll_attack(dice_count_expression, border_expression, additional_damage_rules)
|
|
53
|
+
dice_count = Arithmetic.eval(dice_count_expression, round_type: RoundType::FLOOR)
|
|
54
|
+
border = Arithmetic.eval(border_expression, round_type: RoundType::FLOOR).clamp(1, 6) if border_expression
|
|
55
|
+
|
|
56
|
+
command = make_command_text(dice_count, border, additional_damage_rules)
|
|
57
|
+
|
|
58
|
+
if dice_count <= 0
|
|
59
|
+
return "#{command} > ダイス数が 0 です"
|
|
60
|
+
elsif border.nil? && additional_damage_rules
|
|
61
|
+
return "#{command} > 目標値が指定されていないため、追加ダメージを算出できません"
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
dices = @randomizer.roll_barabara(dice_count, 6).sort
|
|
65
|
+
|
|
66
|
+
critical_hit_count = dices.count(1)
|
|
67
|
+
hit_count = dices.count { |dice| dice <= border } + critical_hit_count if border
|
|
68
|
+
damage = calc_damage(hit_count, additional_damage_rules)
|
|
69
|
+
|
|
70
|
+
message_elements = []
|
|
71
|
+
message_elements << command
|
|
72
|
+
message_elements << dices.join(',')
|
|
73
|
+
message_elements << "クリティカル #{critical_hit_count}" if critical_hit_count > 0
|
|
74
|
+
message_elements << "ヒット数 #{hit_count}" if hit_count
|
|
75
|
+
message_elements << "ダメージ #{damage}" if damage
|
|
76
|
+
|
|
77
|
+
Result.new(message_elements.join(' > ')).tap do |r|
|
|
78
|
+
r.condition = hit_count > 0 if hit_count
|
|
79
|
+
r.critical = critical_hit_count > 0
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def make_command_text(dice_count, border, additional_damage_rules)
|
|
84
|
+
command = "#{dice_count}attack"
|
|
85
|
+
command += "<=#{border}" if border
|
|
86
|
+
command += additional_damage_rules if additional_damage_rules
|
|
87
|
+
|
|
88
|
+
"(#{command})"
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def calc_damage(hit_count, additional_damage_rules)
|
|
92
|
+
return nil unless additional_damage_rules
|
|
93
|
+
|
|
94
|
+
damage = hit_count
|
|
95
|
+
parse_additional_damage_rules(additional_damage_rules).each do |rule|
|
|
96
|
+
if rule[:condition].call(hit_count)
|
|
97
|
+
damage += rule[:additinal_damage]
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
damage
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def parse_additional_damage_rules(source)
|
|
105
|
+
source.scan(/\[(>?=)(\d+):\+(\d+)\]/).map do |matched|
|
|
106
|
+
{
|
|
107
|
+
condition: make_additional_damage_condition(matched[0], matched[1].to_i),
|
|
108
|
+
additinal_damage: matched[2].to_i,
|
|
109
|
+
}
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def make_additional_damage_condition(comparer, comparing_target)
|
|
114
|
+
case comparer
|
|
115
|
+
when '='
|
|
116
|
+
lambda { |hit_count| hit_count == comparing_target }
|
|
117
|
+
when '>='
|
|
118
|
+
lambda { |hit_count| hit_count >= comparing_target }
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|