|
编写过机器人的人都有这样经历,先做个打坐机器人,然后增加一点功能,可以自己练功,然后在增加一点功能可以做job,在增加一点功能可以领悟技能。机器人功能越来越强,trigger语句越来越多。我以前有用zmud写过一个机器人,3000行触发器,触发器增多以后机器人可靠性越来越低,增加一个新功能需要修改很多地方。这个机器人最后给我废弃了,因为程序僵化,一修改会引起很多bug。
我最近用mushclient 编写机器人
mushclient 可以使用lua编写机器人,写出程序很简洁。
mud 机器人 抽象一下可以分成两部分
1 寻路 具体点讲就是走到指定房间
2 动作 到了目标房间做一些具体动作,比如ask npc,buy,fight,kill,等等和任务相关动作。完成这些动作以后,又重复1~2步骤
寻路原来zmud中用的最多的是路径alias方式。
这种方式非常不好,
1 比如都是巡城job,如果师傅门派不同就需要修改路径alias。基本上每个机器人拿到手都需要修改路径alias.
2 如果移动失败,给block 那么机器人基本上只有发呆了。
为此 我开发一个GPS插件,后台有地图数据库支持
提供 地图定位 路径搜索
只要告诉机器人flyto 某个房间号 就可以了。
比如要去大理西门 做xc job
只要你告诉机器人目的房间号就好。不需要修改复杂的路径alias
在稍微修改下就可以做出适合所有门派通用机器人。
机器人功能应该容易扩展的和修改的
1 机器人的功能应该是模块化的
模块化有几个好处
1 流程可以灵活修改,比如你打坐->练武功->睡觉。而有人喜欢 打坐->练功->吃药->练功->睡觉
只要修改下配置文件就可以实现,不用象过去修改整个机器人
2 模块可以替换,比如 送信 job 中 ask job->送信->kill npc->送到 基本流程都是相同的,但是不同门派 kill npc环节会有点不同。
通过加载不同门派模块,来实现,不用修改整个机器人。
lua 语言提供了函数指针功能可以比较方便的实现这个功能。
--浇花类
jiaohua={
start=jiaohua_start,
getjobAgain=jiaohua_getjobAgain,
getpiao=jiaohua_getpiao,
qujiaoshui=jiaohua_qujiaoshui,
jiaoshui=jiaohua_jiaoshui,
givepiao=jiaohua_givepiao,
taskok=jiaohua_taskok,
beforefinalize=nil,--回调函数
finalize=jiaohua_finalize,
Close=Close,
}
--浇花结束开始学习
jiaohua.beforefinalize=learn.learnMaster
通过一个回调函数来实现模块与模块间衔接 |
|