应用范围:表达式

当别名指令的应用范围选择为【表达式】时,这条别名会在掷骰时进行解析判断。你需要提供 匹配表达式 以及 解析后的表达式

我们可以回忆一下骰子指令的格式匹配表达式 相当于定义了一个指令名,若用户输入的指令以这个指令名开头,则使用解析后的内容作为骰子表达式,而剩余的部分仍会保留作为骰子描述临时值

举例说明:

整体指令指令名指令选项骰子表达式骰子描述
rd% 侦查r-d%侦查
ra侦查(解析别名指令前)ra--侦查
ra侦查(解析别名指令后)--d%侦查

指令中的变量

指令中含有数字变量是很常见的,例如 rb 指令既可直接使用,代表 1 个奖励骰;又可以使用 rb2 代表 2 个奖励骰。

为了匹配这种情况,我们可以将匹配指令设为 rb{{X}}。其中 X 代表变量,也可替换为其他字母。若省略,则 X 默认为 1

这样用户输入 .rb.rb2 均能匹配这条规则,且 .rb 等同于 .rb1

我们也可以将匹配指令设为 rb{{X=10}},这样 X 的默认值将变为 10。即 .rb 等同于 .rb10

我们可以把变量放入解析后的指令中,且支持变量的四则运算。例如设置 rb{{X}} 解析为 {{X+1}}d%kl1。这样 rb2 就会解析为 3d%kl1,即投 3d% 取最小的一个。这样就达到了我们的目的。

与指令选项结合使用

这种别名替换的方式仅改变指令名和骰子表达式,并不影响指令选项的位置。因此我们在编写别名规则时无需特别处理指令选项,它会自动得到支持。

以暗骰为例:

整体指令指令名指令选项骰子表达式骰子描述
rhd100侦查rhd100侦查
rah侦查(解析别名指令前)rah-侦查
rah侦查(解析别名指令后)-hd100侦查

优先级

指令别名的优先级低于自定义回复特殊指令。如果指令别名的匹配条件与自定义回复和特殊指令相同,那么指令别名将不会被触发。如果你希望对自定义回复和特殊指令也起别名,你可以将应用范围设为【整条指令】

若同一个用户输入匹配到多条指令别名,则以排序最上方的一条为准。

指令别名的排序

注意:一条指令别名是可以解析为另一条指令别名的。因此如果指令别名排序不当,可能会出现死循环的现象。

例如 ww 指令有两条匹配规则 wwXwwXaY,其中 wwX 解析为 wwXa10(即省略 Y 值时默认等于 10)。

若用户输入指令 .ww4。如果 wwXaY 排序在 wwX 之上,那么 ww4 第一次解析时,匹配到 wwX 规则,解析为 ww4a10;第二次解析时,匹配到 wwXaY 规则,解析为 4d10!>=10>=8。这是正确的。

但如果 wwX 排序在 wwXaY 之上,那么 ww4 第一次解析时,匹配到 wwX 规则,解析为 ww4a10;第二次解析时,由于 ww4a10 同样可以匹配 wwX 规则,它又会被解析为 ww4a10a10……无限循环下去。

因此当存在这种情况时,请特别注意指令别名的排序。

常见问题

① 由于这种别名替换的方式是针对骰子表达式做整体替换,因此不能将其作为骰子表达式的一部分,对它做加减值等。

例如:

.ra+5
Maca 🎲 d%: [30] = 30 // 由于 ra 别名会把 d% 作为整体表达式,后面的 +5 会被无视!

如有这样的需求,使用应用范围:整条指令会更简单些。

匹配表达式 会作为正则表达式解析。因此当它涉及到一些特殊字符时,需要在前面加个反斜杠 \ 进行转义open in new window

Last Updated: