bcdice 3.15.0 → 3.17.0
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 +4 -4
- data/CHANGELOG.md +140 -0
- data/i18n/Airgetlamh/ja_jp.yml +5 -0
- data/i18n/Airgetlamh/ko_kr.yml +5 -0
- data/i18n/Alsetto/ja_jp.yml +5 -0
- data/i18n/Alsetto/ko_kr.yml +5 -0
- data/i18n/AnimaAnimus/ja_jp.yml +28 -0
- data/i18n/AnimaAnimus/ko_kr.yml +28 -0
- data/i18n/BlackJacket/ja_jp.yml +79 -0
- data/i18n/BlackJacket/ko_kr.yml +79 -0
- data/i18n/Bloodorium/ja_jp.yml +3 -0
- data/i18n/Bloodorium/ko_kr.yml +3 -0
- data/i18n/Cthulhu/ko_kr.yml +1 -1
- data/i18n/DoubleCross/ja_jp.yml +2 -2
- data/i18n/Dracurouge/ko_kr.yml +1284 -205
- data/i18n/Emoklore/ja_jp.yml +1 -0
- data/i18n/Emoklore/ko_kr.yml +8 -0
- data/i18n/FutariSousa/ja_jp.yml +70 -0
- data/i18n/FutariSousa/ko_kr.yml +157 -0
- data/i18n/HatsuneMiku/ja_jp.yml +579 -0
- data/i18n/HatsuneMiku/ko_kr.yml +579 -0
- data/i18n/Irisbane/ja_jp.yml +27 -0
- data/i18n/Irisbane/ko_kr.yml +27 -0
- data/i18n/JuinKansen/ja_jp.yml +168 -0
- data/i18n/JuinKansen/ko_kr.yml +168 -0
- data/i18n/KemonoNoMori/ja_jp.yml +229 -0
- data/i18n/KemonoNoMori/ko_kr.yml +229 -0
- data/i18n/KizunaBullet/ko_kr.yml +653 -0
- data/i18n/MagicPunk/ja_jp.yml +5 -0
- data/i18n/MagicPunk/ko_kr.yml +5 -0
- data/i18n/MorkBorg/ja_jp.yml +34 -0
- data/i18n/MorkBorg/ko_kr.yml +34 -0
- data/i18n/Nechronica/ko_kr.yml +43 -0
- data/i18n/NegikureNegimaki/ja_jp.yml +6 -0
- data/i18n/NegikureNegimaki/ko_kr.yml +6 -0
- data/i18n/Nuekagami/ja_jp.yml +219 -0
- data/i18n/Nuekagami/ko_kr.yml +219 -0
- data/i18n/Revulture/ja_jp.yml +8 -0
- data/i18n/Revulture/ko_kr.yml +8 -0
- data/i18n/SRS/ja_jp.yml +4 -0
- data/i18n/SRS/ko_kr.yml +4 -0
- data/i18n/ShinobiGami/ja_jp.yml +879 -0
- data/i18n/ShinobiGami/ko_kr.yml +876 -0
- data/i18n/SkynautsBouken/ja_jp.yml +28 -28
- data/i18n/StarryDolls/ja_jp.yml +456 -0
- data/i18n/StarryDolls/ko_kr.yml +456 -0
- data/i18n/StratoShout/ja_jp.yml +8 -8
- data/i18n/SwordWorld2_5/ja_jp.yml +48 -0
- data/i18n/Ventangle/ja_jp.yml +4 -0
- data/i18n/Ventangle/ko_kr.yml +4 -0
- data/i18n/YearZeroEngine/ja_jp.yml +12 -0
- data/i18n/YearZeroEngine/ko_kr.yml +12 -0
- data/i18n/ZombiLine/ja_jp.yml +27 -0
- data/i18n/ZombiLine/ko_kr.yml +27 -0
- data/i18n/ko_kr.yml +2 -0
- data/i18n/zh_hant.yml +2 -2
- data/lib/bcdice/dice_table/d66_left_range_table.rb +21 -0
- data/lib/bcdice/game_system/Aionia.rb +68 -19
- data/lib/bcdice/game_system/Airgetlamh.rb +64 -41
- data/lib/bcdice/game_system/Airgetlamh_Korean.rb +53 -0
- data/lib/bcdice/game_system/Alsetto.rb +63 -50
- data/lib/bcdice/game_system/Alsetto_Korean.rb +51 -0
- data/lib/bcdice/game_system/AnimaAnimus.rb +15 -32
- data/lib/bcdice/game_system/AnimaAnimus_Korean.rb +39 -0
- data/lib/bcdice/game_system/BlackJacket.rb +57 -113
- data/lib/bcdice/game_system/BlackJacket_Korean.rb +8 -206
- data/lib/bcdice/game_system/Bloodorium.rb +1 -1
- data/lib/bcdice/game_system/Bloodorium_Korean.rb +34 -0
- data/lib/bcdice/game_system/ChroniclesOfDarkness2e.rb +163 -0
- data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +471 -300
- data/lib/bcdice/game_system/DeadlineHeroes_Korean.rb +273 -0
- data/lib/bcdice/game_system/Dracurouge_Korean.rb +25 -19
- data/lib/bcdice/game_system/DungeonsAndDragons5.rb +106 -73
- data/lib/bcdice/game_system/DungeonsAndDragons5_Korean.rb +53 -0
- data/lib/bcdice/game_system/DungeonsAndDragons_Korean.rb +61 -0
- data/lib/bcdice/game_system/EdgeFlippers.rb +315 -0
- data/lib/bcdice/game_system/Emoklore.rb +34 -9
- data/lib/bcdice/game_system/Emoklore_Korean.rb +50 -0
- data/lib/bcdice/game_system/FateCoreSystem.rb +10 -6
- data/lib/bcdice/game_system/FullMetalPanic_Korean.rb +28 -0
- data/lib/bcdice/game_system/FutariSousa.rb +37 -12
- data/lib/bcdice/game_system/FutariSousa_Korean.rb +25 -8
- data/lib/bcdice/game_system/GaiaCare.rb +40 -0
- data/lib/bcdice/game_system/Garactier.rb +1 -1
- data/lib/bcdice/game_system/GardenOrder.rb +2 -2
- data/lib/bcdice/game_system/GardenOrderReEdit.rb +849 -0
- data/lib/bcdice/game_system/GardenOrder_Korean.rb +839 -0
- data/lib/bcdice/game_system/HatsuneMiku.rb +51 -605
- data/lib/bcdice/game_system/HatsuneMiku_Korean.rb +56 -0
- data/lib/bcdice/game_system/HunterTheReckoning5th.rb +15 -11
- data/lib/bcdice/game_system/Irisbane.rb +17 -30
- data/lib/bcdice/game_system/Irisbane_Korean.rb +52 -0
- data/lib/bcdice/game_system/JuinKansen.rb +41 -208
- data/lib/bcdice/game_system/JuinKansen_Korean.rb +46 -0
- data/lib/bcdice/game_system/KemonoNoMori.rb +67 -276
- data/lib/bcdice/game_system/KemonoNoMori_Korean.rb +62 -0
- data/lib/bcdice/game_system/KinAriel.rb +117 -0
- data/lib/bcdice/game_system/KizunaBullet_Korean.rb +109 -0
- data/lib/bcdice/game_system/KutuluRevised.rb +94 -0
- data/lib/bcdice/game_system/LiverLabyrinth.rb +321 -0
- data/lib/bcdice/game_system/Lost.rb +89 -0
- data/lib/bcdice/game_system/MagicPunk.rb +85 -0
- data/lib/bcdice/game_system/MagicPunk_Korean.rb +39 -0
- data/lib/bcdice/game_system/MarvelHeroicRoleplaying.rb +144 -0
- data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +122 -2
- data/lib/bcdice/game_system/MetallicGuardian_Korean.rb +28 -0
- data/lib/bcdice/game_system/MorkBorg.rb +170 -0
- data/lib/bcdice/game_system/MorkBorg_Korean.rb +49 -0
- data/lib/bcdice/game_system/NanimonaiMura.rb +112 -0
- data/lib/bcdice/game_system/Nechronica_Korean.rb +6 -6
- data/lib/bcdice/game_system/NegikureNegimaki.rb +140 -0
- data/lib/bcdice/game_system/NegikureNegimaki_Korean.rb +48 -0
- data/lib/bcdice/game_system/NeonUnderRealm.rb +122 -0
- data/lib/bcdice/game_system/NinjaSlayer2.rb +170 -49
- data/lib/bcdice/game_system/Nuekagami.rb +19 -261
- data/lib/bcdice/game_system/Nuekagami_Korean.rb +43 -0
- data/lib/bcdice/game_system/ParanoiaPerfect.rb +74 -0
- data/lib/bcdice/game_system/PastFutureParadox.rb +2245 -55
- data/lib/bcdice/game_system/PreciousDays.rb +170 -0
- data/lib/bcdice/game_system/Revulture.rb +8 -5
- data/lib/bcdice/game_system/Revulture_Korean.rb +51 -0
- data/lib/bcdice/game_system/Ryutama.rb +46 -46
- data/lib/bcdice/game_system/SRS.rb +4 -4
- data/lib/bcdice/game_system/SRS_Korean.rb +67 -0
- data/lib/bcdice/game_system/ShinobiGami.rb +154 -1047
- data/lib/bcdice/game_system/ShinobiGami_Korean.rb +102 -0
- data/lib/bcdice/game_system/StarryDolls.rb +70 -508
- data/lib/bcdice/game_system/StarryDolls_Korean.rb +80 -0
- data/lib/bcdice/game_system/StratoShout.rb +1 -1
- data/lib/bcdice/game_system/SwordWorld.rb +28 -2
- data/lib/bcdice/game_system/SwordWorld2_0.rb +1 -1
- data/lib/bcdice/game_system/SwordWorld2_5.rb +67 -3
- data/lib/bcdice/game_system/TacticalExorcist.rb +222 -0
- data/lib/bcdice/game_system/TenkaRyouran_Korean.rb +30 -0
- data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +38 -33
- data/lib/bcdice/game_system/Ventangle.rb +8 -7
- data/lib/bcdice/game_system/Ventangle_Korean.rb +41 -0
- data/lib/bcdice/game_system/Warhammer4.rb +202 -6
- data/lib/bcdice/game_system/WerewolfTheApocalypse5th.rb +20 -15
- data/lib/bcdice/game_system/WorldEndScrapyard.rb +333 -0
- data/lib/bcdice/game_system/WorldsEndFrontline_Korean.rb +26 -0
- data/lib/bcdice/game_system/YearZeroEngine.rb +7 -7
- data/lib/bcdice/game_system/YearZeroEngine_Korean.rb +46 -0
- data/lib/bcdice/game_system/ZombiLine.rb +29 -36
- data/lib/bcdice/game_system/ZombiLine_Korean.rb +37 -0
- data/lib/bcdice/game_system/cthulhu7th_Korean/full_auto.rb +294 -0
- data/lib/bcdice/game_system/cthulhu7th_Korean/rollable.rb +43 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/atoz_table.rb +1184 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/randr236_table.rb +254 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/table.rb +54 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/tk_table.rb +755 -0
- data/lib/bcdice/game_system/sword_world/rating_options.rb +9 -0
- data/lib/bcdice/game_system/sword_world/rating_parsed.rb +19 -0
- data/lib/bcdice/game_system/sword_world/rating_parser.rb +229 -149
- data/lib/bcdice/game_system/sword_world/transcendent_test.rb +1 -0
- data/lib/bcdice/game_system.rb +47 -0
- data/lib/bcdice/version.rb +1 -1
- metadata +96 -2
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module BCDice
|
|
4
|
+
module GameSystem
|
|
5
|
+
class PreciousDays < Base
|
|
6
|
+
# ゲームシステムの識別子
|
|
7
|
+
ID = "PreciousDays"
|
|
8
|
+
|
|
9
|
+
# ゲームシステム名
|
|
10
|
+
NAME = "プレシャスデイズ"
|
|
11
|
+
|
|
12
|
+
# ゲームシステム名の読みがな
|
|
13
|
+
SORT_KEY = "ふれしやすていす"
|
|
14
|
+
|
|
15
|
+
HELP_MESSAGE = <<~TEXT
|
|
16
|
+
■ 判定 (nPD+m>=x)
|
|
17
|
+
nD6のダイスロールをして、その合計が x を超えていたら成功。
|
|
18
|
+
出目6が2個以上あればクリティカル。出目が全て1ならファンブル。
|
|
19
|
+
n: ダイス数(省略時 2)
|
|
20
|
+
m: 修正値(省略可)
|
|
21
|
+
x: 目標値(省略可)
|
|
22
|
+
例) PD, PD+5>=6, 3PD>=10
|
|
23
|
+
|
|
24
|
+
■ 表
|
|
25
|
+
- 第一印象表 FIT
|
|
26
|
+
- プライズ表(物品) PIT
|
|
27
|
+
- プライズ表(自身の変化) PCT
|
|
28
|
+
- プライズ表(友人) PFT
|
|
29
|
+
- 師匠の呼び名表 TCT
|
|
30
|
+
TEXT
|
|
31
|
+
|
|
32
|
+
TABLES = {
|
|
33
|
+
"PIT" => DiceTable::D66RangeTable.new(
|
|
34
|
+
"プライズ表(物品)",
|
|
35
|
+
[
|
|
36
|
+
[11..13, "旅行カバン > 師匠との思い出のつまったカバン。"],
|
|
37
|
+
[14..16, "リボンタイ > 立ち寄った街で、師匠が選んでくれたお揃いのリボンタイ。"],
|
|
38
|
+
[21..23, "キレイな石 > 遺跡や川原などで見つけた、美しい天然石。"],
|
|
39
|
+
[24..26, "手編みのマフラー > 滞在先で手に入れた、感謝の気持ちのこもった編み物。"],
|
|
40
|
+
[31..33, "魔術書の写本 > たまたま手に入れた魔術書(写本)。"],
|
|
41
|
+
[34..36, "師匠の落とし物 > 師匠がうっかり落とした、小さなペンダントやアクセサリーなど。"],
|
|
42
|
+
[41..43, "不思議な木の実 > 森の散策中に発見した珍しい木の実。"],
|
|
43
|
+
[44..46, "錆びた懐中時計 > 古代遺跡などで見つかる懐中時計(故障している)。"],
|
|
44
|
+
[51..53, "手書きの楽譜 > 吟遊詩人の書いた、楽譜。"],
|
|
45
|
+
[54..56, "特注の薬草セット > ちょっとした傷や発熱に処方できる薬草のセット。"],
|
|
46
|
+
[61..63, "紋章入りのバッジ > そのシナリオで手に入れた、紋章のついたバッジ。"],
|
|
47
|
+
[64..66, "使い古した手袋 > 修行でボロボロになった、手放せない手袋。"],
|
|
48
|
+
]
|
|
49
|
+
),
|
|
50
|
+
"PCT" => DiceTable::D66RangeTable.new(
|
|
51
|
+
"プライズ表(自身の変化)",
|
|
52
|
+
[
|
|
53
|
+
[11..13, "背筋が伸びる > 師匠との旅や修行を通じ、姿勢が正され、 威厳が増した。"],
|
|
54
|
+
[14..16, "表情が大人びる > 困難を乗り越えた経験から、表情に落ち着きと聡明さが加わった。"],
|
|
55
|
+
[21..23, "ちいさな傷 > いつの間にかついていた、小さな傷跡。"],
|
|
56
|
+
[24..26, "集中力の向上 > 周囲に動じない集中力が身についた。"],
|
|
57
|
+
[31..33, "日焼けした肌 > 健康的に日焼けした。"],
|
|
58
|
+
[34..36, "魔力の流れ > 体内のマナの流れを意識できるようになり、魔術の適性が向上した。"],
|
|
59
|
+
[41..43, "強靭な足腰 > 長い修行の旅を続けた結果、疲れにくい強靭な足腰になった。"],
|
|
60
|
+
[44..46, "握力の増強 > 物を握る力が強くなった。"],
|
|
61
|
+
[51..53, "優美な指先 > 繊細な詠唱や魔法薬の調合により、指先が優美になった。"],
|
|
62
|
+
[54..56, "良い香り > なにやら自分から良い香りが漂うになった。"],
|
|
63
|
+
[61..63, "早起き体質 > なにやら、自然と早起きできるようになった。"],
|
|
64
|
+
[64..66, "共感能力の成長 > 人々との交流を通じて、他者の感情を深く理解できるようになった。"],
|
|
65
|
+
]
|
|
66
|
+
),
|
|
67
|
+
"PFT" => DiceTable::D66RangeTable.new(
|
|
68
|
+
"プライズ表(友人)",
|
|
69
|
+
[
|
|
70
|
+
[11..13, "登場したNPC > そのシナリオで交流したNPC。"],
|
|
71
|
+
[14..16, "妖精 > 森や泉などで出会った、無害な妖精。"],
|
|
72
|
+
[21..23, "ライバル > 魔術師大会などで出会った同世代の魔術師。"],
|
|
73
|
+
[24..26, " 心優しい村人 > 旅の途中で親切にしてくれた村の住民。"],
|
|
74
|
+
[31..33, " 放浪の吟遊詩人 > PCの旅の物語を歌にしてくれることを約束した詩人。"],
|
|
75
|
+
[34..36, "旅の料理人 > 旅の道中で食料を分け合い、共に野営をした旅の料理人。"],
|
|
76
|
+
[41..43, "塔の受付嬢 > 魔術師協会の塔で、 出会った受付の担当者。"],
|
|
77
|
+
[44..46, "元・野盗 > 過去の過ちを悔い改めた元野盗の改心者。"],
|
|
78
|
+
[51..53, "動物 > PCと仲よくなった小さな動物。"],
|
|
79
|
+
[54..56, "貴族 > PCと仲よくなった小さな動物。"],
|
|
80
|
+
[61..63, "古代語の先生 > 図書館などで古代語の知識を教えてくれた、年上の学者。"],
|
|
81
|
+
[64..66, "年下の仲間 > PCを慕ってくれるようになった年下の魔術師見習い。"],
|
|
82
|
+
]
|
|
83
|
+
),
|
|
84
|
+
"FIT" => DiceTable::D66RangeTable.new(
|
|
85
|
+
"第一印象表",
|
|
86
|
+
[
|
|
87
|
+
[11..12, "神秘的 > 現実離れした、夢の中にいるような神秘的な雰囲気をまとっている。"],
|
|
88
|
+
[13..14, "変わっている > 一般的な魔術師のイメージとはかけ離れた、風変わりな人のような気がする。"],
|
|
89
|
+
[15..16, "優しい > その表情や声に穏やかさや優しさを感じた。"],
|
|
90
|
+
[21..22, "恐ろしい > 底知れぬ恐怖を感じた。見た目ではなく魔術師として底知れなさを感じる。"],
|
|
91
|
+
[23..24, "完璧 > 一切の隙が無く、完璧な魔術師に見えた。"],
|
|
92
|
+
[25..26, "孤独 > 目の前にいるというのに、まるで遠方にいるかのような距離を感じた。"],
|
|
93
|
+
[31..32, "美しい > その姿やたたずまいに、息をのむほどの美しさを感じた。"],
|
|
94
|
+
[33..34, "疲れている > まるで何度も繰り返し生を受けているかのような疲労を感じた。"],
|
|
95
|
+
[35..36, "天才 > ひと目で魔術師としての才能の違いが分かるのだと、初めて知った。"],
|
|
96
|
+
[41..42, "厳格 > 怖そうというのとは違う、厳しく真面目そうな人のように思えた。"],
|
|
97
|
+
[43..44, "謎めいている > ミステリアスな印象を与える、不思議な人だった。"],
|
|
98
|
+
[45..46, "暖かい > 不思議な温もりを感じる、見た人を安心させる人だった。"],
|
|
99
|
+
[51..52, "憧れる > ひと目見てこの人のようになりたい、なるんだという気持ちにになった。"],
|
|
100
|
+
[53..54, "印象が無い > 不思議と見た目も立ち居振る舞いも印象に残らない人だった。"],
|
|
101
|
+
[55..56, "隠している > 何かを隠している。そんな不思議な印象を感じる人だった。"],
|
|
102
|
+
[61..62, "頼りない > 一見すると、大丈夫かなという印象を与える人だった。"],
|
|
103
|
+
[63..64, "年齢不詳 > 若くも老人のようにも見える。見た目で年齢を推し量れない人だった。"],
|
|
104
|
+
[65..66, "普通の人 > 平凡というか、特別な印象を与えない、不思議な人だった。"],
|
|
105
|
+
]
|
|
106
|
+
),
|
|
107
|
+
"TCT" => DiceTable::Table.new(
|
|
108
|
+
"師匠の呼び名表",
|
|
109
|
+
"1D6",
|
|
110
|
+
[
|
|
111
|
+
"師匠",
|
|
112
|
+
"先生",
|
|
113
|
+
"マスター",
|
|
114
|
+
"親方",
|
|
115
|
+
"ボス",
|
|
116
|
+
"コーチ",
|
|
117
|
+
]
|
|
118
|
+
),
|
|
119
|
+
|
|
120
|
+
}.freeze
|
|
121
|
+
|
|
122
|
+
register_prefix('\d*PD', TABLES.keys)
|
|
123
|
+
|
|
124
|
+
def eval_game_system_specific_command(command)
|
|
125
|
+
return roll_pd(command) || roll_tables(command, TABLES)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
private
|
|
129
|
+
|
|
130
|
+
def roll_pd(command)
|
|
131
|
+
parser = Command::Parser.new("PD", round_type: round_type)
|
|
132
|
+
.enable_prefix_number
|
|
133
|
+
.restrict_cmp_op_to(:>=, nil)
|
|
134
|
+
cmd = parser.parse(command)
|
|
135
|
+
return nil unless cmd
|
|
136
|
+
|
|
137
|
+
times = cmd.prefix_number
|
|
138
|
+
times ||= 2
|
|
139
|
+
return nil if times <= 0
|
|
140
|
+
|
|
141
|
+
dice_list = @randomizer.roll_barabara(times, 6).sort.reverse
|
|
142
|
+
total = dice_list.sum + cmd.modify_number
|
|
143
|
+
|
|
144
|
+
result =
|
|
145
|
+
if dice_list.count(6) >= 2
|
|
146
|
+
Result.critical("クリティカル")
|
|
147
|
+
elsif dice_list.count(1) == times
|
|
148
|
+
Result.fumble("ファンブル")
|
|
149
|
+
elsif cmd.cmp_op.nil?
|
|
150
|
+
Result.new
|
|
151
|
+
elsif total >= cmd.target_number
|
|
152
|
+
Result.success("成功")
|
|
153
|
+
else
|
|
154
|
+
Result.failure("失敗")
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
sequence = [
|
|
158
|
+
"(#{command})",
|
|
159
|
+
"#{dice_list.sum}[#{dice_list.join(',')}]#{Format.modifier(cmd.modify_number)}",
|
|
160
|
+
total,
|
|
161
|
+
result.text
|
|
162
|
+
].compact.join(" > ")
|
|
163
|
+
|
|
164
|
+
result.text = sequence
|
|
165
|
+
|
|
166
|
+
return result
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
end
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "bcdice/base"
|
|
4
|
+
require "bcdice/format"
|
|
5
|
+
|
|
3
6
|
module BCDice
|
|
4
7
|
module GameSystem
|
|
5
8
|
class Revulture < Base
|
|
@@ -56,9 +59,9 @@ module BCDice
|
|
|
56
59
|
command = make_command_text(dice_count, border, additional_damage_rules)
|
|
57
60
|
|
|
58
61
|
if dice_count <= 0
|
|
59
|
-
return "#{command} >
|
|
62
|
+
return "#{command} > #{translate('Revulture.error.no_dice')}"
|
|
60
63
|
elsif border.nil? && additional_damage_rules
|
|
61
|
-
return "#{command} >
|
|
64
|
+
return "#{command} > #{translate('Revulture.error.no_border')}"
|
|
62
65
|
end
|
|
63
66
|
|
|
64
67
|
dices = @randomizer.roll_barabara(dice_count, 6).sort
|
|
@@ -70,9 +73,9 @@ module BCDice
|
|
|
70
73
|
message_elements = []
|
|
71
74
|
message_elements << command
|
|
72
75
|
message_elements << dices.join(',')
|
|
73
|
-
message_elements << "
|
|
74
|
-
message_elements << "
|
|
75
|
-
message_elements << "
|
|
76
|
+
message_elements << translate("Revulture.critical", count: critical_hit_count) if critical_hit_count > 0
|
|
77
|
+
message_elements << translate("Revulture.hit_count", count: hit_count) if hit_count
|
|
78
|
+
message_elements << translate("Revulture.damage", count: damage) if damage
|
|
76
79
|
|
|
77
80
|
Result.new(message_elements.join(' > ')).tap do |r|
|
|
78
81
|
r.condition = hit_count > 0 if hit_count
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "bcdice/game_system/Revulture"
|
|
4
|
+
|
|
5
|
+
module BCDice
|
|
6
|
+
module GameSystem
|
|
7
|
+
class Revulture_Korean < Revulture
|
|
8
|
+
# ゲームシステムの識別子
|
|
9
|
+
ID = 'Revulture:Korean'
|
|
10
|
+
|
|
11
|
+
# ゲームシステム名
|
|
12
|
+
NAME = '광쇄의 리벌처'
|
|
13
|
+
|
|
14
|
+
# ゲームシステム名の読みがな
|
|
15
|
+
SORT_KEY = '国際化:Korean:광쇄의 리벌처'
|
|
16
|
+
|
|
17
|
+
# ダイスボットの使い方
|
|
18
|
+
HELP_MESSAGE = <<~HELP
|
|
19
|
+
■공격 판정( xAT, xATK, xATTACK )
|
|
20
|
+
x: 주사위 수(덧셈 + 과 나눗셈 / 사용 가능)
|
|
21
|
+
예시) 3AT, 4ATK, 5+6ATTACK, 15/2AT
|
|
22
|
+
|
|
23
|
+
□공격 판정 목표값 포함( xAT<=y, xATK<=y, xATTACK<=y )
|
|
24
|
+
x: 주사위 수(덧셈 + 과 나눗셈 / 사용 가능)
|
|
25
|
+
y: 목표값( 1 이상 6 이하. 덧셈 + 사용 가능)
|
|
26
|
+
예시) 3AT<=4, 3AT<=2+1
|
|
27
|
+
|
|
28
|
+
□공격 판정 목표값&추가 대미지 포함( xAT<=y[>=a:+b], xATK<=y[>=a:+b], xATTACK<=y[z] )
|
|
29
|
+
x: 주사위 수(덧셈 + 과 나눗셈 / 사용 가능)
|
|
30
|
+
y: 목표값( 1 이상 6 이하. 덧셈 + 사용 가능)
|
|
31
|
+
z: 추가 대미지 규칙(자세한 내용은 아래 참고)(※여러 개를 동시에 사용 가능)
|
|
32
|
+
|
|
33
|
+
▽추가 대미지 규칙 [a:+b]
|
|
34
|
+
a: 히트 수가 a 라면
|
|
35
|
+
=a (히트 수가 a와 동일)
|
|
36
|
+
>=a (히트 수가 a 이상)
|
|
37
|
+
b: 대미지를 b 점 추가
|
|
38
|
+
|
|
39
|
+
예시) 3AT<=4[>=2:+3] #룰 북 p056「그레인그랜트 AR(グレングラントAR)」
|
|
40
|
+
예시) 2AT<=4[=1:+5][>=2:+8] #룰 북 p067「파보르 드래곤 브레스(ファーボル・ドラゴンブレス)」
|
|
41
|
+
HELP
|
|
42
|
+
|
|
43
|
+
register_prefix_from_super_class()
|
|
44
|
+
|
|
45
|
+
def initialize(command)
|
|
46
|
+
super(command)
|
|
47
|
+
@locale = :ko_kr
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -25,7 +25,7 @@ module BCDice
|
|
|
25
25
|
|
|
26
26
|
def initialize(command)
|
|
27
27
|
super(command)
|
|
28
|
-
@
|
|
28
|
+
@valid_dice_types = [20, 12, 10, 8, 6, 4, 2]
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
def eval_game_system_specific_command(command)
|
|
@@ -39,84 +39,84 @@ module BCDice
|
|
|
39
39
|
|
|
40
40
|
dice1 = Regexp.last_match(1).to_i
|
|
41
41
|
dice2 = Regexp.last_match(3).to_i
|
|
42
|
-
|
|
42
|
+
modify_string = Regexp.last_match(4)
|
|
43
43
|
difficulty = Regexp.last_match(6)
|
|
44
44
|
|
|
45
|
-
dice1, dice2 =
|
|
45
|
+
dice1, dice2 = get_dice_type(dice1, dice2)
|
|
46
46
|
if dice1 == 0
|
|
47
47
|
return ''
|
|
48
48
|
end
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
modify = ArithmeticEvaluator.eval(
|
|
52
|
-
difficulty =
|
|
50
|
+
modify_string ||= ''
|
|
51
|
+
modify = ArithmeticEvaluator.eval(modify_string)
|
|
52
|
+
difficulty = get_difficulty(difficulty)
|
|
53
53
|
|
|
54
|
-
value1 =
|
|
55
|
-
value2 =
|
|
54
|
+
value1 = get_roll_value(dice1)
|
|
55
|
+
value2 = get_roll_value(dice2)
|
|
56
56
|
total = value1 + value2 + modify
|
|
57
57
|
|
|
58
|
-
result =
|
|
58
|
+
result = get_result_text(value1, value2, dice1, dice2, difficulty, total)
|
|
59
59
|
unless result.empty?
|
|
60
60
|
result = " > #{result}"
|
|
61
61
|
end
|
|
62
62
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
63
|
+
value1_text = "#{value1}(#{dice1})"
|
|
64
|
+
value2_text = (value2 == 0 ? "" : "+#{value2}(#{dice2})")
|
|
65
|
+
modify_text = get_modify_string(modify)
|
|
66
66
|
|
|
67
|
-
|
|
68
|
-
output = "(#{
|
|
67
|
+
base_text = get_base_text(dice1, dice2, modify, difficulty)
|
|
68
|
+
output = "(#{base_text}) > #{value1_text}#{value2_text}#{modify_text} > #{total}#{result}"
|
|
69
69
|
return output
|
|
70
70
|
end
|
|
71
71
|
|
|
72
|
-
def
|
|
73
|
-
debug('
|
|
72
|
+
def get_dice_type(dice1, dice2)
|
|
73
|
+
debug('get_dice_type begin')
|
|
74
74
|
|
|
75
75
|
if dice2 != 0
|
|
76
|
-
if
|
|
76
|
+
if valid_dice_one?(dice1)
|
|
77
77
|
return dice1, dice2
|
|
78
78
|
else
|
|
79
79
|
return 0, 0
|
|
80
80
|
end
|
|
81
81
|
end
|
|
82
82
|
|
|
83
|
-
if
|
|
83
|
+
if valid_dice?(dice1, dice2)
|
|
84
84
|
return dice1, dice2
|
|
85
85
|
end
|
|
86
86
|
|
|
87
|
-
|
|
87
|
+
dice_base = dice1
|
|
88
88
|
|
|
89
|
-
dice1 =
|
|
90
|
-
dice2 =
|
|
89
|
+
dice1 = dice_base / 10
|
|
90
|
+
dice2 = dice_base % 10
|
|
91
91
|
|
|
92
|
-
if
|
|
92
|
+
if valid_dice?(dice1, dice2)
|
|
93
93
|
return dice1, dice2
|
|
94
94
|
end
|
|
95
95
|
|
|
96
|
-
dice1 =
|
|
97
|
-
dice2 =
|
|
96
|
+
dice1 = dice_base / 100
|
|
97
|
+
dice2 = dice_base % 100
|
|
98
98
|
|
|
99
|
-
if
|
|
99
|
+
if valid_dice?(dice1, dice2)
|
|
100
100
|
return dice1, dice2
|
|
101
101
|
end
|
|
102
102
|
|
|
103
|
-
if
|
|
104
|
-
return
|
|
103
|
+
if valid_dice_one?(dice_base)
|
|
104
|
+
return dice_base, 0
|
|
105
105
|
end
|
|
106
106
|
|
|
107
107
|
return 0, 0
|
|
108
108
|
end
|
|
109
109
|
|
|
110
|
-
def
|
|
111
|
-
return
|
|
112
|
-
|
|
110
|
+
def valid_dice?(dice1, dice2)
|
|
111
|
+
return valid_dice_one?(dice1) &&
|
|
112
|
+
valid_dice_one?(dice2)
|
|
113
113
|
end
|
|
114
114
|
|
|
115
|
-
def
|
|
116
|
-
@
|
|
115
|
+
def valid_dice_one?(dice)
|
|
116
|
+
@valid_dice_types.include?(dice)
|
|
117
117
|
end
|
|
118
118
|
|
|
119
|
-
def
|
|
119
|
+
def get_difficulty(difficulty)
|
|
120
120
|
unless difficulty.nil?
|
|
121
121
|
difficulty = difficulty.to_i
|
|
122
122
|
end
|
|
@@ -124,19 +124,19 @@ module BCDice
|
|
|
124
124
|
return difficulty
|
|
125
125
|
end
|
|
126
126
|
|
|
127
|
-
def
|
|
127
|
+
def get_roll_value(dice)
|
|
128
128
|
return 0 if dice == 0
|
|
129
129
|
|
|
130
130
|
value = @randomizer.roll_once(dice)
|
|
131
131
|
return value
|
|
132
132
|
end
|
|
133
133
|
|
|
134
|
-
def
|
|
135
|
-
if
|
|
134
|
+
def get_result_text(value1, value2, dice1, dice2, difficulty, total)
|
|
135
|
+
if famble?(value1, value2)
|
|
136
136
|
return "1ゾロ【1ゾロポイント+1】"
|
|
137
137
|
end
|
|
138
138
|
|
|
139
|
-
if
|
|
139
|
+
if critical?(value1, value2, dice1, dice2)
|
|
140
140
|
return "クリティカル成功"
|
|
141
141
|
end
|
|
142
142
|
|
|
@@ -151,11 +151,11 @@ module BCDice
|
|
|
151
151
|
return "失敗"
|
|
152
152
|
end
|
|
153
153
|
|
|
154
|
-
def
|
|
154
|
+
def famble?(value1, value2)
|
|
155
155
|
return (value1 == 1) && (value2 == 1)
|
|
156
156
|
end
|
|
157
157
|
|
|
158
|
-
def
|
|
158
|
+
def critical?(value1, value2, dice1, dice2)
|
|
159
159
|
return false if value2 == 0
|
|
160
160
|
|
|
161
161
|
if (value1 == 6) && (value2 == 6)
|
|
@@ -169,23 +169,23 @@ module BCDice
|
|
|
169
169
|
return false
|
|
170
170
|
end
|
|
171
171
|
|
|
172
|
-
def
|
|
173
|
-
|
|
172
|
+
def get_base_text(dice1, dice2, modify, difficulty)
|
|
173
|
+
base_text = "R#{dice1}"
|
|
174
174
|
|
|
175
175
|
if dice2 != 0
|
|
176
|
-
|
|
176
|
+
base_text += ",#{dice2}"
|
|
177
177
|
end
|
|
178
178
|
|
|
179
|
-
|
|
179
|
+
base_text += get_modify_string(modify)
|
|
180
180
|
|
|
181
181
|
unless difficulty.nil?
|
|
182
|
-
|
|
182
|
+
base_text += ">=#{difficulty}"
|
|
183
183
|
end
|
|
184
184
|
|
|
185
|
-
return
|
|
185
|
+
return base_text
|
|
186
186
|
end
|
|
187
187
|
|
|
188
|
-
def
|
|
188
|
+
def get_modify_string(modify)
|
|
189
189
|
if modify > 0
|
|
190
190
|
return "+" + modify.to_s
|
|
191
191
|
elsif modify < 0
|
|
@@ -280,15 +280,15 @@ module BCDice
|
|
|
280
280
|
# @return [Result] 比較結果
|
|
281
281
|
def compare_result(srs_roll, sum, modified_sum)
|
|
282
282
|
if sum >= srs_roll.critical_value
|
|
283
|
-
Result.critical("
|
|
283
|
+
Result.critical(translate("SRS.auto_success"))
|
|
284
284
|
elsif sum <= srs_roll.fumble_value
|
|
285
|
-
Result.fumble("
|
|
285
|
+
Result.fumble(translate("SRS.auto_failure"))
|
|
286
286
|
elsif srs_roll.target_value.nil?
|
|
287
287
|
Result.new
|
|
288
288
|
elsif modified_sum >= srs_roll.target_value
|
|
289
|
-
Result.success("
|
|
289
|
+
Result.success(translate("success"))
|
|
290
290
|
else
|
|
291
|
-
Result.failure("
|
|
291
|
+
Result.failure(translate("failure"))
|
|
292
292
|
end
|
|
293
293
|
end
|
|
294
294
|
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'bcdice/arithmetic_evaluator'
|
|
4
|
+
require 'bcdice/game_system/SRS'
|
|
5
|
+
|
|
6
|
+
module BCDice
|
|
7
|
+
module GameSystem
|
|
8
|
+
class SRS_Korean < SRS
|
|
9
|
+
# ゲームシステムの識別子
|
|
10
|
+
ID = 'SRS:Korean'
|
|
11
|
+
|
|
12
|
+
# ゲームシステム名
|
|
13
|
+
NAME = '스탠다드 RPG 시스템(SRS)'
|
|
14
|
+
|
|
15
|
+
# ゲームシステム名の読みがな
|
|
16
|
+
SORT_KEY = '国際化:Korean:스탠다드 RPG 시스템(SRS)'
|
|
17
|
+
|
|
18
|
+
HELP_MESSAGE_1 = <<~HELP_MESSAGE
|
|
19
|
+
・판정
|
|
20
|
+
・일반판정: 2D6+m@c#f>=t 또는 2D6+m>=t[c,f]
|
|
21
|
+
수정치 m, 목표치 t, 크리티컬치 c, 펌블치 f로 판정합니다.
|
|
22
|
+
수정치, 크리티컬치, 펌블치는 생략 가능합니다([]째로 생략 가능, @c・#f 지정 순서는 상관없음).
|
|
23
|
+
크리티컬치, 펌블치의 기본값은 각각 12, 2입니다.
|
|
24
|
+
자동성공, 자동실패, 성공, 실패를 자동 표시합니다.
|
|
25
|
+
|
|
26
|
+
예) 2d6>=10 수정치 0, 목표치 10으로 판정
|
|
27
|
+
예) 2d6+2>=10 수정치 +2, 목표치 10으로 판정
|
|
28
|
+
예) 2d6+2>=10[11] ↑를 크리티컬치 11로 판정
|
|
29
|
+
예) 2d6+2@11>=10 ↑를 크리티컬치 11로 판정
|
|
30
|
+
예) 2d6+2>=10[12,4] ↑를 크리티컬치 12, 펌블치 4로 판정
|
|
31
|
+
예) 2d6+2@12#4>=10 ↑를 크리티컬치 12, 펌블치 4로 판정
|
|
32
|
+
예) 2d6+2>=10[,4] ↑를 크리티컬치 12, 펌블치 4로 판정 (크리티컬치 생략)
|
|
33
|
+
예) 2d6+2#4>=10 ↑를 크리티컬치 12, 펌블치 4로 판정 (크리티컬치 생략)
|
|
34
|
+
HELP_MESSAGE
|
|
35
|
+
|
|
36
|
+
HELP_MESSAGE_2 = <<~HELP_MESSAGE
|
|
37
|
+
・크리티컬 및 펌블만 판정: 2D6+m@c#f 또는 2D6+m[c,f]
|
|
38
|
+
목표치를 지정하지 않고, 수정치 m, 크리티컬치 c, 펌블치 f로 판정합니다.
|
|
39
|
+
수정치, 크리티컬치, 펌블치는 생략 가능합니다([]는 생략 불가, @c・#f 지정 순서는 상관없음).
|
|
40
|
+
자동성공, 자동실패를 자동 표시합니다.
|
|
41
|
+
|
|
42
|
+
예) 2d6[] 수정치 0, 크리티컬치 12, 펌블치 2로 판정
|
|
43
|
+
예) 2d6+2[11] 수정치 +2, 크리티컬치 11, 펌블치 2로 판정
|
|
44
|
+
예) 2d6+2@11 수정치 +2, 크리티컬치 11, 펌블치 2로 판정
|
|
45
|
+
예) 2d6+2[12,4] 수정치 +2, 크리티컬치 12, 펌블치 4로 판정
|
|
46
|
+
예) 2d6+2@12#4 수정치 +2, 크리티컬치 12, 펌블치 4로 판정
|
|
47
|
+
HELP_MESSAGE
|
|
48
|
+
|
|
49
|
+
HELP_MESSAGE_3 = <<~HELP_MESSAGE
|
|
50
|
+
・D66 주사위 있음 (순서 교체 없음)
|
|
51
|
+
HELP_MESSAGE
|
|
52
|
+
|
|
53
|
+
# 既定のダイスボット説明文
|
|
54
|
+
DEFAULT_HELP_MESSAGE = "#{HELP_MESSAGE_1}\n#{HELP_MESSAGE_2}\n#{HELP_MESSAGE_3}"
|
|
55
|
+
|
|
56
|
+
HELP_MESSAGE = DEFAULT_HELP_MESSAGE
|
|
57
|
+
|
|
58
|
+
register_prefix_from_super_class()
|
|
59
|
+
|
|
60
|
+
# ダイスボットを初期化
|
|
61
|
+
def initialize(command)
|
|
62
|
+
super(command)
|
|
63
|
+
@locale = :ko_kr
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|