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,153 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class Utakaze < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = 'Utakaze'
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = 'ウタカゼ'
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = 'うたかせ'
|
14
|
+
|
15
|
+
# ダイスボットの使い方
|
16
|
+
HELP_MESSAGE = <<~MESSAGETEXT
|
17
|
+
・行為判定ロール(nUK)
|
18
|
+
n個のサイコロで行為判定ロール。ゾロ目の最大個数を成功レベルとして表示。nを省略すると2UK扱い。
|
19
|
+
例)3UK :サイコロ3個で行為判定
|
20
|
+
例)UK :サイコロ2個で行為判定
|
21
|
+
不等号用いた成否判定は現時点では実装してません。
|
22
|
+
・クリティカルコール付き行為判定ロール(nUK@c or nUKc)
|
23
|
+
cに「龍のダイス目」を指定した行為判定ロール。
|
24
|
+
ゾロ目ではなく、cと同じ値の出目数x2が成功レベルとなります。
|
25
|
+
例)3UK@5 :龍のダイス「月」でクリティカルコール宣言したサイコロ3個の行為判定
|
26
|
+
MESSAGETEXT
|
27
|
+
|
28
|
+
register_prefix(['\d*UK[@\d]*.*'])
|
29
|
+
|
30
|
+
def initialize(command)
|
31
|
+
super(command)
|
32
|
+
@arrayDragonDiceName = ['', '風', '雨', '雲', '影', '月', '歌']
|
33
|
+
@enabled_upcase_input = false
|
34
|
+
end
|
35
|
+
|
36
|
+
def eval_game_system_specific_command(command)
|
37
|
+
debug('eval_game_system_specific_command command', command)
|
38
|
+
|
39
|
+
result = ''
|
40
|
+
|
41
|
+
case command
|
42
|
+
when /(\d+)?UK(\@?(\d))?(>=(\d+))?/i
|
43
|
+
base = (Regexp.last_match(1) || 2).to_i
|
44
|
+
crit = Regexp.last_match(3).to_i
|
45
|
+
diff = Regexp.last_match(5).to_i
|
46
|
+
result = checkRoll(base, crit, diff)
|
47
|
+
end
|
48
|
+
|
49
|
+
return nil if result.empty?
|
50
|
+
|
51
|
+
return "#{command} > #{result}"
|
52
|
+
end
|
53
|
+
|
54
|
+
def checkRoll(base, crit, diff = 0)
|
55
|
+
result = ""
|
56
|
+
|
57
|
+
base = getValue(base)
|
58
|
+
crit = getValue(crit)
|
59
|
+
|
60
|
+
return result if base < 1
|
61
|
+
|
62
|
+
crit = 6 if crit > 6
|
63
|
+
|
64
|
+
result += "(#{base}d6)"
|
65
|
+
|
66
|
+
diceList = @randomizer.roll_barabara(base, 6).sort
|
67
|
+
|
68
|
+
result += " > [#{diceList.join(',')}] > "
|
69
|
+
result += getRollResultString(diceList, crit, diff)
|
70
|
+
|
71
|
+
return result
|
72
|
+
end
|
73
|
+
|
74
|
+
def getRollResultString(diceList, crit, diff)
|
75
|
+
success, maxnum, setCount = getSuccessInfo(diceList, crit, diff)
|
76
|
+
|
77
|
+
result = ""
|
78
|
+
|
79
|
+
if isDragonDice(crit)
|
80
|
+
result += "龍のダイス「#{@arrayDragonDiceName[crit]}」(#{crit})を使用 > "
|
81
|
+
end
|
82
|
+
|
83
|
+
if success
|
84
|
+
result += "成功レベル:#{maxnum} (#{setCount}セット)"
|
85
|
+
if diff != 0
|
86
|
+
diffSuccess = (maxnum >= diff)
|
87
|
+
if diffSuccess
|
88
|
+
result += " > 成功"
|
89
|
+
else
|
90
|
+
result += " > 失敗"
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
else
|
95
|
+
result += "失敗"
|
96
|
+
end
|
97
|
+
|
98
|
+
return result
|
99
|
+
end
|
100
|
+
|
101
|
+
def getSuccessInfo(diceList, crit, _diff)
|
102
|
+
debug("checkSuccess diceList, crit", diceList, crit)
|
103
|
+
|
104
|
+
diceCountHash = getDiceCountHash(diceList, crit)
|
105
|
+
debug("diceCountHash", diceCountHash)
|
106
|
+
|
107
|
+
maxnum = 0
|
108
|
+
successDiceList = []
|
109
|
+
countThreshold = (isDragonDice(crit) ? 1 : 2)
|
110
|
+
|
111
|
+
diceCountHash.each do |dice, count|
|
112
|
+
maxnum = count if count > maxnum
|
113
|
+
successDiceList << dice if count >= countThreshold
|
114
|
+
end
|
115
|
+
|
116
|
+
debug("successDiceList", successDiceList)
|
117
|
+
|
118
|
+
if successDiceList.size <= 0
|
119
|
+
# 失敗:ゾロ目無し(全部違う)
|
120
|
+
return false, 0, 0
|
121
|
+
end
|
122
|
+
|
123
|
+
# 竜のダイスの場合
|
124
|
+
maxnum *= 2 if isDragonDice(crit)
|
125
|
+
|
126
|
+
# 成功:ゾロ目あり
|
127
|
+
return true, maxnum, successDiceList.size
|
128
|
+
end
|
129
|
+
|
130
|
+
# 各ダイスの個数を数えてHashにする
|
131
|
+
def getDiceCountHash(dice_list, critical)
|
132
|
+
dice_list
|
133
|
+
.select { |dice| isNomalDice(critical) || dice == critical }
|
134
|
+
.group_by(&:itself)
|
135
|
+
.transform_values(&:size)
|
136
|
+
end
|
137
|
+
|
138
|
+
def isNomalDice(crit)
|
139
|
+
!isDragonDice(crit)
|
140
|
+
end
|
141
|
+
|
142
|
+
def isDragonDice(crit)
|
143
|
+
(crit != 0)
|
144
|
+
end
|
145
|
+
|
146
|
+
def getValue(number)
|
147
|
+
return 0 if number > 100
|
148
|
+
|
149
|
+
return number
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
@@ -0,0 +1,132 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class VampireTheMasquerade5th < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = 'VampireTheMasquerade5th'
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = 'Vampire: The Masquerade 5th Edition'
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = 'うあんはいあさますかれえと5'
|
14
|
+
|
15
|
+
# ダイスボットの使い方
|
16
|
+
HELP_MESSAGE = <<~MESSAGETEXT
|
17
|
+
・判定コマンド(nVMFx+x)
|
18
|
+
注意:難易度は必要成功数を表す
|
19
|
+
|
20
|
+
難易度指定:判定成功と失敗、Critical判定、
|
21
|
+
(Hungerダイスがある場合)Messy CriticalとBestial Failureチェックを行う
|
22
|
+
例) (難易度)VMF(ダイスプール)+(Hungerダイス)
|
23
|
+
(難易度)VMF(ダイスプール)
|
24
|
+
|
25
|
+
難易度省略:判定失敗、Critical、(Hungerダイスがある場合)Bestial Failureチェックを行う
|
26
|
+
判定成功、Messy Criticalのチェックを行わない
|
27
|
+
例) VMF(ダイスプール)+(Hungerダイス)
|
28
|
+
VMF(ダイスプール)
|
29
|
+
|
30
|
+
難易度0指定:全てのチェックを行わない
|
31
|
+
例) 0VMF(ダイスプール)+(Hungerダイス)
|
32
|
+
0VMF(ダイスプール)
|
33
|
+
|
34
|
+
MESSAGETEXT
|
35
|
+
|
36
|
+
DIFFICULTY_INDEX = 1
|
37
|
+
DICE_POOL_INDEX = 3
|
38
|
+
HUNGER_DICE_INDEX = 5
|
39
|
+
|
40
|
+
# 難易度に指定可能な特殊値
|
41
|
+
NOT_CHECK_SUCCESS = -1 # 判定成功にかかわるチェックを行わない(判定失敗に関わるチェックは行う)
|
42
|
+
|
43
|
+
# ダイスボットで使用するコマンドを配列で列挙する
|
44
|
+
register_prefix(['\d*VMF.*'])
|
45
|
+
|
46
|
+
def eval_game_system_specific_command(command)
|
47
|
+
m = /\A(\d+)?(VMF)(\d+)(\+(\d+))?/.match(command)
|
48
|
+
unless m
|
49
|
+
return ''
|
50
|
+
end
|
51
|
+
|
52
|
+
dice_pool = m[DICE_POOL_INDEX].to_i
|
53
|
+
dice_text, success_dice, ten_dice, = make_dice_roll(dice_pool)
|
54
|
+
result_text = "(#{dice_pool}D10"
|
55
|
+
|
56
|
+
hunger_dice_pool = m[HUNGER_DICE_INDEX]&.to_i
|
57
|
+
if hunger_dice_pool
|
58
|
+
hunger_dice_text, hunger_success_dice, hunger_ten_dice, hunger_botch_dice = make_dice_roll(hunger_dice_pool)
|
59
|
+
|
60
|
+
ten_dice += hunger_ten_dice
|
61
|
+
success_dice += hunger_success_dice
|
62
|
+
|
63
|
+
result_text = "#{result_text}+#{hunger_dice_pool}D10) > [#{dice_text}]+[#{hunger_dice_text}] "
|
64
|
+
else
|
65
|
+
hunger_ten_dice = 0
|
66
|
+
hunger_botch_dice = 0
|
67
|
+
result_text = "#{result_text}) > [#{dice_text}] "
|
68
|
+
end
|
69
|
+
|
70
|
+
success_dice += get_critical_success(ten_dice)
|
71
|
+
|
72
|
+
difficulty = m[DIFFICULTY_INDEX] ? m[DIFFICULTY_INDEX].to_i : NOT_CHECK_SUCCESS
|
73
|
+
|
74
|
+
result_text = "#{result_text} 成功数=#{success_dice}"
|
75
|
+
|
76
|
+
if difficulty > 0
|
77
|
+
if success_dice >= difficulty
|
78
|
+
judgment_result = get_success_result(ten_dice >= 2, hunger_ten_dice)
|
79
|
+
else
|
80
|
+
judgment_result = get_fail_result(hunger_botch_dice)
|
81
|
+
end
|
82
|
+
result_text = "#{result_text} 難易度=#{difficulty}#{judgment_result}"
|
83
|
+
elsif difficulty < 0
|
84
|
+
if success_dice == 0
|
85
|
+
judgment_result = get_fail_result(hunger_botch_dice)
|
86
|
+
else
|
87
|
+
judgment_result = ""
|
88
|
+
end
|
89
|
+
result_text = "#{result_text}#{judgment_result}"
|
90
|
+
end
|
91
|
+
|
92
|
+
return result_text
|
93
|
+
end
|
94
|
+
|
95
|
+
def get_critical_success(ten_dice)
|
96
|
+
# 10の目が2個毎に追加2成功
|
97
|
+
return ((ten_dice / 2) * 2)
|
98
|
+
end
|
99
|
+
|
100
|
+
def make_dice_roll(dice_pool)
|
101
|
+
dice_list = @randomizer.roll_barabara(dice_pool, 10)
|
102
|
+
|
103
|
+
dice_text = dice_list.join(',')
|
104
|
+
success_dice = dice_list.count { |x| x >= 6 }
|
105
|
+
ten_dice = dice_list.count(10)
|
106
|
+
botch_dice = dice_list.count(1)
|
107
|
+
|
108
|
+
return dice_text, success_dice, ten_dice, botch_dice
|
109
|
+
end
|
110
|
+
|
111
|
+
def get_success_result(is_critical, hunger_ten_dice)
|
112
|
+
judgment_result = ":判定成功!"
|
113
|
+
if hunger_ten_dice > 0 && is_critical
|
114
|
+
return "#{judgment_result} [Messy Critical]"
|
115
|
+
elsif is_critical
|
116
|
+
return "#{judgment_result} [Critical Win]"
|
117
|
+
end
|
118
|
+
|
119
|
+
return judgment_result
|
120
|
+
end
|
121
|
+
|
122
|
+
def get_fail_result(hunger_botch_dice)
|
123
|
+
judgment_result = ":判定失敗!"
|
124
|
+
if hunger_botch_dice > 0
|
125
|
+
return "#{judgment_result} [Bestial Failure]"
|
126
|
+
end
|
127
|
+
|
128
|
+
return judgment_result
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
@@ -0,0 +1,555 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class Villaciel < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = 'Villaciel'
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = '蒼天のヴィラシエル'
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = 'そうてんのういらしえる'
|
14
|
+
|
15
|
+
# ダイスボットの使い方
|
16
|
+
HELP_MESSAGE = <<~MESSAGETEXT
|
17
|
+
・判定 nVBS[>=d]
|
18
|
+
[]内省略時は達成数の計算のみ。トライアンフあり。
|
19
|
+
n: ダイス数、d: 難易度
|
20
|
+
・フロンティア判定 nVF
|
21
|
+
n: ダイス数
|
22
|
+
nVBSを行い、うでまえ表を参照した結果を表示します。
|
23
|
+
・採掘スキル判定 nVM
|
24
|
+
n: ダイス数
|
25
|
+
判定に成功した場合、自動的に獲得できるアイテム数も表示されます。
|
26
|
+
・宝石加工スキル判定 nVG
|
27
|
+
n: ダイス数
|
28
|
+
・前職表 PJ[x] x=V,A
|
29
|
+
[]内は省略可能。
|
30
|
+
PJ, PJV: 「蒼天のヴィラシエル」掲載の前職表 PJA: 「白雲のアルメサール」掲載の前職表
|
31
|
+
・ぷちクエスト表 PQ[x] x=V,A
|
32
|
+
[]内は省略可能。
|
33
|
+
PQ, PQV: 「蒼天のヴィラシエル」掲載のぷちクエスト表 PQA: 「白雲のアルメサール」掲載のぷちクエスト表
|
34
|
+
・アクシデント表 AC
|
35
|
+
・もふもふ表 MMx x=I,A,V,VV,VA,D
|
36
|
+
MMI: 昆虫 MMA: 動物 MMV, MMVV: ヴィラシエル種(「蒼天のヴィラシエル」掲載) MMVA: ヴィラシエル種(「白雲のアルメサール」掲載) MMD: 鋼龍種
|
37
|
+
・釣り表 Fx x=L,R,W,G,B,C,S
|
38
|
+
FL: 湖 FR: 河 FW: 白雲 FG: 灰雲 FB: 黒雲 FC: 共通 FS: 塩湖
|
39
|
+
・不食植物表 IP[x] x=V,A
|
40
|
+
IP, IPV: 「蒼天のヴィラシエル」掲載の不食植物表 IPA: 「白雲のアルメサール」掲載の不食植物表
|
41
|
+
・可食植物表 EP[x][n] x=V,A
|
42
|
+
[]内は省略可能。
|
43
|
+
n: 可食植物表番号
|
44
|
+
EP[n], EPV[n]: 「蒼天のヴィラシエル」掲載の可食植物表。[]内省略時はnを1D6で決定し、EPVnを実行。ただし、1D6の出目が6ならば、「好きな表を選んでおっけー!」と表示。
|
45
|
+
EPA[n]: 「白雲のアルメサール」掲載の可食植物表。[]内省略時は1D6を振り、出目が偶数ならばEPA1、奇数ならばEPA2を実行。
|
46
|
+
・変異植物表 MP
|
47
|
+
・改良種表 IS
|
48
|
+
MESSAGETEXT
|
49
|
+
|
50
|
+
register_prefix(['\\d+VBS(>=\\d+)?', '\\d+VF', '\\d+VM', '\\d+VG', 'PJ[VA]?', 'PQ[VA]?', 'AC', 'MM([IAD]|V[VA]?)', 'F[LRWGBCS]', 'IP[VA]?', 'EP[VA]?\\d?', 'MP', 'IS'])
|
51
|
+
|
52
|
+
def initialize(command)
|
53
|
+
super(command)
|
54
|
+
|
55
|
+
@enabled_d66 = true
|
56
|
+
@d66_sort_type = D66SortType::NO_SORT # D66あり。ただし、現行ルールにある6x6の表については別のコマンドを用意
|
57
|
+
@round_type = RoundType::CEIL # 端数は切り上げ
|
58
|
+
end
|
59
|
+
|
60
|
+
def eval_game_system_specific_command(command)
|
61
|
+
case command
|
62
|
+
when /\d+VBS/
|
63
|
+
resolute_action(command)
|
64
|
+
when /\d+VF/
|
65
|
+
resolute_frontier_action(command)
|
66
|
+
when /\d+VM/
|
67
|
+
resolute_mining_action(command)
|
68
|
+
when /\d+VG/
|
69
|
+
resolute_cutting_gem_action(command)
|
70
|
+
when /PJ[VA]?/
|
71
|
+
use_previous_job_chart(command)
|
72
|
+
when /PQ[VA]?/
|
73
|
+
use_petit_quest_chart(command)
|
74
|
+
when 'AC'
|
75
|
+
use_accident_chart(command)
|
76
|
+
when /MM([IAD]|V[VA]?)/
|
77
|
+
use_mohumohu_chart(command)
|
78
|
+
when /F[LRWGBCS]/
|
79
|
+
use_fishing_chart(command)
|
80
|
+
when /IP[VA]?/
|
81
|
+
use_inedible_plant_chart(command)
|
82
|
+
when /EP[VA]?\d?/
|
83
|
+
use_edible_plant_chart(command)
|
84
|
+
when 'MP'
|
85
|
+
use_mutant_plant_chart(command)
|
86
|
+
when 'IS'
|
87
|
+
use_improved_species_chart(command)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
private
|
92
|
+
|
93
|
+
D6 = 6
|
94
|
+
LEAST_SUCCESS_ROLL = 4
|
95
|
+
SUCCESS_STR = ' > 成功'
|
96
|
+
FAILURE_STR = ' > 失敗'
|
97
|
+
|
98
|
+
def derive_achievement(num_dices, command)
|
99
|
+
# 達成数計算の際にはトライアンフ「出目が6だったダイスは達成数2としてカウントする」を考慮する必要があるが、要は「達成数=成功数+出目が最大値だったダイスの数」になる
|
100
|
+
dice_list = @randomizer.roll_barabara(num_dices, D6)
|
101
|
+
dice_str = dice_list.join(",")
|
102
|
+
num_triumph_dices = dice_list.count(6)
|
103
|
+
num_successes = dice_list.count { |dice| dice >= LEAST_SUCCESS_ROLL }
|
104
|
+
achievement = num_successes + num_triumph_dices
|
105
|
+
|
106
|
+
output = "(#{command}) > [#{dice_str}] > 達成数: #{achievement}"
|
107
|
+
return achievement, output
|
108
|
+
end
|
109
|
+
|
110
|
+
def resolute_action(command)
|
111
|
+
match_data = command.match(/(\d+)VBS(>=(\d+))?/)
|
112
|
+
|
113
|
+
num_dices = match_data[1].to_i
|
114
|
+
achievement, output = derive_achievement(num_dices, command)
|
115
|
+
return output unless match_data[2]
|
116
|
+
|
117
|
+
difficulty = match_data[3].to_i
|
118
|
+
output += achievement >= difficulty ? SUCCESS_STR : FAILURE_STR
|
119
|
+
|
120
|
+
return output
|
121
|
+
end
|
122
|
+
|
123
|
+
SKILL_CHART = ['左に3マス、上に3マス動かす', '左に2マス、上に2マス動かす', '右か下に1マス動かしてもよい', '右に1マス、下に1マス動かす', '好きな方向に最大で3マス動かしてもよい(1マスでも良い)', '好きな方向に最大で5マス動かしてもよい(1〜3マスでもよい)'].freeze
|
124
|
+
|
125
|
+
def resolute_frontier_action(command)
|
126
|
+
num_dices = command.match(/(\d+)VF/)[1].to_i
|
127
|
+
achievement, output = derive_achievement(num_dices, command)
|
128
|
+
|
129
|
+
chart_index =
|
130
|
+
case achievement
|
131
|
+
when 0..2
|
132
|
+
achievement
|
133
|
+
when 3, 4
|
134
|
+
3
|
135
|
+
when 5..8
|
136
|
+
4
|
137
|
+
else
|
138
|
+
5
|
139
|
+
end
|
140
|
+
|
141
|
+
skill = SKILL_CHART[chart_index]
|
142
|
+
return "#{output} > #{skill}"
|
143
|
+
end
|
144
|
+
|
145
|
+
def resolute_difficult_action(num_dices, least_success_roll, command)
|
146
|
+
# 1個でもleast_success_roll以上の出目が出たら成功となる判定
|
147
|
+
|
148
|
+
# 出目の最大値がnならば「1個でもn以上の出目が出た」ことになる
|
149
|
+
dice_list = @randomizer.roll_barabara(num_dices, D6)
|
150
|
+
dice_str = dice_list.join(',')
|
151
|
+
largest_roll = dice_list.max()
|
152
|
+
is_successful = largest_roll >= least_success_roll
|
153
|
+
|
154
|
+
output = "(#{command}) > [#{dice_str}]"
|
155
|
+
output += is_successful ? SUCCESS_STR : FAILURE_STR
|
156
|
+
|
157
|
+
return output, is_successful
|
158
|
+
end
|
159
|
+
|
160
|
+
LEAST_MINING_SUCCESS_ROLL = 5
|
161
|
+
LEAST_GEM_SUCCESS_ROLL = 6
|
162
|
+
|
163
|
+
def resolute_mining_action(command)
|
164
|
+
num_dices = command.match(/(\d+)VM/)[1].to_i
|
165
|
+
output, is_successful = resolute_difficult_action(num_dices, LEAST_MINING_SUCCESS_ROLL, command)
|
166
|
+
return output unless is_successful
|
167
|
+
|
168
|
+
roll_result = @randomizer.roll_once(D6)
|
169
|
+
"#{output} > (1D6) > [#{roll_result}] > アイテムを#{roll_result}個獲得"
|
170
|
+
end
|
171
|
+
|
172
|
+
def resolute_cutting_gem_action(command)
|
173
|
+
num_dices = command.match(/(\d+)VG/)[1].to_i
|
174
|
+
resolute_difficult_action(num_dices, LEAST_GEM_SUCCESS_ROLL, command)[0]
|
175
|
+
end
|
176
|
+
|
177
|
+
VILLACIEL_PREVIOUS_JOB_CHART = [['農家: 知力+1 器用さ+1 開拓/1Lv',
|
178
|
+
'漁師: 知力+1 ひらめき+1 釣り/1Lv',
|
179
|
+
'狩人: 武力+1 ひらめき+1 穴掘り/1Lv',
|
180
|
+
'鍛冶職人: 武力+1 器用さ+1 採掘/1Lv',
|
181
|
+
'牧場主: 仲良し+2 開拓/1Lv',
|
182
|
+
'採掘師: 器用さ+1 ひらめき+1 採掘/1Lv'].freeze,
|
183
|
+
['家事手伝い: 器用さ+1 仲良し+1 調理/1Lv',
|
184
|
+
'調理師: 知力+1 ひらめき+1 調理/1Lv',
|
185
|
+
'細工師: 器用さ+2 採掘/1Lv',
|
186
|
+
'大工: 武力+1 器用さ+1 木こり/1Lv',
|
187
|
+
'荒くれ者: 武力+2 穴掘り/1Lv',
|
188
|
+
'王国騎士: 武力+1 知力+1 木こり/1Lv'].freeze].freeze
|
189
|
+
ARMESEAR_PREVIOUS_JOB_CHART = [['農家: 知力+1 器用さ+1 開拓/1Lv',
|
190
|
+
'漁師: 知力+1 ひらめき+1 釣り/1Lv',
|
191
|
+
'狩人: 武力+1 ひらめき+1 穴掘り/1Lv',
|
192
|
+
'鍛冶職人: 武力+1 器用さ+1 採掘/1Lv',
|
193
|
+
'牧場主: 仲良し+2 開拓/1Lv',
|
194
|
+
'採掘師: 器用さ+1 ひらめき+1 採掘/1Lv'].freeze,
|
195
|
+
['羊飼い: 仲良し+2 もふもふ/1Lv',
|
196
|
+
'芽拾い: 知力+1 武力+1 採集/1Lv',
|
197
|
+
'服屋見習い: 器用さ+2 裁縫/1Lv',
|
198
|
+
'革細工見習い: 知力+2 裁縫/1Lv',
|
199
|
+
'商人: 知力+1 仲良し+1 基礎になるスキル/1Lv',
|
200
|
+
'旅人: 武力+1 知力+1 基礎になるスキル/1Lv'].freeze,
|
201
|
+
['家事手伝い: 器用さ+1 仲良し+1 調理/1Lv',
|
202
|
+
'調理師: 知力+1 ひらめき+1 調理/1Lv',
|
203
|
+
'細工師: 器用さ+2 採掘/1Lv or 調合・細工/1Lv',
|
204
|
+
'大工: 武力+1 器用さ+1 木こり/1Lv',
|
205
|
+
'荒くれ者: 武力+2 穴掘り/1Lv',
|
206
|
+
'王国騎士: 武力+1 知力+1 木こり/1Lv'].freeze].freeze
|
207
|
+
|
208
|
+
def use_previous_job_chart(command)
|
209
|
+
match_data = command.match(/PJ([VA]?)/)
|
210
|
+
chart_symbol = match_data[1] == '' ? 'V' : match_data[1]
|
211
|
+
|
212
|
+
roll_result1 = @randomizer.roll_once(D6)
|
213
|
+
chart_text, roll_result2 = case chart_symbol
|
214
|
+
when 'V' then get_table_by_1d6(VILLACIEL_PREVIOUS_JOB_CHART[(roll_result1 - 1) / 3])
|
215
|
+
when 'A' then get_table_by_1d6(ARMESEAR_PREVIOUS_JOB_CHART[(roll_result1 - 1) / 2])
|
216
|
+
end
|
217
|
+
|
218
|
+
chart_title = case chart_symbol
|
219
|
+
when 'V' then '前職表(ヴィラシエル)'
|
220
|
+
when 'A' then '前職表(アルメサール)'
|
221
|
+
end
|
222
|
+
"#{chart_title} > [#{roll_result1},#{roll_result2}] > #{chart_text}"
|
223
|
+
end
|
224
|
+
|
225
|
+
VILLACIEL_PETIT_QUEST_CHART = [['家の補強のために: 【目的:木を1個納品】【報酬:各自2プサイ】見えを張っていい木材で家を作ったら木材が枯渇しちまった。頼む、原木を分けてくれないか?',
|
226
|
+
'孫のために: 【目的:花を1個納品】【報酬:各自2プサイ】綺麗な花があればいい色に染められるだろうと思うてな。孫のために必要なの。',
|
227
|
+
'人間界の草: 【目的:草を2個納品】【報酬:各自3プサイ】魔界にはない草が生えていると噂で聞いたことがある。その草がほしい。',
|
228
|
+
'種の生存のために: 【目的:可食植物(改良種を除く)を1個納品】【報酬:各自1プサイ】育ちが悪い同種の植物と掛け合わせてみたいのでサンプルがほしい。',
|
229
|
+
'にんげんのたべもの!: 【目的:可食植物(改良種を除く)を1個納品】【報酬:各自2プサイ】ひゅーいあはなにをたべるの! たべたい!',
|
230
|
+
'まかいのたべものって?: 【目的:可食植物の改良種を2個納品】【報酬:各自3プサイ】まぞくさんはなにたべるですか! おしえてください。'].freeze,
|
231
|
+
['おうちなおしたいの!: 【目的:石材を1個納品】【報酬:各自1プサイ】おうちがぼろぼろだから、ママのかわりになおしたいの。',
|
232
|
+
'娘の結婚式に必要なんだ!: 【目的:宝石を2個納品】【報酬:各自3プサイ】ちょっとさきなんですが、娘が結婚するので結婚式用の宝石を集めています。',
|
233
|
+
'金属がたりない!: 【目的:金属を1個納品】【報酬:各自2プサイ】いい武器にはいい金属を。今回必要なのは……。',
|
234
|
+
'村の聖堂を直したいんだ!: 【目的:石材を1個納品】【報酬:各自2プサイ】聖堂を直していたが石材がたりない!',
|
235
|
+
'弟の甲冑に使うんだ!: 【目的:金属を2個納品】【報酬:各自3プサイ】最近、近くの鉱山から「ある金属」が姿を消した。',
|
236
|
+
'おねえちゃんのたんじょうびに: 【目的:宝石を1個納品】【報酬:各自2プサイ】たんじょうびぷれぜんとにほうせきあげたらおねえちゃんよろこぶかな?'].freeze,
|
237
|
+
['パパのために: 【目的:木材の家具を1個納品】【報酬:各自2プサイ】はたらいてばっかりのパパにプレゼントしたいの。おねがいします!',
|
238
|
+
'癒やされたい……: 【目的:石材の家具を1個納品】【報酬:各自2プサイ】仕事時間は短いとはいえ、激務。めちゃつらい。癒しになる家具がほしい。',
|
239
|
+
'いい家具に囲まれてみたい: 【目的:金属の家具を1個納品】【報酬:各自2プサイ】開拓も最高だけど、他の島の人とも交流したい。人を呼べるような家を作るためには最高の家具が必要!',
|
240
|
+
'家具の在庫不足: 【目的:木材の装飾品を1個納品】【報酬:各自3プサイ】困ったことに職人に逃げられた! このままじゃ、お店開けない!!',
|
241
|
+
'と、ともだちにあげるの!: 【目的:石材の装飾品を1個納品】【報酬:各自3プサイ】えっと、お、おきにいりのともだちがいるんだ。そ、そのこのたんじょうびだから、プレゼントしたくって。',
|
242
|
+
'親の木に飾りを: 【目的:金属の装飾品を1個納品】【報酬:各自3プサイ】元気のない親の木を心配してペッコ達が大騒ぎしているんだ。君はいつまでも美しいよと伝えたくてね。一つ助力をお願いするよ。'].freeze,
|
243
|
+
['そちらの河魚を食してみたい: 【目的:河魚を2個納品】【報酬:各自3プサイ】おいしい河魚がいるときいたことがあるのです。さぁ、はやく、釣ってきてくださいまし。',
|
244
|
+
'研究に使用したい: 【目的:湖魚を1個納品】【報酬:各自1プサイ】そちらの世界にある同名の魚が本当にこちらの世界にいるものと一緒か確かめたいのです。',
|
245
|
+
'しろいくもにすむおさかながみたい!: 【目的:白雲の雲魚を1個納品】【報酬:各自2プサイ】こっちにはしろいくもってなかなかないの! しろいくものおさかな、たべてみたいな。',
|
246
|
+
'釣り師がいないのでお魚がほしい: 【目的:灰雲の雲魚を2個納品】【報酬:各自3プサイ】野菜や肉もいいが魚も食べたい……。頼む、魚を釣ってきてくれないか?',
|
247
|
+
'まっくろなくもにすむおさかな!: 【目的:黒雲の雲魚を1個納品】【報酬:各自2プサイ】まっくろなくもにはどんなさかながすんでるの? みせて、みせて!',
|
248
|
+
'人間界では見られない魚が見たい!: 【目的:共通の雲魚を1個納品】【報酬:各自2プサイ】他の魚の雲を利用して泳ぎ回る魚がいると聞いたよ。ぜひ見せてほしいな。'].freeze].freeze
|
249
|
+
ARMESEAR_PETIT_QUEST_CHART = [['お祭り用の布が足りないの!: 【目的:布を2個納品】【報酬:各自4プサイ】お祭り前なのに、布職人が腰を痛めちゃったの!',
|
250
|
+
'お洋服がぼろぼろになっちゃったの: 【目的:布を1個納品】【報酬:各自2プサイ】おばあちゃんに作ってもらった服がボロボロになっちゃったから、なおしたいの。',
|
251
|
+
'ぎっくり腰からのヘルプ: 【目的:薪を3個納品】【報酬:各自3プサイ】仕事してたらぎっくり腰になっちゃったのだ。頼むのだ。',
|
252
|
+
'不調には栄養たっぷりのミルクを: 【目的:ミルクを1個納品】【報酬:各自3プサイ】体調を崩しちゃったの。栄養満点のミルクを頂戴。',
|
253
|
+
'材料がたりない!: 【目的:???の粗皮を1個納品】【報酬:各自3プサイ】革細工師を目指してるんだけど、皮が足りないんだ。種類は問わないから、早めに頼むよ。',
|
254
|
+
'愛しのガードナーのために: 【目的:???の肉を1個納品】【報酬:各自3プサイ】ガードナーの調子が悪いから、栄養をつけさせたいんだ。肉はなんだっていい、とびっきりのを頼むよ。'].freeze,
|
255
|
+
['灯火をひとつ: 【目的:キャンドルを1個納品】【報酬:各自3プサイ】家の裏に知らない建物があるんだ。まっくらだから明かりが必要で……。',
|
256
|
+
'布の色を頂戴: 【目的:染料を1個納品】【報酬:各自2プサイ】んー、コンテストのために布を織ったのだけど、色が決められないんだ。お願いするよ。',
|
257
|
+
'きれいなのお花を: 【目的:花を1個納品】【報酬:各自2プサイ】パパの誕生日プレゼントを妹と作りたいんだ。お願いできる?',
|
258
|
+
'旅立ちのために: 【目的:衣類を1個納品】【報酬:各自15プサイ】旅立つ弟に服をプレゼントしたいんだ。',
|
259
|
+
'納品物が足りない!: 【目的:革を1個納品】【報酬:各自4プサイ】どうしても納品する皮がたりない……頼む、なんとか用意できないか?',
|
260
|
+
'求)照明: 【目的:照明を1個納品】【報酬:各自10プサイ】引っ越しする最中に照明を壊してしまった! 明日から明かりがないのはつらい……。作ってくれないか?'].freeze,
|
261
|
+
['装備の修復のため: 【目的:革を2個納品】【報酬:各自5プサイ】大事な装備が壊れちゃったんだ! 直すのに必要なんだけど、革を持っているかい?',
|
262
|
+
'主に祝いの品を: 【目的:敷物を1個納品】【報酬:各自15プサイ】誕生日を迎える主にささやかなながらわたしからも祝いの品を送りたいのです。',
|
263
|
+
'手料理を求めて: 【目的:出来栄え5の料理を1個納品】【報酬:各自5プサイ】たまには誰かの料理が食べたいんだ。',
|
264
|
+
'釣り竿が折れちゃって……: 【目的:塩魚を2個納品】【報酬:各自3プサイ】釣り竿が折れちゃったから釣りができないんだ。一匹頼める?',
|
265
|
+
'蝋がほしいの: 【目的:蝋を1個納品】【報酬:各自2プサイ】お兄ちゃんとパパの誕生日プレゼントを作るの。見つからないからお願いできる?',
|
266
|
+
'美しさを求めて: 【目的:アルメサール産の花を1個納品】【報酬:各自3プサイ】美しいお花を摘んで来てくださらない? 美のために必要でしてよ。'].freeze].freeze
|
267
|
+
|
268
|
+
def use_petit_quest_chart(command)
|
269
|
+
match_data = command.match(/PQ([VA]?)/)
|
270
|
+
chart_symbol = match_data[1] == '' ? 'V' : match_data[1]
|
271
|
+
|
272
|
+
roll_result1 = @randomizer.roll_once(D6)
|
273
|
+
chart_text, roll_result2 = case chart_symbol
|
274
|
+
when 'V'
|
275
|
+
chart_index = case roll_result1
|
276
|
+
when 1, 2 then 0
|
277
|
+
when 3, 4 then 1
|
278
|
+
when 5 then 2
|
279
|
+
when 6 then 3
|
280
|
+
end
|
281
|
+
get_table_by_1d6(VILLACIEL_PETIT_QUEST_CHART[chart_index])
|
282
|
+
when 'A' then get_table_by_1d6(ARMESEAR_PETIT_QUEST_CHART[(roll_result1 - 1) / 2])
|
283
|
+
end
|
284
|
+
|
285
|
+
chart_title = case chart_symbol
|
286
|
+
when 'V' then 'ぷちクエスト表(ヴィラシエル)'
|
287
|
+
when 'A' then 'ぷちクエスト表(アルメサール)'
|
288
|
+
end
|
289
|
+
"#{chart_title} > [#{roll_result1},#{roll_result2}] > #{chart_text}"
|
290
|
+
end
|
291
|
+
|
292
|
+
ACCIDENT_CHART = ['飛び猪襲来!: 空飛ぶ猪が浮遊島めがけて突撃してきた! 建物が粉砕される前に迎撃だ!(「蒼天のヴィラシエル」P.46)',
|
293
|
+
'嵐がくるぞ!: 嵐が来るらしいぞ! どれだけ対策できるかが鍵だ!(「蒼天のヴィラシエル」P.47)',
|
294
|
+
'雨が降らないぞ!: おかしいなぁ、雨が降らないぞぉ……? こうなったら雨乞いの踊りだ!(「蒼天のヴィラシエル」P.48)',
|
295
|
+
'トビウオ流星群: きらきら光る流れ星……いや待て! あれはトビウオの群れだー!?(「蒼天のヴィラシエル」P.49)',
|
296
|
+
'すごい雷雨: すごい。ごろごろばりばり聞こえてくる。これは早々に対策しないと直撃するぞ!(「蒼天のヴィラシエル」P.50)',
|
297
|
+
'野菜泥棒出現!: 畑の野菜が盗まれているぞ……? これは犯人を捕まえないと!(「蒼天のヴィラシエル」P.51)'].freeze
|
298
|
+
|
299
|
+
def use_accident_chart(_command)
|
300
|
+
chart_text, roll_result = get_table_by_1d6(ACCIDENT_CHART)
|
301
|
+
"アクシデント表 > [#{roll_result}] > #{chart_text}"
|
302
|
+
end
|
303
|
+
|
304
|
+
def use_6x6_chart(chart, chart_name)
|
305
|
+
# 6x6の表からランダムに参照する
|
306
|
+
# chartは文字列の配列の配列であることを仮定
|
307
|
+
# D66ロールによる表参照と近いが、D66の方は13, 42などの数値に対応した表なのに対し、こちらは「下3マス、右2マス」という風にセルを参照する
|
308
|
+
y_roll = @randomizer.roll_once(D6)
|
309
|
+
cell_text, x_roll = get_table_by_1d6(chart[y_roll - 1])
|
310
|
+
"#{chart_name} > [#{y_roll},#{x_roll}] > 下#{y_roll}マス、右#{x_roll}マス > #{cell_text}"
|
311
|
+
end
|
312
|
+
|
313
|
+
MOHUMOHU_INSECT_CHART = [['小さな虫', '小さな虫', 'カマキリ', 'カマキリ', 'バッタ', 'クワガタ'].freeze,
|
314
|
+
['小さな虫', 'カラスアゲハ', 'カマキリ', 'バッタ', 'オオスカシバ', 'カイコ'].freeze,
|
315
|
+
['ハンミョウ', 'カラスアゲハ', 'カマキリ', 'バッタ', 'カイコ', 'トンボ'].freeze,
|
316
|
+
['ハンミョウ', 'カラスアゲハ', 'カラスアゲハ', 'チッチハチ', 'トンボ', 'トンボ'].freeze,
|
317
|
+
['クワガタ', 'カラスアゲハ', 'チッチハチ', 'チッチハチ', 'アリ', 'アリ'].freeze,
|
318
|
+
['クワガタ', 'チッチハチ', 'チッチハチ', 'チッチハチ', 'アリ', 'アリ'].freeze].freeze
|
319
|
+
|
320
|
+
MOHUMOHU_ANIMAL_CHART = [['トリサン', 'トリサン', 'ブタ', 'ヒツジ', 'タヌキ', 'タヌキ'].freeze,
|
321
|
+
['トリサン', 'ブタ', 'ヒツジ', 'ウッシ', 'キツネ', 'タヌキ'].freeze,
|
322
|
+
['ブタ', 'オグマ', 'ヒツジ', 'キツネ', 'キツネ', 'アタウサギ'].freeze,
|
323
|
+
['ブタ', 'ヒツジ', 'ヒツジ', 'リス', 'シシ', 'ヴィラシエル種(MMV)'].freeze,
|
324
|
+
['ウッシ', 'ウサギ', 'ウサギ', 'シシ', 'アタウサギ', 'オオカミ'].freeze,
|
325
|
+
['ウッシ', 'オグマ', 'クーマ', 'シシ', 'オオカミ', 'ヴィラシエル種(MMV)'].freeze].freeze
|
326
|
+
|
327
|
+
MOHUMOHU_VILLACIEL_CHART = [['ウドン', 'ウドン', 'オボン', 'オボン', 'オボン', 'オワン'].freeze,
|
328
|
+
['ウドン', 'ウドン', 'オボン', 'オワン', 'オワン', 'オワン'].freeze].freeze
|
329
|
+
|
330
|
+
MOHUMOHU_VILLACIEL2_CHART = [['すねーくあし', 'すねーくあし', 'すねーくあし', 'ウタヒ', 'オオトリサン', 'オオトリサン'].freeze,
|
331
|
+
['すねーくあし', 'すねーくあし', 'ホネホネ', 'オオトリサン', 'アマアマガニ', 'ホワホワ'].freeze,
|
332
|
+
['すねーくあし', 'ホネホネ', 'オオトリサン', 'ウタヒ', 'アマアマガニ', 'ペロリ'].freeze,
|
333
|
+
['オオトリサン', 'オオトリサン', 'ホネホネ', 'ホネホネ', 'ホワホワ', 'アマアマガニ'].freeze,
|
334
|
+
['ホネホネ', 'ウタヒ', 'アマアマガニ', 'ペロリ', 'ペロリ', 'ペロリ'].freeze,
|
335
|
+
['オオトリサン', 'ホワホワ', 'ホワホワ', 'アマアマガニ', 'ペロリ', 'ペロリ'].freeze].freeze
|
336
|
+
|
337
|
+
MOHUMOHU_DRAGON_CHART = [['モドモドリス', 'テロメ', 'モドモドリス', 'オジサン', 'オジサン', 'グロッチ'].freeze,
|
338
|
+
['テロメ', 'モドモドリス', 'オジサン', 'テロメ', 'ニホンツノ', 'グロッチ'].freeze,
|
339
|
+
['テロメ', 'グロッチ', 'グロッチ', 'グロッチ', 'オジサン', 'コディ'].freeze,
|
340
|
+
['モドモドリス', 'グロッチ', 'ニホンツノ', 'テロメ', 'テーリー', 'ケラプス'].freeze,
|
341
|
+
['オジサン', 'テロメ', 'テロメ', 'コディ', 'コディ', 'ケラプス'].freeze,
|
342
|
+
['コディ', 'テーリー', 'テーリー', 'コディ', 'ケラプス', 'アサール・ゴッツ'].freeze].freeze
|
343
|
+
|
344
|
+
def use_mohumohu_chart(command)
|
345
|
+
case command
|
346
|
+
when 'MMI' then use_6x6_chart(MOHUMOHU_INSECT_CHART, 'もふもふ表・昆虫')
|
347
|
+
when 'MMA' then use_6x6_chart(MOHUMOHU_ANIMAL_CHART, 'もふもふ表・動物')
|
348
|
+
when /MMV[VA]?/
|
349
|
+
match_data = command.match(/MMV([VA]?)/)
|
350
|
+
chart_symbol = match_data[1] == '' ? 'V' : match_data[1]
|
351
|
+
|
352
|
+
case chart_symbol
|
353
|
+
when 'V'
|
354
|
+
y_roll = @randomizer.roll_once(D6)
|
355
|
+
cell_text, x_roll = get_table_by_1d6(MOHUMOHU_VILLACIEL_CHART[1 - y_roll % 2])
|
356
|
+
"もふもふ表・ヴィラシエル種(ヴィラシエル) > [#{y_roll},#{x_roll}] > 下#{y_roll.even? ? '偶数' : '奇数'}、右#{x_roll}マス > #{cell_text}"
|
357
|
+
when 'A' then use_6x6_chart(MOHUMOHU_VILLACIEL2_CHART, 'もふもふ表・ヴィラシエル種(アルメサール)')
|
358
|
+
end
|
359
|
+
when 'MMD' then use_6x6_chart(MOHUMOHU_DRAGON_CHART, 'もふもふ表・鋼龍種')
|
360
|
+
end
|
361
|
+
end
|
362
|
+
|
363
|
+
FISHING_LAKE_CHART = [['ヤマアイズリ', 'ヤマアイズリ', 'ヤマアイズリ', 'シコウチャ', 'シコウチャ', 'ハナロクショウ'].freeze,
|
364
|
+
['ヤマアイズリ', 'ヤマアイズリ', 'ヤマアイズリ', 'シコウチャ', 'ハナロクショウ', 'ハナロクショウ'].freeze,
|
365
|
+
['ヤマアイズリ', 'ヤマアイズリ', 'シコウチャ', 'シコウチャ', 'ハナモエギ', 'トノチャ'].freeze,
|
366
|
+
['ヤマアイズリ', 'カラスアゲハ', 'シコウチャ', 'ハナロクショウ', 'トノチャ', 'ハナモエギ'].freeze,
|
367
|
+
['シコウチャ', 'シコウチャ', 'ハナロクショウ', 'ハナロクショウ', 'トノチャ', 'ハナモエギ'].freeze,
|
368
|
+
['シコウチャ', 'ハナロクショウ', 'トノチャ', 'トノチャ', 'ハナモエギ', 'シンペキ'].freeze].freeze
|
369
|
+
|
370
|
+
FISHING_RIVER_CHART = [['ケイカンセキ', 'ケイカンセキ', 'ケイカンセキ', 'ケイカンセキ', 'カナリア', 'イワヌ'].freeze,
|
371
|
+
['ケイカンセキ', 'ケイカンセキ', 'カナリア', 'カナリア', 'カナリア', 'イワヌ'].freeze,
|
372
|
+
['ケイカンセキ', 'ケイカンセキ', 'カナリア', 'イワヌ', 'イワヌ', 'ヤマブキ'].freeze,
|
373
|
+
['ケイカンセキ', 'カナリア', 'イワヌ', 'アメイロ', 'アメイロ', 'ヤマブキ'].freeze,
|
374
|
+
['カナリア', 'カナリア', 'イワヌ', 'アメイロ', 'ヤマブキ', 'ヤマブキ'].freeze,
|
375
|
+
['カナリア', 'イワヌ', 'アメイロ', 'アメイロ', 'ヤマブキ', 'コハク'].freeze].freeze
|
376
|
+
|
377
|
+
FISHING_WHITE_CHART = [['ウメガサネ', 'ウメガサネ', 'ウメガサネ', 'ウメガサネ', 'ハネズ', 'ユルシ'].freeze,
|
378
|
+
['ウメガサネ', 'ウメガサネ', 'ウメガサネ', 'ハネズ', 'ソホ', 'シンク'].freeze,
|
379
|
+
['ウメガサネ', 'ウメガサネ', 'ハネズ', 'ソホ', 'ユルシ', 'ユルシ'].freeze,
|
380
|
+
['ウメガサネ', 'ハネズ', 'ソホ', 'ユルシ', 'シンク', 'シンク'].freeze,
|
381
|
+
['ハネズ', 'ソホ', 'ソホ', 'ユルシ', 'シンク', '共通(FC)'].freeze,
|
382
|
+
['ハネズ', 'ソホ', 'ユルシ', 'シンク', '共通(FC)', 'シュアン'].freeze].freeze
|
383
|
+
|
384
|
+
FISHING_GRAY_CHART = [['ウメガサネ', 'ウメガサネ', 'セイラン', 'セイラン', 'ミハナダ', 'ミハナダ'].freeze,
|
385
|
+
['ウメガサネ', 'セイラン', 'セイラン', 'ミハナダ', 'ミハナダ', 'ミハナダ'].freeze,
|
386
|
+
['ウメガサネ', 'ユルシ', 'ミハナダ', 'ミハナダ', 'ミハナダ', 'リンドウ'].freeze,
|
387
|
+
['ユルシ', 'ユルシ', 'セイラン', 'リンドウ', 'リンドウ', 'スミレ'].freeze,
|
388
|
+
['ユルシ', 'ユルシ', 'リンドウ', 'スミレ', 'スミレ', '共通(FC)'].freeze,
|
389
|
+
['ユルシ', 'リンドウ', 'スミレ', 'スミレ', '共通(FC)', 'シゴク'].freeze].freeze
|
390
|
+
|
391
|
+
FISHING_BLACK_CHART = [['セイラン', 'セイラン', 'テツコン', 'テツコン', 'ウスハナ', 'ウスハナ'].freeze,
|
392
|
+
['セイラン', 'セイラン', 'テツコン', 'ウスハナ', 'ウスハナ', 'フカガワネズミ'].freeze,
|
393
|
+
['セイラン', 'テツコン', 'ウスハナ', 'ウスハナ', 'ミハナダ', 'フカガワネズミ'].freeze,
|
394
|
+
['セイラン', 'テツコン', 'ミハナダ', 'ウスハナ', 'フカガワネズミ', 'フカガワネズミ'].freeze,
|
395
|
+
['セイラン', 'ウスハナ', 'ミハナダ', 'ミハナダ', 'ミハナダ', '共通(FC)'].freeze,
|
396
|
+
['テツコン', 'ウスハナ', 'ミハナダ', 'フカガワネズミ', '共通(FC)', 'ルリ'].freeze].freeze
|
397
|
+
|
398
|
+
FISHING_COMMON_CHART = [['トビウオ', 'トビウオ', 'トビウオ', 'オオガメ', 'ロブスター', 'オオサンショウウオ'].freeze,
|
399
|
+
['トビウオ', 'トビウオ', 'エイ', 'オオガメ', 'クジラ', 'ロブスター'].freeze,
|
400
|
+
['トビウオ', 'エイ', 'マグロ', 'マグロ', 'カジキ', 'イタチザメ'].freeze,
|
401
|
+
['トビウオ', 'ミズダコ', 'クラゲ', 'マグロ', 'オオクラゲ', 'ハンマーヘッド・シャーク'].freeze,
|
402
|
+
['トビウオ', 'エイ', 'オオガメ', 'オオガメ', 'イタチザメ', 'ミズダコ'].freeze,
|
403
|
+
['トビウオ', 'クラゲ', 'ロブスター', 'ハンマーヘッド・シャーク', 'ミズダコ', 'ダイオウイカ'].freeze].freeze
|
404
|
+
|
405
|
+
FISHING_SALT_LAKE_CHART = [['シラユリ', 'シラユリ', 'シラユリ', 'ゲッパク', 'ゲッパク', 'ゲッパク'].freeze,
|
406
|
+
['シラユリ', 'シラユリ', 'シラユリ', 'ゲッパク', 'スズ', 'ナマリ'].freeze,
|
407
|
+
['シラユリ', 'ゲッパク', 'ゲッパク', 'スズ', 'ナマリ', 'ナマリ'].freeze,
|
408
|
+
['シラユリ', 'シラユリ', 'ナマリ', 'ナマリ', 'ナマリ', 'ナマリ'].freeze,
|
409
|
+
['ゲッパク', 'ゲッパク', 'スズ', 'スズ', 'ロイロ', 'ロイロ'].freeze,
|
410
|
+
['ナマリ', 'スズ', 'スズ', 'スズ', 'ロイロ', 'クロツルバミ'].freeze].freeze
|
411
|
+
|
412
|
+
def use_fishing_chart(command)
|
413
|
+
case command
|
414
|
+
when 'FL' then use_6x6_chart(FISHING_LAKE_CHART, '釣り・湖表')
|
415
|
+
when 'FR' then use_6x6_chart(FISHING_RIVER_CHART, '釣り・河表')
|
416
|
+
when 'FW' then use_6x6_chart(FISHING_WHITE_CHART, '釣り・白雲表')
|
417
|
+
when 'FG' then use_6x6_chart(FISHING_GRAY_CHART, '釣り・灰雲表')
|
418
|
+
when 'FB' then use_6x6_chart(FISHING_BLACK_CHART, '釣り・黒雲表')
|
419
|
+
when 'FC' then use_6x6_chart(FISHING_COMMON_CHART, '釣り・共通表')
|
420
|
+
when 'FS' then use_6x6_chart(FISHING_SALT_LAKE_CHART, '釣り・塩湖表')
|
421
|
+
end
|
422
|
+
end
|
423
|
+
|
424
|
+
INEDIBLE_PLANT_CHART = [['シュイの花', 'ダデオの花', 'ロキの花', 'シェラの花', 'トトイト', 'ポロネイマ'].freeze,
|
425
|
+
['シュイの花', 'ロキの花', 'アウディの花', 'イディウの花', 'トトイト', 'ポロネイマ'].freeze,
|
426
|
+
['ダデオの花', 'アウディの花', 'イディウの花', 'マトイト', 'ポポトマ', 'ルタタ'].freeze,
|
427
|
+
['シュイの花', 'ミカギの花', 'ロトイト', 'ロトイト', 'ツルイド', 'ルタタ'].freeze,
|
428
|
+
['ミカギの花', 'ロトイト', 'ロトイト', 'ツルイド', 'ルタタ', '変異植物(MP)'].freeze,
|
429
|
+
['トトイト', 'マトイト', 'ポポトマ', 'ツルイド', '変異植物(MP)', 'サボサボ'].freeze].freeze
|
430
|
+
|
431
|
+
INEDIBLE_PLANT2_CHART = [['マトラの花', 'マトラの花', '蜜蝋', 'ポルラの花', 'ウェスドの花', 'ポルラの花'].freeze,
|
432
|
+
['マトラの花', 'ホイの花', 'マトラの花', 'ウェスドの花', '蜜蝋', 'ロロの花'].freeze,
|
433
|
+
['ホイの花', 'ポルラの花', 'ウェスドの花', 'ホイの花', 'ポルラの花', 'ポルラの花'].freeze,
|
434
|
+
['ポルラの花', 'ホイの花', 'ロロの花', 'ウェスドの花', 'ポルラの花', 'ドダの実'].freeze,
|
435
|
+
['ポルラの花', 'ウェスドの花', 'ロロの花', 'ロロの花', 'ロロの花', 'ロロの花'].freeze,
|
436
|
+
['ウェスドの花', 'ロロの花', 'ポルラの花', 'ロロの花', 'ドダの実', 'ロロの花'].freeze].freeze
|
437
|
+
|
438
|
+
def use_inedible_plant_chart(command)
|
439
|
+
match_data = command.match(/IP([VA]?)/)
|
440
|
+
chart_symbol = match_data[1] == '' ? 'V' : match_data[1]
|
441
|
+
|
442
|
+
case chart_symbol
|
443
|
+
when 'V' then use_6x6_chart(INEDIBLE_PLANT_CHART, '不食植物表(ヴィラシエル)')
|
444
|
+
when 'A' then use_6x6_chart(INEDIBLE_PLANT2_CHART, '不食植物表(アルメサール)')
|
445
|
+
end
|
446
|
+
end
|
447
|
+
|
448
|
+
EDIBLE_PLANT_CHARTS = [[['小麦', '小麦', 'さつまいも', 'ねぎ', '白菜', 'きゅうり'].freeze,
|
449
|
+
['小麦', 'さつまいも', 'さといも', '白菜', '白菜', 'とうもろこし'].freeze,
|
450
|
+
['さといも', 'さといも', 'ねぎ', '白菜', 'とうもろこし', '枝豆'].freeze,
|
451
|
+
['シソ', 'ひらたけ', 'エリンギ', '枝豆', '枝豆', 'ラズベリー'].freeze,
|
452
|
+
['シソ', 'ひらたけ', 'ひらたけ', 'エリンギ', 'ラズベリー', 'さといも'].freeze,
|
453
|
+
['ナシ', 'ナシ', 'ナシ', 'ラズベリー', 'ラズベリー', 'さといも'].freeze].freeze,
|
454
|
+
[['米', '米', 'にんじん', 'じゃがいも', 'ふき', 'まいたけ'].freeze,
|
455
|
+
['米', 'じゃがいも', 'じゃがいも', 'にら', 'ふき', 'きくらげ'].freeze,
|
456
|
+
['冬瓜', 'しょうが', '冬瓜', 'ふき', 'ふき', 'きくらげ'].freeze,
|
457
|
+
['しょうが', '冬瓜', 'ビワ', 'にら', 'まいたけ', 'まいたけ'].freeze,
|
458
|
+
['ビワ', 'ビワ', 'もも', 'かぼちゃ', 'グリーンピース', 'まいたけ'].freeze,
|
459
|
+
['ビワ', 'もも', 'もも', 'かぼちゃ', 'かぼちゃ', 'かぼちゃ'].freeze].freeze,
|
460
|
+
[['もち米', 'トマト', 'オクラ', 'とうがらし', '大根', 'グミ'].freeze,
|
461
|
+
['もち米', 'オクラ', 'オクラ', '大根', '大根', 'とうがらし'].freeze,
|
462
|
+
['しいたけ', 'マッシュルーム', 'オクラ', 'グミ', '玉ねぎ', '小松菜'].freeze,
|
463
|
+
['ブロッコリー', 'しいたけ', 'トマト', '玉ねぎ', 'さやえんどう', '玉ねぎ'].freeze,
|
464
|
+
['しいたけ', 'マッシュルーム', 'ブロッコリー', '小松菜', 'さやえんどう', '改良種(IS)'].freeze,
|
465
|
+
['マッシュルーム', 'ブロッコリー', 'マッシュルーム', '小松菜', '改良種(IS)', 'グミ'].freeze].freeze,
|
466
|
+
[['大豆', '大豆', 'にんにく', 'そらまめ', 'しめじ', 'みかん'].freeze,
|
467
|
+
['かぶ', '大豆', 'かぶ', 'キャベツ', 'そらまめ', 'みかん'].freeze,
|
468
|
+
['にんにく', 'かぶ', 'にんにく', 'しめじ', 'クランベリー', 'ピーマン'].freeze,
|
469
|
+
['キャベツ', 'キャベツ', 'ほうれん草', 'しめじ', 'レタス', 'ピーマン'].freeze,
|
470
|
+
['ほうれん草', 'ほうれん草', 'クランベリー', 'レタス', 'ピーマン', '改良種(IS)'].freeze,
|
471
|
+
['松茸', 'ほうれん草', '松茸', 'レタス', 'クランベリー', '改良種(IS)'].freeze].freeze,
|
472
|
+
[['小豆', 'れんこん', 'みつば', 'やまのいも', 'デコポン', 'イチゴ'].freeze,
|
473
|
+
['れんこん', 'れんこん', '小豆', 'なめこ', 'かいわれ大根', 'なめこ'].freeze,
|
474
|
+
['やまのいも', 'アスパラガス', 'なす', 'なめこ', 'やまのいも', 'デコポン'].freeze,
|
475
|
+
['なす', 'やまのいも', 'みつば', 'えのきたけ', 'かいわれ大根', 'デコポン'].freeze,
|
476
|
+
['アスパラガス', 'アスパラガス', 'やまのいも', 'みつば', 'なめこ', '改良種(IS)'].freeze,
|
477
|
+
['なす', 'もやし', 'えのきたけ', 'えのきたけ', '改良種(IS)', 'イチゴ'].freeze].freeze].freeze
|
478
|
+
|
479
|
+
EDIBLE_PLANT2_CHARTS = [[['テンサイ', 'バノ', 'テンサイ', 'サトウモロ', 'サトウモロ', 'パンノミ'].freeze,
|
480
|
+
['テンサイ', 'バノ', 'サトウモロ', 'バノ', 'ミソレグア', 'パンノミ'].freeze,
|
481
|
+
['テンサイ', 'サトウモロ', 'バノ', 'ニクニク', 'パンノミ', 'メーズム'].freeze,
|
482
|
+
['バノ', 'バノ', 'バノ', 'パンノミ', 'ミソレグア', 'メーズム'].freeze,
|
483
|
+
['テンサイ', 'パンノミ', 'ニクニク', 'ニクニク', 'メーズム', 'ミソレグア'].freeze,
|
484
|
+
['サトウモロ', 'ニクニク', 'メーズム', 'ミソレグア', 'メーズム', 'メーズム'].freeze].freeze,
|
485
|
+
[['アロアベリー', 'パンノミ', 'ミソレグア', 'サイングア', 'パンノミ', 'アロアベリー'].freeze,
|
486
|
+
['パンノミ', 'サイングア', 'パンノミ', 'ミソレグア', 'アロアベリー', 'ミソレグア'].freeze,
|
487
|
+
['パンノミ', 'アロアベリー', 'サイングア', 'パンノミ', 'パンノミ', 'トロアベリア'].freeze,
|
488
|
+
['パンノミ', 'アロアベリー', 'パンノミ', 'ミソレグア', 'ミソレグア', 'トロアベリア'].freeze,
|
489
|
+
['サイングア', 'パンノミ', 'トロアベリア', 'ミソレグア', 'アロアベリー', 'サイングア'].freeze,
|
490
|
+
['ミソレグア', 'トロアベリア', 'サイングア', 'アロアベリー', 'トロアベリア', 'トロアベリア'].freeze].freeze].freeze
|
491
|
+
|
492
|
+
def use_villaciel_edible_plant_chart(chart_id, output)
|
493
|
+
output + use_6x6_chart(EDIBLE_PLANT_CHARTS[chart_id - 1], "可食植物表#{chart_id}(ヴィラシエル)")
|
494
|
+
end
|
495
|
+
|
496
|
+
def use_armesear_edible_plant_chart(chart_id, output)
|
497
|
+
output + use_6x6_chart(EDIBLE_PLANT2_CHARTS[chart_id - 1], "可食植物表#{chart_id}(アルメサール)")
|
498
|
+
end
|
499
|
+
|
500
|
+
def use_edible_plant_chart(command)
|
501
|
+
match_data = command.match(/EP([VA]?)(\d?)/)
|
502
|
+
chart_symbol = match_data[1] == '' ? 'V' : match_data[1]
|
503
|
+
|
504
|
+
case chart_symbol
|
505
|
+
when 'V'
|
506
|
+
case match_data[2]
|
507
|
+
when ''
|
508
|
+
roll_result = @randomizer.roll_once(D6)
|
509
|
+
return '(1D6) > [6] > 好きな表を選んでおっけー!' if roll_result == D6
|
510
|
+
|
511
|
+
use_villaciel_edible_plant_chart(roll_result, "(1D6) > [#{roll_result}] > ")
|
512
|
+
else
|
513
|
+
chart_id = match_data[2].to_i
|
514
|
+
return '' unless chart_id >= 1 && chart_id <= 5
|
515
|
+
|
516
|
+
use_villaciel_edible_plant_chart(chart_id, '')
|
517
|
+
end
|
518
|
+
when 'A'
|
519
|
+
case match_data[2]
|
520
|
+
when ''
|
521
|
+
roll_result = @randomizer.roll_once(D6)
|
522
|
+
use_armesear_edible_plant_chart(roll_result.even? ? 1 : 2, "(1D6) > [#{roll_result}] > ")
|
523
|
+
else
|
524
|
+
chart_id = match_data[2].to_i
|
525
|
+
return '' unless [1, 2].include?(chart_id)
|
526
|
+
|
527
|
+
use_armesear_edible_plant_chart(chart_id, '')
|
528
|
+
end
|
529
|
+
end
|
530
|
+
end
|
531
|
+
|
532
|
+
MUTANT_PLANT_CHART = [['ガドゴン', 'ガドゴン', 'レディダン', 'ボディア', 'ブタマル', 'ブタマル'].freeze,
|
533
|
+
['レディダン', 'レディダン', 'ボディア', 'トロコッコ', 'ブタマル', 'ツァイド'].freeze,
|
534
|
+
['ボディア', 'ボディア', 'マメノキ', 'ナッキュ', 'ツァイド', 'ボディア'].freeze,
|
535
|
+
['ナッキュ', 'マメノキ', 'ナッキュ', 'ガドゴン', 'レディダン', 'レディダン'].freeze,
|
536
|
+
['ポメラマ', 'ポメラマ', 'ナッキュ', 'ツァイド', 'ガドゴン', 'ボディア'].freeze,
|
537
|
+
['ナッキュ', 'ツァイド', 'ツァイド', 'ツァイド', 'ボディア', 'グラディエゴ'].freeze].freeze
|
538
|
+
|
539
|
+
def use_mutant_plant_chart(_command)
|
540
|
+
use_6x6_chart(MUTANT_PLANT_CHART, '変異植物表')
|
541
|
+
end
|
542
|
+
|
543
|
+
IMPROVED_SPECIES_CHART = [['ワワ', 'ワワ', 'ブラックカロット', 'ビーズ', 'レモン', 'ブラッドオレンジ'].freeze,
|
544
|
+
['ポポ', 'ポポ', 'グランツェ', 'オオカサゲ', 'ブラッドオレンジ', 'レモン'].freeze,
|
545
|
+
['ヒットト', 'グランツェ', 'ブラックベリー', 'ピマット', 'ブラッドオレンジ', 'レモン'].freeze,
|
546
|
+
['ブルーベリー', 'ヒットト', 'グランツェ', 'ブラッドオレンジ', 'ユズ', 'ブラックベリー'].freeze,
|
547
|
+
['ビーズ', 'ピマット', 'オオカサゲ', 'ライム', 'ブルーベリー', 'ユズ'].freeze,
|
548
|
+
['ビーズ', 'レッドキャベツ', 'ライム', 'オオカサゲ', 'ライム', 'リンゴ'].freeze].freeze
|
549
|
+
|
550
|
+
def use_improved_species_chart(_command)
|
551
|
+
use_6x6_chart(IMPROVED_SPECIES_CHART, '改良種表')
|
552
|
+
end
|
553
|
+
end
|
554
|
+
end
|
555
|
+
end
|