ddid 发表于 2010-5-4 17:03:25

[MUSH小技巧] 关于触发的扳机

在MUSH中,所有的触发不是在文字匹配后立即就触发执行的,而是在文字匹配后,并且整行结束换到新行时,触发才被执行。

举个小例子:
假设已经做好一个Trigger匹配文字:“你将剩下的烤鸡腿吃得干干净净。”,执行 "drop bone"
在MUD中输入如下命令,测试触发的反应:
.Simulate("你将剩下的烤鸡腿吃得干干净净。")
.Simulate("你将剩下的烤鸡腿吃得干干净净。\n")你会发现,显示第一句的时候,触发不会被执行,但按下回车后触发就会被执行了;而第二句的时候触发会立即被执行。

这里\n也就是“回车”,就是触发的扳机。

今天看到hba的帖子,问到一个问题:
一些大段输出的文字,MUD中需要做翻屏处理,如:

== 未完继续 46% == (q 离开,b 前一页,其他继续下一页)

但此时行末由于没有\n(也就是回车),该触发不能被执行,去Gammon的网站上查了一下,发现Gammon原来早有解决办法——插件。

以下代码是我根据Gammon论坛上的帖子修改的(原帖地址:http://www.gammon.com.au/forum/bbshowpost.php?bbsubject_id=8583):function OnPluginPacketReceived (s)
return (string.gsub (s, "未完继续.*$", "%1\n"))
end -- function OnPluginPacketReceived其核心是OnPluginPacketReceived () 可以在MUSH处理接收到的包之前,对该包进行处理。

有了这个函数,就可以在接收到类似“== 未完继续 46% == (q 离开,b 前一页,其他继续下一页)”的包后,自动为其增加一个“回车”做为触发的扳机了。

对于其它的类似情况,可以把MUSH的“Debug Packets”模式打开,抓取其原始包后,分析一下,再在以上代码中把“未完继续.*$”修改一下即可。



附件是完整的针对“== 未完继续 46% == (q 离开,b 前一页,其他继续下一页)”自动增加触发扳机的插件。


不过这个插件仍然有个小问题,就是当输出文字过多,SERVER发过来的包会被自动截断,如果正好截断的位置是“未完继续”几个字,换行就不会出现了。

[ 本帖最后由 ddid 于 2010-5-4 05:05 PM 编辑 ]

hba 发表于 2010-5-4 17:24:53

第 13 行: Plugin requires MUSHclient version 4.51 or above (problem in this file)
额,mushclient要升级了。。。

zhaoxing 发表于 2010-5-4 17:27:45

yct23 进来学习

vase 发表于 2010-5-4 19:04:11

原帖由 hba 于 2010-5-4 05:24 PM 发表 http://pkuxkx.com/forum/images/common/back.gif
第 13 行: Plugin requires MUSHclient version 4.51 or above (problem in this file)
额,mushclient要升级了。。。

直接把

   requires="4.51"

这行改成你的版本号就行了ttk_03

maper 发表于 2010-5-4 19:25:18

在设置里面的appearance----output里面勾选“convert iac eor/ga to new line”
这样可以解决“== 未完继续 46% == (q 离开,b 前一页,其他继续下一页)”的问题。
经测试下面这个触发一切正常。
<triggers>
<trigger
   enabled="y"
   match=".+未完继续.+"
   regexp="y"
   sequence="100"
>
<send>a</send>
</trigger>
</triggers>

hba 发表于 2010-5-4 19:53:18

原帖由 vase 于 2010-5-4 07:04 PM 发表 http://www.pkuxkx.com/forum/images/common/back.gif


直接把



这行改成你的版本号就行了ttk_03

。。。刚安装了451了ttk_13

ddid 发表于 2010-5-4 19:56:15

原帖由 hba 于 2010-5-4 19:53 发表 http://pkuxkx.com/forum/images/common/back.gif


。。。刚安装了451了ttk_13

嘿嘿,阴谋得逞了,4.51有画地图的模块,好好研究一下吧……

hba 发表于 2010-5-4 19:59:27

原帖由 maper 于 2010-5-4 07:25 PM 发表 http://www.pkuxkx.com/forum/images/common/back.gif
在设置里面的appearance----output里面勾选“convert iac eor/ga to new line”
这样可以解决“== 未完继续 46% == (q 离开,b 前一页,其他继续下一页)”的问题。
经测试下面这个触发一切正常。


a



额,昨晚试了半天,咋没留意这个选项,确实没问题了。ttk_01
帝德的也行,只是还有很小几率断句,当然仅限于“== 未完继续”的语句,但这个思路很有启发性。
再次鸣谢三位老师。

lzkd 发表于 2010-5-4 19:59:52

原帖由 hba 于 2010-5-4 07:53 PM 发表 http://www.pkuxkx.com/forum/images/common/back.gif


。。。刚安装了451了ttk_13

太新的东西不一定好用呀......

hba 发表于 2010-5-4 20:02:08

原帖由 ddid 于 2010-5-4 07:56 PM 发表 http://www.pkuxkx.com/forum/images/common/back.gif


嘿嘿,阴谋得逞了,4.51有画地图的模块,好好研究一下吧……

哦哦,研究研究。不过我英文水平仅限于代码编程级别,而看文章就有点吃力了,还望诸位老师多多翻译一些精彩文章顺便讲讲心得。
页: [1] 2
查看完整版本: [MUSH小技巧] 关于触发的扳机