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,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
|