bcdice 3.7.0 → 3.8.0
Sign up to get free protection for your applications and to get access to all the features.
- 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})"
|