北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
楼主: protectqiqi

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

[复制链接]
发表于 2024-4-11 15:57:40 | 显示全部楼层
^│[14]│[主]\s*│破阵\(\d*\)\s\d*\.\d\%\s* │仍需(\w+)才能接到下个任务$   这是我写的,不好用
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2024-4-11 16:40:12 | 显示全部楼层
hellfire 发表于 2024-4-11 03:57 PM
^│[14]│[主]\s*│破阵\(\d*\)\s\d*\.\d\%\s* │仍需(\w+)才能接到下个任务$   这是我写的,不好用 ...

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

该加\的元字符你没加: [ ]
不该加的你倒加了: . %
最后的那个句号你也漏了
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2024-4-11 17:22:12 | 显示全部楼层
本帖最后由 protectqiqi 于 2024-4-11 05:24 PM 编辑

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


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

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

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


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


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




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

  1. ^echo │[M1B]地★木灵*11  │
复制代码
来测试刚才那个Trigger是不是能用。







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2024-4-16 12:04:02 | 显示全部楼层
突然发现漏讲了一条关于自定义字符集的:

用 [ ] 包起来的自定义字符集只适用于单字符,但有时候会需要自定义多个字符组成的词组集。比如 神龙骨/凤凰羽/玄武甲,这时候如果用下面这个字符集是不行的
  1. [神龙骨凤凰羽玄武甲]
复制代码

因为它只会匹配 [] 里的任意一个字,而不会识别 神龙骨 这三个字是不是连在一起出现的。自定义的词组集要换成下面这种格式
  1. (神龙骨|凤凰羽|玄武甲)
复制代码


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

好了,这次真的是Perl正则的最后一节内容了。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2024-4-16 15:03:41 | 显示全部楼层
protectqiqi 发表于 2024-4-2 12:48 AM
Perl正则表达式之一 元字符
Perl正则表达式比较复杂,可能要分几篇来讲。首先要说的是,在Mudlet的Trigger ...

总感觉这句话有点奇怪
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2024-4-16 16:41:48 | 显示全部楼层
回过头来讲trigger吧。

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

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



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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2024-4-16 16:43:10 | 显示全部楼层
protectqiqi 发表于 2024-4-16 04:41 PM
回过头来讲trigger吧。

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

做任务多了你就知道,多行触发不好用。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2024-4-16 16:45:54 | 显示全部楼层
jarlyyn 发表于 2024-4-16 04:43 PM
做任务多了你就知道,多行触发不好用。

有时候会被别人chat里发个大表情给干扰。碰到这种情况把间隔的行数设置得大一些就好啦,或者关掉聊天频道。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2024-4-16 16:50:55 | 显示全部楼层
protectqiqi 发表于 2024-4-16 04:45 PM
有时候会被别人chat里发个大表情给干扰。碰到这种情况把间隔的行数设置得大一些就好啦,或者关掉聊天频道 ...

不是,是任务npc回答有各种情况,行数不定,结尾不定。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-11-24 05:49 AM , Processed in 0.009691 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表