bcdice 3.0.0.pre.alpha.1 → 3.0.0.pre.alpha.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/test.yml +1 -1
- data/.rubocop.yml +12 -0
- data/.rubocop_todo.yml +1 -0
- data/CHANGELOG.md +34 -0
- data/Gemfile +6 -3
- data/Rakefile +52 -18
- data/bcdice.gemspec +2 -0
- data/i18n/Amadeus/ja_jp.yml +386 -0
- data/i18n/Amadeus/ko_kr.yml +148 -0
- data/i18n/Cthulhu/ja_jp.yml +11 -0
- data/i18n/Cthulhu/ko_kr.yml +11 -0
- data/i18n/Cthulhu/zh_hant.yml +11 -0
- data/i18n/DetatokoSaga/ja_jp.yml +74 -0
- data/i18n/DetatokoSaga/ko_kr.yml +74 -0
- data/i18n/DoubleCross/ja_jp.yml +53 -0
- data/i18n/DoubleCross/ko_kr.yml +53 -0
- data/i18n/Dracurouge/ja_jp.yml +1374 -0
- data/i18n/Dracurouge/ko_kr.yml +295 -0
- data/i18n/Fiasco/ja_jp.yml +10 -0
- data/i18n/Fiasco/ko_kr.yml +10 -0
- data/i18n/FutariSousa/ja_jp.yml +720 -0
- data/i18n/FutariSousa/ko_kr.yml +746 -0
- data/i18n/Insane/ja_jp.yml +454 -0
- data/i18n/Insane/ko_kr.yml +502 -0
- data/i18n/Kamigakari/ja_jp.yml +276 -0
- data/i18n/Kamigakari/ko_kr.yml +204 -0
- data/i18n/KillDeathBusiness/ja_jp.yml +1092 -0
- data/i18n/KillDeathBusiness/ko_kr.yml +1062 -0
- data/i18n/LogHorizon/ja_jp.yml +3082 -0
- data/i18n/LogHorizon/ko_kr.yml +923 -0
- data/i18n/MagicaLogia/ja_jp.yml +564 -0
- data/i18n/MonotoneMuseum/ja_jp.yml +525 -0
- data/i18n/MonotoneMuseum/ko_kr.yml +89 -0
- data/i18n/Nechronica/ja_jp.yml +57 -0
- data/i18n/Nechronica/ko_kr.yml +14 -0
- data/i18n/StratoShout/ja_jp.yml +160 -0
- data/i18n/StratoShout/ko_kr.yml +160 -0
- data/i18n/ja_jp.yml +5 -0
- data/i18n/ko_kr.yml +7 -0
- data/i18n/zh_hant.yml +3 -0
- data/lib/bcdice/arithmetic/node.rb +154 -0
- data/lib/bcdice/base.rb +87 -101
- data/lib/bcdice/common_command.rb +2 -0
- data/lib/bcdice/common_command/add_dice.rb +5 -41
- data/lib/bcdice/common_command/add_dice/node.rb +92 -16
- data/lib/bcdice/common_command/add_dice/parser.rb +374 -274
- data/lib/bcdice/common_command/add_dice/parser.y +153 -0
- data/lib/bcdice/common_command/add_dice/randomizer.rb +25 -33
- data/lib/bcdice/common_command/barabara_dice.rb +6 -47
- data/lib/bcdice/common_command/barabara_dice/node.rb +84 -0
- data/lib/bcdice/common_command/barabara_dice/parser.rb +336 -0
- data/lib/bcdice/common_command/barabara_dice/parser.y +107 -0
- data/lib/bcdice/common_command/calc.rb +7 -30
- data/lib/bcdice/common_command/calc/node.rb +30 -0
- data/lib/bcdice/common_command/calc/parser.rb +271 -0
- data/lib/bcdice/common_command/calc/parser.y +79 -0
- data/lib/bcdice/common_command/choice.rb +137 -19
- data/lib/bcdice/common_command/d66_dice.rb +48 -34
- data/lib/bcdice/common_command/lexer.rb +46 -0
- data/lib/bcdice/common_command/repeat.rb +102 -0
- data/lib/bcdice/common_command/reroll_dice.rb +8 -158
- data/lib/bcdice/common_command/reroll_dice/node.rb +198 -0
- data/lib/bcdice/common_command/reroll_dice/parser.rb +421 -0
- data/lib/bcdice/common_command/reroll_dice/parser.y +158 -0
- data/lib/bcdice/common_command/upper_dice.rb +10 -129
- data/lib/bcdice/common_command/upper_dice/node.rb +181 -0
- data/lib/bcdice/common_command/upper_dice/parser.rb +412 -0
- data/lib/bcdice/common_command/upper_dice/parser.y +143 -0
- data/lib/bcdice/common_command/version.rb +9 -17
- data/lib/bcdice/deprecated/checker.rb +78 -0
- data/lib/bcdice/dice_table/d66_grid_table.rb +8 -0
- data/lib/bcdice/dice_table/d66_table.rb +10 -0
- data/lib/bcdice/dice_table/sai_fic_skill_table.rb +75 -17
- data/lib/bcdice/dice_table/sai_fic_skill_table/category.rb +25 -0
- data/lib/bcdice/dice_table/sai_fic_skill_table/skill.rb +23 -0
- data/lib/bcdice/dice_table/table.rb +8 -0
- data/lib/bcdice/game_system.rb +7 -1
- data/lib/bcdice/game_system/AFF2e.rb +1 -1
- data/lib/bcdice/game_system/AceKillerGene.rb +2 -2
- data/lib/bcdice/game_system/Airgetlamh.rb +3 -3
- 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/Amadeus.rb +46 -507
- data/lib/bcdice/game_system/Amadeus_Korean.rb +12 -456
- data/lib/bcdice/game_system/AnimaAnimus.rb +1 -1
- data/lib/bcdice/game_system/Arianrhod.rb +0 -1
- 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/BeastBindTrinity.rb +1 -2
- data/lib/bcdice/game_system/BeginningIdol.rb +2 -3
- data/lib/bcdice/game_system/BeginningIdol_Korean.rb +2 -3
- data/lib/bcdice/game_system/BladeOfArcana.rb +2 -2
- data/lib/bcdice/game_system/BlindMythos.rb +1 -1
- data/lib/bcdice/game_system/BloodCrusade.rb +0 -1
- data/lib/bcdice/game_system/BloodMoon.rb +0 -1
- data/lib/bcdice/game_system/CardRanker.rb +1 -2
- data/lib/bcdice/game_system/ChaosFlare.rb +1 -1
- data/lib/bcdice/game_system/Chill.rb +1 -1
- data/lib/bcdice/game_system/CodeLayerd.rb +1 -1
- data/lib/bcdice/game_system/ColossalHunter.rb +1 -2
- data/lib/bcdice/game_system/Comes.rb +50 -0
- data/lib/bcdice/game_system/CrashWorld.rb +1 -1
- data/lib/bcdice/game_system/Cthulhu.rb +94 -97
- data/lib/bcdice/game_system/Cthulhu7th.rb +108 -67
- 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/CthulhuTech.rb +8 -14
- data/lib/bcdice/game_system/Cthulhu_ChineseTraditional.rb +7 -190
- data/lib/bcdice/game_system/Cthulhu_Korean.rb +5 -186
- data/lib/bcdice/game_system/DarkBlaze.rb +9 -5
- data/lib/bcdice/game_system/DarkDaysDrive.rb +17 -15
- data/lib/bcdice/game_system/DarkSouls.rb +1 -1
- data/lib/bcdice/game_system/DeadlineHeroes.rb +2 -2
- data/lib/bcdice/game_system/DemonParasite.rb +1 -2
- data/lib/bcdice/game_system/DetatokoSaga.rb +48 -149
- data/lib/bcdice/game_system/DetatokoSaga_Korean.rb +6 -274
- data/lib/bcdice/game_system/DiceOfTheDead.rb +9 -6
- data/lib/bcdice/game_system/DoubleCross.rb +102 -81
- data/lib/bcdice/game_system/DoubleCross_Korean.rb +13 -330
- data/lib/bcdice/game_system/Dracurouge.rb +376 -1678
- data/lib/bcdice/game_system/Dracurouge_Korean.rb +16 -271
- 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/Elysion.rb +3 -4
- data/lib/bcdice/game_system/EmbryoMachine.rb +1 -1
- data/lib/bcdice/game_system/Emoklore.rb +131 -0
- data/lib/bcdice/game_system/EndBreaker.rb +1 -2
- data/lib/bcdice/game_system/EtrianOdysseySRS.rb +1 -1
- data/lib/bcdice/game_system/Fiasco.rb +87 -70
- data/lib/bcdice/game_system/Fiasco_Korean.rb +7 -95
- data/lib/bcdice/game_system/FilledWith.rb +462 -566
- data/lib/bcdice/game_system/FullMetalPanic.rb +1 -1
- data/lib/bcdice/game_system/FutariSousa.rb +103 -938
- data/lib/bcdice/game_system/FutariSousa_Korean.rb +7 -948
- data/lib/bcdice/game_system/{Gurps.rb → GURPS.rb} +184 -217
- data/lib/bcdice/game_system/Garako.rb +131 -39
- data/lib/bcdice/game_system/GardenOrder.rb +2 -2
- 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/GoldenSkyStories.rb +1 -1
- data/lib/bcdice/game_system/Gorilla.rb +1 -1
- data/lib/bcdice/game_system/GranCrest.rb +2 -3
- data/lib/bcdice/game_system/GundogRevised.rb +1 -1
- data/lib/bcdice/game_system/GundogZero.rb +1 -1
- data/lib/bcdice/game_system/GurpsFW.rb +2 -3
- data/lib/bcdice/game_system/HarnMaster.rb +2 -2
- data/lib/bcdice/game_system/HatsuneMiku.rb +1 -2
- data/lib/bcdice/game_system/HouraiGakuen.rb +1 -1
- data/lib/bcdice/game_system/HuntersMoon.rb +1 -2
- data/lib/bcdice/game_system/Illusio.rb +2 -2
- data/lib/bcdice/game_system/Insane.rb +90 -717
- data/lib/bcdice/game_system/Insane_Korean.rb +7 -719
- data/lib/bcdice/game_system/Kamigakari.rb +47 -242
- data/lib/bcdice/game_system/Kamigakari_Korean.rb +6 -394
- data/lib/bcdice/game_system/KanColle.rb +3 -3
- data/lib/bcdice/game_system/KemonoNoMori.rb +1 -1
- data/lib/bcdice/game_system/KillDeathBusiness.rb +162 -1144
- data/lib/bcdice/game_system/KillDeathBusiness_Korean.rb +6 -1459
- data/lib/bcdice/game_system/KurayamiCrying.rb +1 -1
- data/lib/bcdice/game_system/LiveraDoll.rb +2 -2
- data/lib/bcdice/game_system/LogHorizon.rb +350 -3379
- data/lib/bcdice/game_system/LogHorizon_Korean.rb +55 -1357
- data/lib/bcdice/game_system/LostRecord.rb +0 -1
- data/lib/bcdice/game_system/LostRoyal.rb +1 -2
- data/lib/bcdice/game_system/MagicaLogia.rb +158 -1044
- data/lib/bcdice/game_system/MeikyuDays.rb +1 -2
- data/lib/bcdice/game_system/MeikyuKingdom.rb +4 -4
- data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +4 -5
- data/lib/bcdice/game_system/MetalHead.rb +1 -1
- data/lib/bcdice/game_system/MetalHeadExtream.rb +2 -2
- data/lib/bcdice/game_system/MetallicGuardian.rb +1 -1
- data/lib/bcdice/game_system/MonotoneMuseum.rb +38 -239
- data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +10 -270
- data/lib/bcdice/game_system/NSSQ.rb +159 -0
- data/lib/bcdice/game_system/Nechronica.rb +34 -73
- data/lib/bcdice/game_system/Nechronica_Korean.rb +11 -128
- data/lib/bcdice/game_system/NeverCloud.rb +1 -1
- 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 +12 -11
- data/lib/bcdice/game_system/NjslyrBattle.rb +1 -1
- data/lib/bcdice/game_system/OneWayHeroics.rb +1 -2
- data/lib/bcdice/game_system/OracleEngine.rb +1 -1
- data/lib/bcdice/game_system/OrgaRain.rb +2 -2
- data/lib/bcdice/game_system/Paradiso.rb +1 -1
- data/lib/bcdice/game_system/Paranoia.rb +1 -1
- 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 +22 -122
- data/lib/bcdice/game_system/Postman.rb +2 -2
- data/lib/bcdice/game_system/PulpCthulhu.rb +3 -3
- 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/RokumonSekai2.rb +1 -1
- data/lib/bcdice/game_system/RuinBreakers.rb +296 -0
- data/lib/bcdice/game_system/Ryutama.rb +1 -1
- data/lib/bcdice/game_system/SRS.rb +1 -2
- data/lib/bcdice/game_system/SamsaraBallad.rb +1 -1
- data/lib/bcdice/game_system/Satasupe.rb +1 -2
- data/lib/bcdice/game_system/ScreamHighSchool.rb +2 -2
- data/lib/bcdice/game_system/SevenFortressMobius.rb +1 -1
- data/lib/bcdice/game_system/ShadowRun5.rb +2 -2
- data/lib/bcdice/game_system/SharedFantasia.rb +1 -1
- data/lib/bcdice/game_system/ShinMegamiTenseiKakuseihen.rb +1 -1
- data/lib/bcdice/game_system/ShinkuuGakuen.rb +2 -2
- data/lib/bcdice/game_system/ShinobiGami.rb +1 -2
- data/lib/bcdice/game_system/ShoujoTenrankai.rb +2 -2
- data/lib/bcdice/game_system/Skynauts.rb +1 -1
- data/lib/bcdice/game_system/SteamPunkers.rb +1 -1
- data/lib/bcdice/game_system/StellarKnights.rb +1 -2
- data/lib/bcdice/game_system/SterileLife.rb +1 -1
- data/lib/bcdice/game_system/StrangerOfSwordCity.rb +1 -2
- data/lib/bcdice/game_system/StratoShout.rb +44 -247
- data/lib/bcdice/game_system/StratoShout_Korean.rb +6 -282
- data/lib/bcdice/game_system/Strave.rb +2 -2
- data/lib/bcdice/game_system/SwordWorld.rb +8 -9
- data/lib/bcdice/game_system/SwordWorld2_0.rb +2 -3
- data/lib/bcdice/game_system/SwordWorld2_5.rb +2 -3
- data/lib/bcdice/game_system/TherapieSein.rb +1 -1
- data/lib/bcdice/game_system/TokumeiTenkousei.rb +1 -1
- data/lib/bcdice/game_system/TokyoGhostResearch.rb +2 -2
- data/lib/bcdice/game_system/Torg.rb +2 -2
- data/lib/bcdice/game_system/Torg1_5.rb +1 -1
- data/lib/bcdice/game_system/TorgEternity.rb +1 -1
- data/lib/bcdice/game_system/TrinitySeven.rb +1 -1
- data/lib/bcdice/game_system/TunnelsAndTrolls.rb +1 -1
- data/lib/bcdice/game_system/TwilightGunsmoke.rb +1 -2
- data/lib/bcdice/game_system/UnsungDuet.rb +139 -0
- 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 -2
- data/lib/bcdice/game_system/Warhammer.rb +1 -1
- data/lib/bcdice/game_system/Warhammer4.rb +329 -0
- 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 +15 -15
- data/lib/bcdice/game_system/YearZeroEngine.rb +1 -1
- data/lib/bcdice/game_system/ZettaiReido.rb +1 -1
- data/lib/bcdice/game_system/filled_with/cook_tables.rb +119 -0
- data/lib/bcdice/game_system/filled_with/lot_tables.rb +155 -0
- data/lib/bcdice/loader.rb +6 -8
- data/lib/bcdice/preprocessor.rb +15 -40
- data/lib/bcdice/repl.rb +1 -1
- data/lib/bcdice/result.rb +83 -0
- data/lib/bcdice/translate.rb +11 -0
- data/lib/bcdice/version.rb +1 -1
- metadata +80 -4
@@ -1,8 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "bcdice/game_system/Dracurouge"
|
4
|
+
|
3
5
|
module BCDice
|
4
6
|
module GameSystem
|
5
|
-
class Dracurouge_Korean <
|
7
|
+
class Dracurouge_Korean < Dracurouge
|
6
8
|
# ゲームシステムの識別子
|
7
9
|
ID = 'Dracurouge:Korean'
|
8
10
|
|
@@ -20,291 +22,34 @@ module BCDice
|
|
20
22
|
・저항판정(DRRx)
|
21
23
|
x:굴리는 주사위의
|
22
24
|
예) DRR3
|
25
|
+
・原風景表(ST), 叙勲表(CO), 叙勲後表(CA), 遥か過去表(EP)
|
26
|
+
原罪表(OS), 受難表(PN), 近況表(RS), 平和な過去表(PP)
|
23
27
|
・타락표(CTx) x:갈증(예) CT3
|
24
|
-
・타락의 전조표(CS)
|
28
|
+
・타락의 전조표(CS), 拡張・堕落の兆し表(ECS)
|
25
29
|
・인연 내용 결정표(BT)
|
26
30
|
・반응표(RTxy)x:혈통, y:길 xy생략으로 일괄표시
|
27
31
|
혈통 D:드라크, R:로젠부르크, H:헬스가르드, M:더스트하임,
|
28
32
|
A:아발롬 N:노스페라스
|
29
33
|
길 F:영주, G:근위, R:방랑, W:현자, J:사냥꾼, N:야수
|
30
34
|
예)RT(일괄표시), RTDF(드라크 영주), RTAN(아발롬 야수)
|
35
|
+
・異端の反応表(HRTxy)x:血統, y:道 xy省略で一括表示
|
36
|
+
血統 L:異端卿, V:ヴルコラク, N:ナハツェーラ, K:カルンシュタイン
|
37
|
+
G:グリマルキン, S:ストリガ, M:メリュジーヌ, F:フォーン
|
38
|
+
H:ホムンクルス, E:エナメルム, S2:サングィナリエ, A:アールヴ
|
39
|
+
V2:ヴィーヴル, L2:ルーガルー, A2:アルラウネ, F2:フリッガ
|
40
|
+
道 W:野伏, N:流浪, S:密使, H:魔女, F:剣士, X:検体
|
31
41
|
・D66 다이스 있음
|
32
42
|
MESSAGETEXT
|
33
43
|
|
44
|
+
register_prefix_from_super_class()
|
45
|
+
|
34
46
|
def initialize(command)
|
35
47
|
super(command)
|
36
|
-
@enabled_d66 = true
|
37
|
-
@d66_sort_type = D66SortType::NO_SORT
|
38
|
-
end
|
39
|
-
|
40
|
-
def eval_game_system_specific_command(command)
|
41
|
-
debug('eval_game_system_specific_command')
|
42
|
-
|
43
|
-
result = getConductResult(command)
|
44
|
-
return result unless result.nil?
|
45
|
-
|
46
|
-
result = getResistResult(command)
|
47
|
-
return result unless result.nil?
|
48
|
-
|
49
|
-
result = getReactionResult(command)
|
50
|
-
return result unless result.nil?
|
51
|
-
|
52
|
-
result = getCorruptionResult(command)
|
53
|
-
return result unless result.nil?
|
54
|
-
|
55
|
-
result = getTableResult(command)
|
56
|
-
return result unless result.nil?
|
57
|
-
|
58
|
-
return nil
|
59
|
-
end
|
60
|
-
|
61
|
-
def getConductResult(command)
|
62
|
-
return nil unless command =~ /^DR(\d*)(\+(\d+))?$/
|
63
|
-
|
64
|
-
diceCount = Regexp.last_match(1).to_i
|
65
|
-
diceCount = 4 if diceCount == 0
|
66
|
-
thirstyPoint = Regexp.last_match(3).to_i
|
67
|
-
|
68
|
-
diceList = @randomizer.roll_barabara(diceCount, 6).sort
|
69
|
-
|
70
|
-
gloryDiceCount = getGloryDiceCount(diceList)
|
71
|
-
gloryDiceCount.times { diceList << 10 }
|
72
|
-
|
73
|
-
diceList, calculationProcess = getThirstyAddedResult(diceList, thirstyPoint)
|
74
|
-
thirstyPointMarker = (thirstyPoint == 0 ? "" : "+#{thirstyPoint}")
|
75
|
-
|
76
|
-
result = "(#{command}) > #{diceCount}D6#{thirstyPointMarker} > "
|
77
|
-
result += "[ #{calculationProcess} ] > " unless calculationProcess.empty?
|
78
|
-
result += "[ #{diceList.join(', ')} ]"
|
79
|
-
return result
|
80
|
-
end
|
81
|
-
|
82
|
-
def getGloryDiceCount(diceList)
|
83
|
-
oneCount = countTargetDice(diceList, 1)
|
84
|
-
sixCount = countTargetDice(diceList, 6)
|
85
|
-
|
86
|
-
gloryDiceCount = (oneCount / 2) + (sixCount / 2)
|
87
|
-
return gloryDiceCount
|
88
|
-
end
|
89
|
-
|
90
|
-
def countTargetDice(diceList, target)
|
91
|
-
diceList.select { |i| i == target }.count
|
92
|
-
end
|
93
|
-
|
94
|
-
def getThirstyAddedResult(diceList, thirstyPoint)
|
95
|
-
return diceList, '' if thirstyPoint == 0
|
96
|
-
|
97
|
-
targetIndex = diceList.rindex { |i| i <= 6 }
|
98
|
-
return diceList, '' if targetIndex.nil?
|
99
|
-
|
100
|
-
textList = []
|
101
|
-
|
102
|
-
diceList.each_with_index do |item, index|
|
103
|
-
if targetIndex == index
|
104
|
-
textList << "#{item}+#{thirstyPoint}"
|
105
|
-
else
|
106
|
-
textList << item.to_s
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
diceList[targetIndex] += thirstyPoint
|
111
|
-
|
112
|
-
return diceList, textList.join(', ')
|
113
|
-
end
|
114
|
-
|
115
|
-
def getResistResult(command)
|
116
|
-
return nil unless command =~ /^DRR(\d+)$/
|
117
|
-
|
118
|
-
diceCount = Regexp.last_match(1).to_i
|
119
|
-
diceCount = 4 if diceCount == 0
|
120
|
-
|
121
|
-
diceList = @randomizer.roll_barabara(diceCount, 6).sort
|
122
|
-
|
123
|
-
return "(#{command}) > #{diceCount}D6 > [ #{diceList.join(', ')} ]"
|
124
|
-
end
|
125
|
-
|
126
|
-
def getReactionResult(command)
|
127
|
-
return nil unless command.upcase =~ /^RT((\w)(\w))?/
|
128
|
-
|
129
|
-
typeText1 = Regexp.last_match(2)
|
130
|
-
typeText2 = Regexp.last_match(3)
|
131
|
-
|
132
|
-
name = "반응표"
|
133
|
-
table = getReactionTable
|
134
|
-
tableText, number = get_table_by_d66(table)
|
135
|
-
|
136
|
-
type1 = ['드라크', '로젠부르크', '헬스가르드', '더스트하임', '아발롬', '노스페라스']
|
137
|
-
type1_indexTexts = ['D', 'R', 'H', 'M', 'A', 'N']
|
138
|
-
type2 = ['영주', '근위', '방랑', '현자', '사냥꾼', '야수']
|
139
|
-
type2_indexTexts = ['F', 'G', 'R', 'W', 'J', 'N']
|
140
|
-
|
141
|
-
tensValue = number.to_i / 10
|
142
|
-
isBefore = (tensValue < 4)
|
143
|
-
type = (isBefore ? type1 : type2)
|
144
|
-
indexTexts = (isBefore ? type1_indexTexts : type2_indexTexts)
|
145
|
-
typeText = (isBefore ? typeText1 : typeText2)
|
146
|
-
|
147
|
-
resultText = ''
|
148
|
-
if typeText.nil?
|
149
|
-
resultText = getReactionTextFull(type, tableText)
|
150
|
-
else
|
151
|
-
index = indexTexts.index(typeText)
|
152
|
-
return nil if index.nil?
|
153
|
-
|
154
|
-
resultText = getReactionTex(index, type, tableText)
|
155
|
-
end
|
156
|
-
|
157
|
-
return "#{name}(#{number}) > #{resultText}"
|
158
|
-
end
|
159
|
-
|
160
|
-
def getReactionTextFull(type, tableText)
|
161
|
-
resultTexts = []
|
162
|
-
|
163
|
-
type.count.times do |index|
|
164
|
-
resultTexts << getReactionTex(index, type, tableText)
|
165
|
-
end
|
166
|
-
|
167
|
-
return resultTexts.join('/')
|
168
|
-
end
|
169
|
-
|
170
|
-
def getReactionTex(index, type, tableText)
|
171
|
-
typeName = type[index]
|
172
|
-
texts = tableText.split(/\t/)
|
173
|
-
string = texts[index]
|
174
|
-
|
175
|
-
return "#{typeName}:#{string}"
|
176
|
-
end
|
177
48
|
|
178
|
-
|
179
|
-
text = <<~TEXT_BLOCK
|
180
|
-
하늘에 빛나는 붉은 달을 올려본다 콧방귀를 뀐다 헛기침을 한다 미간을 찌푸리고 생각에 잠긴다 하품을 참는다 명왕령의 방향을 노려본다
|
181
|
-
작게 한숨을 쉰다 앞머리를 쓸어 올린다 눈썹을 찌푸린다 주변을 평가하는 눈으로 본다 머리를 긁적인다 혀를 찬다
|
182
|
-
상대를 내려다보듯이 본다 자신의 머리를 만진다 투덜거린다 손에 책을 구현화시켜 적어넣는다 손에 생긴 과일을 먹는다 고개숙여 바닥이나 지면을 노려본다
|
183
|
-
지그시 눈을 감고 말을 건다 혼자서 작게 웃는다 무표정하게 상대를 관찰한다 재미없다는 듯이 바라본다 붙임성 좋은 웃음을 짓는다 무의식적으로 눈물이 흐른다
|
184
|
-
희미하게 미소짓는다 콧노래를 부른다 발밑에 지옥문이 생긴다 안정된 발걸음으로 다가간다 밤새가 어깨에 날아든다 입술을 깨문다
|
185
|
-
품 속에서 박쥐가 날아오른다 한쪽 발을 중심으로 빙그르르 돈다 주변에 작게 원망하는 목소리가 울린다 눈을 감고 과거를 생각한다 검은 고양이가 발밑에 재롱부리며 달라붙는다 가슴을 누르고 지그시 생각한다
|
186
|
-
머리 위를 박쥐가 소용돌이 치듯이 난다 꽃잎을 구현화해 흩날린다 비난하는 듯한 눈빛을 향한다 발자취에 옅은 안개가 낀다 주변에 요정의 빛이 춤춘다 고개를 크게 흔들어 사념을 쫓는다
|
187
|
-
눈썹을 찌푸리는 동시에 눈이 붉게 빛난다 의상이나 갑옷의 색이나 장식을 바꾼다 직립부동의 자세로 서있는다 쓴웃음을 지으며 다가선다 순식간에 상대편에 나타난다 마음 속의 분노로 험악한 얼굴이 된다
|
188
|
-
손에 있는 와인을 가볍게 마신다 자신에게 취해 눈을 감는다 질린듯한 모습으로 한숨을 쉰다 현상을 분석하는 혼잣말을 한다 순식간에 상대에게서 멀어진다 의연한 태도로 맞선다
|
189
|
-
몸 전체에서 옅은 붉은 색의 오오라가 피어난다 구현화한 꽃을 손에서 가지고 논다 갑자기 돌아서며 노려본다 흥미깊은듯이 질문한다 벌레나 식물에게 정신이 팔린다 마른 웃음소리를 흘린다
|
190
|
-
겁 없는 웃음을 짓는다 마음에 드는 상대를 꼬시려고 한다 주변의 공기가 얼어붙는다 눈 앞의 양식에 불평을 말한다 순수한 웃음을 보인다 자신의 혈족을 깎아내리는 말을 한다
|
191
|
-
바람 없이 머리카락이 날린다 어깨를 움츠린다 가슴에 손을 얹고 자신을 안정시킨다 무감동하게 가볍게 인사한다 실수로 누군가를 말려들게해서 넘어진다 조용한 분노와 함께 눈이 창백하게 빛난다
|
192
|
-
질린 눈으로 상대를 응시한다 자신의 무기에 입맞춤을 한다 손에 구현화한 사슬을 가지고 논다 손에 구현화한 펜을 가지고 논다 누군가에게 응석부리듯이 기댄다 들꽃을 만지고 그것을 시들게 한다
|
193
|
-
발밑에 작은 회오리바람이 일어난다 권유하는 듯이 누군가의 손을 잡는다 주변을 엄격한 눈으로 바라본다 눈을 뜨고 감탄한다 웃음을 띠며 고개를 끄덕인다 지친 모습으로 희미하게 빛나는 숨을 내뱉는다
|
194
|
-
격정이나 긴장감에 머리가 거꾸로 선다 악기를 구현화해 연주한다 동료에게 의심의 시선을 보낸다 책, 소매, 망토 등으로 입가를 가린다 작게 고개를 갸웃거린다 자신의 문장을 멍하게 바라본다
|
195
|
-
붉은 달빛을 받으며 눈을 감는다 상대에게 윙크한다 감정에 맞춰 주변에 사슬이 구현화된다 공중에 떠서 미끄러지듯이 나아간다 수많은 검은 깃털이 하늘에 흩날린다 자조적으로 작게 웃는다
|
196
|
-
무기를 들고 맹세를 선창한다 의상에 붙은 먼지를 털어낸다 타락에 대해 충고한다 무감정하게 상황을 분석한다 과일을 꺼내서 먹는다 지친 눈으로 멍하게 다른 사람을 본다
|
197
|
-
자신의 문장을 쭉 바라본다 망토에서 무수한 나비가 날아오른다 차가운 시선으로 상대를 훑어본다 순간, 모습이 안개에 휩싸여 희미해진다 뭔가 있어 보이는 말이나 행동을 한다 뭔가 결심한듯한듯이 얼굴을 들어올린다
|
198
|
-
상대의 눈을 들여다 봐 마음을 짐작한다 주군의 옆에 살짝 다가선다 일전의 싸움에 대해 얘기한다 상대를 헤아리듯이 바라본다 “적”을 생각해내 험악한 눈이 된다 짐승과 같이 거칠게 호흡한다
|
199
|
-
자신의 영지를 생각한다 문장이 새겨진 방패를 들어 올린다 바람에 머리카락이 나부낀다 안경을 구현화해 쓴다 침을 뱉는다 그렁그렁한 눈으로 상대를 올려다본다
|
200
|
-
종자를 시중들게 한다 무기를 차고 기품있게 인사한다 구현화한 탈것을 쓰다듬는다 조그마한 점을 주의깊게 본다 구현화한 무기를 쓰다듬는다 고개를 숙이고 심호흡한다
|
201
|
-
종자의 시중을 받는다 자신의 방패의 문장을 손가락으로 따라그린다 동료의 어깨를 두드린다, 혹은 안는다 과장되게 한숨을 쉬어보인다 음울한 눈으로 허공을 노려본다 벽이나 바닥에 손톱을 세워 할퀸다
|
202
|
-
마음에 드는 상대에게 손짓한다 다른 기사에게 바싹 다가간다 상쾌하게 웃는다 눈을 감고 사색에 잠긴다 옷자락에서 나타난 뱀이나 거미를 쓰다듬는다 자신에게 이르는 혼잣말을 한다
|
203
|
-
근심에 가득차 생각에 잠긴다 주군의 등뒤에서 상대를 노려본다 소리 높여 이름을 댄다 다른 기사에게 조언한다 골똘히 생각하는 눈으로 밤하늘을 본다 타락의 전조를 지그시 본다
|
204
|
-
무겁게 끄덕인다 주군의 앞, 또는 옆에서 무릎꿇는다 주변에 적극적으로 말을 건다 얼버무리듯이 헛기침을 한다 자신의 무기를 핥는다 다른 기사에게서 눈을 돌린다
|
205
|
-
상냥한 미소를 짓는다 겸연쩍다는듯 얼굴을 붉힌다 자신의 이름에 맹세한다 작게 인사한다 어둡게 웃음짓는다 다른 기사의 눈치를 살핀다
|
206
|
-
슬쩍 자신의 문장을 보여준다 누군가의 앞을 가로막고 선다 과장되게 누군가를 치켜세운다 다른 기사에게 눈으로 신호를 보낸다 그늘에 숨는다 상대를 노려보며 신음한다
|
207
|
-
와인잔을 다른 기사에게 건넨다 정신사납게 돌아다닌다 다른 기사에게 시합을 신청한다 불가사의한 웃음을 짓는다 다른 기사의 문장을 관찰한다 자신의 손가락을 가볍게 핥는다
|
208
|
-
가만히 풍경을 바라본다 수줍은 웃음을 짓는다 망토를 과장되게 펄럭인다 하늘에 뜬 별들을 바라본다 분위기를 못읽는 발언을 한다 다른 기사에게 거리를 두어진다
|
209
|
-
손바닥에 체스말을 구현화한다 긴장한 시선으로 주변을 둘러본다 상대를 치켜 세우며 입맞춤을 요구한다 깊은 지식으로 자세한 설명을 한다 갑자기 뒤돌아보며 등뒤를 경계한다 영악한 웃음을 짓는다
|
210
|
-
가슴을 펴고 자신있게 발언한다 마음 속에서 다른 기사와 시합을 한다 자신의 고향을 떠올린다 미래에 대해 점쳐본다 과거의 원통함에 피눈물을 흘린다 자신의 피부를 손톱등으로 상처입힌다
|
211
|
-
빠르게 사죄한다 가만히 기다리고 있는다 자신의 문장에 대해 얘기한다 사소한 예언을 한다 상어와 같이 웃는다 몰래 입맛을 다신다
|
212
|
-
다른 기사를 정면에서 칭찬한다 주군을 지그시 바라본다 다른 기사와 잡담을 한다 소문의 일종을 다른 기사에게 속삭인다 그 자리에 없는 기사를 비웃는다 요염하게 곁눈질을 보낸다
|
213
|
-
다른 기사의 머리나 볼을 쓰다듬는다 주군을 치켜 세운다 곤란한듯이 작게 신음한다 사소한 물건을 흥미깊게 관찰한다 다른 기사와의 거리를 느낀다 애처로운 눈으로 자신의 문장을 바라본다
|
214
|
-
우렁차게 이름을 댄다 주군의 소매를 꽉 쥔다 윗사람의 앞에서 무릎을 꿇고 예를 다한다 달을 올려다보고 드라쿨을 칭송한다 나직하게 이름을 댄다 사냥감을 노리는 눈으로 다른 기사를 본다
|
215
|
-
입가를 가리며 기품있게 웃는다 주군에 대한 주변의 태도를 비난한다 아랫사람에게 미소짓는다 다른 기사의 감정에 충고한다 아랫사람을 내려다보는 눈으로 본다 자학적인 말을 한다
|
216
|
-
TEXT_BLOCK
|
217
|
-
|
218
|
-
return text.split(/\n/)
|
49
|
+
@locale = :ko_kr
|
219
50
|
end
|
220
51
|
|
221
|
-
|
222
|
-
return nil unless command.upcase =~ /^CT(\d+)$/
|
223
|
-
|
224
|
-
modify = Regexp.last_match(1).to_i
|
225
|
-
|
226
|
-
name = "타락표"
|
227
|
-
table =
|
228
|
-
[
|
229
|
-
[0, "당신은 완전히 타락했다. 이 시점에서 당신은 [월 플라워]가 되어 늑대인간, 검은 산양, 야수 중 하나가 된다. 그 [막]의 종료 후에 세션에서 퇴장한다. 247페이지의 「소멸・완전한 타락」을 참조한다."],
|
230
|
-
[1, "당신의 육체는 정신에 걸맞는 변화를 일으킨다……. 「타락의 전조표」를 2번 굴리고 특징을 얻는다. 이 세션 종료 후, 【길】을 「야수」로 변경한다.(이미「야수」라면 【길】은 변하지 않는다)"],
|
231
|
-
[3, "당신의 육체는 정신에 걸맞는 변화를 일으킨다……. 「타락의 전조표」를 1번 굴리고 특징을 얻는다. 이 세션 종료 후, 【길】을 「야수」로 변경한다.(이미「야수」라면 【길】은 변하지 않는다)"],
|
232
|
-
[5, "고귀한 마음도 언젠가는 타락한다. 당신이 지금 가장 많은 루주를 얻은 대상에 대한 루주를 전부 잃고, 같은 수 만큼의 누아르를 얻는다. 누아르를 얻은 결과, 【갈증】이 3점 이상이 된 경우 다시 타락표를 굴린다."],
|
233
|
-
[6, "내면에 잠든 짐승의 숨결……당신이 지금 【갈증】을 얻은 누아르의 대상에게 임의의 누아르 2점을 획득한다."],
|
234
|
-
[7, "내면에 잠든 짐승의 숨결……당신이 지금 【갈증】을 얻은 누아르의 대상에게 임의의 누아르 1점을 획득한다."],
|
235
|
-
[8, "날뛰는 마음을 가라앉힌다……다행히 아무 일도 없었다."],
|
236
|
-
[99, "당신은 미쳐 날뛰는 감정을 억누르고 이성을 되찾았다! 【갈증】이 1 감소한다!"],
|
237
|
-
]
|
238
|
-
|
239
|
-
dice_list = @randomizer.roll_barabara(2, 6)
|
240
|
-
number = dice_list.sum()
|
241
|
-
number_text = dice_list.join(",")
|
242
|
-
|
243
|
-
index = (number - modify)
|
244
|
-
debug('index', index)
|
245
|
-
text = get_table_by_number(index, table)
|
246
|
-
|
247
|
-
return "2D6[#{number_text}]-#{modify} > #{name}(#{index}) > #{text}"
|
248
|
-
end
|
249
|
-
|
250
|
-
def getTableResult(command)
|
251
|
-
info = TABLES[command.upcase]
|
252
|
-
return nil if info.nil?
|
253
|
-
|
254
|
-
name = info[:name]
|
255
|
-
type = info[:type]
|
256
|
-
table = info[:table]
|
257
|
-
|
258
|
-
text, number =
|
259
|
-
case type
|
260
|
-
when '2D6'
|
261
|
-
get_table_by_2d6(table)
|
262
|
-
when '1D6'
|
263
|
-
get_table_by_1d6(table)
|
264
|
-
end
|
265
|
-
|
266
|
-
return nil if text.nil?
|
267
|
-
|
268
|
-
return "#{name}(#{number}) > #{text}"
|
269
|
-
end
|
270
|
-
|
271
|
-
def getCorruptionTable; end
|
272
|
-
|
273
|
-
TABLES =
|
274
|
-
{
|
275
|
-
'CS' => {
|
276
|
-
name: "타락의 전조표",
|
277
|
-
type: '2D6',
|
278
|
-
table: [
|
279
|
-
"당신은 완전히 타락했다. 이 시점에서 당신은 [월 플라워]가 되어 늑대인간, 검은 산양, 야수 중 하나가 된다. 그 [막]의 종료 후에 세션에서 퇴장한다. 247페이지의 「소멸・완전한 타락」을 참조한다.",
|
280
|
-
"짐승 그 자체의 머리(늑대, 산양, 박쥐 중 하나)",
|
281
|
-
"밤새의 날개",
|
282
|
-
"박쥐의 날개",
|
283
|
-
"갈퀴발톱이 있는 이형의 팔",
|
284
|
-
"뒤틀린 두 개의 뿔",
|
285
|
-
"늑대의 귀와 꼬리",
|
286
|
-
"창백해진 피부",
|
287
|
-
"이상한 빛을 발하는 눈",
|
288
|
-
"튀어나온 송곳니",
|
289
|
-
"눈에 보이는 변화는 없다……",
|
290
|
-
],
|
291
|
-
},
|
292
|
-
|
293
|
-
'BT' => {
|
294
|
-
name: "인연 내용 결정표:루주/누아르",
|
295
|
-
type: '1D6',
|
296
|
-
table: [
|
297
|
-
"연민(Pity) 상대를 불쌍히 여기고 동정한다. /모멸(Contempt) 상대를 깔보고 경멸한다.",
|
298
|
-
"친구(Friend) 상대에게 우정을 갖는다. /질투(Jealousy) 상대를 부러워하고 질투한다. ",
|
299
|
-
"신뢰(Trust) 상대를 신뢰한다. /욕망(Desire) 상대를 원하고 나의 것으로 만들고 싶어한다.",
|
300
|
-
"사랑(Love) 상대를 좋아하고 사랑한다. /분노(Anger) 상대에게 분노를 느낀다. ",
|
301
|
-
"존경(Respect) 상대의 실력이나 정신을 존경한다. /살의(Kill) 상대에게 살의를 느끼고 없애고자 한다.",
|
302
|
-
"복종(Obey) 상대를 주군으로서 받들고 충의를 맹세한다. /복수(Vendetta) 상대를 원망하고 원수로 여긴다.",
|
303
|
-
],
|
304
|
-
},
|
305
|
-
}.freeze
|
306
|
-
|
307
|
-
register_prefix(['DR.*', 'RT.*', 'CT\d+'] + TABLES.keys)
|
52
|
+
TABLES = translate_tables(:ko_kr)
|
308
53
|
end
|
309
54
|
end
|
310
55
|
end
|
@@ -50,7 +50,6 @@ module BCDice
|
|
50
50
|
|
51
51
|
def initialize(command)
|
52
52
|
super(command)
|
53
|
-
@enabled_d66 = true
|
54
53
|
@d66_sort_type = D66SortType::ASC
|
55
54
|
|
56
55
|
@enabled_upcase_input = false
|
@@ -1200,14 +1199,14 @@ module BCDice
|
|
1200
1199
|
),
|
1201
1200
|
}.freeze
|
1202
1201
|
|
1203
|
-
register_prefix(
|
1202
|
+
register_prefix(
|
1204
1203
|
'EL.*',
|
1205
1204
|
'DATE.*', 'FDATE.*', 'ODATE.*', 'MDATE.*',
|
1206
1205
|
'RBT', 'SBT', 'BBT', 'CBT', 'DBT', 'IBT', 'FBT', 'LBT', 'PBT', 'NBT', 'ABT', 'VBT', 'GBT', 'HBT',
|
1207
1206
|
'BFT', 'FWT', 'FT',
|
1208
1207
|
'SRT', 'ORT', 'DRT', 'URT',
|
1209
|
-
'NJ\d+', 'BS\d+'
|
1210
|
-
|
1208
|
+
'NJ\d+', 'BS\d+', TABLES.keys
|
1209
|
+
)
|
1211
1210
|
end
|
1212
1211
|
end
|
1213
1212
|
end
|
@@ -0,0 +1,131 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class Emoklore < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = "Emoklore"
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = "エモクロア"
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
#
|
14
|
+
# 「ゲームシステム名の読みがなの設定方法」(docs/dicebot_sort_key.md)を参考にして
|
15
|
+
# 設定してください
|
16
|
+
SORT_KEY = "えもくろあ"
|
17
|
+
|
18
|
+
# ダイスボットの使い方
|
19
|
+
HELP_MESSAGE = <<~MESSAGETEXT
|
20
|
+
・技能値判定(xDM<=y)
|
21
|
+
"(個数)DM<=(判定値)"で指定します。
|
22
|
+
ダイスの個数は省略可能で、省略した場合1個になります。
|
23
|
+
例)2DM<=5 DM<=8
|
24
|
+
・技能値判定(sDAa+z)
|
25
|
+
"(技能レベル)DA(能力値)+(ボーナスダイス)"で指定します。
|
26
|
+
ボーナスダイスの個数は省略可能で、省略した場合0になります。
|
27
|
+
技能レベルは1~3の数値、またはベース技能の場合"b"が入ります。
|
28
|
+
ダイスの個数は技能レベルとボーナスダイスの個数により決定し、s+z個のダイスを振ります。(s="b"の場合はs=1)
|
29
|
+
判定値はs+aとなります。(s="b"の場合はs=0)
|
30
|
+
MESSAGETEXT
|
31
|
+
|
32
|
+
# ダイスボットで使用するコマンドを配列で列挙する
|
33
|
+
register_prefix('\d*DM<=\d+', '(B|\d*)DA\d+')
|
34
|
+
|
35
|
+
CRITICAL_VALUE = 1
|
36
|
+
FUMBLE_VALUE = 10
|
37
|
+
|
38
|
+
# ダイスボット固有コマンドの処理を行う
|
39
|
+
# @param [String] command コマンド
|
40
|
+
# @return [String] ダイスボット固有コマンドの結果
|
41
|
+
# @return [nil] 無効なコマンドだった場合
|
42
|
+
def eval_game_system_specific_command(command)
|
43
|
+
case command
|
44
|
+
when /^\d*DM<=\d/
|
45
|
+
roll_dm(command)
|
46
|
+
when /^(B|\d*)DA\d+(\+)?\d*/
|
47
|
+
roll_da(command)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
# ダイスロールの共通処理
|
54
|
+
# @param [Integer] num_dice
|
55
|
+
# @param [Integer] success_threshold
|
56
|
+
# @return [String]
|
57
|
+
def dice_roll(num_dice, success_threshold)
|
58
|
+
# ダイスを振った結果を配列として取得
|
59
|
+
values = @randomizer.roll_barabara(num_dice, 10)
|
60
|
+
values_without_critical = values.reject { |num| num <= CRITICAL_VALUE }
|
61
|
+
|
62
|
+
critical = values.size - values_without_critical.size
|
63
|
+
success = values_without_critical.count { |num| num <= success_threshold }
|
64
|
+
fumble = values_without_critical.count { |num| num >= FUMBLE_VALUE }
|
65
|
+
|
66
|
+
# 成功値
|
67
|
+
success_value = 2 * critical + success - fumble
|
68
|
+
|
69
|
+
"#{values} > #{success_value} > #{result_text(success_value)}"
|
70
|
+
end
|
71
|
+
|
72
|
+
# @param [Integer] success
|
73
|
+
# @return [String]
|
74
|
+
def result_text(success)
|
75
|
+
if success < 0
|
76
|
+
"ファンブル!"
|
77
|
+
elsif success == 0
|
78
|
+
"失敗!"
|
79
|
+
elsif success == 1
|
80
|
+
"成功!"
|
81
|
+
elsif success == 2
|
82
|
+
"ダブル!"
|
83
|
+
elsif success == 3
|
84
|
+
"トリプル!"
|
85
|
+
elsif success <= 9
|
86
|
+
"ミラクル!"
|
87
|
+
else
|
88
|
+
"カタストロフ!"
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
# 技能判定
|
93
|
+
# @param [String] command コマンド
|
94
|
+
# @return [String, nil] コマンドの結果
|
95
|
+
def roll_dm(command)
|
96
|
+
m = /^(\d+)?DM<=(\d+)$/.match(command)
|
97
|
+
unless m
|
98
|
+
return nil
|
99
|
+
end
|
100
|
+
|
101
|
+
num_dice = m[1]&.to_i || 1
|
102
|
+
success_threshold = m[2].to_i
|
103
|
+
if num_dice <= 0
|
104
|
+
return nil
|
105
|
+
end
|
106
|
+
|
107
|
+
# ダイスロール本体
|
108
|
+
ret_str = dice_roll(num_dice, success_threshold)
|
109
|
+
|
110
|
+
return "(#{num_dice}DM<=#{success_threshold}) > #{ret_str}"
|
111
|
+
end
|
112
|
+
|
113
|
+
# 取得技能判定
|
114
|
+
# @param [String] command コマンド
|
115
|
+
# @return [String, nil] コマンドの結果
|
116
|
+
def roll_da(command)
|
117
|
+
m = /^(B|\d+)?DA(\d+)(\+\d+)?$/.match(command)
|
118
|
+
unless m
|
119
|
+
return nil
|
120
|
+
end
|
121
|
+
|
122
|
+
bonus = m[3].to_i
|
123
|
+
num_dice = (m[1] == "B" ? 1 : (m[1]&.to_i || 1)) + bonus
|
124
|
+
success_threshold = m[1].to_i + m[2].to_i
|
125
|
+
|
126
|
+
ret_str = dice_roll(num_dice, success_threshold)
|
127
|
+
"(#{command}) > (#{num_dice}DM<=#{success_threshold}) > #{ret_str}"
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|