AdB(kq)C(pb)DaE
这是最基础的掷骰方式,即为掷A
个面数为B
的多面骰子,然后计算它们(全部或部分)的点数总和,即为该表达式的最终结果。
当a
存在时转变为骰池,等同无限加骰池 a
的Aa(B+1)kEmB
,即无加骰轮下计算不低于成功线的骰子个数。
符号 | 参数 | 名称 | 解释 | 缺省 | 类别 |
---|---|---|---|---|---|
d | A | 骰数 | 掷出多少个骰子 | 1 | 左值 |
d | B | 面数 | 掷出的骰子有多少面 | - | 右值 |
k/q | C | 选取线 | 只选取最大/小骰子 结果的个数,k大q小 |
A | 参数 |
p/b | D | 奖惩数 | 追加奖惩骰的个数 | 0 | 参数 |
a | E | 骰池 | 功能转换为骰池 结果转为记录不低于该值的骰子个数 |
- | 参数 |
- 面数
B
的缺省值通常由规则书决定,例如DND中通常为20
,而COC中通常为100
p/b
符号的奖惩骰规则来自COC,详见惩罚骰/奖励骰
,该参数将强制覆写B
为100
,并对A
个骰子中每一只都进行C
个该操作k/q
符号与p/b
符号不可同时使用a
符号存在时,其余参数全部失效
A(pb)B
这是来自COC的掷骰方式,即为掷1
个面数为100
的多面骰子(实质上为:范围0~9
的10
面个位骰;范围0~9
的10
面十位骰,其中当出值为0
时记作100
),再掷B
个面数为10
的惩罚骰/奖励骰
,用其中最大/最小
点数替换原先的十位骰,然后计算它们(全部或部分)的点数总和,即为该表达式的最终结果。
符号 | 参数 | 名称 | 解释 | 缺省 | 类别 |
---|---|---|---|---|---|
p/b | A | - | 无意义 | 1 | 左值 |
p/b | B | 面数 | 追加奖惩骰的个数 | 1 | 右值 |
AaBkCqDmE
这是常见于无限规则的掷骰方式,即为掷A
个面数为E
的多面骰子,计算点数不低于B
的骰子个数,然后以此为新的骰子个数进行下一轮掷骰,直到下一轮掷骰不存在,然后求出所有累计结果中点数不低于C
(如果有)以及不高于D
(如果有)的骰子个数,即为该表达式的最终结果。
符号 | 参数 | 名称 | 解释 | 缺省 | 类别 |
---|---|---|---|---|---|
a | A | 初始骰数 | 第一轮掷出多少个骰子 | - | 左值 |
a | B | 加骰线 | 每有一枚不低于该值 则下一轮掷骰增加一枚骰子 |
- | 右值 |
k | C | 成功线 | 最终计算不低于该参数的骰子个数 | 8 | 参数 |
q | D | 反向成功线 | 最终计算不高于该参数的骰子个数 | - | 参数 |
m | E | 面数 | 掷出的骰子有多少面 | 10 | 参数 |
AcBmC
这是常见于双重十字规则的掷骰方式,即为掷A
个面数为C
的多面骰子,计算点数不低于B
的骰子个数,然后以此为新的骰子个数进行下一轮掷骰,直到下一轮掷骰不存在,最后一轮记其最大值,此前每一轮记为C
点,然后累加每一轮的点数总和。
符号 | 参数 | 名称 | 解释 | 缺省 | 类别 |
---|---|---|---|---|---|
c | A | 初始骰数 | 第一轮掷出多少个骰子 | - | 左值 |
c | B | 加骰线 | 每有一枚不低于该值 则下一轮掷骰增加一枚骰子 |
- | 右值 |
m | C | 面数 | 掷出的骰子有多少面 | 10 | 参数 |
AfB
理论上,FATE
规则发展自Fudge
规则。
这是常见于FATE规则的掷骰方式,即为掷A
个面数为3
的多面骰子,该骰子的三面分别为+
/-
/0
,分别计为1
、-1
、0
,计算所有骰子点数总和,即为该表达式的最终结果。
由于历史原因,df
直接等同于f
。
符号 | 参数 | 名称 | 解释 | 缺省 | 类别 |
---|---|---|---|---|---|
f | A | 骰数 | 掷出多少个骰子 | 4 | 左值 |
f | B | - | 无意义 | 3 | 右值 |
A?B:C
三目运算符的作用只有一个,就是在A
不为0
时等于B
,A
为0
时等于C
。
符号 | 参数 | 名称 | 解释 | 缺省 | 类别 |
---|---|---|---|---|---|
? |
A | 被判别式 | 这个表达式的真假将决定最终的值 | - | 左值 |
? |
B | 为真表达式 | 为真时表达式的值 | - | 右值 |
: |
C | 为假表达式 | 为假时表达式的值 | - | 参数 |
[A,B,C,D,...]
多元组在格式上是被[
和]
包裹的,被一系列,
分隔的表达式(或称元素),如上例子,将会顺序执行A
、B
、C
、D
……直到多元组结束。
这种表达式可以实现表达式的嵌套与多条表达式的组合,并且可以配合kh
、kl
或lp
来实现特殊的操作。
符号 | 参数 | 名称 | 解释 | 缺省 | 类别 |
---|---|---|---|---|---|
[] |
A B C D ... | 表达式序列 | 顺序执行 | - | 序列 |
- 逗号表达式:对于那些与多元组结合没有特殊操作的运算符,默认情况下,多元组的值将为最后一个表达式的值,如
[2,3]d100
实际等同于3d100
。 - 多态:部分运算符同时具有数值与多元组类型的计算结果,实际使用哪一个取决于与它结合的下一级运算符,例如
2d100
可以同时具有127
和[84,43]
的效果,所以2d100d2
等同于127d2
,2d100kh
等同于[84,43]kh
。
A(kh/hl/dh/dl)B
这是常见于DND规则的掷骰方式,这种算符需要与多元组或者具有多元组结果的算符配合使用,例如d
、f
、[]
。
这个算符的意思即为将A
的计算结果转换为多元组,比较其中各个表达式结果的大小并按照升序/降序
从左至右排序,然后取其左侧/右侧
的B
个点数,然后计算这些点数的总和。
该运算符由k/d
与h/l
组合,共有4
种情形:
k/d
代表取左侧/右侧
数字h/l
代表由左至右进行降序/升序
排列,即大数/小数
在左
所以在实际使用中,kh/dl
和kl/dh
分别为一样的功能,即取最大/最小
的B
个数字并求和,区别是排序过程的顺序不一样。
符号 | 参数 | 名称 | 解释 | 缺省 | 类别 |
---|---|---|---|---|---|
kh/kl/dh/dl |
A | 待比较取值的表达式 | 一个具有多元组结果的表达式 | - | 左值 |
kh/kl/dh/dl |
B | 取多少个数字求和 | 无意义 | 1 | 右值 |
- 本运算符优先获取其左值表达式的多元组结果,无多元组结果的表达式将被视为只有一个表达式的多元组。
AmaxB
AminB
max/min
算符支持将左值A
中的值的最大/最小
值限制在指定的B
的之下/之上
,A
可以是一个单一数字,也可以是一个多元组。
符号 | 参数 | 名称 | 解释 | 缺省 | 类别 |
---|---|---|---|---|---|
max/min |
A | 被检测表达式 | 被检测是否需要限制的表达式 | - | 左值 |
max/min |
B | 阈值 | 会被进行限制的阈值 | - | 右值 |
AlpB
lp
算符支持快速使用循环,其左侧的A
与循环次数、单次步进以及变量相关,可以是数值或者多元组,右侧的B
则是被作为循环体的多元组。
符号 | 参数 | 名称 | 解释 | 缺省 | 类别 |
---|---|---|---|---|---|
lp | A | 循环标识 | 用于标识循环次数与步进 详见附加说明 |
- | 左值 |
lp | B | 循环体 | 用于被多次循环计算的表达式 | - | 右值 |
A
循环标识可以有以下多种格式:X
单个数值,则为从1
至X
以单次步进1
,循环至等于X
为止,包括X
[X]
单个元素的多元组,等同X
单个数值[X,Y]
两个元素的多元组,则为从X
至Y
以单次步进1
,循环至等于Y
为止,包括Y
[X,Y,Z]
两个元素的多元组,则为从X
至Z
以单次步进Y
,循环至等于Z
为止,包括Z
B
必须为多元组,元素数量不限,将按照循环顺序执行,并将每次循环的执行结果拼接为一个完整的多元组- 特别的,
B
中的每个元素可以用符号i
来引用本次循环的循环变量。
AspB
sp
算符支持对多元组进行裁切,其左侧的A
是被裁切的多元组,右侧的B
则是裁切的标识。
符号 | 参数 | 名称 | 解释 | 缺省 | 类别 |
---|---|---|---|---|---|
sp | A | 被裁切多元组 | 被裁切的多元组 | - | 左值 |
sp | B | 裁切标识 | 用于标识裁切范围与步进 详见附加说明 |
- | 右值 |
A
必须为多元组,元素数量不限。有多种结果的表达式将被优先获取多元组结果。B
裁切标识可以有以下多种格式:X
单个数值,则为取出从左至右第X
个表达式的结果[X]
单个元素的多元组,等同X
单个数值[X,Y]
两个元素的多元组,则为从左至右第X
至Y
以单次步进1
,将取出的结果拼接为新的多元组,包括第Z
个[X,Y,Z]
两个元素的多元组,则为从左至右第X
至Z
以单次步进Y
,将取出的结果拼接为新的多元组,包括第Z
个
Atp
tp
算符支持对表达式进行多元组强制转换,这种转换我们称为弹射,这个算符将会其左侧的A
弹射为一个多元组结果,从而强制后续与它结合的运算符使用这个多元组结果,而不是遵守多元组章节提到的多态原则。
符号 | 参数 | 名称 | 解释 | 缺省 | 类别 |
---|---|---|---|---|---|
tp | A | 被弹射式 | 被弹射的多元组或表达式 | - | 左值 |
$tA=B
$tA
$t
算符支持存入和读取临时变量,可以用于其它涉及到多元组的环境。
当=
子运算符存在时,将向标号为A
的临时变量存入B
。
无论=
子运算符是否存在,$t
运算符的结果都等于本次运算后标号为A
的临时变量中最终所存储的值。
符号 | 参数 | 名称 | 解释 | 缺省 | 类别 |
---|---|---|---|---|---|
$t |
A | 临时变量标号 | 将操作标号为A 的变量 |
- | 右值 |
= |
B | 被赋值数 | 将把B 进行赋值 |
- | 参数 |
A&B
A|B
&/|
算符可以将A
与B
基于二进制进行按位与/或
运算,当数字仅有0
和1
时与逻辑运算无异。
符号 | 参数 | 名称 | 解释 | 缺省 | 类别 |
---|---|---|---|---|---|
`&/ | ` | A | 左值 | 参与计算的左值 | - |
`&/ | ` | B | 右值 | 参与计算的右值 | - |
A>B
A<B
>/<
算符可以将A
与B
基于数值进行大于/小于
的比较,当左值A
确实大于/小于
右值B
时,则结果为1
,否则为0
。
符号 | 参数 | 名称 | 解释 | 缺省 | 类别 |
---|---|---|---|---|---|
>/< |
A | 左值 | 参与比较的左值 | - | 左值 |
>/< |
B | 右值 | 参与比较的右值 | - | 右值 |
除了上一节所包括的各类扩展运算符,还支持进行初等代数相关的运算。
符号 | 名称 | 备注 |
---|---|---|
+ |
加法 | - |
- |
减法 | - |
* x |
乘法 | - |
/ |
除法 | 只取整数部分 |
^ |
幂 | - |
? |
阶加 | - |
( |
左括号 | 详见运算优先级 |
) |
右括号 | 详见运算优先级 |
当不存在括号(
、)
时,表达式中的初等运算符遵守从左往右,从优先级高到优先级低的运算方式,优先级等级如下:
符号 | 等级 |
---|---|
< |
1 |
> |
1 |
& |
2 |
| |
2 |
+ |
3 |
- |
3 |
* x |
4 |
/ |
4 |
^ |
5 |
sp |
6 |
kl |
6 |
kh |
6 |
dl |
6 |
dh |
6 |
min |
6 |
max |
6 |
lp |
6 |
tp |
6 |
df |
7 |
d |
7 |
a |
7 |
c |
7 |
f |
7 |
b |
7 |
p |
7 |
? |
8 |
$t |
9 |
[ |
- |
] |
- |
, |
- |
( |
- |
) |
- |
df
等同于f
当存在小括号()
的时候,括号内的表达式优先计算。
当存在中括号与逗号的多元组格式[,]
时,多元组会被优先计算并作为值加入后续运算。