bcdice 3.0.0.pre.alpha.1 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +70 -0
- data/README.md +34 -7
- 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 +75 -0
- data/i18n/DetatokoSaga/ko_kr.yml +75 -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 +1063 -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/MagicaLogia/ko_kr.yml +564 -0
- data/i18n/MonotoneMuseum/ja_jp.yml +561 -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.rb +4 -1
- data/lib/bcdice/arithmetic.rb +22 -0
- data/lib/bcdice/arithmetic/node.rb +223 -0
- data/lib/bcdice/arithmetic/parser.rb +240 -0
- data/lib/bcdice/arithmetic_evaluator.rb +7 -156
- data/lib/bcdice/base.rb +94 -101
- data/lib/bcdice/command/lexer.rb +57 -0
- data/lib/bcdice/command/parsed.rb +65 -0
- data/lib/bcdice/command/parser.rb +489 -0
- data/lib/bcdice/common_command.rb +4 -0
- data/lib/bcdice/common_command/add_dice.rb +8 -42
- data/lib/bcdice/common_command/add_dice/node.rb +221 -72
- data/lib/bcdice/common_command/add_dice/parser.rb +391 -274
- data/lib/bcdice/common_command/add_dice/randomizer.rb +27 -33
- data/lib/bcdice/common_command/barabara_dice.rb +8 -47
- data/lib/bcdice/common_command/barabara_dice/node.rb +92 -0
- data/lib/bcdice/common_command/barabara_dice/parser.rb +336 -0
- data/lib/bcdice/common_command/barabara_dice/result.rb +22 -0
- data/lib/bcdice/common_command/calc.rb +9 -30
- data/lib/bcdice/common_command/calc/node.rb +39 -0
- data/lib/bcdice/common_command/calc/parser.rb +271 -0
- data/lib/bcdice/common_command/choice.rb +137 -19
- data/lib/bcdice/common_command/d66_dice.rb +52 -34
- data/lib/bcdice/common_command/lexer.rb +47 -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/upper_dice.rb +12 -129
- data/lib/bcdice/common_command/upper_dice/node.rb +181 -0
- data/lib/bcdice/common_command/upper_dice/parser.rb +433 -0
- data/lib/bcdice/common_command/version.rb +11 -17
- data/lib/bcdice/deprecated/checker.rb +78 -0
- data/lib/bcdice/dice_table.rb +3 -0
- data/lib/bcdice/dice_table/chain_table.rb +2 -0
- data/lib/bcdice/dice_table/d66_grid_table.rb +10 -0
- data/lib/bcdice/dice_table/d66_parity_table.rb +36 -0
- data/lib/bcdice/dice_table/d66_range_table.rb +2 -0
- data/lib/bcdice/dice_table/d66_table.rb +12 -0
- data/lib/bcdice/dice_table/roll_result.rb +2 -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 +10 -0
- data/lib/bcdice/enum.rb +2 -0
- data/lib/bcdice/format.rb +2 -0
- data/lib/bcdice/game_system.rb +17 -1
- data/lib/bcdice/game_system/AFF2e.rb +1 -1
- data/lib/bcdice/game_system/AceKillerGene.rb +3 -3
- data/lib/bcdice/game_system/Airgetlamh.rb +3 -3
- data/lib/bcdice/game_system/AlchemiaStruggle.rb +346 -0
- data/lib/bcdice/game_system/Alsetto.rb +1 -1
- data/lib/bcdice/game_system/Alshard.rb +1 -2
- data/lib/bcdice/game_system/AlterRaise.rb +2 -2
- data/lib/bcdice/game_system/Amadeus.rb +47 -508
- data/lib/bcdice/game_system/Amadeus_Korean.rb +12 -456
- data/lib/bcdice/game_system/AngelGear.rb +123 -0
- data/lib/bcdice/game_system/AnimaAnimus.rb +2 -6
- 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 +7 -5
- data/lib/bcdice/game_system/BadLife.rb +2 -2
- data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
- data/lib/bcdice/game_system/BeastBindTrinity.rb +3 -13
- data/lib/bcdice/game_system/BeginningIdol.rb +6 -7
- data/lib/bcdice/game_system/BeginningIdol_Korean.rb +6 -7
- data/lib/bcdice/game_system/BladeOfArcana.rb +6 -6
- data/lib/bcdice/game_system/BlindMythos.rb +12 -10
- data/lib/bcdice/game_system/BloodCrusade.rb +54 -81
- data/lib/bcdice/game_system/BloodMoon.rb +43 -3
- data/lib/bcdice/game_system/CardRanker.rb +24 -65
- data/lib/bcdice/game_system/ChaosFlare.rb +4 -4
- data/lib/bcdice/game_system/Chill.rb +1 -1
- data/lib/bcdice/game_system/CodeLayerd.rb +37 -67
- data/lib/bcdice/game_system/ColossalHunter.rb +3 -4
- 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 +99 -98
- data/lib/bcdice/game_system/Cthulhu7th.rb +117 -370
- 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 -15
- 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 +13 -9
- 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 +3 -3
- data/lib/bcdice/game_system/DemonParasite.rb +1 -2
- data/lib/bcdice/game_system/DesperateRun.rb +163 -0
- data/lib/bcdice/game_system/DetatokoSaga.rb +69 -152
- data/lib/bcdice/game_system/DetatokoSaga_Korean.rb +9 -277
- data/lib/bcdice/game_system/DiceBot.rb +22 -4
- data/lib/bcdice/game_system/DiceOfTheDead.rb +9 -6
- data/lib/bcdice/game_system/DoubleCross.rb +145 -157
- 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 +5 -6
- data/lib/bcdice/game_system/EmbryoMachine.rb +6 -6
- 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 -2
- 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 +465 -569
- data/lib/bcdice/game_system/FullMetalPanic.rb +1 -2
- 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 +140 -39
- data/lib/bcdice/game_system/GardenOrder.rb +3 -3
- data/lib/bcdice/game_system/GehennaAn.rb +4 -4
- 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/Gundog.rb +1 -1
- data/lib/bcdice/game_system/GundogRevised.rb +4 -4
- data/lib/bcdice/game_system/GundogZero.rb +3 -3
- data/lib/bcdice/game_system/GurpsFW.rb +4 -8
- data/lib/bcdice/game_system/HarnMaster.rb +2 -2
- data/lib/bcdice/game_system/HatsuneMiku.rb +2 -3
- data/lib/bcdice/game_system/HouraiGakuen.rb +1 -1
- data/lib/bcdice/game_system/HuntersMoon.rb +17 -111
- data/lib/bcdice/game_system/Illusio.rb +27 -36
- data/lib/bcdice/game_system/InfiniteBabeL.rb +518 -0
- data/lib/bcdice/game_system/Insane.rb +90 -717
- data/lib/bcdice/game_system/Insane_Korean.rb +7 -719
- data/lib/bcdice/game_system/JekyllAndHyde.rb +42 -0
- data/lib/bcdice/game_system/JuinKansen.rb +251 -0
- 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 +20 -169
- data/lib/bcdice/game_system/KemonoNoMori.rb +1 -1
- data/lib/bcdice/game_system/KillDeathBusiness.rb +189 -1180
- data/lib/bcdice/game_system/KillDeathBusiness_Korean.rb +8 -1460
- 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 +3 -6
- data/lib/bcdice/game_system/MagicaLogia.rb +158 -1044
- data/lib/bcdice/game_system/MagicaLogia_Korean.rb +66 -0
- data/lib/bcdice/game_system/MeikyuDays.rb +2 -3
- data/lib/bcdice/game_system/MeikyuKingdom.rb +7 -7
- data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +7 -8
- data/lib/bcdice/game_system/MetalHead.rb +1 -1
- data/lib/bcdice/game_system/MetalHeadExtream.rb +7 -7
- data/lib/bcdice/game_system/MetallicGuardian.rb +1 -2
- data/lib/bcdice/game_system/MonotoneMuseum.rb +41 -241
- 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 +37 -76
- data/lib/bcdice/game_system/Nechronica_Korean.rb +11 -128
- data/lib/bcdice/game_system/NeverCloud.rb +540 -5
- data/lib/bcdice/game_system/NightWizard.rb +2 -2
- data/lib/bcdice/game_system/NightWizard3rd.rb +1 -1
- data/lib/bcdice/game_system/NightmareHunterDeep.rb +3 -4
- data/lib/bcdice/game_system/NinjaSlayer.rb +33 -43
- 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 +14 -18
- data/lib/bcdice/game_system/OrgaRain.rb +19 -27
- data/lib/bcdice/game_system/Paradiso.rb +3 -3
- 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 +23 -123
- data/lib/bcdice/game_system/PhantasmAdventure.rb +0 -4
- data/lib/bcdice/game_system/Postman.rb +3 -3
- data/lib/bcdice/game_system/PulpCthulhu.rb +3 -3
- data/lib/bcdice/game_system/Raisondetre.rb +3 -3
- data/lib/bcdice/game_system/RecordOfLodossWar.rb +8 -7
- data/lib/bcdice/game_system/RecordOfSteam.rb +1 -1
- data/lib/bcdice/game_system/RokumonSekai2.rb +3 -3
- data/lib/bcdice/game_system/RuinBreakers.rb +296 -0
- data/lib/bcdice/game_system/RyuTuber.rb +6 -4
- data/lib/bcdice/game_system/Ryutama.rb +2 -2
- data/lib/bcdice/game_system/SRS.rb +1 -7
- data/lib/bcdice/game_system/SamsaraBallad.rb +5 -4
- data/lib/bcdice/game_system/Satasupe.rb +90 -866
- data/lib/bcdice/game_system/ScreamHighSchool.rb +4 -4
- 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 +5 -5
- data/lib/bcdice/game_system/ShinobiGami.rb +75 -40
- data/lib/bcdice/game_system/ShoujoTenrankai.rb +3 -3
- data/lib/bcdice/game_system/Skynauts.rb +2 -2
- data/lib/bcdice/game_system/SteamPunkers.rb +7 -5
- data/lib/bcdice/game_system/StellarKnights.rb +2 -5
- data/lib/bcdice/game_system/SterileLife.rb +2 -2
- data/lib/bcdice/game_system/StrangerOfSwordCity.rb +2 -3
- data/lib/bcdice/game_system/StratoShout.rb +39 -268
- data/lib/bcdice/game_system/StratoShout_Korean.rb +8 -283
- data/lib/bcdice/game_system/Strave.rb +2 -2
- data/lib/bcdice/game_system/SwordWorld.rb +52 -189
- data/lib/bcdice/game_system/SwordWorld2_0.rb +21 -150
- data/lib/bcdice/game_system/SwordWorld2_5.rb +126 -41
- data/lib/bcdice/game_system/TherapieSein.rb +3 -3
- data/lib/bcdice/game_system/TokumeiTenkousei.rb +2 -2
- data/lib/bcdice/game_system/TokyoGhostResearch.rb +2 -2
- data/lib/bcdice/game_system/Torg.rb +3 -3
- data/lib/bcdice/game_system/Torg1_5.rb +1 -1
- data/lib/bcdice/game_system/TorgEternity.rb +5 -8
- data/lib/bcdice/game_system/TrinitySeven.rb +3 -3
- data/lib/bcdice/game_system/TunnelsAndTrolls.rb +7 -7
- data/lib/bcdice/game_system/TwilightGunsmoke.rb +2 -3
- data/lib/bcdice/game_system/UnsungDuet.rb +139 -0
- data/lib/bcdice/game_system/Utakaze.rb +2 -2
- 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 +7 -7
- data/lib/bcdice/game_system/Warhammer4.rb +326 -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/Yggdrasill.rb +605 -0
- data/lib/bcdice/game_system/ZettaiReido.rb +2 -2
- 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/cook_tables.rb +119 -0
- data/lib/bcdice/game_system/filled_with/lot_tables.rb +155 -0
- data/lib/bcdice/game_system/meikyu_kingdom/item_table.rb +2 -0
- data/lib/bcdice/game_system/meikyu_kingdom/kingdom_name_table.rb +2 -0
- data/lib/bcdice/game_system/meikyu_kingdom/landscape_table.rb +2 -0
- data/lib/bcdice/game_system/meikyu_kingdom/name_tables.rb +2 -0
- data/lib/bcdice/game_system/meikyu_kingdom/placename_table.rb +2 -0
- data/lib/bcdice/game_system/meikyu_kingdom/tables.rb +2 -0
- data/lib/bcdice/game_system/meikyu_kingdom/word_table.rb +2 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/item_table.rb +2 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/kingdom_table.rb +2 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/name_table.rb +2 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/table.rb +2 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/word_table.rb +2 -0
- data/lib/bcdice/game_system/one_way_heroics/dungeon_table.rb +2 -0
- data/lib/bcdice/game_system/one_way_heroics/random_event_table.rb +2 -0
- data/lib/bcdice/game_system/one_way_heroics/tables.rb +2 -0
- 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 +104 -0
- data/lib/bcdice/loader.rb +17 -12
- data/lib/bcdice/normalize.rb +3 -1
- data/lib/bcdice/preprocessor.rb +23 -44
- data/lib/bcdice/randomizer.rb +14 -0
- data/lib/bcdice/repl.rb +4 -2
- data/lib/bcdice/result.rb +87 -0
- data/lib/bcdice/translate.rb +13 -0
- data/lib/bcdice/user_defined_dice_table.rb +28 -15
- data/lib/bcdice/version.rb +3 -1
- metadata +101 -24
- data/.editorconfig +0 -21
- data/.github/.codecov.yaml +0 -10
- data/.github/workflows/coverage.yaml +0 -21
- data/.github/workflows/lint.yaml +0 -13
- data/.github/workflows/test.yml +0 -20
- data/.gitignore +0 -14
- data/.rubocop.yml +0 -96
- data/.rubocop_todo.yml +0 -113
- data/Gemfile +0 -11
- data/ROADMAP.md +0 -30
- data/Rakefile +0 -118
- data/bcdice.gemspec +0 -27
- data/bin/repl.rb +0 -21
- data/docs/README.txt +0 -2028
- data/docs/dicebot_sort_key.md +0 -72
- data/docs/how_to_make_dicebot.md +0 -453
- data/lib/bcdice/command_parser.rb +0 -242
@@ -1,8 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "bcdice/common_command/add_dice"
|
2
4
|
require "bcdice/common_command/barabara_dice"
|
3
5
|
require "bcdice/common_command/calc"
|
4
6
|
require "bcdice/common_command/choice"
|
5
7
|
require "bcdice/common_command/d66_dice"
|
8
|
+
require "bcdice/common_command/repeat"
|
6
9
|
require "bcdice/common_command/reroll_dice"
|
7
10
|
require "bcdice/common_command/upper_dice"
|
8
11
|
require "bcdice/common_command/version"
|
@@ -15,6 +18,7 @@ module BCDice
|
|
15
18
|
Calc,
|
16
19
|
Choice,
|
17
20
|
D66Dice,
|
21
|
+
Repeat,
|
18
22
|
RerollDice,
|
19
23
|
UpperDice,
|
20
24
|
Version,
|
@@ -1,53 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "bcdice/normalize"
|
2
4
|
require "bcdice/common_command/add_dice/parser"
|
3
5
|
require "bcdice/common_command/add_dice/randomizer"
|
4
6
|
|
5
7
|
module BCDice
|
6
8
|
module CommonCommand
|
7
|
-
|
8
|
-
PREFIX_PATTERN = /[
|
9
|
-
|
10
|
-
def initialize(command, randomizer, game_system)
|
11
|
-
@command = command
|
12
|
-
@bcdice = randomizer
|
13
|
-
@diceBot = game_system
|
14
|
-
|
15
|
-
@dice_list = []
|
16
|
-
@is_secret = false
|
17
|
-
end
|
18
|
-
|
19
|
-
def secret?
|
20
|
-
@is_secret
|
21
|
-
end
|
22
|
-
|
23
|
-
def eval()
|
24
|
-
parser = Parser.new(@command)
|
9
|
+
module AddDice
|
10
|
+
PREFIX_PATTERN = /[+\-\dD(\[]+/.freeze
|
25
11
|
|
26
|
-
|
27
|
-
|
28
|
-
|
12
|
+
class << self
|
13
|
+
def eval(command, game_system, randomizer)
|
14
|
+
cmd = Parser.parse(command)
|
15
|
+
cmd&.eval(game_system, randomizer)
|
29
16
|
end
|
30
|
-
|
31
|
-
randomizer = Randomizer.new(@bcdice, @diceBot, command.cmp_op)
|
32
|
-
total = command.lhs.eval(randomizer)
|
33
|
-
|
34
|
-
output =
|
35
|
-
if randomizer.dice_list.size <= 1 && command.lhs.is_a?(Node::DiceRoll)
|
36
|
-
"(#{command}) > #{total}"
|
37
|
-
else
|
38
|
-
"(#{command}) > #{command.lhs.output} > #{total}"
|
39
|
-
end
|
40
|
-
|
41
|
-
dice_list = randomizer.dice_list
|
42
|
-
|
43
|
-
if command.cmp_op
|
44
|
-
dice_total = dice_list.inject(&:+)
|
45
|
-
output += @diceBot.check_result(total, dice_total, dice_list, randomizer.sides, command.cmp_op, command.rhs)
|
46
|
-
end
|
47
|
-
|
48
|
-
@is_secret = parser.secret?
|
49
|
-
|
50
|
-
return output
|
51
17
|
end
|
52
18
|
end
|
53
19
|
end
|
@@ -1,8 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "singleton"
|
4
|
+
|
3
5
|
module BCDice
|
4
6
|
module CommonCommand
|
5
|
-
|
7
|
+
module AddDice
|
6
8
|
# 加算ロールの構文解析木のノードを格納するモジュール
|
7
9
|
module Node
|
8
10
|
# 加算ロールコマンドのノード。
|
@@ -24,28 +26,59 @@ module BCDice
|
|
24
26
|
# @param [Object] lhs 左辺のノード
|
25
27
|
# @param [Symbol] cmp_op 比較演算子
|
26
28
|
# @param [Integer, String] rhs 右辺のノード
|
27
|
-
def initialize(lhs, cmp_op, rhs)
|
29
|
+
def initialize(secret, lhs, cmp_op = nil, rhs = nil)
|
30
|
+
@secret = secret
|
28
31
|
@lhs = lhs
|
29
32
|
@cmp_op = cmp_op
|
30
33
|
@rhs = rhs
|
31
34
|
end
|
32
35
|
|
33
36
|
# 文字列に変換する
|
37
|
+
# @param game_system [BCDice::Base]
|
34
38
|
# @return [String]
|
35
|
-
def
|
36
|
-
@lhs.
|
39
|
+
def expr(game_system)
|
40
|
+
@lhs.expr(game_system) + cmp_op_text + @rhs&.eval(game_system, nil).to_s
|
37
41
|
end
|
38
42
|
|
39
43
|
# ノードのS式を返す
|
40
44
|
# @return [String]
|
41
45
|
def s_exp
|
42
46
|
if @cmp_op
|
43
|
-
"(Command (#{@cmp_op} #{@lhs.s_exp} #{@rhs}))"
|
47
|
+
"(Command (#{@cmp_op} #{@lhs.s_exp} #{@rhs.s_exp}))"
|
44
48
|
else
|
45
49
|
"(Command #{@lhs.s_exp})"
|
46
50
|
end
|
47
51
|
end
|
48
52
|
|
53
|
+
def eval(game_system, randomizer)
|
54
|
+
randomizer = Randomizer.new(randomizer, game_system)
|
55
|
+
total = @lhs.eval(game_system, randomizer)
|
56
|
+
|
57
|
+
interrim_expr =
|
58
|
+
unless randomizer.rand_results.size <= 1 && @lhs.is_a?(Node::DiceRoll)
|
59
|
+
@lhs.output
|
60
|
+
end
|
61
|
+
|
62
|
+
result =
|
63
|
+
if @cmp_op
|
64
|
+
rhs = @rhs.eval(game_system, nil)
|
65
|
+
game_system.check_result(total, randomizer.rand_results, @cmp_op, rhs)
|
66
|
+
end
|
67
|
+
result ||= Result.new
|
68
|
+
|
69
|
+
sequence = [
|
70
|
+
"(#{expr(game_system)})",
|
71
|
+
interrim_expr,
|
72
|
+
total,
|
73
|
+
result&.text
|
74
|
+
].compact
|
75
|
+
|
76
|
+
result.tap do |r|
|
77
|
+
r.secret = @secret
|
78
|
+
r.text = sequence.join(" > ")
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
49
82
|
private
|
50
83
|
|
51
84
|
# メッセージ中で比較演算子をどのように表示するかを返す
|
@@ -62,6 +95,28 @@ module BCDice
|
|
62
95
|
end
|
63
96
|
end
|
64
97
|
|
98
|
+
class UndecidedTarget
|
99
|
+
include Singleton
|
100
|
+
|
101
|
+
def eval(_game_system, _randomizer)
|
102
|
+
"?"
|
103
|
+
end
|
104
|
+
|
105
|
+
def include_dice?
|
106
|
+
false
|
107
|
+
end
|
108
|
+
|
109
|
+
def expr(_game_system)
|
110
|
+
"?"
|
111
|
+
end
|
112
|
+
|
113
|
+
def output
|
114
|
+
"?"
|
115
|
+
end
|
116
|
+
|
117
|
+
alias s_exp output
|
118
|
+
end
|
119
|
+
|
65
120
|
# 二項演算子のノード
|
66
121
|
class BinaryOp
|
67
122
|
# ノードを初期化する
|
@@ -78,19 +133,28 @@ module BCDice
|
|
78
133
|
#
|
79
134
|
# 左右のオペランドをそれぞれ再帰的に評価した後で、演算を行う。
|
80
135
|
#
|
81
|
-
# @param [
|
136
|
+
# @param game_system [BCDice::Base]
|
137
|
+
# @param randomizer [Randomizer] ランダマイザ
|
82
138
|
# @return [Integer] 評価結果
|
83
|
-
def eval(randomizer)
|
84
|
-
lhs = @lhs.eval(randomizer)
|
85
|
-
rhs = @rhs.eval(randomizer)
|
139
|
+
def eval(game_system, randomizer)
|
140
|
+
lhs = @lhs.eval(game_system, randomizer)
|
141
|
+
rhs = @rhs.eval(game_system, randomizer)
|
86
142
|
|
87
|
-
return calc(lhs, rhs)
|
143
|
+
return calc(lhs, rhs, game_system.round_type)
|
144
|
+
end
|
145
|
+
|
146
|
+
# @return [Boolean]
|
147
|
+
def include_dice?
|
148
|
+
@lhs.include_dice? || @rhs.include_dice?
|
88
149
|
end
|
89
150
|
|
90
151
|
# 文字列に変換する
|
91
152
|
# @return [String]
|
92
|
-
def
|
93
|
-
|
153
|
+
def expr(game_system)
|
154
|
+
lhs = @lhs.expr(game_system)
|
155
|
+
rhs = @rhs.expr(game_system)
|
156
|
+
|
157
|
+
"#{lhs}#{@op}#{rhs}"
|
94
158
|
end
|
95
159
|
|
96
160
|
# メッセージへの出力を返す
|
@@ -108,10 +172,11 @@ module BCDice
|
|
108
172
|
private
|
109
173
|
|
110
174
|
# 演算を行う
|
111
|
-
# @param [Integer] lhs 左のオペランド
|
112
|
-
# @param [Integer]
|
175
|
+
# @param lhs [Integer] lhs 左のオペランド
|
176
|
+
# @param rhs [Integer] 右のオペランド
|
177
|
+
# @param _round_type [Symbol] ゲームシステムの端数処理設定
|
113
178
|
# @return [Integer] 演算の結果
|
114
|
-
def calc(lhs, rhs)
|
179
|
+
def calc(lhs, rhs, _round_type)
|
115
180
|
lhs.send(@op, rhs)
|
116
181
|
end
|
117
182
|
|
@@ -140,8 +205,8 @@ module BCDice
|
|
140
205
|
# 通常の結果の末尾に、端数処理方法を示す記号を付加する。
|
141
206
|
#
|
142
207
|
# @return [String]
|
143
|
-
def
|
144
|
-
"#{super}#{rounding_method}"
|
208
|
+
def expr(game_system)
|
209
|
+
"#{super(game_system)}#{rounding_method}"
|
145
210
|
end
|
146
211
|
|
147
212
|
# メッセージへの出力を返す
|
@@ -168,26 +233,51 @@ module BCDice
|
|
168
233
|
end
|
169
234
|
|
170
235
|
# 演算を行う
|
171
|
-
# @param [Integer]
|
172
|
-
# @param [Integer]
|
236
|
+
# @param lhs [Integer] 左のオペランド
|
237
|
+
# @param rhs [Integer] 右のオペランド
|
238
|
+
# @param round_type [Symbol] ゲームシステムの端数処理設定
|
173
239
|
# @return [Integer] 演算の結果
|
174
|
-
def calc(lhs, rhs)
|
240
|
+
def calc(lhs, rhs, round_type)
|
175
241
|
if rhs.zero?
|
176
242
|
return 1
|
177
243
|
end
|
178
244
|
|
179
|
-
return divide_and_round(lhs, rhs)
|
245
|
+
return divide_and_round(lhs, rhs, round_type)
|
180
246
|
end
|
181
247
|
|
182
248
|
# 除算および端数処理を行う
|
183
|
-
# @param [Integer]
|
184
|
-
# @param [Integer]
|
249
|
+
# @param dividend [Integer] 被除数
|
250
|
+
# @param divisor [Integer] 除数(0以外)
|
251
|
+
# @param round_type [Symbol] ゲームシステムの端数処理設定
|
185
252
|
# @return [Integer]
|
186
|
-
def divide_and_round(
|
253
|
+
def divide_and_round(dividend, divisor, round_type)
|
187
254
|
raise NotImplementedError
|
188
255
|
end
|
189
256
|
end
|
190
257
|
|
258
|
+
# 除算(端数処理はゲームシステム依存)のノード
|
259
|
+
class DivideWithGameSystemDefault < DivideBase
|
260
|
+
ROUNDING_METHOD = ""
|
261
|
+
|
262
|
+
private
|
263
|
+
|
264
|
+
# 除算および端数処理を行う
|
265
|
+
# @param dividend [Integer] 被除数
|
266
|
+
# @param divisor [Integer] 除数(0以外)
|
267
|
+
# @param round_type [Symbol] ゲームシステムの端数処理設定
|
268
|
+
# @return [Integer]
|
269
|
+
def divide_and_round(dividend, divisor, round_type)
|
270
|
+
case round_type
|
271
|
+
when RoundType::CEIL
|
272
|
+
(dividend.to_f / divisor).ceil
|
273
|
+
when RoundType::ROUND
|
274
|
+
(dividend.to_f / divisor).round
|
275
|
+
else # RoundType::FLOOR
|
276
|
+
dividend / divisor
|
277
|
+
end
|
278
|
+
end
|
279
|
+
end
|
280
|
+
|
191
281
|
# 除算(切り上げ)のノード
|
192
282
|
class DivideWithRoundingUp < DivideBase
|
193
283
|
# 端数処理方法を示す記号
|
@@ -196,10 +286,9 @@ module BCDice
|
|
196
286
|
private
|
197
287
|
|
198
288
|
# 除算および端数処理を行う
|
199
|
-
# @param
|
200
|
-
# @param [Integer] divisor 除数(0以外)
|
289
|
+
# @param (see DivideWithGameSystemDefault#divide_and_round)
|
201
290
|
# @return [Integer]
|
202
|
-
def divide_and_round(dividend, divisor)
|
291
|
+
def divide_and_round(dividend, divisor, _round_type)
|
203
292
|
(dividend.to_f / divisor).ceil
|
204
293
|
end
|
205
294
|
end
|
@@ -212,10 +301,9 @@ module BCDice
|
|
212
301
|
private
|
213
302
|
|
214
303
|
# 除算および端数処理を行う
|
215
|
-
# @param
|
216
|
-
# @param [Integer] divisor 除数(0以外)
|
304
|
+
# @param (see DivideWithGameSystemDefault#divide_and_round)
|
217
305
|
# @return [Integer]
|
218
|
-
def divide_and_round(dividend, divisor)
|
306
|
+
def divide_and_round(dividend, divisor, _round_type)
|
219
307
|
(dividend.to_f / divisor).round
|
220
308
|
end
|
221
309
|
end
|
@@ -223,15 +311,14 @@ module BCDice
|
|
223
311
|
# 除算(切り捨て)のノード
|
224
312
|
class DivideWithRoundingDown < DivideBase
|
225
313
|
# 端数処理方法を示す記号
|
226
|
-
ROUNDING_METHOD = ""
|
314
|
+
ROUNDING_METHOD = "F"
|
227
315
|
|
228
316
|
private
|
229
317
|
|
230
318
|
# 除算および端数処理を行う
|
231
|
-
# @param
|
232
|
-
# @param [Integer] divisor 除数(0以外)
|
319
|
+
# @param (see DivideWithGameSystemDefault#divide_and_round)
|
233
320
|
# @return [Integer]
|
234
|
-
def divide_and_round(dividend, divisor)
|
321
|
+
def divide_and_round(dividend, divisor, _round_type)
|
235
322
|
dividend / divisor
|
236
323
|
end
|
237
324
|
end
|
@@ -254,14 +341,19 @@ module BCDice
|
|
254
341
|
#
|
255
342
|
# @param [Randomizer] randomizer ランダマイザ
|
256
343
|
# @return [Integer] 評価結果
|
257
|
-
def eval(randomizer)
|
258
|
-
-@body.eval(randomizer)
|
344
|
+
def eval(game_system, randomizer)
|
345
|
+
-@body.eval(game_system, randomizer)
|
346
|
+
end
|
347
|
+
|
348
|
+
# @return [Boolean]
|
349
|
+
def include_dice?
|
350
|
+
@body.include_dice?
|
259
351
|
end
|
260
352
|
|
261
353
|
# 文字列に変換する
|
262
354
|
# @return [String]
|
263
|
-
def
|
264
|
-
"-#{@body}"
|
355
|
+
def expr(game_system)
|
356
|
+
"-#{@body.expr(game_system)}"
|
265
357
|
end
|
266
358
|
|
267
359
|
# メッセージへの出力を返す
|
@@ -283,8 +375,8 @@ module BCDice
|
|
283
375
|
# @param [Number] times ダイスを振る回数のノード
|
284
376
|
# @param [Number] sides ダイスの面数のノード
|
285
377
|
def initialize(times, sides)
|
286
|
-
@times = times
|
287
|
-
@sides = sides
|
378
|
+
@times = times
|
379
|
+
@sides = sides
|
288
380
|
|
289
381
|
# ダイスを振った結果の出力
|
290
382
|
@text = nil
|
@@ -297,24 +389,30 @@ module BCDice
|
|
297
389
|
#
|
298
390
|
# @param [Randomizer] randomizer ランダマイザ
|
299
391
|
# @return [Integer] 評価結果(出目の合計値)
|
300
|
-
def eval(randomizer)
|
301
|
-
|
392
|
+
def eval(game_system, randomizer)
|
393
|
+
times = @times.eval(game_system, nil)
|
394
|
+
sides = eval_sides(game_system)
|
302
395
|
|
303
|
-
|
304
|
-
total = dice_groups.flatten.reduce(0, &:+)
|
396
|
+
dice_list = randomizer.roll(times, sides)
|
305
397
|
|
306
|
-
|
307
|
-
|
308
|
-
.join
|
309
|
-
@text = "#{total}#{dice_str}"
|
398
|
+
total = dice_list.sum()
|
399
|
+
@text = "#{total}[#{dice_list.join(',')}]"
|
310
400
|
|
311
401
|
return total
|
312
402
|
end
|
313
403
|
|
404
|
+
# @return [Boolean]
|
405
|
+
def include_dice?
|
406
|
+
true
|
407
|
+
end
|
408
|
+
|
314
409
|
# 文字列に変換する
|
315
410
|
# @return [String]
|
316
|
-
def
|
317
|
-
|
411
|
+
def expr(game_system)
|
412
|
+
times = @times.eval(game_system, nil)
|
413
|
+
sides = eval_sides(game_system)
|
414
|
+
|
415
|
+
"#{times}D#{sides}"
|
318
416
|
end
|
319
417
|
|
320
418
|
# メッセージへの出力を返す
|
@@ -326,7 +424,32 @@ module BCDice
|
|
326
424
|
# ノードのS式を返す
|
327
425
|
# @return [String]
|
328
426
|
def s_exp
|
329
|
-
"(DiceRoll #{@times} #{@sides})"
|
427
|
+
"(DiceRoll #{@times.s_exp} #{@sides.s_exp})"
|
428
|
+
end
|
429
|
+
|
430
|
+
private
|
431
|
+
|
432
|
+
def eval_sides(game_system)
|
433
|
+
@sides.eval(game_system, nil)
|
434
|
+
end
|
435
|
+
end
|
436
|
+
|
437
|
+
class ImplicitSidesDiceRoll < DiceRoll
|
438
|
+
# @param [Number] times ダイスを振る回数のノード
|
439
|
+
def initialize(times)
|
440
|
+
@times = times
|
441
|
+
@text = nil
|
442
|
+
end
|
443
|
+
|
444
|
+
# @return [String]
|
445
|
+
def s_exp
|
446
|
+
"(ImplicitSidesDiceRoll #{@times.s_exp})"
|
447
|
+
end
|
448
|
+
|
449
|
+
private
|
450
|
+
|
451
|
+
def eval_sides(game_system)
|
452
|
+
game_system.sides_implicit_d
|
330
453
|
end
|
331
454
|
end
|
332
455
|
|
@@ -369,14 +492,14 @@ module BCDice
|
|
369
492
|
).freeze
|
370
493
|
|
371
494
|
# ノードを初期化する
|
372
|
-
# @param [
|
373
|
-
# @param [
|
374
|
-
# @param [
|
495
|
+
# @param [Object] times ダイスを振る回数のノード
|
496
|
+
# @param [Object] sides ダイスの面数のノード
|
497
|
+
# @param [Object] n_filtering ダイスを残す/減らす個数のノード
|
375
498
|
# @param [Filter] filter フィルタ
|
376
499
|
def initialize(times, sides, n_filtering, filter)
|
377
|
-
@times = times
|
378
|
-
@sides = sides
|
379
|
-
@n_filtering = n_filtering
|
500
|
+
@times = times
|
501
|
+
@sides = sides
|
502
|
+
@n_filtering = n_filtering
|
380
503
|
@filter = filter
|
381
504
|
|
382
505
|
# ダイスを振った結果の出力
|
@@ -390,21 +513,34 @@ module BCDice
|
|
390
513
|
#
|
391
514
|
# @param [Randomizer] randomizer ランダマイザ
|
392
515
|
# @return [Integer] 評価結果(出目の合計値)
|
393
|
-
def eval(randomizer)
|
394
|
-
|
516
|
+
def eval(game_system, randomizer)
|
517
|
+
times = @times.eval(game_system, nil)
|
518
|
+
sides = @sides.eval(game_system, nil)
|
519
|
+
n_filtering = @n_filtering.eval(game_system, nil)
|
520
|
+
|
521
|
+
sorted_values = randomizer.roll(times, sides).sort
|
395
522
|
total = @filter
|
396
|
-
.apply[sorted_values,
|
397
|
-
.
|
523
|
+
.apply[sorted_values, n_filtering]
|
524
|
+
.sum()
|
398
525
|
|
399
526
|
@text = "#{total}[#{sorted_values.join(',')}]"
|
400
527
|
|
401
528
|
return total
|
402
529
|
end
|
403
530
|
|
531
|
+
# @return [Boolean]
|
532
|
+
def include_dice?
|
533
|
+
true
|
534
|
+
end
|
535
|
+
|
404
536
|
# 文字列に変換する
|
405
537
|
# @return [String]
|
406
|
-
def
|
407
|
-
|
538
|
+
def expr(game_system)
|
539
|
+
times = @times.eval(game_system, nil)
|
540
|
+
sides = @sides.eval(game_system, nil)
|
541
|
+
n_filtering = @n_filtering.eval(game_system, nil)
|
542
|
+
|
543
|
+
"#{times}D#{sides}#{@filter.abbr}#{n_filtering}"
|
408
544
|
end
|
409
545
|
|
410
546
|
# メッセージへの出力を返す
|
@@ -416,7 +552,7 @@ module BCDice
|
|
416
552
|
# ノードのS式を返す
|
417
553
|
# @return [String]
|
418
554
|
def s_exp
|
419
|
-
"(DiceRollWithFilter #{@times} #{@sides} #{@filter.abbr.inspect} #{@n_filtering})"
|
555
|
+
"(DiceRollWithFilter #{@times.s_exp} #{@sides.s_exp} #{@filter.abbr.inspect} #{@n_filtering.s_exp})"
|
420
556
|
end
|
421
557
|
end
|
422
558
|
|
@@ -429,13 +565,18 @@ module BCDice
|
|
429
565
|
|
430
566
|
# @param randomizer [Randomizer]
|
431
567
|
# @return [integer]
|
432
|
-
def eval(randomizer)
|
433
|
-
@expr.eval(randomizer)
|
568
|
+
def eval(game_system, randomizer)
|
569
|
+
@expr.eval(game_system, randomizer)
|
570
|
+
end
|
571
|
+
|
572
|
+
# @return [Boolean]
|
573
|
+
def include_dice?
|
574
|
+
@expr.include_dice?
|
434
575
|
end
|
435
576
|
|
436
577
|
# @return [String]
|
437
|
-
def
|
438
|
-
"(#{@expr})"
|
578
|
+
def expr(game_system)
|
579
|
+
"(#{@expr.expr(game_system)})"
|
439
580
|
end
|
440
581
|
|
441
582
|
# @return [String]
|
@@ -469,18 +610,26 @@ module BCDice
|
|
469
610
|
|
470
611
|
# ノードを評価する
|
471
612
|
# @return [Integer] 格納している値
|
472
|
-
def eval(_randomizer)
|
613
|
+
def eval(_game_system, _randomizer)
|
473
614
|
@literal
|
474
615
|
end
|
475
616
|
|
617
|
+
# @return [Boolean]
|
618
|
+
def include_dice?
|
619
|
+
false
|
620
|
+
end
|
621
|
+
|
476
622
|
# 文字列に変換する
|
477
623
|
# @return [String]
|
478
|
-
def
|
624
|
+
def expr(_game_system)
|
625
|
+
@literal.to_s
|
626
|
+
end
|
627
|
+
|
628
|
+
def output
|
479
629
|
@literal.to_s
|
480
630
|
end
|
481
631
|
|
482
|
-
alias output
|
483
|
-
alias s_exp to_s
|
632
|
+
alias s_exp output
|
484
633
|
end
|
485
634
|
end
|
486
635
|
end
|