bcdice 3.0.0.pre.alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +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,223 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class Strave < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = 'Strave'
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = '碧空のストレイヴ'
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = 'へきくうのすとれいふ'
|
14
|
+
|
15
|
+
# ダイスボットの使い方
|
16
|
+
HELP_MESSAGE = <<~MESSAGETEXT
|
17
|
+
・モラトリアムフェイズ用判定:MPm
|
18
|
+
・命中判定:nSTm*p
|
19
|
+
|
20
|
+
「n」でダイス数を指定。
|
21
|
+
「m」で目標値を指定。省略は出来ません。
|
22
|
+
「p」で攻撃力を指定。「*」は「x」でも可。
|
23
|
+
|
24
|
+
【書式例】
|
25
|
+
・MP6 → 目標値6のモラトリアムフェイズ用判定。
|
26
|
+
・5ST6*10 → 5d10で目標値6、攻撃力10の命中判定。
|
27
|
+
|
28
|
+
【各種表】
|
29
|
+
・所属表:AFF VN版:AFV
|
30
|
+
・アイデンティティ表:IDT VN版:IDV
|
31
|
+
|
32
|
+
※アイデンティティ表はエラッタ適用済です。
|
33
|
+
MESSAGETEXT
|
34
|
+
|
35
|
+
register_prefix([
|
36
|
+
'MP\d+', '\d+ST\d+(x|\*)\d+',
|
37
|
+
'AFF', 'IDT', 'AFV', 'IDV'
|
38
|
+
])
|
39
|
+
|
40
|
+
def initialize(command)
|
41
|
+
super(command)
|
42
|
+
@sort_add_dice = true # ダイスのソート有
|
43
|
+
end
|
44
|
+
|
45
|
+
def eval_game_system_specific_command(command)
|
46
|
+
output =
|
47
|
+
case command.upcase
|
48
|
+
|
49
|
+
# MPコマンド:モラトリアムフェイズ用判定
|
50
|
+
when /MP(\d+)$/i
|
51
|
+
diceCount = 2
|
52
|
+
target = Regexp.last_match(1).to_i
|
53
|
+
checkRoll(diceCount, target, nil)
|
54
|
+
|
55
|
+
# STコマンド:命中判定
|
56
|
+
when /(\d+)ST(\d+)(x|\*)(\d+)$/i
|
57
|
+
diceCount = Regexp.last_match(1).to_i
|
58
|
+
target = Regexp.last_match(2).to_i
|
59
|
+
damage = (Regexp.last_match(4) || 0).to_i
|
60
|
+
checkRoll(diceCount, target, damage)
|
61
|
+
|
62
|
+
# 各種表
|
63
|
+
when 'AFF'
|
64
|
+
get_affiliation_table
|
65
|
+
when 'IDT'
|
66
|
+
get_identity_table
|
67
|
+
when 'AFV'
|
68
|
+
get_affiliation_table2
|
69
|
+
when 'IDV'
|
70
|
+
get_identity_table2
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
return output
|
75
|
+
end
|
76
|
+
|
77
|
+
def checkRoll(diceCount, target, damage)
|
78
|
+
target = 1 if target < 1
|
79
|
+
target = 10 if target > 10
|
80
|
+
|
81
|
+
diceArray = @randomizer.roll_barabara(diceCount, 10).sort
|
82
|
+
diceText = diceArray.join(",")
|
83
|
+
|
84
|
+
successCount = diceArray.find_all { |i| (i <= target) }.size
|
85
|
+
|
86
|
+
isDamage = !damage.nil?
|
87
|
+
|
88
|
+
if isDamage
|
89
|
+
totalDamage = successCount * damage
|
90
|
+
result = "(#{diceCount}D10\<\=#{target}) > #{diceText} > Hits:#{successCount}*#{damage} > #{totalDamage}ダメージ"
|
91
|
+
else
|
92
|
+
result = "(#{diceCount}D10\<\=#{target}) > #{diceText}"
|
93
|
+
if successCount > 0
|
94
|
+
result += " > 【成功】"
|
95
|
+
else
|
96
|
+
result += " > 【失敗】"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
return result
|
101
|
+
end
|
102
|
+
|
103
|
+
def get_affiliation_table
|
104
|
+
name = '所属表:基本'
|
105
|
+
table = [
|
106
|
+
[1, 'アリウス管理委員会:あなたはアリウス管理委員会に所属している。'],
|
107
|
+
[2, 'オーヴァーブルー:あなたはオーヴァーブルーに所属している。'],
|
108
|
+
[3, 'ウォルゲイト:あなたはウォルゲイトに所属している。'],
|
109
|
+
[4, '暁部隊:あなたはかつて、反逆者・暁弥琴と同じ部隊に所属していた。'],
|
110
|
+
[5, '天文部:あなたは天文部に所属している。'],
|
111
|
+
[6, '吹奏楽部:あなたは吹奏楽部に所属している。'],
|
112
|
+
[7, '剣道部:あなたは剣道部に所属している。'],
|
113
|
+
[8, 'ボクシング部:あなたはボクシング部に所属している。'],
|
114
|
+
[9, '陸上部:あなたは陸上部に所属している。'],
|
115
|
+
[10, '茶道部:あなたは茶道部に所属している。'],
|
116
|
+
[11, 'パソコン部:あなたはパソコン部に所属している。'],
|
117
|
+
[12, '新聞部:あなたは新聞部に所属している。'],
|
118
|
+
[13, '弓道部:あなたは弓道部に所属している。'],
|
119
|
+
[14, '美術部:あなたは美術部に所属している。'],
|
120
|
+
[15, 'ミリタリー研究会:あなたはミリタリー研究会に所属している。'],
|
121
|
+
[16, '歴史研究会:あなたは歴史研究会に所属している。'],
|
122
|
+
[17, 'ロボット研究会:あなたはロボット研究会に所属している。'],
|
123
|
+
[18, '図書委員会:あなたは図書委員会に所属している。'],
|
124
|
+
[19, '任意:あなたの任意の所属を設定せよ。'],
|
125
|
+
[20, '任意:あなたの任意の所属を設定せよ。']
|
126
|
+
]
|
127
|
+
return get_strave_1d100_table_result(name, table)
|
128
|
+
end
|
129
|
+
|
130
|
+
def get_identity_table
|
131
|
+
name = 'アイデンティティ表:基本'
|
132
|
+
table = [
|
133
|
+
[1, '戦い:戦いこそが、あなたをあなたたらしめている。'],
|
134
|
+
[2, '守護:あなたには守るべきものがある。'],
|
135
|
+
[3, '復讐:あなたは復讐を誓っている。何かに、あるいは誰かに。'],
|
136
|
+
[4, '名声:その身に浴びる脚光を、何よりも誉としている。'],
|
137
|
+
[5, '恋愛:あなたはその身を焦がす恋に生きている。'],
|
138
|
+
[6, '家族:あなたにとって、家族はかけがえの無いものだ。'],
|
139
|
+
[7, '友人:あなたは友のために戦っている。'],
|
140
|
+
[8, '部隊:共に戦う部隊の仲間が、あなたに力をくれる。'],
|
141
|
+
[9, 'ストレイヴ:あなたは自身のストレイヴを誇りに思っている。'],
|
142
|
+
[10, 'スフィアブレイク:あなたはスフィアブレイクを熱烈に目指している。'],
|
143
|
+
[11, 'お金:あなたはお金を求めている。報酬こそが自分の価値だ。'],
|
144
|
+
[12, '夢:あなたには夢がある。自分を突き動かす夢が。'],
|
145
|
+
[13, '忠誠:あなたは忠誠を誓っている。何かに、あるいは誰かに。'],
|
146
|
+
[14, '共生:あなたは、ヴァイエルと人類との共生を望んでいる。'],
|
147
|
+
[15, '居場所:自身の居場所こそが、あなたに力をくれる。'],
|
148
|
+
[16, '強制:あなたは不本意ながら今の立場にいる。'],
|
149
|
+
[17, '碧空:見上げた青空が、あなたを変えた。'],
|
150
|
+
[18, '任意:あなたの任意のアイデンティティを設定せよ。'],
|
151
|
+
[19, '任意:あなたの任意のアイデンティティを設定せよ。'],
|
152
|
+
[20, '任意:あなたの任意のアイデンティティを設定せよ。']
|
153
|
+
]
|
154
|
+
return get_strave_1d100_table_result(name, table)
|
155
|
+
end
|
156
|
+
|
157
|
+
def get_affiliation_table2
|
158
|
+
name = '所属表:ヴァリアンスネイヴァー'
|
159
|
+
table = [
|
160
|
+
[1, 'シュヴァレ・トワール:あなたはシュヴァレ・トワールに所属している。'],
|
161
|
+
[2, 'ディープシンカー:あなたはディープシンカーに所属している。'],
|
162
|
+
[3, 'ヴェルクシュタット:あなたはヴェルクシュタットに所属している。'],
|
163
|
+
[4, 'アウスヴァル:あなたはアウスヴァルに所属している。'],
|
164
|
+
[5, '美術科:あなたは美術科に所属している。'],
|
165
|
+
[6, '哲学科:あなたは哲学科に所属している。'],
|
166
|
+
[7, '数学科:あなたは数学科に所属している。'],
|
167
|
+
[8, '地理学科:あなたは地理学科に所属している。'],
|
168
|
+
[9, '工学科:あなたは工学科に所属している。'],
|
169
|
+
[10, '体育学科:あなたは体育学科に所属している。'],
|
170
|
+
[11, '農学科:あなたは農学科に所属している。'],
|
171
|
+
[12, '歴史学科:あなたは歴史学科に所属している。'],
|
172
|
+
[13, '医学科:あなたは医学科に所属している。'],
|
173
|
+
[14, '情報学科:あなたは情報学科に所属している。'],
|
174
|
+
[15, '音楽科:あなたは音楽科に所属している。'],
|
175
|
+
[16, '心理学科:あなたは心理学科に所属している。'],
|
176
|
+
[17, '文学科:あなたは文学科に所属している。'],
|
177
|
+
[18, '任意:あなたの任意の所属を設定すること。'],
|
178
|
+
[19, '任意:あなたの任意の所属を設定すること。'],
|
179
|
+
[20, '任意:あなたの任意の所属を設定すること。']
|
180
|
+
]
|
181
|
+
return get_strave_1d100_table_result(name, table)
|
182
|
+
end
|
183
|
+
|
184
|
+
def get_identity_table2
|
185
|
+
name = 'アイデンティティ表:ヴァリアンスネイヴァー'
|
186
|
+
table = [
|
187
|
+
[1, '戦い:戦いへの衝動が、あなたをあなたたらしめている。'],
|
188
|
+
[2, '守護:守るべきものの存在が、あなたをあなたたらしめている。'],
|
189
|
+
[3, '復讐:復讐の誓いこそが、あなたをあなたたらしめている。'],
|
190
|
+
[4, '名声:与えられた名誉こそが、あなたをあなたたらしめている。'],
|
191
|
+
[5, '恋愛:愛する者への想いが、あなたをあなたたらしめている。'],
|
192
|
+
[6, '家族:かけがえのない家族が、あなたをあなたたらしめている。'],
|
193
|
+
[7, '友人:友の存在が、あなたをあなたたらしめている。'],
|
194
|
+
[8, '部隊:部隊の戦友こそが、あなたをあなたたらしめている。'],
|
195
|
+
[9, 'ストレイヴ:ストレイヴの存在が、あなたの心を保っている。'],
|
196
|
+
[10, '宇宙:やがて来る旅立ちの日まで、あなたはあなたであろうとしている。'],
|
197
|
+
[11, 'お金:与えられる報酬のため、あなたはあなたであろうとしている。'],
|
198
|
+
[12, '夢:あなたには、己の心に誓った夢がある。'],
|
199
|
+
[13, '忠誠:その心でもって、誓った忠義がある。'],
|
200
|
+
[14, '共生:あなたは、ヴァイエルと人類との共生を望んでいる。'],
|
201
|
+
[15, '居場所:自身の居場所への思いが、あなたをあなたたらしめている。'],
|
202
|
+
[16, 'ヴァイエル:あなたと同じでありながら、あなたと異なる存在。彼らへの思いが、あなたをあなたたらしめている。'],
|
203
|
+
[17, 'エコール:自身の生きる場所への思いが、あなたをあなたたらしめている。'],
|
204
|
+
[18, '任意:あなたの任意のアイデンティティを設定せよ。'],
|
205
|
+
[19, '任意:あなたの任意のアイデンティティを設定せよ。'],
|
206
|
+
[20, '任意:あなたの任意のアイデンティティを設定せよ。']
|
207
|
+
]
|
208
|
+
return get_strave_1d100_table_result(name, table)
|
209
|
+
end
|
210
|
+
|
211
|
+
def get_strave_1d100_table_result(name, table)
|
212
|
+
dice = @randomizer.roll_once(100)
|
213
|
+
dice2 = ((dice.to_i - 1) / 5).floor + 1
|
214
|
+
result = get_table_by_number(dice2, table)
|
215
|
+
return get_strave_table_result(name, dice, result)
|
216
|
+
end
|
217
|
+
|
218
|
+
def get_strave_table_result(name, dice, result)
|
219
|
+
return "#{name}(#{dice}) > #{result}"
|
220
|
+
end
|
221
|
+
end
|
222
|
+
end
|
223
|
+
end
|
@@ -0,0 +1,491 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class SwordWorld < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = 'SwordWorld'
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = 'ソードワールドRPG'
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = 'そおとわあると'
|
14
|
+
|
15
|
+
# ダイスボットの使い方
|
16
|
+
HELP_MESSAGE = "・SW レーティング表 (Kx[c]+m$f) (x:キー, c:クリティカル値, m:ボーナス, f:出目修正)\n"
|
17
|
+
|
18
|
+
register_prefix(['H?K\d+.*'])
|
19
|
+
|
20
|
+
def initialize(command)
|
21
|
+
super(command)
|
22
|
+
@rating_table = 0
|
23
|
+
end
|
24
|
+
|
25
|
+
# change_textで使うレーティング表コマンドの正規表現
|
26
|
+
#
|
27
|
+
# SW 2.5のダイスボットでも必要なため、共通化のために定数として定義する
|
28
|
+
RATING_TABLE_RE_FOR_CHANGE_TEXT = /\AS?H?K\d+/i.freeze
|
29
|
+
|
30
|
+
# コマンド実行前にメッセージを置換する
|
31
|
+
# @param [String] string 受信したメッセージ
|
32
|
+
# @return [String]
|
33
|
+
def replace_text(string)
|
34
|
+
# TODO: Ruby 2.4以降では Regexp#match? を使うこと
|
35
|
+
return string unless RATING_TABLE_RE_FOR_CHANGE_TEXT.match(string)
|
36
|
+
|
37
|
+
string
|
38
|
+
.gsub(/\[(\d+)\]/) { "c[#{Regexp.last_match(1)}]" }
|
39
|
+
.gsub(/@(\d+)/) { "c[#{Regexp.last_match(1)}]" }
|
40
|
+
.gsub(/\$([-+]?\d+)/) { "m[#{Regexp.last_match(1)}]" }
|
41
|
+
.gsub(/r([-+]?\d+)/i) { "r[#{Regexp.last_match(1)}]" }
|
42
|
+
end
|
43
|
+
|
44
|
+
def getRatingCommandStrings
|
45
|
+
"cmCM"
|
46
|
+
end
|
47
|
+
|
48
|
+
def check_2D6(total, dice_total, _dice_list, cmp_op, target)
|
49
|
+
if dice_total >= 12
|
50
|
+
" > 自動的成功"
|
51
|
+
elsif dice_total <= 2
|
52
|
+
" > 自動的失敗"
|
53
|
+
elsif cmp_op != :>= || target == "?"
|
54
|
+
''
|
55
|
+
elsif total >= target
|
56
|
+
" > 成功"
|
57
|
+
else
|
58
|
+
" > 失敗"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def eval_game_system_specific_command(command)
|
63
|
+
rating(command)
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
#################### SWレーティング表 ########################
|
69
|
+
def rating(string) # レーティング表
|
70
|
+
string = replace_text(string)
|
71
|
+
debug("rating string", string)
|
72
|
+
|
73
|
+
commands = getRatingCommandStrings
|
74
|
+
|
75
|
+
m = /^S?(H?K[\d\+\-]+([#{commands}]\[([\d\+\-]+)\])*([\d\+\-]*)([CMR]\[([\d\+\-]+)\]|GF|H)*)/i.match(string)
|
76
|
+
unless m
|
77
|
+
debug("not matched")
|
78
|
+
return '1'
|
79
|
+
end
|
80
|
+
|
81
|
+
string = m[1]
|
82
|
+
half = string.include?("H")
|
83
|
+
|
84
|
+
rateUp, string = getRateUpFromString(string)
|
85
|
+
crit, string = getCriticalFromString(string, half)
|
86
|
+
firstDiceChanteTo, firstDiceChangeModify, string = getDiceChangesFromString(string)
|
87
|
+
|
88
|
+
key, addValue = getKeyAndAddValueFromString(string)
|
89
|
+
|
90
|
+
return '1' unless key =~ /([\d]+)/
|
91
|
+
|
92
|
+
key = Regexp.last_match(1).to_i
|
93
|
+
|
94
|
+
# 2.0対応
|
95
|
+
rate_sw2_0 = getSW2_0_RatingTable
|
96
|
+
|
97
|
+
keyMax = rate_sw2_0.length - 1
|
98
|
+
debug("keyMax", keyMax)
|
99
|
+
if key > keyMax
|
100
|
+
return "キーナンバーは#{keyMax}までです"
|
101
|
+
end
|
102
|
+
|
103
|
+
newRates = getNewRates(rate_sw2_0)
|
104
|
+
|
105
|
+
output = "KeyNo.#{key}"
|
106
|
+
|
107
|
+
output += "c[#{crit}]" if crit < 13
|
108
|
+
output += "m[#{firstDiceChangeModify}]" if firstDiceChangeModify != 0
|
109
|
+
output += "m[#{firstDiceChanteTo}]" if firstDiceChanteTo != 0
|
110
|
+
output += "r[#{rateUp}]" if rateUp != 0
|
111
|
+
|
112
|
+
output, values = getAdditionalString(string, output)
|
113
|
+
|
114
|
+
debug('output', output)
|
115
|
+
|
116
|
+
if addValue != 0
|
117
|
+
output += "+#{addValue}" if addValue > 0
|
118
|
+
output += addValue.to_s if addValue < 0
|
119
|
+
end
|
120
|
+
|
121
|
+
output += " > "
|
122
|
+
|
123
|
+
diceResultTotals = []
|
124
|
+
diceResults = []
|
125
|
+
rateResults = []
|
126
|
+
dice = 0
|
127
|
+
diceOnlyTotal = 0
|
128
|
+
totalValue = 0
|
129
|
+
round = 0
|
130
|
+
|
131
|
+
loop do
|
132
|
+
dice_raw, diceText = rollDice(values)
|
133
|
+
dice = dice_raw
|
134
|
+
|
135
|
+
if firstDiceChanteTo != 0
|
136
|
+
dice = dice_raw = firstDiceChanteTo
|
137
|
+
firstDiceChanteTo = 0
|
138
|
+
elsif firstDiceChangeModify != 0
|
139
|
+
dice += firstDiceChangeModify.to_i
|
140
|
+
firstDiceChangeModify = 0
|
141
|
+
end
|
142
|
+
|
143
|
+
# 出目がピンゾロの時にはそこで終了
|
144
|
+
if dice_raw <= 2
|
145
|
+
diceResultTotals << dice_raw.to_s
|
146
|
+
diceResults << diceText.to_s
|
147
|
+
rateResults << "**"
|
148
|
+
|
149
|
+
round += 1
|
150
|
+
break
|
151
|
+
end
|
152
|
+
|
153
|
+
dice += getAdditionalDiceValue(dice, values)
|
154
|
+
|
155
|
+
dice = 2 if dice < 2
|
156
|
+
dice = 12 if dice > 12
|
157
|
+
|
158
|
+
currentKey = [key + round * rateUp, keyMax].min
|
159
|
+
debug("currentKey", currentKey)
|
160
|
+
rateValue = newRates[dice][currentKey]
|
161
|
+
debug("rateValue", rateValue)
|
162
|
+
|
163
|
+
totalValue += rateValue
|
164
|
+
diceOnlyTotal += dice
|
165
|
+
|
166
|
+
diceResultTotals << dice.to_s
|
167
|
+
diceResults << diceText.to_s
|
168
|
+
rateResults << (dice > 2 ? rateValue : "**")
|
169
|
+
|
170
|
+
round += 1
|
171
|
+
|
172
|
+
break unless dice >= crit
|
173
|
+
end
|
174
|
+
|
175
|
+
output += getResultText(totalValue, addValue, diceResults, diceResultTotals,
|
176
|
+
rateResults, diceOnlyTotal, round, half)
|
177
|
+
|
178
|
+
return output
|
179
|
+
end
|
180
|
+
|
181
|
+
def getAdditionalString(_string, output)
|
182
|
+
values = {}
|
183
|
+
return output, values
|
184
|
+
end
|
185
|
+
|
186
|
+
def getAdditionalDiceValue(_dice, _values)
|
187
|
+
0
|
188
|
+
end
|
189
|
+
|
190
|
+
def getCriticalFromString(string, half)
|
191
|
+
crit = half ? 13 : 10
|
192
|
+
|
193
|
+
regexp = /c\[(\d+)\]/i
|
194
|
+
|
195
|
+
if regexp =~ string
|
196
|
+
crit = Regexp.last_match(1).to_i
|
197
|
+
crit = 3 if crit < 3 # エラートラップ(クリティカル値が3未満なら3とする)
|
198
|
+
string = string.gsub(regexp, '')
|
199
|
+
end
|
200
|
+
|
201
|
+
return crit, string
|
202
|
+
end
|
203
|
+
|
204
|
+
def getDiceChangesFromString(string)
|
205
|
+
firstDiceChanteTo = 0
|
206
|
+
firstDiceChangeModify = 0
|
207
|
+
|
208
|
+
regexp = /m\[([\d\+\-]+)\]/i
|
209
|
+
|
210
|
+
if regexp =~ string
|
211
|
+
firstDiceChangeModify = Regexp.last_match(1)
|
212
|
+
|
213
|
+
unless /[\+\-]/ =~ firstDiceChangeModify
|
214
|
+
firstDiceChanteTo = firstDiceChangeModify.to_i
|
215
|
+
firstDiceChangeModify = 0
|
216
|
+
end
|
217
|
+
|
218
|
+
string = string.gsub(regexp, '')
|
219
|
+
end
|
220
|
+
|
221
|
+
return firstDiceChanteTo, firstDiceChangeModify, string
|
222
|
+
end
|
223
|
+
|
224
|
+
def getRateUpFromString(string)
|
225
|
+
rateUp = 0
|
226
|
+
return rateUp, string
|
227
|
+
end
|
228
|
+
|
229
|
+
def getKeyAndAddValueFromString(string)
|
230
|
+
key = nil
|
231
|
+
addValue = 0
|
232
|
+
|
233
|
+
if /K(\d+)([\d\+\-]*)/i =~ string # ボーナスの抽出
|
234
|
+
key = Regexp.last_match(1)
|
235
|
+
if Regexp.last_match(2)
|
236
|
+
addValue = ArithmeticEvaluator.eval(Regexp.last_match(2))
|
237
|
+
end
|
238
|
+
else
|
239
|
+
key = string
|
240
|
+
end
|
241
|
+
|
242
|
+
return key, addValue
|
243
|
+
end
|
244
|
+
|
245
|
+
def getSW2_0_RatingTable
|
246
|
+
rate_sw2_0 = [
|
247
|
+
# 0
|
248
|
+
'*,0,0,0,1,2,2,3,3,4,4',
|
249
|
+
'*,0,0,0,1,2,3,3,3,4,4',
|
250
|
+
'*,0,0,0,1,2,3,4,4,4,4',
|
251
|
+
'*,0,0,1,1,2,3,4,4,4,5',
|
252
|
+
'*,0,0,1,2,2,3,4,4,5,5',
|
253
|
+
'*,0,1,1,2,2,3,4,5,5,5',
|
254
|
+
'*,0,1,1,2,3,3,4,5,5,5',
|
255
|
+
'*,0,1,1,2,3,4,4,5,5,6',
|
256
|
+
'*,0,1,2,2,3,4,4,5,6,6',
|
257
|
+
'*,0,1,2,3,3,4,4,5,6,7',
|
258
|
+
'*,1,1,2,3,3,4,5,5,6,7',
|
259
|
+
# 11
|
260
|
+
'*,1,2,2,3,3,4,5,6,6,7',
|
261
|
+
'*,1,2,2,3,4,4,5,6,6,7',
|
262
|
+
'*,1,2,3,3,4,4,5,6,7,7',
|
263
|
+
'*,1,2,3,4,4,4,5,6,7,8',
|
264
|
+
'*,1,2,3,4,4,5,5,6,7,8',
|
265
|
+
'*,1,2,3,4,4,5,6,7,7,8',
|
266
|
+
'*,1,2,3,4,5,5,6,7,7,8',
|
267
|
+
'*,1,2,3,4,5,6,6,7,7,8',
|
268
|
+
'*,1,2,3,4,5,6,7,7,8,9',
|
269
|
+
'*,1,2,3,4,5,6,7,8,9,10',
|
270
|
+
# 21
|
271
|
+
'*,1,2,3,4,6,6,7,8,9,10',
|
272
|
+
'*,1,2,3,5,6,6,7,8,9,10',
|
273
|
+
'*,2,2,3,5,6,7,7,8,9,10',
|
274
|
+
'*,2,3,4,5,6,7,7,8,9,10',
|
275
|
+
'*,2,3,4,5,6,7,8,8,9,10',
|
276
|
+
'*,2,3,4,5,6,8,8,9,9,10',
|
277
|
+
'*,2,3,4,6,6,8,8,9,9,10',
|
278
|
+
'*,2,3,4,6,6,8,9,9,10,10',
|
279
|
+
'*,2,3,4,6,7,8,9,9,10,10',
|
280
|
+
'*,2,4,4,6,7,8,9,10,10,10',
|
281
|
+
# 31
|
282
|
+
'*,2,4,5,6,7,8,9,10,10,11',
|
283
|
+
'*,3,4,5,6,7,8,10,10,10,11',
|
284
|
+
'*,3,4,5,6,8,8,10,10,10,11',
|
285
|
+
'*,3,4,5,6,8,9,10,10,11,11',
|
286
|
+
'*,3,4,5,7,8,9,10,10,11,12',
|
287
|
+
'*,3,5,5,7,8,9,10,11,11,12',
|
288
|
+
'*,3,5,6,7,8,9,10,11,12,12',
|
289
|
+
'*,3,5,6,7,8,10,10,11,12,13',
|
290
|
+
'*,4,5,6,7,8,10,11,11,12,13',
|
291
|
+
'*,4,5,6,7,9,10,11,11,12,13',
|
292
|
+
# 41
|
293
|
+
'*,4,6,6,7,9,10,11,12,12,13',
|
294
|
+
'*,4,6,7,7,9,10,11,12,13,13',
|
295
|
+
'*,4,6,7,8,9,10,11,12,13,14',
|
296
|
+
'*,4,6,7,8,10,10,11,12,13,14',
|
297
|
+
'*,4,6,7,9,10,10,11,12,13,14',
|
298
|
+
'*,4,6,7,9,10,10,12,13,13,14',
|
299
|
+
'*,4,6,7,9,10,11,12,13,13,15',
|
300
|
+
'*,4,6,7,9,10,12,12,13,13,15',
|
301
|
+
'*,4,6,7,10,10,12,12,13,14,15',
|
302
|
+
'*,4,6,8,10,10,12,12,13,15,15',
|
303
|
+
# 51
|
304
|
+
'*,5,7,8,10,10,12,12,13,15,15',
|
305
|
+
'*,5,7,8,10,11,12,12,13,15,15',
|
306
|
+
'*,5,7,9,10,11,12,12,14,15,15',
|
307
|
+
'*,5,7,9,10,11,12,13,14,15,16',
|
308
|
+
'*,5,7,10,10,11,12,13,14,16,16',
|
309
|
+
'*,5,8,10,10,11,12,13,15,16,16',
|
310
|
+
'*,5,8,10,11,11,12,13,15,16,17',
|
311
|
+
'*,5,8,10,11,12,12,13,15,16,17',
|
312
|
+
'*,5,9,10,11,12,12,14,15,16,17',
|
313
|
+
'*,5,9,10,11,12,13,14,15,16,18',
|
314
|
+
# 61
|
315
|
+
'*,5,9,10,11,12,13,14,16,17,18',
|
316
|
+
'*,5,9,10,11,13,13,14,16,17,18',
|
317
|
+
'*,5,9,10,11,13,13,15,17,17,18',
|
318
|
+
'*,5,9,10,11,13,14,15,17,17,18',
|
319
|
+
'*,5,9,10,12,13,14,15,17,18,18',
|
320
|
+
'*,5,9,10,12,13,15,15,17,18,19',
|
321
|
+
'*,5,9,10,12,13,15,16,17,19,19',
|
322
|
+
'*,5,9,10,12,14,15,16,17,19,19',
|
323
|
+
'*,5,9,10,12,14,16,16,17,19,19',
|
324
|
+
'*,5,9,10,12,14,16,17,18,19,19',
|
325
|
+
# 71
|
326
|
+
'*,5,9,10,13,14,16,17,18,19,20',
|
327
|
+
'*,5,9,10,13,15,16,17,18,19,20',
|
328
|
+
'*,5,9,10,13,15,16,17,19,20,21',
|
329
|
+
'*,6,9,10,13,15,16,18,19,20,21',
|
330
|
+
'*,6,9,10,13,16,16,18,19,20,21',
|
331
|
+
'*,6,9,10,13,16,17,18,19,20,21',
|
332
|
+
'*,6,9,10,13,16,17,18,20,21,22',
|
333
|
+
'*,6,9,10,13,16,17,19,20,22,23',
|
334
|
+
'*,6,9,10,13,16,18,19,20,22,23',
|
335
|
+
'*,6,9,10,13,16,18,20,21,22,23',
|
336
|
+
# 81
|
337
|
+
'*,6,9,10,13,17,18,20,21,22,23',
|
338
|
+
'*,6,9,10,14,17,18,20,21,22,24',
|
339
|
+
'*,6,9,11,14,17,18,20,21,23,24',
|
340
|
+
'*,6,9,11,14,17,19,20,21,23,24',
|
341
|
+
'*,6,9,11,14,17,19,21,22,23,24',
|
342
|
+
'*,7,10,11,14,17,19,21,22,23,25',
|
343
|
+
'*,7,10,12,14,17,19,21,22,24,25',
|
344
|
+
'*,7,10,12,14,18,19,21,22,24,25',
|
345
|
+
'*,7,10,12,15,18,19,21,22,24,26',
|
346
|
+
'*,7,10,12,15,18,19,21,23,25,26',
|
347
|
+
# 91
|
348
|
+
'*,7,11,13,15,18,19,21,23,25,26',
|
349
|
+
'*,7,11,13,15,18,20,21,23,25,27',
|
350
|
+
'*,8,11,13,15,18,20,22,23,25,27',
|
351
|
+
'*,8,11,13,16,18,20,22,23,25,28',
|
352
|
+
'*,8,11,14,16,18,20,22,23,26,28',
|
353
|
+
'*,8,11,14,16,19,20,22,23,26,28',
|
354
|
+
'*,8,12,14,16,19,20,22,24,26,28',
|
355
|
+
'*,8,12,15,16,19,20,22,24,27,28',
|
356
|
+
'*,8,12,15,17,19,20,22,24,27,29',
|
357
|
+
'*,8,12,15,18,19,20,22,24,27,30',
|
358
|
+
]
|
359
|
+
|
360
|
+
return rate_sw2_0
|
361
|
+
end
|
362
|
+
|
363
|
+
def getNewRates(rate_sw2_0)
|
364
|
+
rate_3 = []
|
365
|
+
rate_4 = []
|
366
|
+
rate_5 = []
|
367
|
+
rate_6 = []
|
368
|
+
rate_7 = []
|
369
|
+
rate_8 = []
|
370
|
+
rate_9 = []
|
371
|
+
rate_10 = []
|
372
|
+
rate_11 = []
|
373
|
+
rate_12 = []
|
374
|
+
zeroArray = []
|
375
|
+
|
376
|
+
rate_sw2_0.each do |rateText|
|
377
|
+
rate_arr = rateText.split(/,/)
|
378
|
+
zeroArray.push(0)
|
379
|
+
rate_3.push(rate_arr[1].to_i)
|
380
|
+
rate_4.push(rate_arr[2].to_i)
|
381
|
+
rate_5.push(rate_arr[3].to_i)
|
382
|
+
rate_6.push(rate_arr[4].to_i)
|
383
|
+
rate_7.push(rate_arr[5].to_i)
|
384
|
+
rate_8.push(rate_arr[6].to_i)
|
385
|
+
rate_9.push(rate_arr[7].to_i)
|
386
|
+
rate_10.push(rate_arr[8].to_i)
|
387
|
+
rate_11.push(rate_arr[9].to_i)
|
388
|
+
rate_12.push(rate_arr[10].to_i)
|
389
|
+
end
|
390
|
+
|
391
|
+
if @rating_table == 1
|
392
|
+
# 完全版準拠に差し替え
|
393
|
+
rate_12[31] = rate_12[32] = rate_12[33] = 10
|
394
|
+
end
|
395
|
+
|
396
|
+
newRates = [zeroArray, zeroArray, zeroArray, rate_3, rate_4, rate_5, rate_6, rate_7, rate_8, rate_9, rate_10, rate_11, rate_12]
|
397
|
+
|
398
|
+
return newRates
|
399
|
+
end
|
400
|
+
|
401
|
+
def rollDice(_values)
|
402
|
+
dice_list = @randomizer.roll_barabara(2, 6)
|
403
|
+
total = dice_list.sum()
|
404
|
+
dice_str = dice_list.join(",")
|
405
|
+
return total, dice_str
|
406
|
+
end
|
407
|
+
|
408
|
+
# @param rating_total [Integer]
|
409
|
+
# @param modifier [Integer]
|
410
|
+
# @param diceResults [Array<String>]
|
411
|
+
# @param diceResultTotals [Array<String>]
|
412
|
+
# @param rateResults [Array<String>]
|
413
|
+
# @param dice_total [Integer]
|
414
|
+
# @param round [Integer]
|
415
|
+
# @param half [Boolean]
|
416
|
+
def getResultText(rating_total, modifier, diceResults, diceResultTotals,
|
417
|
+
rateResults, dice_total, round, half)
|
418
|
+
sequence = []
|
419
|
+
|
420
|
+
sequence.push("2D:[#{diceResults.join(' ')}]=#{diceResultTotals.join(',')}")
|
421
|
+
|
422
|
+
if dice_total <= 2
|
423
|
+
sequence.push(rateResults.join(','))
|
424
|
+
sequence.push("自動的失敗")
|
425
|
+
return sequence.join(" > ")
|
426
|
+
end
|
427
|
+
|
428
|
+
# rate回数が1回で、修正値がない時には途中式と最終結果が一致するので、途中式を省略する
|
429
|
+
if rateResults.size > 1 || modifier != 0
|
430
|
+
text = rateResults.join(',') + Format.modifier(modifier)
|
431
|
+
if half
|
432
|
+
text = "(#{text})/2"
|
433
|
+
end
|
434
|
+
sequence.push(text)
|
435
|
+
elsif half
|
436
|
+
sequence.push("#{rateResults.first}/2")
|
437
|
+
end
|
438
|
+
|
439
|
+
if round > 1
|
440
|
+
round_text = "#{round - 1}回転"
|
441
|
+
sequence.push(round_text)
|
442
|
+
end
|
443
|
+
|
444
|
+
total = rating_total + modifier
|
445
|
+
if half
|
446
|
+
total = (total / 2.0).ceil
|
447
|
+
end
|
448
|
+
|
449
|
+
total_text = total.to_s
|
450
|
+
sequence.push(total_text)
|
451
|
+
|
452
|
+
return sequence.join(" > ")
|
453
|
+
end
|
454
|
+
|
455
|
+
def setRatingTable(tnick)
|
456
|
+
mode_str = ""
|
457
|
+
pre_mode = @rating_table
|
458
|
+
|
459
|
+
if /(\d+)/ =~ tnick
|
460
|
+
@rating_table = Regexp.last_match(1).to_i
|
461
|
+
if @rating_table > 1
|
462
|
+
mode_str = "2.0-mode"
|
463
|
+
@rating_table = 2
|
464
|
+
elsif @rating_table > 0
|
465
|
+
mode_str = "new-mode"
|
466
|
+
@rating_table = 1
|
467
|
+
else
|
468
|
+
mode_str = "old-mode"
|
469
|
+
@rating_table = 0
|
470
|
+
end
|
471
|
+
else
|
472
|
+
case tnick
|
473
|
+
when /old/i
|
474
|
+
@rating_table = 0
|
475
|
+
mode_str = "old-mode"
|
476
|
+
when /new/i
|
477
|
+
@rating_table = 1
|
478
|
+
mode_str = "new-mode"
|
479
|
+
when /2\.0/i
|
480
|
+
@rating_table = 2
|
481
|
+
mode_str = "2.0-mode"
|
482
|
+
end
|
483
|
+
end
|
484
|
+
|
485
|
+
return '1' if @rating_table == pre_mode
|
486
|
+
|
487
|
+
return "RatingTableを#{mode_str}に変更しました"
|
488
|
+
end
|
489
|
+
end
|
490
|
+
end
|
491
|
+
end
|