应用范围:表达式
当别名指令的应用范围选择为【表达式】时,这条别名会在掷骰时进行解析判断。你需要提供 匹配表达式
以及 解析后的表达式
。
我们可以回忆一下骰子指令的格式。匹配表达式
相当于定义了一个指令名,若用户输入的指令以这个指令名开头,则使用解析后的内容作为骰子表达式,而剩余的部分仍会保留作为骰子描述和临时值。
举例说明:
整体指令 | 指令名 | 指令选项 | 骰子表达式 | 骰子描述 |
---|---|---|---|---|
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
,即投 3
个 d%
取最小的一个。这样就达到了我们的目的。
与指令选项结合使用
这种别名替换的方式仅改变指令名和骰子表达式,并不影响指令选项的位置。因此我们在编写别名规则时无需特别处理指令选项,它会自动得到支持。
以暗骰为例:
整体指令 | 指令名 | 指令选项 | 骰子表达式 | 骰子描述 |
---|---|---|---|---|
rhd100侦查 | r | h | d100 | 侦查 |
rah侦查 (解析别名指令前) | ra | h | - | 侦查 |
rah侦查 (解析别名指令后) | - | h | d100 | 侦查 |
优先级
指令别名的优先级低于自定义回复和特殊指令。如果指令别名的匹配条件与自定义回复和特殊指令相同,那么指令别名将不会被触发。如果你希望对自定义回复和特殊指令也起别名,你可以将应用范围设为【整条指令】。
若同一个用户输入匹配到多条指令别名,则以排序最上方的一条为准。
指令别名的排序
注意:一条指令别名是可以解析为另一条指令别名的。因此如果指令别名排序不当,可能会出现死循环的现象。
例如 ww 指令有两条匹配规则 wwX
和 wwXaY
,其中 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 会被无视!
如有这样的需求,使用应用范围:整条指令会更简单些。
② 匹配表达式
会作为正则表达式解析。因此当它涉及到一些特殊字符时,需要在前面加个反斜杠 \
进行转义。