bcdice 3.0.0.pre.alpha.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.editorconfig +21 -0
- data/.github/.codecov.yaml +10 -0
- data/.github/workflows/coverage.yaml +21 -0
- data/.github/workflows/lint.yaml +13 -0
- data/.github/workflows/test.yml +20 -0
- data/.gitignore +14 -0
- data/.rubocop.yml +96 -0
- data/.rubocop_todo.yml +113 -0
- data/CHANGELOG.md +868 -0
- data/Gemfile +11 -0
- data/LICENSE +29 -0
- data/README.md +38 -0
- data/ROADMAP.md +30 -0
- data/Rakefile +118 -0
- data/bcdice.gemspec +27 -0
- data/bin/repl.rb +21 -0
- data/docs/README.txt +2028 -0
- data/docs/dicebot_sort_key.md +72 -0
- data/docs/how_to_make_dicebot.md +453 -0
- data/lib/bcdice.rb +8 -0
- data/lib/bcdice/arithmetic_evaluator.rb +167 -0
- data/lib/bcdice/base.rb +423 -0
- data/lib/bcdice/command_parser.rb +242 -0
- data/lib/bcdice/common_command.rb +23 -0
- data/lib/bcdice/common_command/add_dice.rb +54 -0
- data/lib/bcdice/common_command/add_dice/node.rb +488 -0
- data/lib/bcdice/common_command/add_dice/parser.rb +282 -0
- data/lib/bcdice/common_command/add_dice/randomizer.rb +48 -0
- data/lib/bcdice/common_command/barabara_dice.rb +57 -0
- data/lib/bcdice/common_command/calc.rb +39 -0
- data/lib/bcdice/common_command/choice.rb +35 -0
- data/lib/bcdice/common_command/d66_dice.rb +63 -0
- data/lib/bcdice/common_command/reroll_dice.rb +190 -0
- data/lib/bcdice/common_command/upper_dice.rb +165 -0
- data/lib/bcdice/common_command/version.rb +26 -0
- data/lib/bcdice/dice_table.rb +8 -0
- data/lib/bcdice/dice_table/chain_table.rb +33 -0
- data/lib/bcdice/dice_table/d66_grid_table.rb +26 -0
- data/lib/bcdice/dice_table/d66_range_table.rb +26 -0
- data/lib/bcdice/dice_table/d66_table.rb +34 -0
- data/lib/bcdice/dice_table/range_table.rb +267 -0
- data/lib/bcdice/dice_table/roll_result.rb +43 -0
- data/lib/bcdice/dice_table/sai_fic_skill_table.rb +32 -0
- data/lib/bcdice/dice_table/table.rb +35 -0
- data/lib/bcdice/enum.rb +15 -0
- data/lib/bcdice/format.rb +36 -0
- data/lib/bcdice/game_system.rb +187 -0
- data/lib/bcdice/game_system/AFF2e.rb +141 -0
- data/lib/bcdice/game_system/AceKillerGene.rb +55 -0
- data/lib/bcdice/game_system/Airgetlamh.rb +117 -0
- data/lib/bcdice/game_system/Alsetto.rb +124 -0
- data/lib/bcdice/game_system/Alshard.rb +27 -0
- data/lib/bcdice/game_system/AlterRaise.rb +282 -0
- data/lib/bcdice/game_system/Amadeus.rb +622 -0
- data/lib/bcdice/game_system/Amadeus_Korean.rb +501 -0
- data/lib/bcdice/game_system/AnimaAnimus.rb +96 -0
- data/lib/bcdice/game_system/Arianrhod.rb +50 -0
- data/lib/bcdice/game_system/ArsMagica.rb +149 -0
- data/lib/bcdice/game_system/Avandner.rb +101 -0
- data/lib/bcdice/game_system/BBN.rb +143 -0
- data/lib/bcdice/game_system/BadLife.rb +435 -0
- data/lib/bcdice/game_system/BarnaKronika.rb +188 -0
- data/lib/bcdice/game_system/BattleTech.rb +530 -0
- data/lib/bcdice/game_system/BeastBindTrinity.rb +348 -0
- data/lib/bcdice/game_system/BeginningIdol.rb +2527 -0
- data/lib/bcdice/game_system/BeginningIdol_Korean.rb +2378 -0
- data/lib/bcdice/game_system/BladeOfArcana.rb +252 -0
- data/lib/bcdice/game_system/BlindMythos.rb +460 -0
- data/lib/bcdice/game_system/BloodCrusade.rb +423 -0
- data/lib/bcdice/game_system/BloodMoon.rb +213 -0
- data/lib/bcdice/game_system/CardRanker.rb +249 -0
- data/lib/bcdice/game_system/ChaosFlare.rb +181 -0
- data/lib/bcdice/game_system/Chill.rb +163 -0
- data/lib/bcdice/game_system/Chill3.rb +52 -0
- data/lib/bcdice/game_system/CodeLayerd.rb +132 -0
- data/lib/bcdice/game_system/ColossalHunter.rb +569 -0
- data/lib/bcdice/game_system/CrashWorld.rb +81 -0
- data/lib/bcdice/game_system/Cthulhu.rb +252 -0
- data/lib/bcdice/game_system/Cthulhu7th.rb +767 -0
- data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +386 -0
- data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +383 -0
- data/lib/bcdice/game_system/CthulhuTech.rb +263 -0
- data/lib/bcdice/game_system/Cthulhu_ChineseTraditional.rb +243 -0
- data/lib/bcdice/game_system/Cthulhu_Korean.rb +240 -0
- data/lib/bcdice/game_system/DarkBlaze.rb +207 -0
- data/lib/bcdice/game_system/DarkDaysDrive.rb +425 -0
- data/lib/bcdice/game_system/DarkSouls.rb +91 -0
- data/lib/bcdice/game_system/DeadlineHeroes.rb +583 -0
- data/lib/bcdice/game_system/DemonParasite.rb +524 -0
- data/lib/bcdice/game_system/DetatokoSaga.rb +310 -0
- data/lib/bcdice/game_system/DetatokoSaga_Korean.rb +310 -0
- data/lib/bcdice/game_system/DiceBot.rb +17 -0
- data/lib/bcdice/game_system/DiceOfTheDead.rb +111 -0
- data/lib/bcdice/game_system/DoubleCross.rb +373 -0
- data/lib/bcdice/game_system/DoubleCross_Korean.rb +371 -0
- data/lib/bcdice/game_system/Dracurouge.rb +1856 -0
- data/lib/bcdice/game_system/Dracurouge_Korean.rb +310 -0
- data/lib/bcdice/game_system/DungeonsAndDragons.rb +19 -0
- data/lib/bcdice/game_system/EarthDawn.rb +225 -0
- data/lib/bcdice/game_system/EarthDawn3.rb +275 -0
- data/lib/bcdice/game_system/EarthDawn4.rb +272 -0
- data/lib/bcdice/game_system/EclipsePhase.rb +51 -0
- data/lib/bcdice/game_system/Elric.rb +36 -0
- data/lib/bcdice/game_system/Elysion.rb +1213 -0
- data/lib/bcdice/game_system/EmbryoMachine.rb +227 -0
- data/lib/bcdice/game_system/EndBreaker.rb +132 -0
- data/lib/bcdice/game_system/EtrianOdysseySRS.rb +27 -0
- data/lib/bcdice/game_system/Fiasco.rb +123 -0
- data/lib/bcdice/game_system/Fiasco_Korean.rb +122 -0
- data/lib/bcdice/game_system/FilledWith.rb +1543 -0
- data/lib/bcdice/game_system/FullMetalPanic.rb +27 -0
- data/lib/bcdice/game_system/FutariSousa.rb +994 -0
- data/lib/bcdice/game_system/FutariSousa_Korean.rb +994 -0
- data/lib/bcdice/game_system/Garako.rb +559 -0
- data/lib/bcdice/game_system/GardenOrder.rb +451 -0
- data/lib/bcdice/game_system/GehennaAn.rb +136 -0
- data/lib/bcdice/game_system/GeishaGirlwithKatana.rb +120 -0
- data/lib/bcdice/game_system/GoblinSlayer.rb +168 -0
- data/lib/bcdice/game_system/GoldenSkyStories.rb +77 -0
- data/lib/bcdice/game_system/Gorilla.rb +44 -0
- data/lib/bcdice/game_system/GranCrest.rb +518 -0
- data/lib/bcdice/game_system/Gundog.rb +52 -0
- data/lib/bcdice/game_system/GundogRevised.rb +294 -0
- data/lib/bcdice/game_system/GundogZero.rb +261 -0
- data/lib/bcdice/game_system/Gurps.rb +403 -0
- data/lib/bcdice/game_system/GurpsFW.rb +2330 -0
- data/lib/bcdice/game_system/HarnMaster.rb +208 -0
- data/lib/bcdice/game_system/HatsuneMiku.rb +706 -0
- data/lib/bcdice/game_system/Hieizan.rb +48 -0
- data/lib/bcdice/game_system/HouraiGakuen.rb +270 -0
- data/lib/bcdice/game_system/HuntersMoon.rb +503 -0
- data/lib/bcdice/game_system/Illusio.rb +89 -0
- data/lib/bcdice/game_system/InfiniteFantasia.rb +51 -0
- data/lib/bcdice/game_system/Insane.rb +822 -0
- data/lib/bcdice/game_system/Insane_Korean.rb +773 -0
- data/lib/bcdice/game_system/IthaWenUa.rb +38 -0
- data/lib/bcdice/game_system/JamesBond.rb +45 -0
- data/lib/bcdice/game_system/Kamigakari.rb +394 -0
- data/lib/bcdice/game_system/Kamigakari_Korean.rb +428 -0
- data/lib/bcdice/game_system/KanColle.rb +938 -0
- data/lib/bcdice/game_system/KemonoNoMori.rb +258 -0
- data/lib/bcdice/game_system/KillDeathBusiness.rb +1420 -0
- data/lib/bcdice/game_system/KillDeathBusiness_Korean.rb +1510 -0
- data/lib/bcdice/game_system/KurayamiCrying.rb +49 -0
- data/lib/bcdice/game_system/LiveraDoll.rb +375 -0
- data/lib/bcdice/game_system/LogHorizon.rb +3567 -0
- data/lib/bcdice/game_system/LogHorizon_Korean.rb +1407 -0
- data/lib/bcdice/game_system/LostRecord.rb +30 -0
- data/lib/bcdice/game_system/LostRoyal.rb +242 -0
- data/lib/bcdice/game_system/MagicaLogia.rb +1148 -0
- data/lib/bcdice/game_system/MeikyuDays.rb +415 -0
- data/lib/bcdice/game_system/MeikyuKingdom.rb +466 -0
- data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +269 -0
- data/lib/bcdice/game_system/MetalHead.rb +249 -0
- data/lib/bcdice/game_system/MetalHeadExtream.rb +917 -0
- data/lib/bcdice/game_system/MetallicGuardian.rb +31 -0
- data/lib/bcdice/game_system/MonotoneMuseum.rb +354 -0
- data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +304 -0
- data/lib/bcdice/game_system/Nechronica.rb +211 -0
- data/lib/bcdice/game_system/Nechronica_Korean.rb +160 -0
- data/lib/bcdice/game_system/NeverCloud.rb +74 -0
- data/lib/bcdice/game_system/NightWizard.rb +231 -0
- data/lib/bcdice/game_system/NightWizard3rd.rb +24 -0
- data/lib/bcdice/game_system/NightmareHunterDeep.rb +117 -0
- data/lib/bcdice/game_system/NinjaSlayer.rb +274 -0
- data/lib/bcdice/game_system/NjslyrBattle.rb +54 -0
- data/lib/bcdice/game_system/Nuekagami.rb +293 -0
- data/lib/bcdice/game_system/OneWayHeroics.rb +134 -0
- data/lib/bcdice/game_system/OracleEngine.rb +265 -0
- data/lib/bcdice/game_system/OrgaRain.rb +77 -0
- data/lib/bcdice/game_system/Oukahoushin3rd.rb +162 -0
- data/lib/bcdice/game_system/Paradiso.rb +323 -0
- data/lib/bcdice/game_system/Paranoia.rb +64 -0
- data/lib/bcdice/game_system/ParanoiaRebooted.rb +109 -0
- data/lib/bcdice/game_system/ParasiteBlood.rb +231 -0
- data/lib/bcdice/game_system/Pathfinder.rb +21 -0
- data/lib/bcdice/game_system/Peekaboo.rb +324 -0
- data/lib/bcdice/game_system/Pendragon.rb +39 -0
- data/lib/bcdice/game_system/PhantasmAdventure.rb +73 -0
- data/lib/bcdice/game_system/Postman.rb +185 -0
- data/lib/bcdice/game_system/PulpCthulhu.rb +184 -0
- data/lib/bcdice/game_system/Raisondetre.rb +171 -0
- data/lib/bcdice/game_system/RecordOfLodossWar.rb +58 -0
- data/lib/bcdice/game_system/RecordOfSteam.rb +149 -0
- data/lib/bcdice/game_system/RokumonSekai2.rb +110 -0
- data/lib/bcdice/game_system/RoleMaster.rb +24 -0
- data/lib/bcdice/game_system/RuneQuest.rb +47 -0
- data/lib/bcdice/game_system/RyuTuber.rb +266 -0
- data/lib/bcdice/game_system/Ryutama.rb +199 -0
- data/lib/bcdice/game_system/SRS.rb +348 -0
- data/lib/bcdice/game_system/SamsaraBallad.rb +111 -0
- data/lib/bcdice/game_system/Satasupe.rb +1173 -0
- data/lib/bcdice/game_system/ScreamHighSchool.rb +128 -0
- data/lib/bcdice/game_system/SevenFortressMobius.rb +34 -0
- data/lib/bcdice/game_system/ShadowRun.rb +26 -0
- data/lib/bcdice/game_system/ShadowRun4.rb +49 -0
- data/lib/bcdice/game_system/ShadowRun5.rb +80 -0
- data/lib/bcdice/game_system/SharedFantasia.rb +69 -0
- data/lib/bcdice/game_system/ShinMegamiTenseiKakuseihen.rb +85 -0
- data/lib/bcdice/game_system/ShinkuuGakuen.rb +506 -0
- data/lib/bcdice/game_system/ShinobiGami.rb +680 -0
- data/lib/bcdice/game_system/ShoujoTenrankai.rb +677 -0
- data/lib/bcdice/game_system/Skynauts.rb +324 -0
- data/lib/bcdice/game_system/SteamPunkers.rb +485 -0
- data/lib/bcdice/game_system/StellarKnights.rb +856 -0
- data/lib/bcdice/game_system/SterileLife.rb +452 -0
- data/lib/bcdice/game_system/StrangerOfSwordCity.rb +103 -0
- data/lib/bcdice/game_system/StratoShout.rb +316 -0
- data/lib/bcdice/game_system/StratoShout_Korean.rb +314 -0
- data/lib/bcdice/game_system/Strave.rb +223 -0
- data/lib/bcdice/game_system/SwordWorld.rb +491 -0
- data/lib/bcdice/game_system/SwordWorld2_0.rb +295 -0
- data/lib/bcdice/game_system/SwordWorld2_5.rb +121 -0
- data/lib/bcdice/game_system/TherapieSein.rb +93 -0
- data/lib/bcdice/game_system/TokumeiTenkousei.rb +96 -0
- data/lib/bcdice/game_system/TokyoGhostResearch.rb +122 -0
- data/lib/bcdice/game_system/TokyoNova.rb +19 -0
- data/lib/bcdice/game_system/Torg.rb +364 -0
- data/lib/bcdice/game_system/Torg1_5.rb +139 -0
- data/lib/bcdice/game_system/TorgEternity.rb +414 -0
- data/lib/bcdice/game_system/TrinitySeven.rb +364 -0
- data/lib/bcdice/game_system/TunnelsAndTrolls.rb +287 -0
- data/lib/bcdice/game_system/TwilightGunsmoke.rb +527 -0
- data/lib/bcdice/game_system/Utakaze.rb +153 -0
- data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +132 -0
- data/lib/bcdice/game_system/Villaciel.rb +555 -0
- data/lib/bcdice/game_system/WARPS.rb +33 -0
- data/lib/bcdice/game_system/WaresBlade.rb +34 -0
- data/lib/bcdice/game_system/Warhammer.rb +336 -0
- data/lib/bcdice/game_system/WitchQuest.rb +275 -0
- data/lib/bcdice/game_system/WorldOfDarkness.rb +135 -0
- data/lib/bcdice/game_system/YankeeYogSothoth.rb +440 -0
- data/lib/bcdice/game_system/YearZeroEngine.rb +134 -0
- data/lib/bcdice/game_system/ZettaiReido.rb +142 -0
- data/lib/bcdice/game_system/meikyu_kingdom/item_table.rb +383 -0
- data/lib/bcdice/game_system/meikyu_kingdom/kingdom_name_table.rb +89 -0
- data/lib/bcdice/game_system/meikyu_kingdom/landscape_table.rb +196 -0
- data/lib/bcdice/game_system/meikyu_kingdom/name_tables.rb +223 -0
- data/lib/bcdice/game_system/meikyu_kingdom/placename_table.rb +214 -0
- data/lib/bcdice/game_system/meikyu_kingdom/tables.rb +610 -0
- data/lib/bcdice/game_system/meikyu_kingdom/word_table.rb +117 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/item_table.rb +380 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/kingdom_table.rb +184 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/name_table.rb +417 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/table.rb +912 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/word_table.rb +121 -0
- data/lib/bcdice/game_system/one_way_heroics/dungeon_table.rb +67 -0
- data/lib/bcdice/game_system/one_way_heroics/random_event_table.rb +166 -0
- data/lib/bcdice/game_system/one_way_heroics/tables.rb +668 -0
- data/lib/bcdice/loader.rb +37 -0
- data/lib/bcdice/normalize.rb +38 -0
- data/lib/bcdice/preprocessor.rb +87 -0
- data/lib/bcdice/randomizer.rb +137 -0
- data/lib/bcdice/repl.rb +155 -0
- data/lib/bcdice/user_defined_dice_table.rb +153 -0
- data/lib/bcdice/version.rb +3 -0
- metadata +304 -0
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class RoleMaster < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = 'RoleMaster'
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = 'ロールマスター'
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = 'ろおるますたあ'
|
14
|
+
|
15
|
+
# ダイスボットの使い方
|
16
|
+
HELP_MESSAGE = "上方無限ロール(xUn)の境界値を96にセットします。\n"
|
17
|
+
|
18
|
+
def initialize(command)
|
19
|
+
super(command)
|
20
|
+
@upper_dice_reroll_threshold = 96
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class RuneQuest < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = 'RuneQuest'
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = 'ルーンクエスト'
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = 'るうんくえすと'
|
14
|
+
|
15
|
+
# ダイスボットの使い方
|
16
|
+
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
|
17
|
+
クリティカル、エフェクティブ(効果的成功)、ファンブルの自動判定を行います。
|
18
|
+
INFO_MESSAGE_TEXT
|
19
|
+
|
20
|
+
# ゲーム別成功度判定(1d100)
|
21
|
+
def check_1D100(total, _dice_total, cmp_op, target)
|
22
|
+
return '' if target == '?'
|
23
|
+
return nil unless cmp_op == :<=
|
24
|
+
|
25
|
+
# RuneQuest QUICK-START RULESを元に修正
|
26
|
+
# https://www.chaosium.com/content/FreePDFs/RuneQuest/CHA4027%20-%20RuneQuest%20Quickstart.pdf
|
27
|
+
critical_value = (target.to_f / 20).round
|
28
|
+
|
29
|
+
if (total <= 1) || (total <= critical_value)
|
30
|
+
# 1は常に決定的成功
|
31
|
+
" > 決定的成功"
|
32
|
+
elsif total >= 100
|
33
|
+
# 100は常に致命的失敗
|
34
|
+
" > 致命的失敗"
|
35
|
+
elsif total <= (target.to_f / 5).round
|
36
|
+
" > 効果的成功"
|
37
|
+
elsif total <= target
|
38
|
+
" > 成功"
|
39
|
+
elsif total >= 95 + critical_value
|
40
|
+
" > 致命的失敗"
|
41
|
+
else
|
42
|
+
" > 失敗"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,266 @@
|
|
1
|
+
require "bcdice/dice_table/table"
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class RyuTuber < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = 'RyuTuber'.freeze
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = 'リューチューバーとちいさな奇跡'.freeze
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = 'りゆうちゆうはあとちいさなきせき'.freeze
|
14
|
+
|
15
|
+
HELP_MESSAGE = <<~MESSAGETEXT.freeze
|
16
|
+
◆判定
|
17
|
+
・判定 nB6<=1
|
18
|
+
※ n:サイコロの数 例)12B6<=1 サイコロの数12個の場合
|
19
|
+
・判定ルールを表示する RTB
|
20
|
+
◆職業 (カッコ内は使えそうな技能)
|
21
|
+
・職業表 JT
|
22
|
+
・学生表 JST
|
23
|
+
・技術・専門職表 JTPT
|
24
|
+
・事務・サービス職表 JOST
|
25
|
+
・エンタメ職表 JET
|
26
|
+
◆趣味 (カッコ内は使えそうな技能)
|
27
|
+
・趣味表 HT
|
28
|
+
・多人数でできる趣味表 HGT
|
29
|
+
・一人でできるインドア趣味表A HIAT
|
30
|
+
・一人でできるインドア趣味表B HIBT
|
31
|
+
・一人でできるアウトドア趣味表A HOAT
|
32
|
+
・一人でできるアウトドア趣味表B HOBT
|
33
|
+
◆奇跡の演目を表示する
|
34
|
+
・幸運の風が吹いている MPW
|
35
|
+
・困った時はお互い様 MPT
|
36
|
+
・悪い予感は的中する MPF
|
37
|
+
・ついていい嘘もある MPL
|
38
|
+
・私には星が見えている MPS
|
39
|
+
・心は竜と共にあり MPD
|
40
|
+
・人は石垣、人は城 MPH
|
41
|
+
MESSAGETEXT
|
42
|
+
|
43
|
+
def eval_game_system_specific_command(command) # ダイスロールコマンド
|
44
|
+
if (ret = roll_tables(command, TABLES))
|
45
|
+
return ret
|
46
|
+
end
|
47
|
+
|
48
|
+
if (text = TEXTS[command])
|
49
|
+
return text.chomp
|
50
|
+
end
|
51
|
+
|
52
|
+
return nil
|
53
|
+
end
|
54
|
+
|
55
|
+
TEXTS = {
|
56
|
+
'RTB' => <<~TEXT,
|
57
|
+
判定ルール表示
|
58
|
+
①枠主が判定内容を宣言、判定参加者が行動宣言
|
59
|
+
②サイコロは竜の巫女なら6個、技能レベルか指定魅力の値個、奇跡の演目を1つ以上クリアで+6個、スパの消費数個
|
60
|
+
③振ったサイコロの「1の目」の数が目標値以上なら華麗に成功、目標値未満ならちょっと残念な結果
|
61
|
+
TEXT
|
62
|
+
'MPW' => <<~TEXT,
|
63
|
+
幸運の風が吹いている
|
64
|
+
奇跡 以降ゲーム終了まで、サイコロ+1
|
65
|
+
①健気に頑張る姿を見せる。
|
66
|
+
②報われることはなく、さらに最悪の展開に。
|
67
|
+
③それでも健気なところを見せる。
|
68
|
+
TEXT
|
69
|
+
'MPT' => <<~TEXT,
|
70
|
+
困った時はお互い様
|
71
|
+
奇跡 そのプレイヤーの判定サイコロを1回振り直しできる
|
72
|
+
①けちな様子を見せる。
|
73
|
+
②困っている人に施しをする姿を見られる。
|
74
|
+
③窮地に陥る。
|
75
|
+
TEXT
|
76
|
+
'MPF' => <<~TEXT,
|
77
|
+
悪い予感は的中する
|
78
|
+
奇跡 1判定だけ、サイコロ+3
|
79
|
+
①犠牲者が悪い噂を耳にする。
|
80
|
+
②犠牲者が悪い冗談を言う。
|
81
|
+
③犠牲者が悪い予感に心さざめき、誰かに悪い予感を話す。
|
82
|
+
TEXT
|
83
|
+
'MPL' => <<~TEXT,
|
84
|
+
ついていい嘘もある
|
85
|
+
奇跡 ついた(ささやかな)嘘が本当になる 枠主判断でいつか発動する。
|
86
|
+
①嘘を言う。
|
87
|
+
②嘘によって窮地に立つ。
|
88
|
+
③嘘を嘘にしないためにあがく。
|
89
|
+
TEXT
|
90
|
+
'MPS' => <<~TEXT,
|
91
|
+
私には星が見えている
|
92
|
+
奇跡 指定したキャラクターの次の行動がわかる
|
93
|
+
①少し先のことを言い当てる。
|
94
|
+
②気味が悪いと噂になる。
|
95
|
+
③言い当てる力を人間観察に用いる。
|
96
|
+
TEXT
|
97
|
+
'MPD' => <<~TEXT,
|
98
|
+
心は竜と共にあり
|
99
|
+
奇跡 起こりうる不幸を阻止する
|
100
|
+
①心清いひとに助けられる。
|
101
|
+
②自分の性根悪さを悲しむ。
|
102
|
+
③自分なりのやり方で心清い行いをする。
|
103
|
+
TEXT
|
104
|
+
'MPH' => <<~TEXT,
|
105
|
+
人は石垣、人は城
|
106
|
+
奇跡 感化された周りの人が手伝うようになる
|
107
|
+
①人々の不幸を見て、親切にしてしまう。
|
108
|
+
②けなげに頑張る姿を見られる。
|
109
|
+
③見ていた人々が集まってくる。
|
110
|
+
TEXT
|
111
|
+
}.freeze
|
112
|
+
|
113
|
+
TABLES = {
|
114
|
+
"JT" => DiceTable::Table.new(
|
115
|
+
"職業表",
|
116
|
+
"1D6",
|
117
|
+
[
|
118
|
+
'学生表へ',
|
119
|
+
'技術・専門職表へ',
|
120
|
+
'技術・専門職表へ',
|
121
|
+
'事務・サービス職表へ',
|
122
|
+
'事務・サービス職表へ',
|
123
|
+
'エンタメ職表へ'
|
124
|
+
]
|
125
|
+
),
|
126
|
+
"JST" => DiceTable::Table.new(
|
127
|
+
"学生表",
|
128
|
+
"1D6",
|
129
|
+
[
|
130
|
+
'中学生 (ゲーム 運動する)',
|
131
|
+
'高校生(文系) (仲良くする 文章を書く)',
|
132
|
+
'高校生(理系) (仲良くする 科学の知識)',
|
133
|
+
'専門学校生 (ものづくり 設計する)',
|
134
|
+
'大学生(文系) (社会の仕組み 外国語)',
|
135
|
+
'大学生(理系) (すごい技術 科学の知識)'
|
136
|
+
]
|
137
|
+
),
|
138
|
+
"JTPT" => DiceTable::Table.new(
|
139
|
+
"技術・専門職表",
|
140
|
+
"2D6",
|
141
|
+
[
|
142
|
+
'勝負師・山師 (洞察力 精神力)',
|
143
|
+
'漁師/猟師 (自然の知識 料理する)',
|
144
|
+
'建築家、大工 (設計する 運転する)',
|
145
|
+
'料理人 (料理する ものづくり)',
|
146
|
+
'職人 (ものづくり 丁寧)',
|
147
|
+
'農家 (自然の知識 育てる)',
|
148
|
+
'医療・福祉関係(医師、薬剤師、介護職) (治す 科学の知識)',
|
149
|
+
'美容、スタイリスト (見た目を整える 仲良くする)',
|
150
|
+
'プログラマー (プログラム 設計する)',
|
151
|
+
'士業(税理士、弁護士、行政書士等) (社会の仕組み 事務仕事)',
|
152
|
+
'研究者 (教える すごい技術)'
|
153
|
+
]
|
154
|
+
),
|
155
|
+
"JOST" => DiceTable::Table.new(
|
156
|
+
"事務・サービス職表",
|
157
|
+
"2D6",
|
158
|
+
[
|
159
|
+
'宗教関係(巫女、僧侶など) (お祈りする 地元知識)',
|
160
|
+
'観光、旅行 (外国語 地元知識)',
|
161
|
+
'教師、保育士 (教える 育てる)',
|
162
|
+
'運転手、配達員 (運転する 地元知識)',
|
163
|
+
'自宅警備員 (ゲーム 想像力)',
|
164
|
+
'サラリーマン (事務仕事 仲良くする)',
|
165
|
+
'店員 (丁寧 商品知識)',
|
166
|
+
'公務員 (事務仕事 地元知識)',
|
167
|
+
'警察、自衛隊、消防士 (社会の仕組み 戦う)',
|
168
|
+
'投資家、金融業、不動産 (プレゼンする 事務仕事)',
|
169
|
+
'経営者 (社会の仕組み 仲良くする)'
|
170
|
+
]
|
171
|
+
),
|
172
|
+
"JET" => DiceTable::Table.new(
|
173
|
+
"エンタメ職表",
|
174
|
+
"2D6",
|
175
|
+
[
|
176
|
+
'ゲーム制作 (プログラム ものづくり)',
|
177
|
+
'写真家 (自然の知識 絵を描く)',
|
178
|
+
'デザイナー (設計する 見た目を整える)',
|
179
|
+
'ライター (文章を書く 想像力)',
|
180
|
+
'イラストレーター (絵を描く 見た目を整える)',
|
181
|
+
'専業配信者 (プレゼンする カリスマ)',
|
182
|
+
'声優 (声を出す 演技する)',
|
183
|
+
'ミュージシャン (声を出す 音楽)',
|
184
|
+
'アイドル・芸能人 (演技する カリスマ)',
|
185
|
+
'プロゲーマー (ゲーム 戦う)',
|
186
|
+
'プロスポーツ選手 (運動する 精神力)'
|
187
|
+
]
|
188
|
+
),
|
189
|
+
"HT" => DiceTable::Table.new(
|
190
|
+
"趣味表",
|
191
|
+
"1D6",
|
192
|
+
[
|
193
|
+
'多人数でできる趣味表へ',
|
194
|
+
'多人数でできる趣味表へ',
|
195
|
+
'一人でできるインドア趣味表Aへ',
|
196
|
+
'一人でできるインドア趣味表Bへ',
|
197
|
+
'一人でできるアウトドア趣味表Aへ',
|
198
|
+
'一人でできるアウトドア趣味表Bへ'
|
199
|
+
]
|
200
|
+
),
|
201
|
+
"HGT" => DiceTable::Table.new(
|
202
|
+
"多人数でできる趣味表",
|
203
|
+
"1D6",
|
204
|
+
[
|
205
|
+
'家族サービス (仲良くする 育てる)',
|
206
|
+
'野球・フットサル (仲良くする 運動する)',
|
207
|
+
'ボードゲーム/TRPG/囲碁/将棋 (ゲーム 想像する)',
|
208
|
+
'ボランティア (忍耐力 カリスマ)',
|
209
|
+
'サバイバルゲーム (戦う 隠れる)',
|
210
|
+
'バンド (音楽 見た目を整える)'
|
211
|
+
]
|
212
|
+
),
|
213
|
+
"HIAT" => DiceTable::Table.new(
|
214
|
+
"一人でできるインドア趣味表A",
|
215
|
+
"1D6",
|
216
|
+
[
|
217
|
+
'工芸 (ものづくり 想像力)',
|
218
|
+
'編み物 (丁寧 見た目を整える)',
|
219
|
+
'陶芸 (ものづくり 想像力)',
|
220
|
+
'プラモ (ものづくり 見た目を整える)',
|
221
|
+
'同人 (絵を描く 文章を書く)',
|
222
|
+
'読書 (外国語 社会の仕組み)'
|
223
|
+
]
|
224
|
+
),
|
225
|
+
"HIBT" => DiceTable::Table.new(
|
226
|
+
"一人でできるインドア趣味表B",
|
227
|
+
"1D6",
|
228
|
+
[
|
229
|
+
'仕事 (事務仕事 忍耐力)',
|
230
|
+
'資格集め (社会の仕組み 商品知識)',
|
231
|
+
'お絵かき (絵を描く 想像力)',
|
232
|
+
'料理 (料理する 設計する)',
|
233
|
+
'筋トレ (運動する 忍耐力)',
|
234
|
+
'コンピューターゲーム (ゲーム プログラム)'
|
235
|
+
]
|
236
|
+
),
|
237
|
+
"HOAT" => DiceTable::Table.new(
|
238
|
+
"一人でできるアウトドア趣味表A",
|
239
|
+
"1D6",
|
240
|
+
[
|
241
|
+
'スポーツ観戦 (忍耐力 お祈りする)',
|
242
|
+
'水泳 (運動する 泳ぐ)',
|
243
|
+
'旅行/鉄道 (移動する 外国語)',
|
244
|
+
'写真 (自然の知識 想像力)',
|
245
|
+
'ジグソーパズル (ゲーム 忍耐力)',
|
246
|
+
'マラソン (運動する 忍耐力)'
|
247
|
+
]
|
248
|
+
),
|
249
|
+
"HOBT" => DiceTable::Table.new(
|
250
|
+
"一人でできるアウトドア趣味表B",
|
251
|
+
"1D6",
|
252
|
+
[
|
253
|
+
'スキー・スノーボード (運動する 自然の知識)',
|
254
|
+
'自転車 (移動する 運動する)',
|
255
|
+
'盆栽・生花 (丁寧 育てる)',
|
256
|
+
'キャンプ (自然の知識 精神力)',
|
257
|
+
'映画鑑賞 (演技する 想像力)',
|
258
|
+
'恋愛 (仲良くする 見た目を整える)'
|
259
|
+
]
|
260
|
+
)
|
261
|
+
}.freeze
|
262
|
+
|
263
|
+
register_prefix(TEXTS.keys + TABLES.keys)
|
264
|
+
end
|
265
|
+
end
|
266
|
+
end
|
@@ -0,0 +1,199 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class Ryutama < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = 'Ryutama'
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = 'りゅうたま'
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = 'りゆうたま'
|
14
|
+
|
15
|
+
# ダイスボットの使い方
|
16
|
+
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
|
17
|
+
・判定
|
18
|
+
Rx,y>=t(x,y:使用する能力値、t:目標値)
|
19
|
+
1ゾロ、クリティカルも含めて判定結果を表示します
|
20
|
+
能力値1つでの判定は Rx>=t で行えます
|
21
|
+
例)R8,6>=13
|
22
|
+
INFO_MESSAGE_TEXT
|
23
|
+
|
24
|
+
register_prefix(['R\d+.*'])
|
25
|
+
|
26
|
+
def initialize(command)
|
27
|
+
super(command)
|
28
|
+
@validDiceTypes = [20, 12, 10, 8, 6, 4, 2]
|
29
|
+
end
|
30
|
+
|
31
|
+
def eval_game_system_specific_command(command)
|
32
|
+
debug('eval_game_system_specific_command begin')
|
33
|
+
|
34
|
+
unless command =~ /^R(\d+)(,(\d+))?([\+\-\d]+)?(>=(\d+))?/
|
35
|
+
debug('unmatched!')
|
36
|
+
return ''
|
37
|
+
end
|
38
|
+
debug('matched')
|
39
|
+
|
40
|
+
dice1 = Regexp.last_match(1).to_i
|
41
|
+
dice2 = Regexp.last_match(3).to_i
|
42
|
+
modifyString = Regexp.last_match(4)
|
43
|
+
difficulty = Regexp.last_match(6)
|
44
|
+
|
45
|
+
dice1, dice2 = getDiceType(dice1, dice2)
|
46
|
+
if dice1 == 0
|
47
|
+
return ''
|
48
|
+
end
|
49
|
+
|
50
|
+
modifyString ||= ''
|
51
|
+
modify = ArithmeticEvaluator.eval(modifyString)
|
52
|
+
difficulty = getDiffculty(difficulty)
|
53
|
+
|
54
|
+
value1 = getRollValue(dice1)
|
55
|
+
value2 = getRollValue(dice2)
|
56
|
+
total = value1 + value2 + modify
|
57
|
+
|
58
|
+
result = getResultText(value1, value2, dice1, dice2, difficulty, total)
|
59
|
+
unless result.empty?
|
60
|
+
result = " > #{result}"
|
61
|
+
end
|
62
|
+
|
63
|
+
value1Text = "#{value1}(#{dice1})"
|
64
|
+
value2Text = (value2 == 0 ? "" : "+#{value2}(#{dice2})")
|
65
|
+
modifyText = getModifyString(modify)
|
66
|
+
|
67
|
+
baseText = getBaseText(dice1, dice2, modify, difficulty)
|
68
|
+
output = "(#{baseText}) > #{value1Text}#{value2Text}#{modifyText} > #{total}#{result}"
|
69
|
+
return output
|
70
|
+
end
|
71
|
+
|
72
|
+
def getDiceType(dice1, dice2)
|
73
|
+
debug('getDiceType begin')
|
74
|
+
|
75
|
+
if dice2 != 0
|
76
|
+
if isValidDiceOne(dice1)
|
77
|
+
return dice1, dice2
|
78
|
+
else
|
79
|
+
return 0, 0
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
if isValidDice(dice1, dice2)
|
84
|
+
return dice1, dice2
|
85
|
+
end
|
86
|
+
|
87
|
+
diceBase = dice1
|
88
|
+
|
89
|
+
dice1 = diceBase / 10
|
90
|
+
dice2 = diceBase % 10
|
91
|
+
|
92
|
+
if isValidDice(dice1, dice2)
|
93
|
+
return dice1, dice2
|
94
|
+
end
|
95
|
+
|
96
|
+
dice1 = diceBase / 100
|
97
|
+
dice2 = diceBase % 100
|
98
|
+
|
99
|
+
if isValidDice(dice1, dice2)
|
100
|
+
return dice1, dice2
|
101
|
+
end
|
102
|
+
|
103
|
+
if isValidDiceOne(diceBase)
|
104
|
+
return diceBase, 0
|
105
|
+
end
|
106
|
+
|
107
|
+
return 0, 0
|
108
|
+
end
|
109
|
+
|
110
|
+
def isValidDice(dice1, dice2)
|
111
|
+
return (isValidDiceOne(dice1) &&
|
112
|
+
isValidDiceOne(dice2))
|
113
|
+
end
|
114
|
+
|
115
|
+
def isValidDiceOne(dice)
|
116
|
+
@validDiceTypes.include?(dice)
|
117
|
+
end
|
118
|
+
|
119
|
+
def getDiffculty(difficulty)
|
120
|
+
unless difficulty.nil?
|
121
|
+
difficulty = difficulty.to_i
|
122
|
+
end
|
123
|
+
|
124
|
+
return difficulty
|
125
|
+
end
|
126
|
+
|
127
|
+
def getRollValue(dice)
|
128
|
+
return 0 if dice == 0
|
129
|
+
|
130
|
+
value = @randomizer.roll_once(dice)
|
131
|
+
return value
|
132
|
+
end
|
133
|
+
|
134
|
+
def getResultText(value1, value2, dice1, dice2, difficulty, total)
|
135
|
+
if isFamble(value1, value2)
|
136
|
+
return "1ゾロ【1ゾロポイント+1】"
|
137
|
+
end
|
138
|
+
|
139
|
+
if isCritical(value1, value2, dice1, dice2)
|
140
|
+
return "クリティカル成功"
|
141
|
+
end
|
142
|
+
|
143
|
+
if difficulty.nil?
|
144
|
+
return ''
|
145
|
+
end
|
146
|
+
|
147
|
+
if total >= difficulty
|
148
|
+
return "成功"
|
149
|
+
end
|
150
|
+
|
151
|
+
return "失敗"
|
152
|
+
end
|
153
|
+
|
154
|
+
def isFamble(value1, value2)
|
155
|
+
return ((value1 == 1) && (value2 == 1))
|
156
|
+
end
|
157
|
+
|
158
|
+
def isCritical(value1, value2, dice1, dice2)
|
159
|
+
return false if value2 == 0
|
160
|
+
|
161
|
+
if (value1 == 6) && (value2 == 6)
|
162
|
+
return true
|
163
|
+
end
|
164
|
+
|
165
|
+
if (value1 == dice1) && (value2 == dice2)
|
166
|
+
return true
|
167
|
+
end
|
168
|
+
|
169
|
+
return false
|
170
|
+
end
|
171
|
+
|
172
|
+
def getBaseText(dice1, dice2, modify, difficulty)
|
173
|
+
baseText = "R#{dice1}"
|
174
|
+
|
175
|
+
if dice2 != 0
|
176
|
+
baseText += ",#{dice2}"
|
177
|
+
end
|
178
|
+
|
179
|
+
baseText += getModifyString(modify)
|
180
|
+
|
181
|
+
unless difficulty.nil?
|
182
|
+
baseText += ">=#{difficulty}"
|
183
|
+
end
|
184
|
+
|
185
|
+
return baseText
|
186
|
+
end
|
187
|
+
|
188
|
+
def getModifyString(modify)
|
189
|
+
if modify > 0
|
190
|
+
return "+" + modify.to_s
|
191
|
+
elsif modify < 0
|
192
|
+
return modify.to_s
|
193
|
+
end
|
194
|
+
|
195
|
+
return ''
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|