北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 9837|回复: 21

zmud严格行首无法触发的解决办法探讨

[复制链接]
发表于 2011-10-14 15:20:01 | 显示全部楼层 |阅读模式
大家都知道,触发很容易被别人的信息误触发而导致机器人运行混乱,所以严格行首的意义不言而喻。一般来说,在zmud里,我们会用 ^?? 开头来进行严格行首触发,但是有时候会碰到指令堆积使得行首以这种形式开头:
> > 你的内力不够。


似乎一般都是会多出一个 > ,3个几3个以上的情形我还没有观察到。那么对于简单的机器人,比如纯打坐和吐纳的机器人,我们可以用tick timer来解决,设置一个时间长短合理的timer,在触发被匹配后重置其时间,这样如果碰到机器人因为乱码及指令堆积造成无法匹配的情况,可以在发呆较短的时间后重新运行,但是对于复杂一些的机器人,tick timer的适用性会大大降低,尤其是对于462,#alarm命令功能似乎偏弱,没有办法有效防止发呆。

有鉴于此,我刚才想到一个解决办法,就是对于出现两个 > 的句子进行无差别匹配,一旦出现这种情况就抓取后面的语句,然后用 #show 命令再次展示出来,这样就可以匹配严格行首触发了,具体命令是:

#TRIGGER {^>?>?(*)} {#show %1} {} 519

我想请大家探讨一下,这样触发的可行性,可能碰到的问题。这样触发的局限性也很明显,超过2个 > 的情形出现时就又无法匹配了,虽然我现在没有观察到,但不等于这样的事情不会发生,笨一点的解决办法是对3个或者更多的情形单独定义触发。另外对于多行触发,这个办法也同样行不通。如果哪位高人又更好地解决办法,还请不吝赐教!

北大侠客行MUD,中国最好的MUD
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-10-14 16:21:59 | 显示全部楼层
超过两个> 应该也可以匹配的,会删掉前两个> 然后把剩下的show出来,如果还剩下两个或者以上的> ,会继续触发(#show的内容是可以被触发的)
不过这样最后就会有两种情况,剩下一个或者没有> ,触发不好写
建议一次只删掉一个> ,这样写
#TRIGGER {^>?>?(*)} {#show > %1} {} 519
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-10-14 16:26:21 | 显示全部楼层
#TRIGGER {^>?>?(*)} {#show > %1} {} 519
测试成功,最后只会剩下一个> ,很实用,我加到我的机器人里了
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-10-14 16:51:46 | 显示全部楼层
调节好批量执行指令数量,这种情况基本可以避免。
怕不怕那种不折行的描述。比如武当新手的诵经。
另外zmud6以后好像>都可以自动折行的吧,那样是不是所有触发都可以^*来置顶?

[ 本帖最后由 beastly 于 2011-10-14 04:58 PM 编辑 ]
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2011-10-14 17:10:51 | 显示全部楼层
原帖由 zgbl 于 2011-10-14 04:26 PM 发表
#TRIGGER {^>?>?(*)} {#show > %1} {} 519
测试成功,最后只会剩下一个> ,很实用,我加到我的机器人里了



嗯,当时没测试完全,的确这么写超过两个以上的 > 也可以触发,但是这么写还是有问题:如果是超过两个 > 的话,多余的 > 会被写到 %1 里面,那么如果 #show > %1的,出来的仍然会是大于两个或两个以上的 > ,还是会产生二次匹配的问题。

我想解决办法有两个,一是把匹配改成 #TRIGGER {^>%s[> ](*)} {#show %1} {} 519 ,这样超过一个 > 的语句会被触发重写,而一个和没有的则不会,而且 > 不会被带入新触发的语句


另外一个办法是直接将行首严格触发的语句改成 ^ 开头,省略后面两个??,然后再加一个触发: #TRIGGER {^[> ](*)} {#show %1} {} 519,那么所有以 > 开头的语句会被以不带 > 的形式重写。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2011-10-14 17:16:04 | 显示全部楼层
原帖由 beastly 于 2011-10-14 04:51 PM 发表
调节好批量执行指令数量,这种情况基本可以避免。
怕不怕那种不折行的描述。比如武当新手的诵经。
另外zmud6以后好像>都可以自动折行的吧,那样是不是所有触发都可以^*来置顶?



怎么调节批量执行指令数量呀?

看了下zmud721,的确是不会出现那样的情况
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-10-14 17:34:34 | 显示全部楼层
刚测试了一个,批量执行30个指令是极限。再多就会出现那种无效指令堆积。也就是说要尽量避免指令大量高速执行。控制好机器人的节奏就好了。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-10-14 17:48:29 | 显示全部楼层
原帖由 nxir 于 2011-10-14 17:10 发表



嗯,当时没测试完全,的确这么写超过两个以上的 > 也可以触发,但是这么写还是有问题:如果是超过两个 > 的话,多余的 > 会被写到 %1 里面,那么如果 #show > %1的,出来的仍然会是大于两个或两个以上的 > ,还 ...

二次匹配也没事,那就继续触发删除> ,最后直到只剩一个> 然后匹配正常触发,就是会多刷几行而已
#TRIGGER {^>%s[> ](*)} {#show %1} {} 519
这个东西462好像不适用。。。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2011-10-14 18:08:03 | 显示全部楼层
原帖由 zgbl 于 2011-10-14 05:48 PM 发表

二次匹配也没事,那就继续触发删除> ,最后直到只剩一个> 然后匹配正常触发,就是会多刷几行而已
#TRIGGER {^>%s[> ](*)} {#show %1} {} 519
这个东西462好像不适用。。。


我是462啊,我这里测试可以的,只有超过1个以上的 > 才会被触发,只有一个是不会的
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-10-14 19:03:27 | 显示全部楼层
擦,不勒个是吧。。。我试试看
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-1 05:26 PM , Processed in 0.010442 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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