bcdice 3.7.0 → 3.8.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 +31 -0
- data/i18n/Arianrhod/ja_jp.yml +3 -0
- data/i18n/Emoklore/ja_jp.yml +7 -0
- data/i18n/SwordWorld/ja_jp.yml +1 -0
- data/i18n/SwordWorld/zh_hans.yml +7 -0
- data/i18n/SwordWorld2_0/zh_hans.yml +37 -0
- data/i18n/SwordWorld2_5/ja_jp.yml +1 -1
- data/i18n/SwordWorld2_5/zh_hans.yml +57 -0
- data/lib/bcdice/arithmetic/parser.rb +1 -1
- data/lib/bcdice/command/parser.rb +1 -1
- data/lib/bcdice/common_command/add_dice/parser.rb +1 -1
- data/lib/bcdice/common_command/barabara_dice/parser.rb +1 -1
- data/lib/bcdice/common_command/calc/parser.rb +1 -1
- data/lib/bcdice/common_command/reroll_dice/parser.rb +1 -1
- data/lib/bcdice/common_command/tally_dice/parser.rb +1 -1
- data/lib/bcdice/common_command/upper_dice/parser.rb +1 -1
- data/lib/bcdice/game_system/AngelGear.rb +1 -1
- data/lib/bcdice/game_system/AnimaAnimus.rb +1 -1
- data/lib/bcdice/game_system/Arianrhod.rb +4 -4
- data/lib/bcdice/game_system/AssaultEngine.rb +3 -3
- data/lib/bcdice/game_system/BeastBindTrinity.rb +1 -1
- data/lib/bcdice/game_system/BeginningIdol.rb +2 -2
- data/lib/bcdice/game_system/BeginningIdol2022.rb +2 -2
- data/lib/bcdice/game_system/BladeOfArcana.rb +3 -3
- data/lib/bcdice/game_system/Bloodorium.rb +68 -0
- data/lib/bcdice/game_system/ConvictorDrive.rb +117 -0
- data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +1 -1
- data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +1 -1
- data/lib/bcdice/game_system/CyberpunkRed.rb +2 -6
- data/lib/bcdice/game_system/DeadlineHeroes.rb +1 -1
- data/lib/bcdice/game_system/DungeonsAndDragons5.rb +196 -0
- data/lib/bcdice/game_system/EmbryoMachine.rb +4 -4
- data/lib/bcdice/game_system/Emoklore.rb +8 -8
- data/lib/bcdice/game_system/FutariSousa.rb +1 -0
- data/lib/bcdice/game_system/GURPS.rb +1 -1
- data/lib/bcdice/game_system/GehennaAn.rb +2 -2
- data/lib/bcdice/game_system/HunterTheReckoning5th.rb +152 -0
- data/lib/bcdice/game_system/LostRoyal.rb +1 -1
- data/lib/bcdice/game_system/NobunagasBlackCastle.rb +237 -0
- data/lib/bcdice/game_system/OracleEngine.rb +1 -1
- data/lib/bcdice/game_system/Raisondetre.rb +1 -1
- data/lib/bcdice/game_system/RokumonSekai2.rb +1 -1
- data/lib/bcdice/game_system/SajinsenkiAGuS.rb +154 -0
- data/lib/bcdice/game_system/ShinkuuGakuen.rb +1 -1
- data/lib/bcdice/game_system/ShinobiGami.rb +14 -1
- data/lib/bcdice/game_system/SkynautsBouken.rb +93 -2
- data/lib/bcdice/game_system/StellarLife.rb +1 -1
- data/lib/bcdice/game_system/StrangerOfSwordCity.rb +1 -1
- data/lib/bcdice/game_system/SwordWorld.rb +2 -2
- data/lib/bcdice/game_system/SwordWorld2_0_SimplifiedChinese.rb +84 -0
- data/lib/bcdice/game_system/SwordWorld2_5_SimplifiedChinese.rb +95 -0
- data/lib/bcdice/game_system/SwordWorld_SimplifiedChinese.rb +29 -0
- data/lib/bcdice/game_system/TherapieSein.rb +2 -2
- data/lib/bcdice/game_system/Torg.rb +1 -1
- data/lib/bcdice/game_system/TorgEternity.rb +54 -18
- data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +26 -12
- data/lib/bcdice/game_system/Warhammer4.rb +4 -0
- data/lib/bcdice/game_system/WorldOfDarkness.rb +17 -9
- data/lib/bcdice/game_system/cthulhu7th/full_auto.rb +1 -1
- data/lib/bcdice/game_system/filled_with/tresure_tables.rb +1 -1
- data/lib/bcdice/game_system/sword_world/rating_parser.rb +1 -1
- data/lib/bcdice/game_system.rb +9 -0
- data/lib/bcdice/version.rb +1 -1
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6d8674329cd5ca8a6efb98b170e0e3ddb5bb4a3fe527ee92fa0e3f1fefffa470
|
4
|
+
data.tar.gz: 0abbe4f8973133644242a2b337138bd9297b4754dfe3be33046760836d90b4b3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 68c14cfcd28b29d424d37d65ae9e00e09fc3d6da8280df7f190fb18c674b838f9cbf8053f6b94e1f3540c5c981985d0d33d0466362caacbd5a253712f7dc0461
|
7
|
+
data.tar.gz: 7acf5a2bb802bfffa9338a5a6a06f6070d27fcb5e62ce9d0ad51df987fae2ac818cb4acb5aba6c467f2872bf7419bc7c242a66dba08006014eddca60e9604738
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,36 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
## 3.8.0 2023/02/18
|
4
|
+
|
5
|
+
### 対応ゲームシステムの追加
|
6
|
+
- 信長の黒い城 (NobunagasBlackCastle): Facelessさんありがとうっ! ([#577](https://github.com/bcdice/BCDice/pull/577))
|
7
|
+
- 砂塵戦機アーガス (SajinsenkiAGuS): 猫あきら。さんありがとうっ! ([#582](https://github.com/bcdice/BCDice/pull/582))
|
8
|
+
- Hunter: The Reckoning 5th Edition (HunterTheReckoning5th): フレッド緑野さんありがとうっ! ([#589](https://github.com/bcdice/BCDice/pull/589))
|
9
|
+
- コンヴィクター・ドライブ (ConvictorDrive): 三木里 秀予さんありがとうっ! ([#590](https://github.com/bcdice/BCDice/pull/590))
|
10
|
+
- ダンジョンズ&ドラゴンズ第5版 (DungeonsAndDragons5): Facelessさんありがとうっ! ([#594](https://github.com/bcdice/BCDice/pull/594))
|
11
|
+
- 中国語 簡体字版 ソード・ワールド系 (SwordWorld:SimplifiedChinese, SwordWorld2.0:SimplifiedChinese, SwordWorld2.5:SimplifiedChinese): 冬子さん翻訳ありがとうっ! ([#595](https://github.com/bcdice/BCDice/pull/595))
|
12
|
+
- ブラドリウム (Bloodorium): ([#599](https://github.com/bcdice/BCDice/pull/599))
|
13
|
+
|
14
|
+
### 追加機能
|
15
|
+
- ワールド・オブ・ダークネス: 振り足しの1で成功数の打ち消しが発生するコマンド(STB)を追加。フレッド緑野さんありがとうっ! ([#571](https://github.com/bcdice/BCDice/pull/571))
|
16
|
+
- トーグ エタニティ: 高揚コマンドで修正値指定が出来るように拡張。Facelessさんありがとうっ! ([#577](https://github.com/bcdice/BCDice/pull/577))
|
17
|
+
- Vampire: The Masquerade 5th Edition: 判定コマンドの難易度省略時に判定結果のヒント出力を追加。フレッド緑野さんありがとうっ! ([#581](https://github.com/bcdice/BCDice/pull/581))
|
18
|
+
- Vampire: The Masquerade 5th Edition: 難易度指定時に成功差分を表示する機能を追加。フレッド緑野さんありがとうっ! ([#591](https://github.com/bcdice/BCDice/pull/591))
|
19
|
+
- 歯車の塔の探空士(冒険企画局): 航行イベント表を追加。前田さんありがとうっ! ([#601](https://github.com/bcdice/BCDice/pull/601))
|
20
|
+
|
21
|
+
### 変更
|
22
|
+
- シノビガミ: ファンブル表の内容を改訂版に変更。 ([#588](https://github.com/bcdice/BCDice/pull/588))
|
23
|
+
|
24
|
+
### 誤植修正
|
25
|
+
- フタリソウサ: ヘルプメッセージにイベント表の記載漏れを追記。あまねさんありがとうっ! ([#580](https://github.com/bcdice/BCDice/pull/580))
|
26
|
+
- ウォーハンマーRPG第4版: SLの誤植を修正。Facelessさんありがとうっ! ([#585](https://github.com/bcdice/BCDice/pull/585))
|
27
|
+
- シノビガミ: 怪変調表の誤植を修正。なす車さんありがとうっ! ([#600](https://github.com/bcdice/BCDice/pull/600))
|
28
|
+
|
29
|
+
### バグ修正
|
30
|
+
- サイバーパンクRED: 判定コマンドの比較記号の誤りを修正。Roratioさん指摘ありがとうっ! ([#587](https://github.com/bcdice/BCDice/pull/587))
|
31
|
+
- アサルトエンジン: 加算ダイスを実行できないバグを修正。ぽてちさん報告、蜂紫さん修正ありがとうっ! ([#598](https://github.com/bcdice/BCDice/pull/598))
|
32
|
+
|
33
|
+
|
3
34
|
## 3.7.0 2022/10/21
|
4
35
|
|
5
36
|
### 対応ゲームシステムの追加
|
data/i18n/SwordWorld/ja_jp.yml
CHANGED
@@ -0,0 +1,37 @@
|
|
1
|
+
zh_hans:
|
2
|
+
SwordWorld2_0:
|
3
|
+
transcendent_critical_too_small: (%{expression}) > 暴击值过小。请输入3以上的暴击值。
|
4
|
+
super_success: 超成功
|
5
|
+
|
6
|
+
GrowthTable:
|
7
|
+
name: 成长表
|
8
|
+
type: 1D6
|
9
|
+
items:
|
10
|
+
- 灵巧度
|
11
|
+
- 敏捷度
|
12
|
+
- 力量
|
13
|
+
- 生命力
|
14
|
+
- 智力
|
15
|
+
- 精神力
|
16
|
+
|
17
|
+
FumbleTable:
|
18
|
+
name: 防御大失败表
|
19
|
+
type: 1D6
|
20
|
+
items:
|
21
|
+
- 骰本表2次,适用两边的效果。(同出目带来的影响不会累积)。本次自动失败获得的经验点+50点
|
22
|
+
- 伤害追加强化攻击者的「剑之碎片」个数点
|
23
|
+
- 伤害追加攻击者的「等级」点
|
24
|
+
- 进行2次伤害决定,采用更高的结果
|
25
|
+
- 合算伤害变为2倍
|
26
|
+
- 防护点无效
|
27
|
+
|
28
|
+
TangleTable:
|
29
|
+
name: 缠绕效果表
|
30
|
+
type: 1D6
|
31
|
+
items:
|
32
|
+
- 头或脸:用牙和咬的攻击命中力判定,以及魔法行使和祝福术受到-2的惩罚修正。
|
33
|
+
- 武器或盾:武器不能使用,且盾的回避力修正和防护点无效
|
34
|
+
- 胳膊或手:武器和爪之类的命中力判定受到-2的惩罚修正,如果持盾的手被缠绕则该盾的回避力修正以及防护点无效
|
35
|
+
- 脚:无法移动,且回避力判定受到-2的惩罚修正 ※两脚被缠绕时效果不累积
|
36
|
+
- 躯干:除使用生命、精神抵抗力为基础值的判定外,所有行为判定受到-1的惩罚修正
|
37
|
+
- 特殊:命中尾巴或翅膀等部位。被缠上的部位使用的判定,受到-2的惩罚修正。且失去该部位提供的加值。 ※不存在这样的部位时重新决定
|
@@ -20,7 +20,7 @@ ja_jp:
|
|
20
20
|
-
|
21
21
|
- 「たどたどしい」 装備時 話をする時に言葉に詰まったり、言い間違えたりしやすくなる。魔法行使判定に-1のペナルティ修正を受ける。
|
22
22
|
- 「代弁する」 装備時 自身の会話は、そのまま武具が魔法文明語の聞き取りづらい声で話す。装備中は魔法文明語以外の言語で会話は行えず、妖精魔法、魔動機術を行使できなくなる。
|
23
|
-
- 「施しは受けない」 装備時
|
23
|
+
- 「施しは受けない」 装備時 戦闘中、「抵抗:任意」の効果を受け入れた場合、次の手番開始時まで生命抵抗力、精神抵抗力に-2のペナルティ修正を受ける。
|
24
24
|
- 「死に近い」 携行時 常に生死判定に「冒険者レベル」と同じ値のペナルティ修正を受ける。
|
25
25
|
- 「おしゃれな」 携行時 その武具を常に華美に飾りたくなる。収入を得るたび、その1割以上をこの武具の装飾に費やさなければならない(効果などに変化はない)。
|
26
26
|
- 「マナを吸う」 携行時 魔法や練技など、自身の意思でMPを消費する効果を使用する場合、すべてのMP消費が1点上昇する。
|
@@ -0,0 +1,57 @@
|
|
1
|
+
zh_hans:
|
2
|
+
SwordWorld2_5:
|
3
|
+
AbyssCurseTable:
|
4
|
+
name: 奈落诅咒表
|
5
|
+
items:
|
6
|
+
-
|
7
|
+
- 「自伤的」 装备时 该武具的装备者造成暴击时,装备者的HP减少5点。
|
8
|
+
- 「悲叹的」 装备时 周围有敌人时,会紧张到泪流不止。在战斗中无法选取「射程:施术者」和「射程:接触」以外的效果对象。
|
9
|
+
- 「仁慈的」 装备时 会对敌人心存怜悯。以敌对角色为对象时,如果对象已经减少了1点以上的HP,则命中力判定、魔法行使判定受到-2的惩罚修正。
|
10
|
+
- 「差别的」 装备时 给予特定分类角色的物理伤害・魔法伤害减少2点。分类由「分类决定表」随机决定。
|
11
|
+
- 「脆弱的」 装备时 每次受到魔法伤害时,该伤害+1点。
|
12
|
+
- 「无谋的」 装备时 防护点减少2点(最低0)。
|
13
|
+
-
|
14
|
+
- 「沉重的」 装备时 被强化的武具的必要力量+2。威力、防护点等保持不变。
|
15
|
+
- 「难用的」 装备时 不管使用哪一行威力表,③④栏的数值都与威力无关地变成「0」(不是自动失败)。
|
16
|
+
- 「软弱的」 装备时 精神抵抗力判定受到-1的惩罚修正。
|
17
|
+
- 「病弱的」 装备时 生命抵抗力判定受到-1的惩罚修正。
|
18
|
+
- 「过敏的」 装备时 受到特定属性的物理伤害、魔法伤害上升2点。属性由「属性决定表」随机决定。
|
19
|
+
- 「开朗的」 装备时 每次在精神抵抗判定中失败时,就会笑个不停。直到下回合结束时为止,行动判定(『Ⅰ』123页)受到-1的惩罚修正。这个效果会累积。
|
20
|
+
-
|
21
|
+
- 「结巴的」 装备时 说话时容易想不到词或说错。魔法行使判定受到-1的惩罚修正。
|
22
|
+
- 「代言的」 装备时 自己的话会被武具原封不动地以难以听清的魔法文明语说出。装备这个武具时无法使用魔法文明语以外的语言对话,无法行使妖精魔法、魔动机术。
|
23
|
+
- 「拒绝施舍的」 装备时 战斗中,接受「抵抗:任意」的效果时,生命抵抗力、精神抵抗力受到-2的惩罚修正直到下回合开始。
|
24
|
+
- 「接近死亡的」 携带时 生死判定始终受到和「冒险者等级」相同的惩罚修正。
|
25
|
+
- 「时髦的」 携带时 始终想把该武具装点得华美。每次获得收入时,必须花费此收入的1成以上用于装饰武具(没有效果之类的变化)。
|
26
|
+
- 「吸收玛娜的」 携带时 魔法或练技等,以自己的意思使用消耗MP的效果时,所有MP消耗上升1点。
|
27
|
+
-
|
28
|
+
- 「迟钝的」 携带时 移动力变为一半(小数进位)。
|
29
|
+
- 「不准的」 携带时 战斗中回合开始时掷1d,出目为「1」则《目标瞄准》及以此为前提的战斗特技是为没有习得。
|
30
|
+
- 「错乱的」 携带时 战斗中回合开始时掷1d,出目为「1」则使用包含近距离攻击在内的「射程:接触」的效果时,对象从和装备者同位置(区域、坐标)的所有角色(包含敌我)中随机选择。
|
31
|
+
- 「绊脚的」 携带时 战斗中回合开始时掷1d,出目为「1」则当场摔倒。回合中不能站起来。
|
32
|
+
- 「滑落的」 携带时 战斗中回合开始时掷1d,出目为「1」则手部装备及拿着的东西全部掉在原地(该回合可以用主动作捡起)。
|
33
|
+
- 「散发恶臭的」 携带时 散发强烈的恶臭。只是携带着就会让其他角色感到不适,隐蔽判定受到-2的惩罚修正。且冒险者阶级(『Ⅱ』137页)视为低1级。
|
34
|
+
-
|
35
|
+
- 「丑恶的」 携带时 武具外观丑陋,毫无魅力。贩卖该武具时只能卖到基本交易价格的4分之1。且冒险者阶级(『Ⅱ』137页)视为低1级。
|
36
|
+
- 「嗡鸣的」 携带时 该武具中始终响着飞虫飞舞的声音。隐蔽判定、危险感知判定受到-4的惩罚修正。
|
37
|
+
- 「湿软的」 携带时 武具质感像是吸了水一样软塌塌的。追加伤害-2(武器)、防护点-1(铠、盾)。对疾病属性的效果的生命抵抗力、精神抵抗力受到-4的惩罚修正。
|
38
|
+
- 「旧伤的」 携带时 受到回复HP的效果时(包含由于休息造成的回复),该回复量减少1点。
|
39
|
+
- 「炫目的」 携带时 通过反射光芒等方式发出强烈的光辉。自己始终由于视野不良受到-1的惩罚修正。
|
40
|
+
- 「无荣光的」 携带时 行为判定自动成功时,视为没有自动成功,并重投2d,采用新的出目。这个效果1天只生效1次。
|
41
|
+
-
|
42
|
+
- 「正直者的」 携带时 谎言和手段变得很容易暴露。成为真伪判定的对象时,受到-4的惩罚修正。
|
43
|
+
- 「晕动的」 携带时 对摇晃的抵抗力减弱。以自己步行之外的方式移动10分钟以上后,1小时内行动判定受到-1的惩罚修正。
|
44
|
+
- 「厌恶碧绿的」 携带时 在自然环境中会变得无法冷静。在自然环境(『Ⅰ』108页)中行动判定受到-1的惩罚修正。
|
45
|
+
- 「无法忍耐的」 携带时 游戏中每次1天开始时,必须花费「冒険者等级×10」加美尔用于兴趣和嗜好品等的支出。若处于无法消费兴趣和嗜好品的环境中,直到第二天早上为止,HP上限、MP上限减少「冒険者等级」点。
|
46
|
+
- 「阴魂不散的」 携带时 这个武具不知不觉就会出现在身边。以该武具以外的武具进行的命中力判定(武器)、魔法行使判定(武器)、回避力判定(铠、盾)会受到-4的惩罚修正。
|
47
|
+
- 「慢吞吞的」 携带时 战斗开始时无法进行「战斗准备」。
|
48
|
+
|
49
|
+
AbyssCurseCategoryTable:
|
50
|
+
name: 奈落诅咒分类决定表
|
51
|
+
odd: ["蛮族", "动物", "植物", "不死生物", "魔法生物", "在「蛮族」「动物」「植物」「不死生物」「魔法生物」中任选一个"]
|
52
|
+
even: ["魔动机", "幻兽", "妖精", "魔神", "人族", "在「魔动机」「幻兽」「妖精」「魔神」「人族」中任选一个"]
|
53
|
+
|
54
|
+
AbyssCurseAttrTable:
|
55
|
+
name: 奈落诅咒属性决定表
|
56
|
+
odd: ["土", "水・冰", "炎", "风", "雷", "纯能量"]
|
57
|
+
even: ["断空", "冲击", "毒", "疾病", "诅咒", "精神效果"]
|
@@ -36,7 +36,7 @@ module BCDice
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def eval_game_system_specific_command(command)
|
39
|
-
if (m = /^(\d+)AG(\d+)?(([
|
39
|
+
if (m = /^(\d+)AG(\d+)?(([+-]\d+)*)$/.match(command))
|
40
40
|
resolute_action(m[1].to_i, m[2]&.to_i, m[3], command)
|
41
41
|
else
|
42
42
|
roll_tables(command, TABLES)
|
@@ -30,16 +30,16 @@ module BCDice
|
|
30
30
|
|
31
31
|
if dice_list.count(1) == dice_list.size
|
32
32
|
# 全部1の目ならファンブル
|
33
|
-
Result.fumble("
|
33
|
+
Result.fumble(translate("fumble"))
|
34
34
|
elsif n_max >= 2
|
35
35
|
# 2個以上6の目があったらクリティカル
|
36
|
-
Result.critical("
|
36
|
+
Result.critical(translate("Arianrhod.critical", dice: n_max))
|
37
37
|
elsif cmp_op != :>= || target == '?'
|
38
38
|
nil
|
39
39
|
elsif total >= target
|
40
|
-
Result.success("
|
40
|
+
Result.success(translate("success"))
|
41
41
|
else
|
42
|
-
Result.failure("
|
42
|
+
Result.failure(translate("failure"))
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
@@ -44,7 +44,7 @@ module BCDice
|
|
44
44
|
r1 = judge(target, total)
|
45
45
|
r2 = judge(target, swap)
|
46
46
|
text = "(AES#{format00(target)}) > #{r1.text} / スワップ#{r2.text}"
|
47
|
-
|
47
|
+
return_result(r1, r2, text)
|
48
48
|
elsif cmd.prefix_number.nil? # 初回ロール
|
49
49
|
total = @randomizer.roll_once(100) % 100 # 0-99
|
50
50
|
judge(target, total).tap do |r|
|
@@ -57,7 +57,7 @@ module BCDice
|
|
57
57
|
new2 = judge(target, now % 10 + die * 10) # 10の位を振り直す
|
58
58
|
|
59
59
|
text = "(#{format00(now)}AE#{format00(target)}) > #{die} > #{new1.text} / #{new2.text}"
|
60
|
-
|
60
|
+
return_result(new1, new2, text)
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
@@ -65,7 +65,7 @@ module BCDice
|
|
65
65
|
format("%02d", dice)
|
66
66
|
end
|
67
67
|
|
68
|
-
def
|
68
|
+
def return_result(result1, result2, text)
|
69
69
|
if result1.critical? || result2.critical?
|
70
70
|
Result.critical(text)
|
71
71
|
elsif result1.success? || result2.success?
|
@@ -115,7 +115,7 @@ module BCDice
|
|
115
115
|
private
|
116
116
|
|
117
117
|
def parse()
|
118
|
-
m = /^(\d+)(?:R6|BB6?)((?:[
|
118
|
+
m = /^(\d+)(?:R6|BB6?)((?:[+-]\d+)+)?(?:%(-?\d+))?(?:@([+\-\d]+))?(?:#(A)?([+\-\d]+))?(?:\$([1-6]+))?(?:&([1-6]))?(?:([>=]+)(\d+))?$/.match(@command)
|
119
119
|
unless m
|
120
120
|
@parse_error = true
|
121
121
|
return
|
@@ -145,7 +145,7 @@ module BCDice
|
|
145
145
|
end
|
146
146
|
|
147
147
|
def roll_attack(command)
|
148
|
-
m = /^(\d+)(S?)A([1-6]*)([
|
148
|
+
m = /^(\d+)(S?)A([1-6]*)([+-]\d+)?$/.match(command)
|
149
149
|
unless m
|
150
150
|
return nil
|
151
151
|
end
|
@@ -179,7 +179,7 @@ module BCDice
|
|
179
179
|
end
|
180
180
|
|
181
181
|
def roll_performance(command)
|
182
|
-
m = /^([1-7]*)PD(\d+)([
|
182
|
+
m = /^([1-7]*)PD(\d+)([+-]\d+)?$/.match(command)
|
183
183
|
unless m
|
184
184
|
return nil
|
185
185
|
end
|
@@ -91,7 +91,7 @@ module BCDice
|
|
91
91
|
|
92
92
|
# パフォーマンス判定
|
93
93
|
def roll_performance_check(command)
|
94
|
-
m = /^PD(\d+)([
|
94
|
+
m = /^PD(\d+)([+-]\d+)?$/.match(command)
|
95
95
|
unless m
|
96
96
|
return nil
|
97
97
|
end
|
@@ -145,7 +145,7 @@ module BCDice
|
|
145
145
|
|
146
146
|
# シンフォニー
|
147
147
|
def roll_symphony_check(command)
|
148
|
-
m = /^([1-6]+)PD([1-6])([
|
148
|
+
m = /^([1-6]+)PD([1-6])([+-]\d+)?$/.match(command)
|
149
149
|
unless m
|
150
150
|
return nil
|
151
151
|
end
|
@@ -66,7 +66,7 @@ module BCDice
|
|
66
66
|
end
|
67
67
|
return rollAct(counts, judgment, critical, fumble)
|
68
68
|
|
69
|
-
when /^CT3([
|
69
|
+
when /^CT3([+-]?)$/
|
70
70
|
sign = Regexp.last_match(1)
|
71
71
|
title = '因縁表(The 3rd) 『BoA3』P292'
|
72
72
|
table = [
|
@@ -95,7 +95,7 @@ module BCDice
|
|
95
95
|
]
|
96
96
|
return tableText(title, table, sign)
|
97
97
|
|
98
|
-
when /^CTR([
|
98
|
+
when /^CTR([+-]?)$/
|
99
99
|
sign = Regexp.last_match(1)
|
100
100
|
title = '因縁表(リインカーネイション) 『BAR』P51、299'
|
101
101
|
table = [
|
@@ -153,7 +153,7 @@ module BCDice
|
|
153
153
|
]
|
154
154
|
return tableText(title, table, sign)
|
155
155
|
|
156
|
-
when /^AKST([
|
156
|
+
when /^AKST([+-]?)$/
|
157
157
|
sign = Regexp.last_match(1)
|
158
158
|
title = '悪徳シーン表 『GoV』P16、164'
|
159
159
|
table = [
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class Bloodorium < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = 'Bloodorium'
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = 'ブラドリウム'
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = 'ふらとりうむ'
|
14
|
+
|
15
|
+
# ダイスボットの使い方
|
16
|
+
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
|
17
|
+
・ダイスチェック xDC+y
|
18
|
+
【ダイスチェック】を行う。《トライアンフ》を結果に自動反映する。
|
19
|
+
x: ダイス数
|
20
|
+
y: 結果への修正値 (省略可)
|
21
|
+
INFO_MESSAGE_TEXT
|
22
|
+
|
23
|
+
register_prefix('\dDC')
|
24
|
+
|
25
|
+
def eval_game_system_specific_command(command)
|
26
|
+
dicecheck(command)
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def dicecheck(command)
|
32
|
+
parser = Command::Parser.new("DC", round_type: @round_type).has_prefix_number.restrict_cmp_op_to(nil)
|
33
|
+
parsed = parser.parse(command)
|
34
|
+
unless parsed
|
35
|
+
return nil
|
36
|
+
end
|
37
|
+
|
38
|
+
dice_list = @randomizer.roll_barabara(parsed.prefix_number, 6).sort
|
39
|
+
dice_value = dice_list.max
|
40
|
+
values_count = dice_list
|
41
|
+
.group_by(&:itself)
|
42
|
+
.transform_values(&:length)
|
43
|
+
triumph = values_count.values.max
|
44
|
+
|
45
|
+
total = dice_value * triumph + parsed.modify_number
|
46
|
+
|
47
|
+
sequence = [
|
48
|
+
"(#{parsed})",
|
49
|
+
"[#{dice_list.join(',')}]#{Format.modifier(parsed.modify_number)}",
|
50
|
+
("《トライアンフ》(*#{triumph})" if triumph > 1),
|
51
|
+
(total_expr(dice_value, triumph, parsed.modify_number) if total != dice_value),
|
52
|
+
total,
|
53
|
+
].compact
|
54
|
+
|
55
|
+
return Result.new.tap do |r|
|
56
|
+
r.critical = triumph > 1
|
57
|
+
r.text = sequence.join(" > ")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def total_expr(dice_value, triumph, modify_number)
|
62
|
+
formated_triumph = triumph > 1 ? "*#{triumph}" : nil
|
63
|
+
|
64
|
+
return "#{dice_value}#{formated_triumph}#{Format.modifier(modify_number)}"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'bcdice/base'
|
4
|
+
|
5
|
+
module BCDice
|
6
|
+
module GameSystem
|
7
|
+
class ConvictorDrive < Base
|
8
|
+
# ゲームシステムの識別子
|
9
|
+
ID = 'ConvictorDrive'
|
10
|
+
|
11
|
+
# ゲームシステム名
|
12
|
+
NAME = 'コンヴィクター・ドライブ'
|
13
|
+
|
14
|
+
# ゲームシステム名の読みがな
|
15
|
+
#
|
16
|
+
# 「ゲームシステム名の読みがなの設定方法」(docs/dicebot_sort_key.md)を参考にして
|
17
|
+
# 設定してください
|
18
|
+
SORT_KEY = 'こんういくたあとらいふ'
|
19
|
+
|
20
|
+
# ダイスボットの使い方
|
21
|
+
HELP_MESSAGE = <<~MESSAGETEXT
|
22
|
+
xCD@z>=y: x個の10面ダイスで目標値y、クリティカルラインzの判定を行う
|
23
|
+
SLT: 技能レベル表を振る
|
24
|
+
DCT: 遅延イベント表を振る
|
25
|
+
MESSAGETEXT
|
26
|
+
|
27
|
+
TABLES = {
|
28
|
+
"SLT" => DiceTable::Table.new(
|
29
|
+
"技能ランク表",
|
30
|
+
"2D10",
|
31
|
+
[
|
32
|
+
"ランク外",
|
33
|
+
"E-",
|
34
|
+
"E",
|
35
|
+
"E+",
|
36
|
+
"D-",
|
37
|
+
"D",
|
38
|
+
"D+",
|
39
|
+
"C-",
|
40
|
+
"C",
|
41
|
+
"C+",
|
42
|
+
"B-",
|
43
|
+
"B",
|
44
|
+
"B+",
|
45
|
+
"A-",
|
46
|
+
"A",
|
47
|
+
"A+",
|
48
|
+
"S-",
|
49
|
+
"S",
|
50
|
+
"S+",
|
51
|
+
]
|
52
|
+
),
|
53
|
+
"DCT" => DiceTable::Table.new(
|
54
|
+
"遅延イベント表",
|
55
|
+
"1D10",
|
56
|
+
[
|
57
|
+
"状況遅延Ⅰ(全員の初期リソースを-1する)",
|
58
|
+
"状況遅延Ⅱ(全員の初期リソースを-1する)",
|
59
|
+
"状況遅延Ⅲ(全員の初期リソースを-2する)",
|
60
|
+
"武装を許すⅠ(ボスの攻撃ダイスを+1dする)",
|
61
|
+
"武装を許すⅡ(脅威度4以下のエネミーの攻撃ダイスを2体まで+1dする)",
|
62
|
+
"武装を許すⅢ(脅威度3以下のエネミーの攻撃ダイスを1体+2dする)",
|
63
|
+
"緊急出撃Ⅰ(ランダムなPCのHPを-1する)",
|
64
|
+
"緊急出撃Ⅱ(ランダムなPCのHPを-1する)",
|
65
|
+
"緊急出撃Ⅲ(ランダムなPC2人のHPを-1する)",
|
66
|
+
"絶望(ダイスを二度振り、二つ適用する)",
|
67
|
+
]
|
68
|
+
),
|
69
|
+
}.freeze
|
70
|
+
|
71
|
+
# ダイスボットで使用するコマンドを配列で列挙する
|
72
|
+
register_prefix("[-+*0-9\(\)]*CD", TABLES.keys)
|
73
|
+
|
74
|
+
def initialize(command)
|
75
|
+
super(command)
|
76
|
+
|
77
|
+
@sides_implicit_d = 10
|
78
|
+
end
|
79
|
+
|
80
|
+
def eval_game_system_specific_command(command)
|
81
|
+
debug("eval_game_system_specific_command Begin")
|
82
|
+
|
83
|
+
return roll_command(command) || roll_tables(command, TABLES)
|
84
|
+
end
|
85
|
+
|
86
|
+
def roll_command(command)
|
87
|
+
parser = Command::Parser.new('CD', round_type: round_type)
|
88
|
+
.has_prefix_number
|
89
|
+
.enable_critical
|
90
|
+
.restrict_cmp_op_to(:>=)
|
91
|
+
cmd = parser.parse(command)
|
92
|
+
|
93
|
+
unless cmd
|
94
|
+
return nil
|
95
|
+
end
|
96
|
+
|
97
|
+
dice_list = @randomizer.roll_barabara(cmd.prefix_number, 10)
|
98
|
+
critical = cmd.critical&.clamp(cmd.target_number, 10) || 10
|
99
|
+
succeed_num = dice_list.count { |x| x >= cmd.target_number }
|
100
|
+
critical_num = dice_list.count { |x| x >= critical }
|
101
|
+
|
102
|
+
text = [
|
103
|
+
cmd.to_s,
|
104
|
+
dice_list.join(','),
|
105
|
+
critical_num > 0 ? "クリティカル数#{critical_num}" : nil,
|
106
|
+
"成功数#{succeed_num + critical_num}",
|
107
|
+
].compact.join(" > ")
|
108
|
+
|
109
|
+
return Result.new.tap do |r|
|
110
|
+
r.success = succeed_num > 0
|
111
|
+
r.critical = critical_num > 0
|
112
|
+
r.text = text
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
@@ -67,7 +67,7 @@ module BCDice
|
|
67
67
|
def cp_roll_result(command)
|
68
68
|
parser = Command::Parser.new('CP', round_type: RoundType::FLOOR)
|
69
69
|
.enable_suffix_number
|
70
|
-
.restrict_cmp_op_to(nil,
|
70
|
+
.restrict_cmp_op_to(nil, :>)
|
71
71
|
parsed = parser.parse(command)
|
72
72
|
return nil if parsed.nil?
|
73
73
|
|
@@ -96,11 +96,7 @@ module BCDice
|
|
96
96
|
end
|
97
97
|
|
98
98
|
if parsed.target_number
|
99
|
-
|
100
|
-
result.success = true
|
101
|
-
else
|
102
|
-
result.failure = true
|
103
|
-
end
|
99
|
+
result.condition = total > parsed.target_number
|
104
100
|
end
|
105
101
|
|
106
102
|
result.text = "(#{dice_cnt}D#{dice_face}#{Format.modifier(modify_number)}#{parsed.cmp_op}#{parsed.target_number})"
|