查看单个帖子
旧 2013-01-17   #3
ding
月影花雨蝶
级别:19 | 在线时长:954小时 | 升级还需:96小时级别:19 | 在线时长:954小时 | 升级还需:96小时级别:19 | 在线时长:954小时 | 升级还需:96小时级别:19 | 在线时长:954小时 | 升级还需:96小时
 
ding 的头像
 
注册: 02年12月30日
来自: 蝴蝶谷
帖子: 1,330
声望力: 37
声望: 174 ding 渐入佳境ding 渐入佳境
积分:9
精华:10
现金:1899两梁山币
资产:426171两梁山币
致谢数: 0
获感谢文章数:4
获会员感谢数:4
回复: 手把手启发新人制作袁天罡找怪机器人

Locale的示范贴中,还提及了Define Status Bar这个东西。可以在不妨碍其它程式运转的情况下,在状态栏显示你想要注意的东西。例如说:你的妖怪叫什么名字,蹲在哪里。你知道的啦,有时候街上对你流口水自动攻击的怪(简称口水怪)不一定是你的,搞半天或许跟你半毛钱关系也没有,难道你要往上翻页翻半天检查一下到底是不是自己的吗?

Define Status Bar可以帮助你。在状态栏点击右键勾选Define Status Bar或者从上面的Actions下点选Define Status Bar会跳出一个Status Bars的框框。新添加一个,在status line行输入一句你喜欢的提示短句,这样你就不会找错怪了。

例如:本轮灭妖:@guainame (@guaiid) 在@place

然后你会看到左下方,输入指令条的上面显示了怪的名字拼音和地点(图九)。
噢,忘了说,我在变量那里新添加了一个”place”用来代表怪的地点。刚才我使用麻姑来测试,所以现在显示了麻姑。


http://i48.tinypic.com/vryezm.jpg


看到这里,你可能已经不满足于手动输入怪名和地点这么驴的方法。能不能用trigger触发器自动抓呢?当然可以。在Mdcfil的贴子里就给了示范。

原句是这样子的:
#trigger {^{~>李|李}靖对你说道:近有(%x)~((%*)~)在(%x)为非作歹*} {killname=%1;killid=%2;killwhere=%3;#ts 200;#show 灭妖地点:@killwhere} {} {519}

但是,我在变量(variables)中用来代表怪名字和地点的词语跟他不一样。他用“killname”来代表怪的中文名字,而我用的是“guainame”。所以,在抄他的触发句子之前,我把killname换成guainame,killid换成guaiid,killwhere换成place。
好了,现在改成
#trigger {^{~>李|李}靖对你说道:近有(%x)~((%*)~)在(%x)为非作歹*} {guainame=%1; guaiid=%2;place=%3} mieyao

后面那截我就不抄了,是他用来配合其他触发的。为了不容易被误触发,我设了个class(类别),不必要时处于关闭状态。(图十)


http://i46.tinypic.com/14kjk2r.jpg


现在测试一下。先跟李靖要个怪。
李靖对你说道:近有灰狐狸精(Huihuli jing)在盘丝岭为非作歹,速去降服!

下方的状态栏仍然显示麻姑的名字,看来有点不太对了。进入triggers把这个找出来看看,在testing那边将李靖那句话贴在第二行,按test trigger测试。结果显示句子不匹配(Pattern does not match),自然也就无法正常触发。要找出原因,直到它显示匹对为止。(图十一)

http://i46.tinypic.com/5ppxzn.jpg


经过一轮测试,在紧贴在大括号后面的~符号删除,终于匹对上了(图十二)。我并不是说Mdcfil错了,也许是版本的问题或其他原因,别人做的机器自己拿来用时出现问题是很正常的事,修改修改就行了。


http://i49.tinypic.com/2lxtb47.jpg


抓袁天罡的话做触发也是大同小异。

你向袁天罡打听有关『kill』的消息。
袁天罡将手中桃木剑向四方一划,对你说道:
近有猩猩精(Xingxing jing)在开封城出没,为害不小,请速去收服!



这里我们看到,袁的话是分开两行的。我有个比较笨的方法,分开两句触发。


第一个触发:

^你向袁天罡打听有关『kill』的消息。

我对这个触发唯一的指令是,触发后关闭自己并启动第二个触发。

Pattern: ^你向袁天罡打听有关『kill』的消息。
Commands: #t- askguai; #t+ mieyao
Class: askguai

第二个触发:

Pattern: 近有(%x)~((%*)~)在(%x)出没,为害不小,请速去收服!
Commands: #t- mieyao; %1=guainame; %2=guaiid; %3=place
Class: mieyao

同样是触发后通过t- 类别名字(class)关闭自己,避免之后被别人影响而错误触发。
为了方便,我还添加了个热键(aliases):
Name: askyuan
Commands: #t+ askguai; ask yuan about kill

以后我对着袁天罡输入askyuan的时候,就会执行开启第一个触发和问袁要任务这两个命令。两个触发的开启和关闭之间顶多也只是一秒左右的事情。

[更正:呃...我收回做热键的话.第一次测试的时候完全没问题,第二天测试就出毛病了,也许不太适合这么做.你还是自己做个触发关闭class和要任务吧.]

要做完善的机器人,后续的事情还有很多。比如说,你可以在找到怪的同时#stop并follow它。Follow它之后触发开始打它,用什么招数各人都不一样。受伤了,触发自己吸气。打不过了,触发自己逃跑。诸如此类,很多很多......

我机器学得不好,只能说些皮毛,希望能对大家有启发。

此帖于 2013-01-20 03:51 被 ding 编辑.

http://i41.tinypic.com/103enpv.gif
问花花不语,为谁落?为谁开?算春色三分,半随流水,半入尘埃...
ding 当前离线  
回复时引用此帖