发帖

FVTT 基础教程——掷骰公式

本文转载自 @时泠 老师所撰写的博客文章,本文只做了部分新增与调整,以下为原文地址:

前言

FVTT作为虚拟桌面,掷骰功能是游戏过程中必不可少的一环,毕竟我们都是和骰子打交道,那么怎么使用骰点系统呢?

骰点系统

以下内容参考FVTT官网,请以官网为准。
https://foundryvtt.com/kb/
骰点的结果会显示在聊天消息中,根据可见性关系分为下列四种投掷方式:
OK,这是掷骰命令,那么如何掷骰呢?下面就是讲解掷骰公式了。
首先,掷骰公式是一个包含了四则运算和特殊运算符如d(dice)等的运算式。因此你可以直接将其作为运算式进行书写。

最基础的运算公式

首先我们来讲解掷骰的基本运算语法,前面我们已经提到了掷骰公式是一个运算式,因此掌握运算符号即可。
  • xdy:这是一个二元运算符dx表示有几个骰子,y表示骰子的数量。如:3d8即为掷38面骰的结果。
  • +−∗/:这些都是二元运算符,作用如四则运算中的原本作用,如:(1d8+1d4∗2)/4,将1d81d4∗2的结果相加后除以4
  • ():作用是改变运算次序。
  • floor():向下取整,应是系统默认行为,常用于/运算。如:floor(4d6/3)表示掷骰2d6并将结果除以3后向下取整。
  • ceil():向上取整,与floor()相反,常用于/运算。
  • round():四舍五入至接近的整数。
  • abs():取绝对值,较少使用。
  • min(x,y,z,...):取最小的结果,用,隔开不同的值。如:min(4d6,3d8,6),即在4d6的掷骰结果、3d8的掷骰结果和6中取最小的结果值。
  • max(x,y,z,...):取最大的结果,与min(x,y,z,...)相反,如:max(2d6,6),即在2d6的掷骰结果和6中取最大的结果值。
那么运算优先级,四则运算保存不变,d的优先级处于最高,其次是四则运算。你可以通过括号改变运算次序。
思考
我知道你在想什么,3d(2d8+1)这种运算是否可以生效?
看来可以。

特殊运算符

以下是你可以用的特殊运算符,注意,一些运算符的简写可能会混淆,同时这些运算符是基于骰点操作的,因此它只能作为掷骰运算符后作为修饰用。你不可以将其接到其他运算符后。
  • kh/h:结果取最高,顾名思义,在你骰出的骰子中取最大的前n个骰子,如:3d8kh2,即在38面骰结果中取最高的2个,常见的案例是DND系统掷骰属性4d6kh3
  • kl:结果取最低,和kh相反,它会取最小的前n个骰子。
  • dl/d:丢弃最低,和kh类似,它会在骰出的骰子中丢弃最小的前n个骰子,这些骰子将不参与运算结果。如:3d8dl2,在38面骰结果中丢弃前2个最小的,保留最大的1个。
  • dh:丢弃最高,和dl/d相反,它会在骰出的骰子中丢弃最大的前n个骰子,这些骰子将不参与运算结果。
  • min:替换最小值为指定结果,在你骰出的骰子中选择小于x的骰值,将其替换为x,注意这里是绝对小于的关系。如4d10min2代表将410面骰中小于2的结果替换为2,即将1替换为2
  • max:替换最大值为指定结果,和min类似,它会替换大于x的结果为x,注意是绝对大于。

成功/失败

在这一章节,我们主要介绍这个运算符:cs, 计算成功次数。
在不给定任何条件下,cs会将前文提到的所有骰子记作成功,因为这是与掷骰运算相关的,因此你也不可以将其接到其他运算符后。
以下是你可以使用的条件:
  • cs={y}:计算骰出y的骰子数量
  • cs>{y}:计算骰出大于y的骰子数量
  • cs>={y}:计算骰出大于等于y的骰子数量
  • cs<{y}:计算骰出小于y的骰子数量
  • cs<={y}:计算骰出小于等于y的骰子数量
  • even:计算骰出偶数的骰子数量,这是一个单独的运算符,所以不需要加上cs前缀。
  • odd:计算骰出奇数的骰子数量,这是一个单独的运算符,所以不需要加上cs前缀。
当然我们也有相反的计算失败次数的运算符:cf,它的约束条件与上文相同。
下面是对于成功/失败操作数量本身的操作符:
  • df:扣除失败次数:这个操作符用于指定操作失败的条件,和上文的约束相同,然后从成功计数中减去失败次数,将每次失败计数为-1。失败的标准与计数成功相同。
  • sf:减去失败骰子:这个操作符用于指定操作失败的条件,与上文约束相同,然后从骰点结果中减去失败的骰子骰点的值
  • ms:成功幅度,这个操作符从掷骰的结果中减去用户设置的目标值,并返回差值作为最终总数。如果骰点小于目标,则输出负数,反之则输出正数。
以下是示例,读者可以直接在 FVTT 运行,来观察结果:
1020面骰子,每个掷出20的骰子算成功。
/r 10d20cs20
1020面骰子,每个掷出10以上的骰子计算成功。
/r 10d20cs>10
610面骰子,每个掷出6或更高的骰子计算成功。
/r 6d10cs>=6
1100面骰子,如果结果为20或更低,则算为成功。
/r 1d100cs<=20
36面骰子,每个掷出偶数的骰子算成功。
/r 3d6even
36面骰子,每个掷奇数的骰子计算成功。
/r 3d6odd
510面骰子,将任何掷出6或更高的骰子计为成功,同时扣除任何掷出1的骰子数量。
/r 5d10cs>=6df=1
510面骰子,每掷出8或更高的骰子计算成功,并在掷出10的结果时再掷一个骰子。
/r 5d10cs>=8x=10
5个骰子,每掷8个或更高的骰子计算成功,并在掷出910时再掷d10
/r 5d10cs>=8x>=9
10个骰子,每掷出一个骰子8或更高,就算成功一次,每掷出8或更高的骰子,就会再掷出d10
/r 10d10cs>=8x>=8
1020面骰子,每个掷出20的骰子计算一次失败。
/r 10d20cf20
1020面骰子,每个掷骰掷出10的骰子都算一次失败。
/r 10d20cf>10
610面骰子,每个掷出6或更高的骰子计算一次失败。
/r 6d10cf>=6
1100面骰子,如果结果为20或更低,则算失败。
/r 1d100cf<=20
46面骰子,将任何恰好掷出6的骰子视为成功,并从每个掷出1的骰子的最终结果中删除1
/r 4d6cs6df1
1010面骰子,将任何掷出6或更好的骰子视为成功,并为每个掷出1的骰子从最终结果中删除1
/r 10d10cs>5df1
110面骰子,将10算作成功,1算作失败。
/r 1d10cs=10df=1
掷出36面骰子,并减去任何掷出小于3的骰子的值。
/r 3d6sf<3
掷出36面骰子,从最终结果中减去10
/r 3d6ms10

硬币与命运骰子

硬币是双面骰子,有两个结果:正面(heads)或反面(tails)。它们可以像任何其他骰子一样掷骰,但不受运算符的影响,尽管它们仍然可以与其他骰子类型组合。
想要骰出硬币,你只需要将xdy中的y设置为c即可。
如果你需要判断成功失败,你只需要再后接c即可,默认情况下,不给任何条件则判断正面为默认成功。如:
/r 4dc # 扔四枚硬币.
/r 3dcc1 # 扔三枚硬币,统计正面朝上的数量
/r 3dcc0 # 扔三枚硬币,统计反面朝上的数量
命运骰子是6面骰子,可以掷出正、减或空白面。它们不受运算符的影响,因为它们的空白面没有数值并且被认为是零。
想要骰出命运骰子,你只需要将xdy中的y设置为f即可。
/r 4df # 扔四枚命运骰子

特殊骰子的骰点示例

重新掷骰和爆炸掷骰

这些运算符也是基于掷骰结果的,因此你也不可以将其接到其他运算符后
以下是这些运算符的讲解:
  • r:重投,根据设定的条件重新掷骰,无论结果是否更优,都会保持结果。重掷只会重掷骰一次。
  • rr:递归重投,根据设定的条件重新掷骰,如果也符合条件,则重新掷骰,如果不符合条件,则保留该结果。与重投骰子一次的重投不同,只要结果符合重投的条件,递归重投就会继续投掷。
  • x:爆炸掷骰,根据设定的条件不断重新掷骰,以便每次出现该数字都会再次掷骰,从而不断增加总结果。
  • xo:爆炸一次,根据设定的条件重新掷骰一次,从而增加总结果。
  • x{y}:用数字上限爆炸,根据设定的条件重新掷骰,但最多只能掷y次。例如,在掷骰中添加x5将允许它最多爆炸5次,而在掷骰中添加x1与添加xo相同。
以下是示例:
  • 110面骰子,如果结果是1,则重新掷骰。
/r 1d10r1
  • 120面骰子,如果结果小于10,则重新掷骰。
/r 1d20r<10
  • 120面骰子,如果结果小于3,则重新掷骰,包括任何同样小于3的结果。
/r 1d20rr<3
  • 你现在一定想知道掷多个骰子,为其中每个满足条件的骰子重新掷骰该怎么做,此时重骰修饰符的语法是r[最大次数][运算符][目标点数].那么掷3个10面骰,为其中每个结果小于5的骰子重新掷骰的表达式就是
/r 3d10r3<5
  • 510面骰子,如果任何一个结果是10,则掷出另110面骰子,将结果添加到总数中。
/r 5d10x10
  • 120面骰子,如果结果小于10,则再掷骰,直到其中一个骰子是10或更好,这个骰点是它唯一保留的结果。
/r 1d20x<10kh
  • 610面骰子,每掷10个骰子再掷1个骰子,但不要在额外的骰子上重新掷10个骰子,将它们添加到总数中。
/r 6d10xo10
  • 610面骰子,每掷10个骰子再掷一个骰子(最多5次),将它们添加到总数中。
/r 6d10x5=10
  • 610面骰子,每掷910个骰子(最多2次)再掷一个骰子,将它们添加到总数中。
/r 6d10x2>=9
  • 510面骰子,重新掷任何小于8的骰子,并重新掷任何得分为10的骰子,然后计算掷骰的总成功次数。
/r 5d10xo<8x10cs>=8

骰池

骰池是一类骰点或常数的集合,在运算时将会把骰池内的所有骰子全部进行运算,而后作为一个整体参与后续的运算,它可以视作是一个骰子的运算符。
骰池通过{}包裹,内部的元素通过,分隔。请看示例:
  • 掷出4d63d82d10,仅保留最高结果。
/r {4d6, 3d8, 2d10}kh
  • 120面骰子,结果只能是10或更高。
/r {1d20, 10}kh
  • 120面骰子,用其结果或数字10中的较高者,然后加5
/r {1d20,10}kh + 5
  • 眼熟吗?请查阅DnD5e的创建人物章节理解此骰池
/r {4d6kh3, 4d6kh3, 4d6kh3, 4d6kh3, 4d6kh3, 4d6kh3}
掷出6d65d84d103d12并计算有多少个结果大于15
/r {6d6, 5d8, 4d10, 3d12}cs>15
18面骰子和16面骰子,如果它们掷出最大值,它们都会额外掷出相同大小的骰子。使用最高的结果。
/r {1d8x, 1d6x}kh

扩展:Better Roll Formulas

https://github.com/KitCat420/foundryvtt-better-roll-formulas
该 mod 扩展了FVTT的掷骰公式,若有额外需求可进行下载。

上一篇 基础操作教程——战斗 下一篇 FVTT 基础教程——聊天
评论区
游客
游客

还没有人评论,快来抢沙发吧~