hellfire 发表于 2024-4-11 15:57:40

^││[主]\s*│破阵\(\d*\)\s\d*\.\d\%\s* │仍需(\w+)才能接到下个任务$   这是我写的,不好用

protectqiqi 发表于 2024-4-11 16:40:12

hellfire 发表于 2024-4-11 03:57 PM
^││[主]\s*│破阵\(\d*\)\s\d*\.\d\%\s* │仍需(\w+)才能接到下个任务$   这是我写的,不好用 ...

你元字符那一段要好好看看,错太多了。

该加\的元字符你没加: [ ]
不该加的你倒加了: . %
最后的那个句号你也漏了

protectqiqi 发表于 2024-4-11 17:22:12

本帖最后由 protectqiqi 于 2024-4-11 05:24 PM 编辑

Perl正则表达式之四 自定义字符集 (Perl的最后一部分)以及 如何测试Trigger


有些时候我们要匹配的内容是固定的某几个字符,而不是全部的数字或者字母或者中文。这时候用自定义字符集就会更好,自定义字符集就是在[]里面把可能出现的字符都列出来。

举个例子,北侠里的宝石是固定的地山水风雷火泽天这8个等级,以及☆★◎这3种类型。如果我只想取 [地山水] 这3个等级的宝石,和 [☆★]两种类型宝石,就可以用这两个自定义字符集。

下面这个匹配式就会匹配到袋子里的[地山水]宝石和[☆★]宝石,然后把对应宝石的代码输出到gem_code,宝石的数量输出到gem_amount。(也许又被屏蔽了,看附件的图。)
\│\[(?<gem_code>\w+)\][地山水][☆★][^A-Za-z0-9_. ]{2,3}\*(?<gem_amount>\d+)[\s│]这里面还用到一个自定义字符集[\s│],这是因为宝石袋里的宝石数量后面有时候是 空格,有时候是 │。


然后可以用下面这段Lua把符合条件的宝石拿出来了。
if tonumber(matches.gem_amount)>10 then
send("do 10 pickgem " ..tostring(matches.gem_code))
else
send("do " ..tostring(matches.gem_amount).. " pickgem " ..tostring(matches.gem_code))
end

要注意匹配到的内容如果会当作数字进行计算,就要把它放到tonumber()里面。如果是用send输入到Mud里面,就要把它放到tostring()里面。




最后,在Mudlet里测试Trigger可以输入:
^echo 测试内容来进行测试,而不需要特地去游戏里引发对应的场景。比如可以用:

^echo │地★木灵*11│来测试刚才那个Trigger是不是能用。







protectqiqi 发表于 2024-4-16 12:04:02

突然发现漏讲了一条关于自定义字符集的:

用 [ ] 包起来的自定义字符集只适用于单字符,但有时候会需要自定义多个字符组成的词组集。比如 神龙骨/凤凰羽/玄武甲,这时候如果用下面这个字符集是不行的[神龙骨凤凰羽玄武甲]
因为它只会匹配 [] 里的任意一个字,而不会识别 神龙骨 这三个字是不是连在一起出现的。自定义的词组集要换成下面这种格式
(神龙骨|凤凰羽|玄武甲)

这样才会匹配连在一起出现的神龙骨/凤凰羽/玄武甲。

好了,这次真的是Perl正则的最后一节内容了。

laughter 发表于 2024-4-16 15:03:41

protectqiqi 发表于 2024-4-2 12:48 AM
Perl正则表达式之一 元字符
Perl正则表达式比较复杂,可能要分几篇来讲。首先要说的是,在Mudlet的Trigger ...

总感觉这句话有点奇怪 {:7_279:}

protectqiqi 发表于 2024-4-16 16:41:48

回过头来讲trigger吧。

像韩世忠、纪晓芙这种任务,NPC给任务信息时都是用的公开频道。很容易别人接了个任务,你的机器人看到了他的任务信息,然后就发动了了,解决这个问题就要用到多行触发。
这里我用长江坐船来举例子。坐船的时候一般是你先ask shao gong about jiang,然后船家会说一两句废话,最后提示一叶扁舟缓缓地驶了过来,这时候你就可以上船了。
如果只以“一叶扁舟缓缓地驶了过来”作为触发语句,那有时候站在江边别人叫的船你也会坐上去。以前最惨的一次我睡觉的时候把号放在江边,跟着别人来回坐船,醒来时候交通卡里的钱就全花完了。

在Mudlet里面,只要把多行的触发信息分别写在trigger里面,然后在下面的AND / Multi-line这里打勾,最后填写一下行数。行数是指最后一行触发语句和第一行触发语句之间的间隔。
我只想坐自己叫的船,所以我的第一行应该是“你向.+打听有关『jiang』的消息。”。然后在2行以内出现的“一叶扁舟缓缓地驶了过来”就是我叫来的船,超过2行的就可能是别人叫的船。所以按照下图设置就好了。于是就能看到别人叫的船我是不会有动作的,只有自己叫的才会触发。



同样的办法也能解决韩世忠、纪晓芙的任务触发问题。

jarlyyn 发表于 2024-4-16 16:43:10

protectqiqi 发表于 2024-4-16 04:41 PM
回过头来讲trigger吧。

像韩世忠、纪晓芙这种任务,NPC给任务信息时都是用的公开频道。很容易别人接了个任 ...

做任务多了你就知道,多行触发不好用。

protectqiqi 发表于 2024-4-16 16:45:54

jarlyyn 发表于 2024-4-16 04:43 PM
做任务多了你就知道,多行触发不好用。
有时候会被别人chat里发个大表情给干扰。碰到这种情况把间隔的行数设置得大一些就好啦,或者关掉聊天频道。

jarlyyn 发表于 2024-4-16 16:50:55

protectqiqi 发表于 2024-4-16 04:45 PM
有时候会被别人chat里发个大表情给干扰。碰到这种情况把间隔的行数设置得大一些就好啦,或者关掉聊天频道 ...

不是,是任务npc回答有各种情况,行数不定,结尾不定。
页: 1 2 3 [4]
查看完整版本: 七七的Mudlet入门 (摆烂式不定期更新)