简介
触发器可以根据接收到的不同 MUD 信息做出预先定义的动作。
如果要根据你输入的命令做出预定义的动作则必须使用别名。
我可以用触发器做什么
-
用你希望的颜色突出显示某些行或单词(例如你的角色名字)
-
用你希望的样式(粗体,斜体,下划线)突出显示某些行或单词
-
隐藏某些你不想看见的行
-
使用记录文件的时候忽略某些行
-
当某些行出现的时候播放一段音乐
-
当某些行出现的时候调用一个脚本函数
-
当某些行出现的时候自动发送预先定义的回应命令(例如当你受到攻击的时候自动装备武器“wield sword”)
怎样才能匹配特定的文字
触发器既可以匹配某些文字,也可以匹配文字的颜色。
MUSHclient 提供了以下两种匹配方式:
- 普通匹配,可以使用通配符
- 正则表达式
普通匹配
使用普通匹配的触发器(没有选中“正则表达式”选项)仅仅照着匹配框中输入的文字逐字比较接收到的信息。如果需要的话,还可以使用代替任何字符的通配符(*)。一个触发器中最多可以使用 999 个通配符。通配符通常用于代替一行中会变化的信息。
例如要匹配所有人说话的信息,可以把他们的名字和说的内容用通配符代替:
【闲聊】*:*
由于星号(*)被作为通配符使用,所以你不能匹配星号字符,这是普通匹配的一个局限。当需要匹配一个星号时,你必须使用正则表达式来实现,并且需要使用转义字符转移它(详见下面的说明)。
例如,要匹配以星号开始的一行信息(使用正则表达式):
^\*
正则表达式
正则表达式使用起来比较复杂,但是可以更灵活的匹配信息行。
下面是正则表达式中几个比较简单的规则:
- ^ - 从一行的开始进行匹配比较
- $ - 匹配到一行的结尾
- . - 匹配任何单个字符
- * - 匹配前面的子表达式零次或多次(例如,“.*”可以匹配任何字符串)
- + - 匹配前面的子表达式一次或多次(例如,“be+d”能匹配“bed”、“beed”和“beeed”等等)
触发器脚本
触发器的发送框中不但可以发送普通的 MUD 命令,还可以执行脚本命令,你只要把发送框发送的对象选为“脚本解析器”就可以了。
如果脚本很复杂,在发送框中编写会很吃力。这时你可以把这个脚本作为一个函数写在游戏的脚本文件中(在脚本配置对话框中设置),然后在触发器设置对话框的脚本框中填入这个脚本名称就可以调用它了。
触发器调用的脚本函数必须有以下三个(Lua 中有四个)参数:
- 触发器名称
- 触发器匹配的行
- 包含前十个通配符内容的数组(Lua 中包含了所有通配符)
- 包含匹配行中所有样式的表(这个参数仅在 Lua 中有效)
下面是一个 VBscript 脚本函数的示例:
sub MyTrigger (name, line, wildcards) world.Note "Trigger " & name & " matched." world.Note "Wildcard 1 was" & wildcards (1) end sub
wildcard 10 包含了整个被匹配的文本,当使用正则表达式的时候,它不一定和匹配行一样。对于其它通配符(例如,命名的通配符,超过 9 的通配符),你可以用 GetTriggerWildcard 函数来获取。
在 Lua 脚本中,wildcard 10 包含第十个通配符的内容,wildcard 11 包含了第十一个通配符的内容......wildcards 表中储存了触发器中所有通配符的内容,同时还包含了整个被匹配的行(关键字为 0)和指定了名称的通配符(关键字为通配符的名称)。
Lua 脚本中,触发器调用的函数还有第四个参数(可选),它是一个包含触发行中所有样式的表。表中每一项(关键字从 1 开始)也是一个表,包含了每种样式的详细信息。它由以下四项组成:
- textcolour - 文字的 RGB 颜色值
- backcolour - 背景色的 RGB 颜色值
- text - 文字内容
- style - 样式标志(由三项的“或”值组成:粗体=1,下划线=2,斜体=4)
通配符
触发器的一个强大功能就是可以使用通配符。通配符主要用于在你想匹配的文本行中代替经常会变化的文字。这样就可以用一个触发器匹配多行相似的文本。
例如:
看起来*想杀死你!
在这个触发器中,星号会代替想杀死你的人。
在发送文本框中使用通配符代替的内容
要在别名的发送文本框中使用通配符代替的内容,可以用 %1 调用第一个通配符代替的内容,%2 调用第二个通配符代替的内容,后面的依次类推。例如:
kick %1
%0 是一个特殊的通配符,它代表整个被匹配的行。对于大于 9 的通配符,其访问方式稍有不同。语法如下:
kick %<22>
尖括号中的数字可以是 0 - 999 之间的任何一个数字。
另一种访问的方式是使用正则表达式给这个通配符指定一个名称,例如:
^看起来(?P<target>.*)想杀死你!$
通配符的名称为“target”。然后你可以这样使用它:
kick %<target>