bcdice 3.0.0.pre.alpha.1 → 3.0.0.pre.alpha.2
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/.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
data/i18n/ja_jp.yml
ADDED
data/i18n/ko_kr.yml
ADDED
data/i18n/zh_hant.yml
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
module BCDice
|
|
2
|
+
module Arithmetic
|
|
3
|
+
module Node
|
|
4
|
+
class BinaryOp
|
|
5
|
+
def initialize(lhs, op, rhs)
|
|
6
|
+
@lhs = lhs
|
|
7
|
+
@op = op
|
|
8
|
+
@rhs = rhs
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def eval(round_type)
|
|
12
|
+
l = lhs.eval(round_type)
|
|
13
|
+
r = rhs.eval(round_type)
|
|
14
|
+
l.send(op, r)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def s_exp
|
|
18
|
+
"(#{op} #{lhs.s_exp} #{rhs.s_exp}}"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
attr_reader :op, :lhs, :rhs
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# 除算ノードの基底クラス
|
|
27
|
+
class DivideBase < BinaryOp
|
|
28
|
+
def initialize(lhs, rhs)
|
|
29
|
+
super(lhs, :/, rhs)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def eval(round_type)
|
|
33
|
+
l = lhs.eval(round_type)
|
|
34
|
+
r = rhs.eval(round_type)
|
|
35
|
+
divide_and_round(l, r, round_type)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
|
|
40
|
+
# 除算および端数処理を行う
|
|
41
|
+
# @param [Integer] _dividend 被除数
|
|
42
|
+
# @param [Integer] _divisor 除数(0以外)
|
|
43
|
+
# @param [Symbol] _round_type ゲームシステムの端数処理設定
|
|
44
|
+
# @return [Integer]
|
|
45
|
+
def divide_and_round(_dividend, _divisor, _round_type)
|
|
46
|
+
raise NotImplementedError
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# 除算(切り上げ)のノード
|
|
51
|
+
class DivideWithCeil < DivideBase
|
|
52
|
+
private
|
|
53
|
+
|
|
54
|
+
def op
|
|
55
|
+
"/C"
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# 除算および端数処理を行う
|
|
59
|
+
# @param [Integer] dividend 被除数
|
|
60
|
+
# @param [Integer] divisor 除数(0以外)
|
|
61
|
+
# @param [Symbol] _round_type ゲームシステムの端数処理設定
|
|
62
|
+
# @return [Integer]
|
|
63
|
+
def divide_and_round(dividend, divisor, _round_type)
|
|
64
|
+
(dividend.to_f / divisor).ceil
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# 除算(四捨五入)のノード
|
|
69
|
+
class DivideWithRound < DivideBase
|
|
70
|
+
private
|
|
71
|
+
|
|
72
|
+
def op
|
|
73
|
+
"/R"
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# 除算および端数処理を行う
|
|
77
|
+
# @param [Integer] dividend 被除数
|
|
78
|
+
# @param [Integer] divisor 除数(0以外)
|
|
79
|
+
# @param [Symbol] _round_type ゲームシステムの端数処理設定
|
|
80
|
+
# @return [Integer]
|
|
81
|
+
def divide_and_round(dividend, divisor, _round_type)
|
|
82
|
+
(dividend.to_f / divisor).round
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# 除算(切り捨て)のノード
|
|
87
|
+
class DivideWithFloor < DivideBase
|
|
88
|
+
private
|
|
89
|
+
|
|
90
|
+
def op
|
|
91
|
+
"/F"
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# 除算および端数処理を行う
|
|
95
|
+
# @param [Integer] dividend 被除数
|
|
96
|
+
# @param [Integer] divisor 除数(0以外)
|
|
97
|
+
# @param [Symbol] _round_type ゲームシステムの端数処理設定
|
|
98
|
+
# @return [Integer]
|
|
99
|
+
def divide_and_round(dividend, divisor, _round_type)
|
|
100
|
+
dividend / divisor
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# 除算(端数処理はゲームシステム依存)のノード
|
|
105
|
+
class DivideWithGameSystemDefault < DivideBase
|
|
106
|
+
private
|
|
107
|
+
|
|
108
|
+
# 除算および端数処理を行う
|
|
109
|
+
# @param [Integer] dividend 被除数
|
|
110
|
+
# @param [Integer] divisor 除数(0以外)
|
|
111
|
+
# @param [Symbol] round_type ゲームシステムの端数処理設定
|
|
112
|
+
# @return [Integer]
|
|
113
|
+
def divide_and_round(dividend, divisor, round_type)
|
|
114
|
+
case round_type
|
|
115
|
+
when RoundType::CEIL
|
|
116
|
+
(dividend.to_f / divisor).ceil
|
|
117
|
+
when RoundType::ROUND
|
|
118
|
+
(dividend.to_f / divisor).round
|
|
119
|
+
else # RoundType::FLOOR
|
|
120
|
+
dividend / divisor
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
class Negative
|
|
126
|
+
def initialize(body)
|
|
127
|
+
@body = body
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def eval(round_type)
|
|
131
|
+
-@body.eval(round_type)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def s_exp
|
|
135
|
+
"(- #{@body.s_exp})"
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
class Number
|
|
140
|
+
def initialize(value)
|
|
141
|
+
@value = value
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def eval(_round_type)
|
|
145
|
+
@value
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def s_exp
|
|
149
|
+
@value.to_s
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
end
|
data/lib/bcdice/base.rb
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "i18n"
|
|
4
|
+
require "i18n/backend/fallbacks"
|
|
3
5
|
require "bcdice/randomizer"
|
|
4
6
|
require "bcdice/dice_table"
|
|
5
7
|
require "bcdice/enum"
|
|
8
|
+
require "bcdice/translate"
|
|
9
|
+
require "bcdice/result"
|
|
10
|
+
require "bcdice/command_parser"
|
|
11
|
+
require "bcdice/deprecated/checker"
|
|
6
12
|
|
|
7
13
|
module BCDice
|
|
8
14
|
class Base
|
|
@@ -18,6 +24,10 @@ module BCDice
|
|
|
18
24
|
@prefixes.concat(prefixes.flatten)
|
|
19
25
|
end
|
|
20
26
|
|
|
27
|
+
def register_prefix_from_super_class
|
|
28
|
+
register_prefix(superclass.prefixes)
|
|
29
|
+
end
|
|
30
|
+
|
|
21
31
|
# ゲームシステム固有のコマンドにマッチする正規表現を返す
|
|
22
32
|
# 正規表現を一度生成したら、以後コマンドの登録はできないようにする
|
|
23
33
|
#
|
|
@@ -50,15 +60,23 @@ module BCDice
|
|
|
50
60
|
|
|
51
61
|
@command_pattern = /^S?(#{pattarns.join("|")})/i.freeze
|
|
52
62
|
end
|
|
63
|
+
|
|
64
|
+
# @param command [String]
|
|
65
|
+
# @return [Result]
|
|
66
|
+
def eval(command)
|
|
67
|
+
new(command).eval
|
|
68
|
+
end
|
|
53
69
|
end
|
|
54
70
|
|
|
71
|
+
include Translate
|
|
72
|
+
include Deprecated::Checker
|
|
73
|
+
|
|
55
74
|
def initialize(command)
|
|
56
75
|
@raw_input = command
|
|
57
76
|
|
|
58
77
|
@sort_add_dice = false # 加算ダイスでダイス目をソートするかどうか
|
|
59
78
|
@sort_barabara_dice = false # バラバラダイスでダイス目をソートするかどうか
|
|
60
79
|
|
|
61
|
-
@enabled_d66 = true # D66ダイスを利用するかどうか
|
|
62
80
|
@d66_sort_type = D66SortType::NO_SORT # 入れ替えの種類 詳しくはBCDice::D66SortTypeを参照すること
|
|
63
81
|
|
|
64
82
|
@enabled_d9 = false # D9ダイスを有効にするか(ガンドッグ)で使用
|
|
@@ -73,11 +91,7 @@ module BCDice
|
|
|
73
91
|
|
|
74
92
|
@enabled_upcase_input = true # 入力を String#upcase するかどうか
|
|
75
93
|
|
|
76
|
-
@
|
|
77
|
-
@is_success = false
|
|
78
|
-
@is_failure = false
|
|
79
|
-
@is_critical = false
|
|
80
|
-
@is_fumble = false
|
|
94
|
+
@locale = :ja_jp # i18n用の言語設定
|
|
81
95
|
|
|
82
96
|
@randomizer = BCDice::Randomizer.new
|
|
83
97
|
@debug = false
|
|
@@ -129,13 +143,6 @@ module BCDice
|
|
|
129
143
|
@sort_barabara_dice
|
|
130
144
|
end
|
|
131
145
|
|
|
132
|
-
# D66ダイスが有効か
|
|
133
|
-
#
|
|
134
|
-
# @return [Boolean]
|
|
135
|
-
def enabled_d66?
|
|
136
|
-
@enabled_d66
|
|
137
|
-
end
|
|
138
|
-
|
|
139
146
|
# D9ダイスが有効か
|
|
140
147
|
#
|
|
141
148
|
# @return [Boolean]
|
|
@@ -143,50 +150,21 @@ module BCDice
|
|
|
143
150
|
@enabled_d9
|
|
144
151
|
end
|
|
145
152
|
|
|
146
|
-
# シークレットコマンドか
|
|
147
|
-
#
|
|
148
|
-
# @return [Boolean]
|
|
149
|
-
def secret?
|
|
150
|
-
@is_secret
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
# 結果が成功か
|
|
154
|
-
# @return [Boolean]
|
|
155
|
-
def success?
|
|
156
|
-
@is_success
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
# 結果が失敗か
|
|
160
|
-
# @return [Boolean]
|
|
161
|
-
def failure?
|
|
162
|
-
@is_failure
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
# 結果がクリティカルか
|
|
166
|
-
# @return [Boolean]
|
|
167
|
-
def critical?
|
|
168
|
-
@is_critical
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
# 結果がファンブルか
|
|
172
|
-
# @return [Boolean]
|
|
173
|
-
def fumble?
|
|
174
|
-
@is_fumble
|
|
175
|
-
end
|
|
176
|
-
|
|
177
153
|
# デバッグを有用にする
|
|
178
154
|
def enable_debug
|
|
179
155
|
@debug = true
|
|
180
156
|
end
|
|
181
157
|
|
|
182
158
|
# コマンドを評価する
|
|
183
|
-
# @return [
|
|
159
|
+
# @return [Result, nil] コマンド実行結果。コマンドが実行できなかった場合はnilを返す
|
|
184
160
|
def eval
|
|
185
|
-
command = BCDice::Preprocessor.process(@raw_input,
|
|
186
|
-
upcased_command = command.upcase
|
|
161
|
+
command = BCDice::Preprocessor.process(@raw_input, self)
|
|
187
162
|
|
|
188
|
-
result = dice_command(command)
|
|
189
|
-
|
|
163
|
+
result = dice_command(command) || eval_common_command(@raw_input)
|
|
164
|
+
return nil unless result
|
|
165
|
+
|
|
166
|
+
result.rands = @randomizer.rand_results
|
|
167
|
+
result.detailed_rands = @randomizer.detailed_rand_results
|
|
190
168
|
|
|
191
169
|
return result
|
|
192
170
|
end
|
|
@@ -200,36 +178,43 @@ module BCDice
|
|
|
200
178
|
end
|
|
201
179
|
|
|
202
180
|
# @param total [Integer] コマンド合計値
|
|
203
|
-
# @param
|
|
204
|
-
# @param dice_list [Array<Integer>] ダイスの一覧
|
|
205
|
-
# @param sides [Integer] 振ったダイスの面数
|
|
181
|
+
# @param rand_results [Array<CommonCommand::AddDice::Randomizer::RandResult>] ダイスの一覧
|
|
206
182
|
# @param cmp_op [Symbol] 比較演算子
|
|
207
183
|
# @param target [Integer, String] 目標値の整数か'?'
|
|
208
|
-
# @return [
|
|
209
|
-
def check_result(total,
|
|
184
|
+
# @return [Result, nil]
|
|
185
|
+
def check_result(total, rand_results, cmp_op, target)
|
|
186
|
+
ret = check_result_legacy(total, rand_results, cmp_op, target)
|
|
187
|
+
return ret if ret
|
|
188
|
+
|
|
189
|
+
sides_list = rand_results.map(&:sides)
|
|
190
|
+
value_list = rand_results.map(&:value)
|
|
191
|
+
dice_total = value_list.sum()
|
|
192
|
+
|
|
210
193
|
ret =
|
|
211
|
-
case
|
|
212
|
-
when [
|
|
213
|
-
|
|
214
|
-
when [
|
|
215
|
-
|
|
216
|
-
when [
|
|
217
|
-
|
|
194
|
+
case sides_list
|
|
195
|
+
when [100]
|
|
196
|
+
result_1d100(total, dice_total, cmp_op, target)
|
|
197
|
+
when [20]
|
|
198
|
+
result_1d20(total, dice_total, cmp_op, target)
|
|
199
|
+
when [6, 6]
|
|
200
|
+
result_2d6(total, dice_total, value_list, cmp_op, target)
|
|
218
201
|
end
|
|
219
202
|
|
|
220
|
-
return
|
|
203
|
+
return nil if ret == Result.nothing
|
|
204
|
+
return ret if ret
|
|
221
205
|
|
|
222
206
|
ret =
|
|
223
|
-
case
|
|
224
|
-
when 10
|
|
225
|
-
|
|
226
|
-
when 6
|
|
227
|
-
|
|
207
|
+
case sides_list.uniq
|
|
208
|
+
when [10]
|
|
209
|
+
result_nd10(total, dice_total, value_list, cmp_op, target)
|
|
210
|
+
when [6]
|
|
211
|
+
result_nd6(total, dice_total, value_list, cmp_op, target)
|
|
228
212
|
end
|
|
229
213
|
|
|
230
|
-
return
|
|
214
|
+
return nil if ret == Result.nothing
|
|
215
|
+
return ret if ret
|
|
231
216
|
|
|
232
|
-
|
|
217
|
+
return result_ndx(total, cmp_op, target)
|
|
233
218
|
end
|
|
234
219
|
|
|
235
220
|
# シャドウラン用グリッチ判定
|
|
@@ -242,12 +227,10 @@ module BCDice
|
|
|
242
227
|
private
|
|
243
228
|
|
|
244
229
|
def eval_common_command(command)
|
|
230
|
+
command = change_text(command)
|
|
245
231
|
CommonCommand::COMMANDS.each do |klass|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
@is_secret = cmd.secret?
|
|
250
|
-
return out if out
|
|
232
|
+
result = klass.eval(command, self, @randomizer)
|
|
233
|
+
return result if result
|
|
251
234
|
end
|
|
252
235
|
|
|
253
236
|
return nil
|
|
@@ -265,11 +248,17 @@ module BCDice
|
|
|
265
248
|
command = command[1..-1] if secret # 先頭の 'S' をとる
|
|
266
249
|
|
|
267
250
|
output = eval_game_system_specific_command(command)
|
|
268
|
-
|
|
269
|
-
if output.
|
|
251
|
+
|
|
252
|
+
if output.is_a?(Result)
|
|
253
|
+
output.secret = output.secret? || secret
|
|
254
|
+
return output
|
|
255
|
+
elsif output.nil? || output.empty? || output == "1"
|
|
270
256
|
return nil
|
|
271
257
|
else
|
|
272
|
-
return
|
|
258
|
+
return Result.new.tap do |r|
|
|
259
|
+
r.text = output.to_s
|
|
260
|
+
r.secret = secret
|
|
261
|
+
end
|
|
273
262
|
end
|
|
274
263
|
end
|
|
275
264
|
|
|
@@ -277,39 +266,31 @@ module BCDice
|
|
|
277
266
|
# @return [String, nil]
|
|
278
267
|
def eval_game_system_specific_command(command); end
|
|
279
268
|
|
|
280
|
-
#
|
|
269
|
+
# 成功か失敗か返す
|
|
281
270
|
#
|
|
282
|
-
# @param
|
|
283
|
-
# @
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
if
|
|
288
|
-
|
|
271
|
+
# @param total [Integer]
|
|
272
|
+
# @param cmp_op [Symbol]
|
|
273
|
+
# @param target [Number]
|
|
274
|
+
# @return [Result]
|
|
275
|
+
def result_ndx(total, cmp_op, target)
|
|
276
|
+
if target.is_a?(String)
|
|
277
|
+
nil
|
|
278
|
+
elsif total.send(cmp_op, target)
|
|
279
|
+
Result.success(translate("success"))
|
|
289
280
|
else
|
|
290
|
-
"
|
|
281
|
+
Result.failure(translate("failure"))
|
|
291
282
|
end
|
|
292
283
|
end
|
|
293
284
|
|
|
294
|
-
|
|
295
|
-
# @return [nil]
|
|
296
|
-
def check_1D100(total, dice_total, cmp_op, target); end
|
|
285
|
+
def result_1d100(total, dice_total, cmp_op, target); end
|
|
297
286
|
|
|
298
|
-
|
|
299
|
-
# @return [nil]
|
|
300
|
-
def check_1D20(total, dice_total, cmp_op, target); end
|
|
287
|
+
def result_1d20(total, dice_total, cmp_op, target); end
|
|
301
288
|
|
|
302
|
-
|
|
303
|
-
# @return [nil]
|
|
304
|
-
def check_nD10(total, dice_total, dice_list, cmp_op, target); end
|
|
289
|
+
def result_nd10(total, dice_total, value_list, cmp_op, target); end
|
|
305
290
|
|
|
306
|
-
|
|
307
|
-
# @return [nil]
|
|
308
|
-
def check_2D6(total, dice_total, dice_list, cmp_op, target); end
|
|
291
|
+
def result_2d6(total, dice_total, value_list, cmp_op, target); end
|
|
309
292
|
|
|
310
|
-
|
|
311
|
-
# @return [nil]
|
|
312
|
-
def check_nD6(total, dice_total, dice_list, cmp_op, target); end
|
|
293
|
+
def result_nd6(total, dice_total, value_list, cmp_op, target); end
|
|
313
294
|
|
|
314
295
|
def get_table_by_2d6(table)
|
|
315
296
|
get_table_by_nD6(table, 2)
|
|
@@ -421,3 +402,8 @@ module BCDice
|
|
|
421
402
|
end
|
|
422
403
|
end
|
|
423
404
|
end
|
|
405
|
+
|
|
406
|
+
I18n::Backend::Simple.include(I18n::Backend::Fallbacks)
|
|
407
|
+
I18n.load_path << Dir[File.join(__dir__, "../../i18n/**/*.yml")]
|
|
408
|
+
I18n.default_locale = :ja_jp
|
|
409
|
+
I18n.fallbacks.defaults = [:ja_jp]
|