protectqiqi 发表于 2024-4-1 23:53:08

七七的Mudlet入门 (摆烂式不定期更新)

本帖最后由 protectqiqi 于 2024-4-2 01:03 AM 编辑

呜呜呜,今天在游戏里犯了一个又愚蠢又可耻的错误,甚至都不敢说这个错误是什么,到现在都睡不着觉。刚好又碰上有人加了我的QQ问Mudlet怎么用。为了赎罪,我就把自己学会的Mudlet功能一点点写出来吧。因为我自己也只学了一点皮毛,没法写得全面,所以就从最自己最常用的几个功能写起吧。
首先就是最常用的Trigger,Trigger的作用是在收到指定的信息后输入预先安排好的命令。比如在下图里设置的这个Trigger,会在酒袋已经被喝完了的时候,自动drop jiudai。里面的几个要素我都用数字标出来了。1. 点击这个按钮打开Trigger的编辑界面。2. 给Trigger一个名字,可以是任何名字,这个名字只是帮助你记忆的,不起任何实际的作用。之后这个名字会在左侧的菜单里出现。当以后你设置的Trigger越来越多的时候,最好一看到起的名字就能想起来这个Trigger是做什么的。3. 触发命令的语句,当你在游戏里收到这条语句时,对应的命令就会被触发。这里的触发语句就是“牛皮酒袋已经被喝得一滴也不剩了。”。4. 触发语句匹配的方式,这里是我觉得Mudlet比Zmud功能强的地方,也是我当初选择改用Mudlet的原因之一。有多种匹配方式可以选择,这里我选的是exact match,意思是只有当游戏里面某一行的文字和3里面的语句完全一样时(连标点符号和空格都得一样),才会触发命令。另外几个匹配方式以后再讲。5. 触发的命令,这个命令和你在游戏里的输入是完全一样的。这里就是drop jiudai6. 对触发的语句做红黄色的高亮标识。这个功能能帮你在游戏里认出哪个语句触发了你的命令。比如在设置窗口的下面你看到“你一觉醒来,精神抖擞地活动了几下手脚。”这句话被标识了红黄色高亮,就是因为我对这句话也做了个Trigger。如果你不喜欢红黄色,也可以在这里改成其他颜色的格式。7. 更高级的Lua功能,这个也以后再说。

dddr 发表于 2024-4-1 23:55:53

前排留名!yct36

tsya 发表于 2024-4-1 23:57:01

支持!

protectqiqi 发表于 2024-4-2 00:09:43

本帖最后由 protectqiqi 于 2024-4-2 01:00 AM 编辑

然后讲一下Trigger里几种不同匹配模式。匹配模式可以在Trigger编辑界面里点击右边的下拉框来选择。匹配模式有很多,但我现在只用到过前面4种。
1. Substring: 只要游戏里的某一行包含了触发语句,就会触发命令。比如,如果你的触发语句是“内力”,那么不管是内力增加了,还是内力用完了,还有有个人的名字叫内力,都会触发对应的命令。这个匹配模式尽量少用,因为很容易误触发,别人只要在chat里面说话带上了你的触发语句,你就会被触发。一般我只有在偷懒的时候才用。
2. Perl regex: 这个是功能最强大的匹配,也是我用得最多的,但是要去学会Perl正则表达式才知道怎么用。我是学了好几天才会的,放以后再讲吧。
3. Start of line: 只有当你的匹配语句在某一个行的一开始出现时,才会触发对应的命令。这个模式很好地解决了上面说的别人在chat里面干扰你的情况,因为chat的时候这一行的开头是【闲聊】,一般不会是你的触发语句。这个模式也是我很常用的。
4. Exact match: 必须是在某一行完全一模一样的匹配,这在上一篇已经讲过了,就不多啰嗦了。


wxliu 发表于 2024-4-2 00:11:12

顶一下顶一下,七七姐姐好棒!ttk_18

peiqian 发表于 2024-4-2 00:11:58

wxliu 发表于 2024-4-2 12:11 AM
顶一下顶一下,七七姐姐好棒!

七七都是你姨字辈了

protectqiqi 发表于 2024-4-2 00:48:10

本帖最后由 protectqiqi 于 2024-4-2 04:49 PM 编辑

Perl正则表达式之一 元字符
Perl正则表达式比较复杂,可能要分几篇来讲。首先要说的是,在Mudlet的Trigger里面,不是游戏里的所有字符都能被认出来的。比如在战斗中被打伤的时候,游戏里的提示是:( 你看起来已经力不从心了。)
这句话里面的两个括号()在Mudlet里是认不出来的,如果你直接用这句话做匹配是不会被触发的。像这样认不出来的字符在Perl正则表达式里叫元字符,元字符包含以下这些(请务必牢记,避免用在触发语句中):{}[]()^$|*+?\

那么怎么解决这个问题呢,一种办法当然是直接不输入元字符,比如把“( 你看起来已经力不从心了。)”变成“你看起来已经力不从心了。”。但这样就需要把原来的匹配模式改成substring,会引发误触发,而且有时候这些元字符又是必要的。

最根本的解决方法其实是在这些元字符前面加个反斜杠\,并把匹配方式改成perl regex,这样Mudlet就又能认出它们了。比如比如把“( 你看起来已经力不从心了。)”变成“\( 你看起来已经力不从心了。\)”,别忘了还要把匹配方式改成perl regex。

改好之后还要注意一点,这时候只要你的一行文字里出现了“( 你看起来已经力不从心了。)”,就会被触发,相当于是substring的匹配。别人如果”chat ( 你看起来已经力不从心了。)”就会干扰到你。Perl里的另一个符号^(shift+6)则解决了这个问题。把^加在一个匹配语句之前,就是只有当这句话出现在一行的起始位置时,才会被匹配。等同于上一篇中提到的start of line。所以上面这个例子最完美的Perl匹配是:^\( 你看起来已经力不从心了。\)





ciss 发表于 2024-4-2 01:57:55

坚持下去 以后你就是mudlet教的教主

tsya 发表于 2024-4-2 01:58:22

先拜个码头,等着教主招人

ambi 发表于 2024-4-2 07:02:21

只有我一个人关心那个错误是什么吗
页: [1] 2 3 4
查看完整版本: 七七的Mudlet入门 (摆烂式不定期更新)