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,310 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class Dracurouge_Korean < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = 'Dracurouge:Korean'
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = '드라크루주'
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = '国際化:Korean:드라크루주'
|
14
|
+
|
15
|
+
# ダイスボットの使い方
|
16
|
+
HELP_MESSAGE = <<~MESSAGETEXT
|
17
|
+
・행동판정(DRx+y)
|
18
|
+
x:굴리는 주사위의 수(생략시4), y:갈증수정(생략시0)
|
19
|
+
예) DR DR6 DR+1 DR5+2
|
20
|
+
・저항판정(DRRx)
|
21
|
+
x:굴리는 주사위의
|
22
|
+
예) DRR3
|
23
|
+
・타락표(CTx) x:갈증(예) CT3
|
24
|
+
・타락의 전조표(CS)
|
25
|
+
・인연 내용 결정표(BT)
|
26
|
+
・반응표(RTxy)x:혈통, y:길 xy생략으로 일괄표시
|
27
|
+
혈통 D:드라크, R:로젠부르크, H:헬스가르드, M:더스트하임,
|
28
|
+
A:아발롬 N:노스페라스
|
29
|
+
길 F:영주, G:근위, R:방랑, W:현자, J:사냥꾼, N:야수
|
30
|
+
예)RT(일괄표시), RTDF(드라크 영주), RTAN(아발롬 야수)
|
31
|
+
・D66 다이스 있음
|
32
|
+
MESSAGETEXT
|
33
|
+
|
34
|
+
def initialize(command)
|
35
|
+
super(command)
|
36
|
+
@enabled_d66 = true
|
37
|
+
@d66_sort_type = D66SortType::NO_SORT
|
38
|
+
end
|
39
|
+
|
40
|
+
def eval_game_system_specific_command(command)
|
41
|
+
debug('eval_game_system_specific_command')
|
42
|
+
|
43
|
+
result = getConductResult(command)
|
44
|
+
return result unless result.nil?
|
45
|
+
|
46
|
+
result = getResistResult(command)
|
47
|
+
return result unless result.nil?
|
48
|
+
|
49
|
+
result = getReactionResult(command)
|
50
|
+
return result unless result.nil?
|
51
|
+
|
52
|
+
result = getCorruptionResult(command)
|
53
|
+
return result unless result.nil?
|
54
|
+
|
55
|
+
result = getTableResult(command)
|
56
|
+
return result unless result.nil?
|
57
|
+
|
58
|
+
return nil
|
59
|
+
end
|
60
|
+
|
61
|
+
def getConductResult(command)
|
62
|
+
return nil unless command =~ /^DR(\d*)(\+(\d+))?$/
|
63
|
+
|
64
|
+
diceCount = Regexp.last_match(1).to_i
|
65
|
+
diceCount = 4 if diceCount == 0
|
66
|
+
thirstyPoint = Regexp.last_match(3).to_i
|
67
|
+
|
68
|
+
diceList = @randomizer.roll_barabara(diceCount, 6).sort
|
69
|
+
|
70
|
+
gloryDiceCount = getGloryDiceCount(diceList)
|
71
|
+
gloryDiceCount.times { diceList << 10 }
|
72
|
+
|
73
|
+
diceList, calculationProcess = getThirstyAddedResult(diceList, thirstyPoint)
|
74
|
+
thirstyPointMarker = (thirstyPoint == 0 ? "" : "+#{thirstyPoint}")
|
75
|
+
|
76
|
+
result = "(#{command}) > #{diceCount}D6#{thirstyPointMarker} > "
|
77
|
+
result += "[ #{calculationProcess} ] > " unless calculationProcess.empty?
|
78
|
+
result += "[ #{diceList.join(', ')} ]"
|
79
|
+
return result
|
80
|
+
end
|
81
|
+
|
82
|
+
def getGloryDiceCount(diceList)
|
83
|
+
oneCount = countTargetDice(diceList, 1)
|
84
|
+
sixCount = countTargetDice(diceList, 6)
|
85
|
+
|
86
|
+
gloryDiceCount = (oneCount / 2) + (sixCount / 2)
|
87
|
+
return gloryDiceCount
|
88
|
+
end
|
89
|
+
|
90
|
+
def countTargetDice(diceList, target)
|
91
|
+
diceList.select { |i| i == target }.count
|
92
|
+
end
|
93
|
+
|
94
|
+
def getThirstyAddedResult(diceList, thirstyPoint)
|
95
|
+
return diceList, '' if thirstyPoint == 0
|
96
|
+
|
97
|
+
targetIndex = diceList.rindex { |i| i <= 6 }
|
98
|
+
return diceList, '' if targetIndex.nil?
|
99
|
+
|
100
|
+
textList = []
|
101
|
+
|
102
|
+
diceList.each_with_index do |item, index|
|
103
|
+
if targetIndex == index
|
104
|
+
textList << "#{item}+#{thirstyPoint}"
|
105
|
+
else
|
106
|
+
textList << item.to_s
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
diceList[targetIndex] += thirstyPoint
|
111
|
+
|
112
|
+
return diceList, textList.join(', ')
|
113
|
+
end
|
114
|
+
|
115
|
+
def getResistResult(command)
|
116
|
+
return nil unless command =~ /^DRR(\d+)$/
|
117
|
+
|
118
|
+
diceCount = Regexp.last_match(1).to_i
|
119
|
+
diceCount = 4 if diceCount == 0
|
120
|
+
|
121
|
+
diceList = @randomizer.roll_barabara(diceCount, 6).sort
|
122
|
+
|
123
|
+
return "(#{command}) > #{diceCount}D6 > [ #{diceList.join(', ')} ]"
|
124
|
+
end
|
125
|
+
|
126
|
+
def getReactionResult(command)
|
127
|
+
return nil unless command.upcase =~ /^RT((\w)(\w))?/
|
128
|
+
|
129
|
+
typeText1 = Regexp.last_match(2)
|
130
|
+
typeText2 = Regexp.last_match(3)
|
131
|
+
|
132
|
+
name = "반응표"
|
133
|
+
table = getReactionTable
|
134
|
+
tableText, number = get_table_by_d66(table)
|
135
|
+
|
136
|
+
type1 = ['드라크', '로젠부르크', '헬스가르드', '더스트하임', '아발롬', '노스페라스']
|
137
|
+
type1_indexTexts = ['D', 'R', 'H', 'M', 'A', 'N']
|
138
|
+
type2 = ['영주', '근위', '방랑', '현자', '사냥꾼', '야수']
|
139
|
+
type2_indexTexts = ['F', 'G', 'R', 'W', 'J', 'N']
|
140
|
+
|
141
|
+
tensValue = number.to_i / 10
|
142
|
+
isBefore = (tensValue < 4)
|
143
|
+
type = (isBefore ? type1 : type2)
|
144
|
+
indexTexts = (isBefore ? type1_indexTexts : type2_indexTexts)
|
145
|
+
typeText = (isBefore ? typeText1 : typeText2)
|
146
|
+
|
147
|
+
resultText = ''
|
148
|
+
if typeText.nil?
|
149
|
+
resultText = getReactionTextFull(type, tableText)
|
150
|
+
else
|
151
|
+
index = indexTexts.index(typeText)
|
152
|
+
return nil if index.nil?
|
153
|
+
|
154
|
+
resultText = getReactionTex(index, type, tableText)
|
155
|
+
end
|
156
|
+
|
157
|
+
return "#{name}(#{number}) > #{resultText}"
|
158
|
+
end
|
159
|
+
|
160
|
+
def getReactionTextFull(type, tableText)
|
161
|
+
resultTexts = []
|
162
|
+
|
163
|
+
type.count.times do |index|
|
164
|
+
resultTexts << getReactionTex(index, type, tableText)
|
165
|
+
end
|
166
|
+
|
167
|
+
return resultTexts.join('/')
|
168
|
+
end
|
169
|
+
|
170
|
+
def getReactionTex(index, type, tableText)
|
171
|
+
typeName = type[index]
|
172
|
+
texts = tableText.split(/\t/)
|
173
|
+
string = texts[index]
|
174
|
+
|
175
|
+
return "#{typeName}:#{string}"
|
176
|
+
end
|
177
|
+
|
178
|
+
def getReactionTable
|
179
|
+
text = <<~TEXT_BLOCK
|
180
|
+
하늘에 빛나는 붉은 달을 올려본다 콧방귀를 뀐다 헛기침을 한다 미간을 찌푸리고 생각에 잠긴다 하품을 참는다 명왕령의 방향을 노려본다
|
181
|
+
작게 한숨을 쉰다 앞머리를 쓸어 올린다 눈썹을 찌푸린다 주변을 평가하는 눈으로 본다 머리를 긁적인다 혀를 찬다
|
182
|
+
상대를 내려다보듯이 본다 자신의 머리를 만진다 투덜거린다 손에 책을 구현화시켜 적어넣는다 손에 생긴 과일을 먹는다 고개숙여 바닥이나 지면을 노려본다
|
183
|
+
지그시 눈을 감고 말을 건다 혼자서 작게 웃는다 무표정하게 상대를 관찰한다 재미없다는 듯이 바라본다 붙임성 좋은 웃음을 짓는다 무의식적으로 눈물이 흐른다
|
184
|
+
희미하게 미소짓는다 콧노래를 부른다 발밑에 지옥문이 생긴다 안정된 발걸음으로 다가간다 밤새가 어깨에 날아든다 입술을 깨문다
|
185
|
+
품 속에서 박쥐가 날아오른다 한쪽 발을 중심으로 빙그르르 돈다 주변에 작게 원망하는 목소리가 울린다 눈을 감고 과거를 생각한다 검은 고양이가 발밑에 재롱부리며 달라붙는다 가슴을 누르고 지그시 생각한다
|
186
|
+
머리 위를 박쥐가 소용돌이 치듯이 난다 꽃잎을 구현화해 흩날린다 비난하는 듯한 눈빛을 향한다 발자취에 옅은 안개가 낀다 주변에 요정의 빛이 춤춘다 고개를 크게 흔들어 사념을 쫓는다
|
187
|
+
눈썹을 찌푸리는 동시에 눈이 붉게 빛난다 의상이나 갑옷의 색이나 장식을 바꾼다 직립부동의 자세로 서있는다 쓴웃음을 지으며 다가선다 순식간에 상대편에 나타난다 마음 속의 분노로 험악한 얼굴이 된다
|
188
|
+
손에 있는 와인을 가볍게 마신다 자신에게 취해 눈을 감는다 질린듯한 모습으로 한숨을 쉰다 현상을 분석하는 혼잣말을 한다 순식간에 상대에게서 멀어진다 의연한 태도로 맞선다
|
189
|
+
몸 전체에서 옅은 붉은 색의 오오라가 피어난다 구현화한 꽃을 손에서 가지고 논다 갑자기 돌아서며 노려본다 흥미깊은듯이 질문한다 벌레나 식물에게 정신이 팔린다 마른 웃음소리를 흘린다
|
190
|
+
겁 없는 웃음을 짓는다 마음에 드는 상대를 꼬시려고 한다 주변의 공기가 얼어붙는다 눈 앞의 양식에 불평을 말한다 순수한 웃음을 보인다 자신의 혈족을 깎아내리는 말을 한다
|
191
|
+
바람 없이 머리카락이 날린다 어깨를 움츠린다 가슴에 손을 얹고 자신을 안정시킨다 무감동하게 가볍게 인사한다 실수로 누군가를 말려들게해서 넘어진다 조용한 분노와 함께 눈이 창백하게 빛난다
|
192
|
+
질린 눈으로 상대를 응시한다 자신의 무기에 입맞춤을 한다 손에 구현화한 사슬을 가지고 논다 손에 구현화한 펜을 가지고 논다 누군가에게 응석부리듯이 기댄다 들꽃을 만지고 그것을 시들게 한다
|
193
|
+
발밑에 작은 회오리바람이 일어난다 권유하는 듯이 누군가의 손을 잡는다 주변을 엄격한 눈으로 바라본다 눈을 뜨고 감탄한다 웃음을 띠며 고개를 끄덕인다 지친 모습으로 희미하게 빛나는 숨을 내뱉는다
|
194
|
+
격정이나 긴장감에 머리가 거꾸로 선다 악기를 구현화해 연주한다 동료에게 의심의 시선을 보낸다 책, 소매, 망토 등으로 입가를 가린다 작게 고개를 갸웃거린다 자신의 문장을 멍하게 바라본다
|
195
|
+
붉은 달빛을 받으며 눈을 감는다 상대에게 윙크한다 감정에 맞춰 주변에 사슬이 구현화된다 공중에 떠서 미끄러지듯이 나아간다 수많은 검은 깃털이 하늘에 흩날린다 자조적으로 작게 웃는다
|
196
|
+
무기를 들고 맹세를 선창한다 의상에 붙은 먼지를 털어낸다 타락에 대해 충고한다 무감정하게 상황을 분석한다 과일을 꺼내서 먹는다 지친 눈으로 멍하게 다른 사람을 본다
|
197
|
+
자신의 문장을 쭉 바라본다 망토에서 무수한 나비가 날아오른다 차가운 시선으로 상대를 훑어본다 순간, 모습이 안개에 휩싸여 희미해진다 뭔가 있어 보이는 말이나 행동을 한다 뭔가 결심한듯한듯이 얼굴을 들어올린다
|
198
|
+
상대의 눈을 들여다 봐 마음을 짐작한다 주군의 옆에 살짝 다가선다 일전의 싸움에 대해 얘기한다 상대를 헤아리듯이 바라본다 “적”을 생각해내 험악한 눈이 된다 짐승과 같이 거칠게 호흡한다
|
199
|
+
자신의 영지를 생각한다 문장이 새겨진 방패를 들어 올린다 바람에 머리카락이 나부낀다 안경을 구현화해 쓴다 침을 뱉는다 그렁그렁한 눈으로 상대를 올려다본다
|
200
|
+
종자를 시중들게 한다 무기를 차고 기품있게 인사한다 구현화한 탈것을 쓰다듬는다 조그마한 점을 주의깊게 본다 구현화한 무기를 쓰다듬는다 고개를 숙이고 심호흡한다
|
201
|
+
종자의 시중을 받는다 자신의 방패의 문장을 손가락으로 따라그린다 동료의 어깨를 두드린다, 혹은 안는다 과장되게 한숨을 쉬어보인다 음울한 눈으로 허공을 노려본다 벽이나 바닥에 손톱을 세워 할퀸다
|
202
|
+
마음에 드는 상대에게 손짓한다 다른 기사에게 바싹 다가간다 상쾌하게 웃는다 눈을 감고 사색에 잠긴다 옷자락에서 나타난 뱀이나 거미를 쓰다듬는다 자신에게 이르는 혼잣말을 한다
|
203
|
+
근심에 가득차 생각에 잠긴다 주군의 등뒤에서 상대를 노려본다 소리 높여 이름을 댄다 다른 기사에게 조언한다 골똘히 생각하는 눈으로 밤하늘을 본다 타락의 전조를 지그시 본다
|
204
|
+
무겁게 끄덕인다 주군의 앞, 또는 옆에서 무릎꿇는다 주변에 적극적으로 말을 건다 얼버무리듯이 헛기침을 한다 자신의 무기를 핥는다 다른 기사에게서 눈을 돌린다
|
205
|
+
상냥한 미소를 짓는다 겸연쩍다는듯 얼굴을 붉힌다 자신의 이름에 맹세한다 작게 인사한다 어둡게 웃음짓는다 다른 기사의 눈치를 살핀다
|
206
|
+
슬쩍 자신의 문장을 보여준다 누군가의 앞을 가로막고 선다 과장되게 누군가를 치켜세운다 다른 기사에게 눈으로 신호를 보낸다 그늘에 숨는다 상대를 노려보며 신음한다
|
207
|
+
와인잔을 다른 기사에게 건넨다 정신사납게 돌아다닌다 다른 기사에게 시합을 신청한다 불가사의한 웃음을 짓는다 다른 기사의 문장을 관찰한다 자신의 손가락을 가볍게 핥는다
|
208
|
+
가만히 풍경을 바라본다 수줍은 웃음을 짓는다 망토를 과장되게 펄럭인다 하늘에 뜬 별들을 바라본다 분위기를 못읽는 발언을 한다 다른 기사에게 거리를 두어진다
|
209
|
+
손바닥에 체스말을 구현화한다 긴장한 시선으로 주변을 둘러본다 상대를 치켜 세우며 입맞춤을 요구한다 깊은 지식으로 자세한 설명을 한다 갑자기 뒤돌아보며 등뒤를 경계한다 영악한 웃음을 짓는다
|
210
|
+
가슴을 펴고 자신있게 발언한다 마음 속에서 다른 기사와 시합을 한다 자신의 고향을 떠올린다 미래에 대해 점쳐본다 과거의 원통함에 피눈물을 흘린다 자신의 피부를 손톱등으로 상처입힌다
|
211
|
+
빠르게 사죄한다 가만히 기다리고 있는다 자신의 문장에 대해 얘기한다 사소한 예언을 한다 상어와 같이 웃는다 몰래 입맛을 다신다
|
212
|
+
다른 기사를 정면에서 칭찬한다 주군을 지그시 바라본다 다른 기사와 잡담을 한다 소문의 일종을 다른 기사에게 속삭인다 그 자리에 없는 기사를 비웃는다 요염하게 곁눈질을 보낸다
|
213
|
+
다른 기사의 머리나 볼을 쓰다듬는다 주군을 치켜 세운다 곤란한듯이 작게 신음한다 사소한 물건을 흥미깊게 관찰한다 다른 기사와의 거리를 느낀다 애처로운 눈으로 자신의 문장을 바라본다
|
214
|
+
우렁차게 이름을 댄다 주군의 소매를 꽉 쥔다 윗사람의 앞에서 무릎을 꿇고 예를 다한다 달을 올려다보고 드라쿨을 칭송한다 나직하게 이름을 댄다 사냥감을 노리는 눈으로 다른 기사를 본다
|
215
|
+
입가를 가리며 기품있게 웃는다 주군에 대한 주변의 태도를 비난한다 아랫사람에게 미소짓는다 다른 기사의 감정에 충고한다 아랫사람을 내려다보는 눈으로 본다 자학적인 말을 한다
|
216
|
+
TEXT_BLOCK
|
217
|
+
|
218
|
+
return text.split(/\n/)
|
219
|
+
end
|
220
|
+
|
221
|
+
def getCorruptionResult(command)
|
222
|
+
return nil unless command.upcase =~ /^CT(\d+)$/
|
223
|
+
|
224
|
+
modify = Regexp.last_match(1).to_i
|
225
|
+
|
226
|
+
name = "타락표"
|
227
|
+
table =
|
228
|
+
[
|
229
|
+
[0, "당신은 완전히 타락했다. 이 시점에서 당신은 [월 플라워]가 되어 늑대인간, 검은 산양, 야수 중 하나가 된다. 그 [막]의 종료 후에 세션에서 퇴장한다. 247페이지의 「소멸・완전한 타락」을 참조한다."],
|
230
|
+
[1, "당신의 육체는 정신에 걸맞는 변화를 일으킨다……. 「타락의 전조표」를 2번 굴리고 특징을 얻는다. 이 세션 종료 후, 【길】을 「야수」로 변경한다.(이미「야수」라면 【길】은 변하지 않는다)"],
|
231
|
+
[3, "당신의 육체는 정신에 걸맞는 변화를 일으킨다……. 「타락의 전조표」를 1번 굴리고 특징을 얻는다. 이 세션 종료 후, 【길】을 「야수」로 변경한다.(이미「야수」라면 【길】은 변하지 않는다)"],
|
232
|
+
[5, "고귀한 마음도 언젠가는 타락한다. 당신이 지금 가장 많은 루주를 얻은 대상에 대한 루주를 전부 잃고, 같은 수 만큼의 누아르를 얻는다. 누아르를 얻은 결과, 【갈증】이 3점 이상이 된 경우 다시 타락표를 굴린다."],
|
233
|
+
[6, "내면에 잠든 짐승의 숨결……당신이 지금 【갈증】을 얻은 누아르의 대상에게 임의의 누아르 2점을 획득한다."],
|
234
|
+
[7, "내면에 잠든 짐승의 숨결……당신이 지금 【갈증】을 얻은 누아르의 대상에게 임의의 누아르 1점을 획득한다."],
|
235
|
+
[8, "날뛰는 마음을 가라앉힌다……다행히 아무 일도 없었다."],
|
236
|
+
[99, "당신은 미쳐 날뛰는 감정을 억누르고 이성을 되찾았다! 【갈증】이 1 감소한다!"],
|
237
|
+
]
|
238
|
+
|
239
|
+
dice_list = @randomizer.roll_barabara(2, 6)
|
240
|
+
number = dice_list.sum()
|
241
|
+
number_text = dice_list.join(",")
|
242
|
+
|
243
|
+
index = (number - modify)
|
244
|
+
debug('index', index)
|
245
|
+
text = get_table_by_number(index, table)
|
246
|
+
|
247
|
+
return "2D6[#{number_text}]-#{modify} > #{name}(#{index}) > #{text}"
|
248
|
+
end
|
249
|
+
|
250
|
+
def getTableResult(command)
|
251
|
+
info = TABLES[command.upcase]
|
252
|
+
return nil if info.nil?
|
253
|
+
|
254
|
+
name = info[:name]
|
255
|
+
type = info[:type]
|
256
|
+
table = info[:table]
|
257
|
+
|
258
|
+
text, number =
|
259
|
+
case type
|
260
|
+
when '2D6'
|
261
|
+
get_table_by_2d6(table)
|
262
|
+
when '1D6'
|
263
|
+
get_table_by_1d6(table)
|
264
|
+
end
|
265
|
+
|
266
|
+
return nil if text.nil?
|
267
|
+
|
268
|
+
return "#{name}(#{number}) > #{text}"
|
269
|
+
end
|
270
|
+
|
271
|
+
def getCorruptionTable; end
|
272
|
+
|
273
|
+
TABLES =
|
274
|
+
{
|
275
|
+
'CS' => {
|
276
|
+
name: "타락의 전조표",
|
277
|
+
type: '2D6',
|
278
|
+
table: [
|
279
|
+
"당신은 완전히 타락했다. 이 시점에서 당신은 [월 플라워]가 되어 늑대인간, 검은 산양, 야수 중 하나가 된다. 그 [막]의 종료 후에 세션에서 퇴장한다. 247페이지의 「소멸・완전한 타락」을 참조한다.",
|
280
|
+
"짐승 그 자체의 머리(늑대, 산양, 박쥐 중 하나)",
|
281
|
+
"밤새의 날개",
|
282
|
+
"박쥐의 날개",
|
283
|
+
"갈퀴발톱이 있는 이형의 팔",
|
284
|
+
"뒤틀린 두 개의 뿔",
|
285
|
+
"늑대의 귀와 꼬리",
|
286
|
+
"창백해진 피부",
|
287
|
+
"이상한 빛을 발하는 눈",
|
288
|
+
"튀어나온 송곳니",
|
289
|
+
"눈에 보이는 변화는 없다……",
|
290
|
+
],
|
291
|
+
},
|
292
|
+
|
293
|
+
'BT' => {
|
294
|
+
name: "인연 내용 결정표:루주/누아르",
|
295
|
+
type: '1D6',
|
296
|
+
table: [
|
297
|
+
"연민(Pity) 상대를 불쌍히 여기고 동정한다. /모멸(Contempt) 상대를 깔보고 경멸한다.",
|
298
|
+
"친구(Friend) 상대에게 우정을 갖는다. /질투(Jealousy) 상대를 부러워하고 질투한다. ",
|
299
|
+
"신뢰(Trust) 상대를 신뢰한다. /욕망(Desire) 상대를 원하고 나의 것으로 만들고 싶어한다.",
|
300
|
+
"사랑(Love) 상대를 좋아하고 사랑한다. /분노(Anger) 상대에게 분노를 느낀다. ",
|
301
|
+
"존경(Respect) 상대의 실력이나 정신을 존경한다. /살의(Kill) 상대에게 살의를 느끼고 없애고자 한다.",
|
302
|
+
"복종(Obey) 상대를 주군으로서 받들고 충의를 맹세한다. /복수(Vendetta) 상대를 원망하고 원수로 여긴다.",
|
303
|
+
],
|
304
|
+
},
|
305
|
+
}.freeze
|
306
|
+
|
307
|
+
register_prefix(['DR.*', 'RT.*', 'CT\d+'] + TABLES.keys)
|
308
|
+
end
|
309
|
+
end
|
310
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class DungeonsAndDragons < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = 'DungeonsAndDragons'
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = 'ダンジョンズ&ドラゴンズ'
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = 'たんしよんすあんととらこんす'
|
14
|
+
|
15
|
+
# ダイスボットの使い方
|
16
|
+
HELP_MESSAGE = "※このダイスボットは部屋のシステム名表示用となります。\n"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,225 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class EarthDawn < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = 'EarthDawn'
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = 'アースドーン'
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = 'ああすとおん'
|
14
|
+
|
15
|
+
# ダイスボットの使い方
|
16
|
+
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
|
17
|
+
ステップダイス (xEn+k)
|
18
|
+
ステップx、目標値n(省略可能)、カルマダイスk(D2-D20)でステップダイスをロールします。
|
19
|
+
振り足しも自動。
|
20
|
+
例)9E 10E8 10E+D12
|
21
|
+
INFO_MESSAGE_TEXT
|
22
|
+
|
23
|
+
register_prefix(['\d+e.*'])
|
24
|
+
|
25
|
+
def initialize(command)
|
26
|
+
super(command)
|
27
|
+
|
28
|
+
@sort_add_dice = true
|
29
|
+
end
|
30
|
+
|
31
|
+
def eval_game_system_specific_command(command)
|
32
|
+
return ed_step(command)
|
33
|
+
end
|
34
|
+
|
35
|
+
# アースドーンステップ表
|
36
|
+
def ed_step(str)
|
37
|
+
output = getStepResult(str)
|
38
|
+
|
39
|
+
return output
|
40
|
+
end
|
41
|
+
|
42
|
+
def getStepResult(str)
|
43
|
+
return nil unless /(\d+)E(\d+)?(\+)?(\d+)?(d\d+)?/i =~ str
|
44
|
+
|
45
|
+
stepTotal = 0
|
46
|
+
@isFailed = true
|
47
|
+
|
48
|
+
step = Regexp.last_match(1).to_i # ステップ
|
49
|
+
targetNumber = 0 # 目標値
|
50
|
+
hasKarmaDice = false # カルマダイスの有無
|
51
|
+
karmaDiceCount = 0 # カルマダイスの個数又は修正
|
52
|
+
karmaDiceType = 0 # カルマダイスの種類
|
53
|
+
|
54
|
+
# 空値があった時の為のばんぺいくんRX
|
55
|
+
if step > 40
|
56
|
+
step = 40
|
57
|
+
end
|
58
|
+
|
59
|
+
if Regexp.last_match(2)
|
60
|
+
targetNumber = Regexp.last_match(2).to_i
|
61
|
+
targetNumber = 42 if targetNumber > 43
|
62
|
+
end
|
63
|
+
|
64
|
+
hasKarmaDice = Regexp.last_match(3).to_i if Regexp.last_match(3)
|
65
|
+
karmaDiceCount = Regexp.last_match(4).to_i if Regexp.last_match(4)
|
66
|
+
karmaDiceType = Regexp.last_match(5) if Regexp.last_match(5)
|
67
|
+
|
68
|
+
return nil if targetNumber < 0
|
69
|
+
|
70
|
+
stable = getStepTable()
|
71
|
+
|
72
|
+
nmod = stable[0][step - 1]
|
73
|
+
d20step = stable[1][step - 1]
|
74
|
+
d12step = stable[2][step - 1]
|
75
|
+
d10step = stable[3][step - 1]
|
76
|
+
d8step = stable[4][step - 1]
|
77
|
+
d6step = stable[5][step - 1]
|
78
|
+
d4step = stable[6][step - 1]
|
79
|
+
|
80
|
+
if hasKarmaDice
|
81
|
+
case karmaDiceType
|
82
|
+
when /d20/i
|
83
|
+
d20step += karmaDiceCount
|
84
|
+
when /d12/i
|
85
|
+
d12step += karmaDiceCount
|
86
|
+
when /d10/i
|
87
|
+
d10step += karmaDiceCount
|
88
|
+
when /d8/i
|
89
|
+
d8step += karmaDiceCount
|
90
|
+
when /d6/i
|
91
|
+
d6step += karmaDiceCount
|
92
|
+
when /d4/i
|
93
|
+
d4step += karmaDiceCount
|
94
|
+
else
|
95
|
+
nmod += karmaDiceCount
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
@string = ""
|
100
|
+
|
101
|
+
debug('d20step, d12step, d10step, d8step, d6step, d4step', d20step, d12step, d10step, d8step, d6step, d4step)
|
102
|
+
|
103
|
+
stepTotal += rollStep(20, d20step)
|
104
|
+
stepTotal += rollStep(12, d12step)
|
105
|
+
stepTotal += rollStep(10, d10step)
|
106
|
+
stepTotal += rollStep(8, d8step)
|
107
|
+
stepTotal += rollStep(6, d6step)
|
108
|
+
stepTotal += rollStep(4, d4step)
|
109
|
+
|
110
|
+
if nmod > 0 # 修正分の適用
|
111
|
+
@string += "+"
|
112
|
+
end
|
113
|
+
|
114
|
+
if nmod != 0
|
115
|
+
@string += nmod.to_s
|
116
|
+
stepTotal += nmod
|
117
|
+
end
|
118
|
+
|
119
|
+
# ステップ判定終了
|
120
|
+
@string += " > #{stepTotal}"
|
121
|
+
|
122
|
+
output = "ステップ#{step} > #{@string}"
|
123
|
+
return output if targetNumber == 0
|
124
|
+
|
125
|
+
# 結果判定
|
126
|
+
@string += ' > '
|
127
|
+
|
128
|
+
excelentSuccessNumber = stable[7][targetNumber - 1]
|
129
|
+
superSuccessNumber = stable[8][targetNumber - 1]
|
130
|
+
goodSuccessNumber = stable[9][targetNumber - 1]
|
131
|
+
failedNumber = stable[11][targetNumber - 1]
|
132
|
+
|
133
|
+
if @isFailed
|
134
|
+
@string += '自動失敗'
|
135
|
+
elsif stepTotal >= excelentSuccessNumber
|
136
|
+
@string += '最良成功'
|
137
|
+
elsif stepTotal >= superSuccessNumber
|
138
|
+
@string += '優成功'
|
139
|
+
elsif stepTotal >= goodSuccessNumber
|
140
|
+
@string += '良成功'
|
141
|
+
elsif stepTotal >= targetNumber
|
142
|
+
@string += '成功'
|
143
|
+
elsif stepTotal < failedNumber
|
144
|
+
@string += '大失敗'
|
145
|
+
else
|
146
|
+
@string += '失敗'
|
147
|
+
end
|
148
|
+
|
149
|
+
output = "ステップ#{step}>=#{targetNumber} > #{@string}"
|
150
|
+
|
151
|
+
return output
|
152
|
+
end
|
153
|
+
|
154
|
+
def getStepTable
|
155
|
+
# 表 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 34x 3x 4x 5x 6x 7x 8x 9x10x11x12x13x
|
156
|
+
|
157
|
+
mod = [-2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,]
|
158
|
+
d20 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,]
|
159
|
+
d12 = [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1,]
|
160
|
+
d10 = [0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 3, 2, 1, 1, 1, 2, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 1,]
|
161
|
+
d8 = [0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0,]
|
162
|
+
d6 = [0, 0, 0, 1, 0, 0, 0, 2, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 1, 0, 0, 0,]
|
163
|
+
d4 = [1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,]
|
164
|
+
exsuc = [6, 8, 10, 12, 14, 17, 19, 20, 22, 24, 25, 27, 29, 32, 33, 35, 37, 38, 39, 41, 42, 44, 45, 47, 48, 49, 51, 52, 54, 55, 56, 58, 59, 60, 62, 64, 65, 67, 68, 70, 71, 72,]
|
165
|
+
ssuc = [4, 6, 8, 10, 11, 13, 15, 16, 18, 19, 21, 22, 24, 26, 27, 29, 30, 32, 33, 34, 35, 37, 38, 40, 41, 42, 43, 45, 46, 47, 48, 49, 51, 52, 53, 55, 56, 58, 59, 60, 61, 62,]
|
166
|
+
gsuc = [2, 4, 6, 7, 9, 10, 12, 13, 14, 15, 17, 18, 20, 21, 22, 24, 25, 26, 27, 28, 29, 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42, 43, 45, 46, 47, 48, 50, 51, 52, 53, 54,]
|
167
|
+
nsuc = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,]
|
168
|
+
fsuc = [0, 1, 1, 1, 1, 2, 2, 3, 4, 5, 5, 6, 6, 7, 8, 8, 9, 10, 11, 12, 13, 13, 14, 15, 16, 17, 18, 18, 18, 20, 21, 22, 23, 23, 24, 25, 26, 26, 27, 28, 29, 30,]
|
169
|
+
|
170
|
+
stable = [mod, d20, d12, d10, d8, d6, d4, exsuc, ssuc, gsuc, nsuc, fsuc]
|
171
|
+
|
172
|
+
return stable
|
173
|
+
end
|
174
|
+
|
175
|
+
# 41以上のステップの為の配列です。
|
176
|
+
# 以下のようなルールでダイスを増やしています。より正しいステップ計算法をご存知の方は、
|
177
|
+
# どうぞそちらに合せて調整して下さい。
|
178
|
+
# 基本: 2d20+d10+d8
|
179
|
+
# これを仮にステップ34xとしています。
|
180
|
+
# 一般式としては、ステップxxのダイスは、
|
181
|
+
|
182
|
+
# ステップ34xのダイス
|
183
|
+
# + [(xx-45)/11]d20
|
184
|
+
# + ステップ[(xx-34)を11で割った余り+3]のダイス
|
185
|
+
|
186
|
+
def rollStep(diceType, diceCount)
|
187
|
+
debug('rollStep diceType, diceCount, @string', diceType, diceCount, @string)
|
188
|
+
|
189
|
+
stepTotal = 0
|
190
|
+
return stepTotal unless diceCount > 0
|
191
|
+
|
192
|
+
# diceぶんのステップ判定
|
193
|
+
|
194
|
+
@string += "+" unless @string.empty?
|
195
|
+
@string += "#{diceCount}d#{diceType}["
|
196
|
+
debug('rollStep @string', @string)
|
197
|
+
|
198
|
+
diceCount.times do |i|
|
199
|
+
dice_now = @randomizer.roll_once(diceType)
|
200
|
+
|
201
|
+
if dice_now != 1
|
202
|
+
@isFailed = false
|
203
|
+
end
|
204
|
+
|
205
|
+
dice_in = dice_now
|
206
|
+
|
207
|
+
while dice_now == diceType
|
208
|
+
dice_now = @randomizer.roll_once(diceType)
|
209
|
+
|
210
|
+
dice_in += dice_now
|
211
|
+
end
|
212
|
+
|
213
|
+
stepTotal += dice_in
|
214
|
+
|
215
|
+
@string += ',' if i != 0
|
216
|
+
@string += dice_in.to_s
|
217
|
+
end
|
218
|
+
|
219
|
+
@string += "]"
|
220
|
+
|
221
|
+
return stepTotal
|
222
|
+
end
|
223
|
+
end
|
224
|
+
end
|
225
|
+
end
|