27 个版本 (稳定版)

4.2.3 2022年11月7日
4.2.2 2021年10月23日
4.2.1 2021年4月30日
4.2.0 2021年3月7日
0.5.0 2020年8月8日

#215 in 游戏开发

Download history 6/week @ 2024-03-09 2/week @ 2024-03-16 32/week @ 2024-03-30 10/week @ 2024-04-06 21/week @ 2024-06-01 7/week @ 2024-06-08 26/week @ 2024-06-15 1/week @ 2024-06-22

每月55次 下载
disle 中使用

MIT 协议

90KB
2K SLoC

Docs Crates.io Crates.io

Caith

用 Rust 编写的骰子滚动库(同时也是一张抽屉卡片)。

此库旨在为桌面角色扮演游戏提供所需的一切。

不同的功能灵感来自 DiceMaidenSidekick

Dìsle 是基于 caith 构建的 Discord 机器人。

用法

use caith::{Roller, RollResult, RollResultType};

// ...
let result = Roller::new("1d6 : initiative").unwrap().roll().unwrap();
printf("{}", result);

语法

xdy [OPTIONS] [TARGET] [FAILURE] [! REASON]

roll `x` dice(s) with `y` sides

`y` can also be "F" or "f" for fudge dice. In this case, no option applies and ignored if provided.

Options:
+ - / * : modifiers
e# : Explode value. If number is omitted, we use dice sides
ie# or !# : Indefinite explode value, If number is omitted, we use dice sides
K#  : Keeping # highest (upperacse "K")
k#  : Keeping # lowest (lowercase "k")
D#  : Dropping the highest (uppercase "D")
d#  : Dropping the lowest (lowercase "d")
r#  : Reroll if <= value
ir# : Indefinite reroll if <= value

Target:
t#  : minimum value to count as success
tt# : minimum value to count as two successes
t[<list of numbers>] : enumeration of values considered as success

Failure:
f# : value under which it's counted as failure

Repetition:
a roll can be repeated with `^` operator: `(2d6 + 6) ^ 8` will roll eight times the expression.

Summed repetition:
with the `^+` operator, the roll will be repeated and all the totals summed.

Sorted repetition:
with the `^#` operator, the roll will be repeated and sorted by total.

Reason:
: : Any text after `:` will be a comment

辅助工具

提供了一些辅助工具来根据特定的 RPG 规则解释滚动结果。有关详细信息,请参阅辅助工具文档。

您需要添加所需辅助工具的功能标志。

目前,支持的功能标志包括

  • ova:用于 "OVA: The Anime Role-Playing Game result" 的辅助工具
  • cde:用于 "Hong Kong, Les Chroniques de l'étrange" 的辅助工具

默认不激活任何功能

卡片

caith 可以创建一副标准的 52 张牌,如果激活了 cards 功能,还可以选择性地添加 Jokers。请参阅 cards::Deck

限制

为了避免 OOM 问题,最多支持 5000 个面数为 5000 的骰子。

示例

以下示例直接取自 DiceMaiden 的 Readme

2d6 + 3d10:掷两个六面骰子和三个十面骰子。

3d6 + 5:掷三个六面骰子并加五。其他支持的静态修改符包括加 (+)、减 (-)、乘 (*) 和除 (/)。

3d6 * 1.5:掷三个六面骰子并加 50%。

3d6 e6:掷三个六面骰子,六点爆炸。一些游戏系统称这种骰子为“开口骰子”。如果掷出的数字大于或等于此选项给出的值,则骰子再次掷出并加到总数中。如果没有给出此选项的数字,则假定它与骰子的面数相同。因此,“3d6 e”与“3d6 e6”相同。使用此命令骰子只能爆炸一次。使用ie进行不定时爆炸。

3d6 ie63d6!:掷三个六面骰子,在六点内无限期地爆炸。我们将爆炸次数限制在100次,以防止滥用。

3d10 d1:掷三个十面骰子,掷掉一个骰子。最低值首先被掷掉。

3d10 K2:掷三个十面骰子,保留两个。保留掷出的最高值。使用小写k将保留最低值。

4d6 r2:掷四个六面骰子,任何掷出的数字等于或小于两的骰子重新掷一次。使用ir进行不定时重新掷。

4d6 ir2:掷四个六面骰子,任何掷出的数字等于或小于两的骰子(以及这些骰子)重新掷。每次掷骰子最多进行100次重新掷,以防止滥用。

6d10 t7:掷六个十面骰子,任何掷出的数字七或更高计为成功。掷出的骰子不用于计算总和。任何掷出的数字达到或超过目标数字的骰子都加到成功总数中。

5d10 t8 f1:f#表示一个失败数字,每个骰子必须匹配或低于该数字才能计为对成功的影响。这些作为一种负成功,按上述方式总计。在示例掷骰中,掷五个十面骰子,任何掷出的数字8或更高计为成功,并从中减去。总和可能为负。如果此选项给出0值,则与没有此选项相同,因此执行正常掷骰子的总和。

5d10 t8 tt10:8和9计为成功,10计为两次。

3d6 t[2,4,6]:只有偶数结果计为成功(适用于像“骑士”这样的游戏)。

4d10 k3:掷四个十面骰子,保留掷出的最低三个骰子。

4d6 : Hello World!:掷四个六面骰子,并在掷骰子时添加注释。

这些命令可以组合使用。例如

10d6 e6 K8 +4:掷十个六面骰子,在六点爆炸,保留八个最高掷骰结果,并加四。

依赖项

~3MB
~63K SLoC