目录

新人机器人指南

作者:武当小道诸葛不亮(Zgbl)

前言

本指南原帖为新人机器人指南,本贴保证持续更新

推荐一个专业性很强的zmud帮助,面向7.21的Zmud教程 for Wiki

另一个,糖果(sghjjj)出品的三级加精的大作Zmud机器人制作--基础知识,技巧以及实例讲解

最全面的zmud帮助,请在zmud里输入#help,还可以具体查询,比如#help if

这个是Zmud中的所有函数和变量


咳咳,看我那个帖子的机器人有那么多人下,我忍不住说一声。

自己制作的机器人,才是最好的机器人,我的那些机器人的完善,其实大家自己完全可以做,更加锻炼自己的水平,因为没人能够提供从新手到变态的所有机器人。

呃,所以,我觉得,与其不断完善那些机器人,还不如写个新人机器人指南,毕竟,授人以鱼不如授人以渔

另外说明,我写的是zmud4.62的机器人编写方法,而且是非常基础的一些功能,这些功能在zmud7.21中同样可用


机器人的主体构架是触发器,类似电脑的操作系统。 触发器的原理,就是根据你给出的条件,自动侦测mud里出现的语句,符合条件后自动执行指令。说简单点,就是条件反射。

一、基本触发

最基本的触发,就是没有任何编程内容,纯粹的条件反射,非常适合新人编写。这种触发是工作量最大的,但是编写容易,不容易断,是机器人触发器部分的主体。

如果需要使用多个指令指令,每个指令间用英文分号;隔开

例如,新人利用发呆室读书,就可以只用一个基本触发搞定。

注意: 发呆室已经被cut,所以这个只是个例子而已 触发思想:

  1. 发呆室可以瞬间补满精气,那么发呆室外消耗精气的过程就应该尽量缩短,节省时间,所以如果是读书,应该用du book for 50
  2. 发呆室发呆完有大概2秒的busy,无法移动。那么,为了避免busy,不用编程指令的时候,就必须针对这种情况增加触发
  3. 避免干扰,set brief 1,减少不必要的地点描述;tune channel all,关闭所有聊天频道以避免干扰

示例:

你发呆了一会儿
out
你的动作没有完成,不能移动
out
发呆室
du book for 50;out;fadai

三个触发做成读书机器人


二、#wa指令

#wa是触发中最常用的指令,作用是等待指定的时间(依照#wa后面的数字来定,以毫秒为单位),然后执行后面的命令。

再看上面的读书机器人,做出3个触发,完全只是为了处理busy问题,而读书和发呆,其实很简单,所以如果解决了busy,一个触发足够

触发思想:利用#wa解决发呆busy,然后以发呆为触发条件进行指令,由于发呆大概有2秒的busy,为保守,#wa设定在三秒以上

示例:

你发呆了一会儿
#wa 3000;enter;du book for 50;out;fadai

三、触发器分类

好的机器人应该具备几个条件,从游戏本身来考虑,非要做个排名的话,我认为应该是安全,稳定,效率,适用面广,当然如果你还能做到界面丰富生动,简洁易修改等等那更好了。所以,良好的触发器分类和运用是很重要的

触发器可以设定种类,一来能够方便使用和整理;二来可以整类触发器统一开关,能够实现更多的用法。

开关一类触发器的指令是#t+(打开)#t-(关闭),格式为#t+/#t- 触发器种类

使用示例:比如,一般情况下,内功支持的最大内力和最大精力基本相同,那么打坐吐纳的时候,就可以轮流进行,共同提升。那么,就可以把打坐的一类触发器设定为dz类别,吐纳的一类触发器设定为tuna类别,用#t+和#t-在适当的时候进行切换


四、通配符与变量提取

有了基本触发和#wa,其实已经可以写出几乎所有机器人,但是有的难免繁琐,而且不一定能够达到最高效率,比如打坐,为避免浪费气血,打坐的数值应该跟随最大内力的变化而变化,这个要求,上面两个方法就无法做到。

所以,接下来才是机器人的重头戏,我觉得堪比人的记忆功能——通配符与变量提取


名词解释

通配符:可能玩家在系统、浏览器等的搜索功能里面使用过。通配符,就是用一些指定的符号,来代表其他内容,这是计算机的一种创举,把带入了模糊思想精密的计算机程序中,能够弥补计算机的很多不足。

变量:变量,说白了就是一个量,你用一个名字来指代这个量,而这个量的内容,可以是文字、符号、数字等东西。而变量的神奇之处就在于一个“变”字,变量值可以根据要求自动变化,就能进行为真正的动态运行。

通配符

通配符介绍

我所了解的通配符有以下这些:

我对mud学习的也不多,了解的通配符就这几个,但是这几个已经足够了


变量

变量提取

变量的提取,就是根据你的指令,从语句中提取出需要的部分,保存为一个变量(变量名最好不要使用中文,并且要含义清楚,以免自己都弄忘记)。那么,提取的部分既然是变量,就是会变的,这就需要通配符来指代

通配符直接使用的时候,只有取代作用,不会提取数值

要提取通配符指代的部分,需要在通配符两边加上英文括号,括号内的通配符指代的部分就作为变量。

变量初始数值按照提取语句的顺序,用%1、%2等指代。

然后,需要一个赋值过程来保存变量,人为制定一个变量,将%1、%2等值赋值到其中。以后,就可以使用该变量(变量不可在直接手动在指令栏中输入的指令中使用),变量使用时,直接输入@变量名,比如变量名为exp,那么使用时就是@exp

那么,既然括号在触发器里面被理解为提取变量的一个标志,英文括号不可能成为触发语句,所以,带有类似(dodge)的语句,是无法进行触发的

示例

例如,我们可以用通配符和变量的提取,自动提取内力的数据

首先,需要分析语句格式

> hp
≡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━≡
【 精神 】 126   / 270    [100%]  【 精力 】 1054  / 766   (+   0)
【 气血 】 359   / 359    [100%]  【 内力 】 715   / 715   (+  38)
【 食物 】 0     / 300    [饥饿]  【 潜能 】 8053                  
【 饮水 】 0     / 300    [饥渴]  【 经验 】 105840                
≡━━━━━━━━━━━━━━━━━━━━━━━◎北大侠客行◎━━≡

我们可以看见,内力一栏里,有许多空格,而为了避免数值位数不同造成空格数量的不同,通常用%s指代空格,而不是在触发语句里面直接使用空格

内力后面有一个加力数值(+ 38),就像上面所说,括号不能作为触发语句,那么这段就不能要

内力有两个数值,一个是当前内力,一个是最大内力,我们应该把他们分别提取。提取数字,应该用(%d),两个变量分别是%1、%2,我们可以把他们保存到neili和maxneili两个变量中

那么,示例如下

原语句:【 内力 】 715   / 715   (+  38)
触发语句:【%s内力%s】%s(%d)%s/%s(%d)
触发指令:neili=%1;maxneili=%2

这样,每次hp后,触发器都能自动提取当前内力和最大内力的数值,分别保存到neili和maxneili两个变量中

附:括号问题的解决

介绍一个符号~,作用是让其之后的第一个符号(比如括号)不进入变量提取格式的判断

比如,如果我们想做个战斗触发器,每当黄血时自动吸气,那么,我们就可以这样写这个触发:

原语句:( 你气喘嘘嘘,看起来状况并不太好 )
触发语句:~( 你气喘嘘嘘,看起来状况并不太好 ~)
触发指令:exert recover

五、变量计算

有时,提取出来的数字形式的变量,我们不打算直接使用,而是计算后再使用。

比如,利用发呆室打坐吐纳时,为避免浪费,如果每次打坐的数值是最大内力的1/4,那么能够做到对气血的比较有效的利用(怎么才能最大利用呢?请见谁能解释一下, 心跳在mud 中是起什么作用的?,具体给个数值,dazuo的数目是有效内功/10的整数倍时最有效率,一倍最不容易浪费)

这时,就需要进行变量计算,把maxneili变量数值除以4,然后保存为一个新的变量

变量计算的指令是#math指令,此指令可以进行简单的四则运算,格式为#math 新变量 变量计算式

例如我们把maxneili变量值除以四,然后为了避免四舍五入的影响,最后再+1(一切都是按照四则运算规则进行),那么运算指令就是

#math dazuo @maxneili/4+1

另:如果只进行加减运算,可以使用#add指令,格式为#add 数字变量 改变数量,如#add num 1就是@num变量加一。

这样,就可以把maxneili变量的数值除以4再加上1,保存为新的变量——dazuo


六、条件指令

下面,我们就要开始了解机器人中极其强大的条件指令。条件指令,是机器人的大脑,给予了机器人思考判断的能力。

条件指令是根据你的条件进行判断,如果满足条件则执行一组指令,不满足则执行另外一组指令

条件指令使用的命令是#if,格式有两种

示例

还是用内力数值的变量提取。新人利用发呆室打坐吐纳,就必须保证最大内力和最大精力都在1000以下。那么,内力和精力的数值提取触发中,就可以加入#if指令进行判断。

设计思想:用@maxneili的数值和999作比较,相等时就停止打坐,不相等就继续

#if (@maxneili=999) {#t- dz;#t- tuna;halt;quit

七、句首严格触发

句首严格触发,是指通过一些通配符的使用,尽量保证触发语句出现在句首时才能触发,这样能让机器人更加严密,不易中断

^:这个符号的输入方式是,在英文输入状态下,按着shift按钮不放,按下键盘左边的6

^符号用在触发语句开头,作用是进行严格触发,当触发语句开头有^的时候,该语句必须位于行首才能被触发

行首严格触发作用:避免机器人错误触发,比如我就有被空手道 chat 你受伤过重xxxxx 弄得quit的惨痛经历…………

示例

1、行首触发

原语句:> 你深深吸了几口气,脸色看起来好多了。
触发语句:^??你深深吸了几口气,脸色看起来好多了

2、伤害触发(注意伤害描述是英文括号加一个空格,那么如果要进行行首严格触发,就要特别小心别漏了那个空格

原语句:( 你受伤不轻,看起来状况并不太好 )
错误触发:^??( 你受伤不轻,看起来状况并不太好 )
正确触发:^????你受伤不轻,看起来状况并不太好
或者:^??~(%s你受伤不轻,看起来状况并不太好

关于不同mud客户端的行首触发的具体讨论,请看行首严格触发的问题


八、定时器

定时器,就是根据你指定的时间为周期,定期执行指定命令

定时器的设置很简单,就不赘述了

定时器的作用:定期执行指令,比如长周期定时存盘、hp查看属性并且配合触发提取数值,比如短周期定时繁复打坐等

定时器可以用指令开关,开启定时的指令为#timer on或者#time on,关闭定时的指令为#timer off或者#time off,设定定时器时间为#ts 时间


九、别名

别名,是为了方便操作而设计的。别名可以用一个指令来指代一串指令,类似编程语言中的宏定义,其中,别名的名字不能用中文

别名是很常用的,北侠mud打包下载中,就把各区域往来的路径制作成为别名。

而且,别名有一定的alias的作用。比如,我设定别名g,指令是get,那么我就可以使用g all来代替get all


十、宏键

宏键,就是以键盘按键作为条件执行命令,能够极大程度的方便操作

我个人建议把小键盘设定为行走宏键

同样,常用的一些exert、perform、吃喝等指令可以做成宏键,建议把exert和perform制作到F1、F2一系列按键中,例如


十一、实用小指令

触发器指令中,有一些指令作用很简单,但是很使用,比如#mess#cap#show#gag#case#help

#mess

作用:自动用对话框发送指定内容提醒玩家

作用不用说了吧,任务、挂机等都非常实用

比如,我可以在刚才所说的自动停止打坐的条件指令里面加入#mess 内力已经到达999,自动停止打坐,那么,当内力到达999时,机器人除了自动停止打坐,还会弹出一个在所有windows窗口之前的对话框提醒玩:内力已经到达999,自动停止打坐。


#cap

作用:自动把该触发语句用一个新的mud窗口显示

这也是极其实用的,最常见的是把闲聊内容单独用一个窗口显示,避免遗漏重要信息

示例

【闲聊】
#cap chat

注:Zmud自动换行造成的多行,还是按照一行计算

另:#cap也可以一次性提取多行,比如#cap 3 chat,就是提取三行

那么,当有人通过闲聊频道说话的时候,内容除了在主窗口内显示,还会出现在一个以chat命名的窗口内


#show

作用:显示指定的内容

这个指令格式是 #show 指定内容

效果是在mud窗口里面显示指定内容,字体颜色为Zmud默认颜色

这个指令可以用来进行提示

示例

慕容任务里,用变量提取慕容复说的叛徒地址,储存在@zone变量中,然后计时器里面以五秒为循环,执行指令#show 叛徒在@zone附近

如提示是归云庄练功房,那么任务时,每隔五秒就会自动显示

叛徒在『归云庄练功房』附近

另: #say也有同样效果,而且颜色更鲜明(Zmud讯息颜色),推荐用#say

警告

尽量不用#show和#say作为触发信息,因为这种触发方式及其容易扰乱Zmud的窗口内容回显,导致机器人不稳定。

最简单的例子就是#show和#say是瞬间显示的,而服务器端信息有延迟,用#show和#say作为触发,回显内容可能出现在服务器返回信息之前,导致某些触发提前发动,扰乱机器人运行。

扰乱Zmud回显的例子,就是#show这种内部回显的内容,可能会因为时间的巧合而插在Zmud某行信息的中间,把信息直接割断成两行,导致触发器无法运行

所以,如果要进行自触发,最好使用 tell自己 之类的方法,用服务器返回信息作为触发内容


#gag

作用:自动删除一行内容,不予显示

这是避免一些刷屏而使用的,比如可以屏蔽恶意刷屏,比如可以让闲聊不显示

示例

【闲聊】
#gag

那么,当有人通过闲聊频道说话的时候,就可以自动删除,避免影响

但是,#gag删除的语句,只是不显示,实际仍然存在,依旧会引发触发。所以,用这个屏蔽闲聊不如tune channel chat,因为这个是用闲聊触发,那么就算删除不显示,闲聊内容其实也已经进入了触发,如果闲聊中有人说“你运功完毕”之类的话,仍然会触动你的触发


#case

作用:根据变量数目执行目标指令 格式:#case @数字变量 {指令一} {指令二} {指令三} …… {指令N} ……(注意要用@)

原理:根据自动执行对应变量值的指令,如变量为2,则执行指令二

示例:详见wiki护镖,贫道也是从那里学来的


#help

作用:Zmud帮助指令

格式:#help或者#help xxx

这是最全面的Zmud指南,并且可以详细查询,比如如果我想查询if语句的功能和用法,就输入#help if,回车


十二、按钮

按钮,比较实用,是制作一个按钮,点下按钮就可以执行命令。在zmud的按钮栏中是找不到这个设置的,要点击查看——按钮,打开按钮设置

按钮设置,可以设定按钮名称和点下按钮时执行的指令,并且还可以设定成开关式,按钮在zmud窗口中的位置,同样可以设置

示例:请见经典的发一个手动推车的,在诸葛不亮基础上调整的小蜜蜂机器人(新手专用)


十三、触发测试

一套机器人制作好之后,不要忙着马上使用,最好先进行测试,以发现一些问题

触发测试有两种方法

方法一:点击常规按钮,打开常规设置,选中左上角的显示触发信息

这样,当触发器执行时,会自动在mud窗口里显示触发信息,方便检验执行状况


方法二:打开触发器窗口,选择一个触发,点击右边的测试选项卡

这个是触发器的测试功能,可以检验你的触发是否能够进行。上方的句型栏是触发器中设定的触发语句,下方一栏是实际出现的指令,由你输入

例如,上面所说的内力提取指令,如果我不知道英文括号不能作为触发语句,把触发语句设定为

^??【%s气血%s】*【%s内力%s】%s(%d)%s/%s(%d)%s(+  0)

(思考:为什么要内力触发前面的气血部分?)

那么,为保险进行测试,就可以把实际的hp内容拷贝进下面一栏,比如

【 气血 】 920   / 1316   [100%]  【 内力 】 1523  / 1784  (+   0)

然后点击触发测试,结果程序会告诉我,触发无法匹配,那么我就知道,我这个语句有问题了,不能被触发,然后就可以再检查并修改


十四、状态栏和菜单栏

状态栏位于指令输入栏上方灰色那条,默认为空白,右键点开可以进行显示内容设置

状态栏可以随时显示你想知道的内容,配合变量侦测和提取的触发,可以极大程度的方便游戏。例如,我们可以把经验、潜能、精力、内力、常用任务写在状态栏上。

如:

经验:@exp | 潜能:@pot | 内力:@neili/@maxneili | 精力:@jingli/@maxjingli

也可以用#st命令用来定义状态条,如:

#st {经验:@exp | 潜能:@pot | 内力:@neili/@maxneili | 精力:@jingli/@maxjingli}

状态栏设置的窗口中,下方的是设置状态窗口内容,可以以窗口的形式显示多行状态,这样可以显示更多信息。

在Zmud5.55和7.21中,状态窗口的开关指令是#stw on#stw off

Zmud4.62中,状态窗口的开关指令是#menu {window|status},打开的时候关闭,关闭的时候打开


#menu这个命令让你可以用鼠标发送命令,请看下面几个有趣的用法

#menu admire {chat* admire %lower(%selword)}
#menu praise {chat* praise %lower(%selword)}
#menu goodman {chat* goodman %lower(%selword)}

右键点击出来的菜单中也可以选择修改菜单来加入新的menu指令

这个用法也可以帮助你捡东西或者卖东西,但是请不要用这个命令来kill sb,不小心点错了概不负责.


简易机器人的一些知识,就到此为止


机器人制作需知


实际操作

下面,我将就新人常用的机器人给点建议,新人可以把这些作为上面教程的考试,按照提示,参考我的新手机器人(最好不参考别人的,自己写),做出一个完全属于自己的机器人

再次强调:自己制作的机器人,才是最好的机器人。因为机器人是自己制作的,自己对它的一切都无比熟悉,维护、修改、完善都能最好地进行,别人地机器人,最好只是参考、学习和借鉴。

一、机器人通用部分

1、属性提取

思考:

属性提取有很大的好处,配合状态栏,可以随时知道自己的状态,配合机器人,可以实现许多内容

提示:

许多触发器都要进行hp,实时提取最新状态

相关内容:通配符、变量提取

2、自动连接

思考:

平时mud是手动连接,可以做成自动连接,进入后顺便领取装备,购买食品等;同样,为避免断线问题,自动连接也可以在断线后自动重新登陆

提示:

断线重新登陆,可能会询问这个人物正在游戏,是否取代(y/n)

注:别名设置里,可以设置一个名为 atconnect 的命令,里面的指令会在mud连接至服务器时自动执行

3、进度侦测

如做慕容信件任务时,要求技能均衡而且最好不超过80,那么需要在技能到达指定等级时自动停止;如练功时,要练到某个程度便停止;如新手打坐时,要注意不要超过999,否则会无法使用发呆室,等等。进度的侦测可以很灵活的对机器人执行进度进行控制。

提示:skills可以查看所有技能,可以写个触发侦测技能等级

相关内容:通配符、变量提取、if判断

4、停止机器人

由于游戏中各类事务比较多,触发也可能非常多,那么如果想中止挂机,可以做一个别名,一次性关闭所有机器人触发

比如别名名字为chufa,指令为#t- xue;#t- dz;#t- tuna;#t- lian……


二、钓鱼机器人

思考

1、别名

考虑把苏州往返制作成为别名

考虑把挂鱼饵和钓鱼的指令制作成为别名

2、触发

(提示二比较难制作,但是更加完美,不容易产生意外情况或者触发器断开,比如我的那个钓鱼机器人为了方便新人理解,就是用提示一的方法制作,运气不好会跑到华山村……)

重复钓鱼触发

提示:钓鱼完成的语句可以作为触发语句

补充精神触发

相关内容:通配符、变量提取、if判断

补充鱼饵触发

相关内容:通配符、变量提取、if判断


三、发呆机器人

最大内力精力小于1000,经验小于11w,年龄小于18的玩家,可以利用发呆室瞬间回复精气,这是新手最大的优势,可以辅助快速成长

思考:为了更大程度的体现发呆室的优势,缩短修炼时间,不发呆时候的行动应该越快越好

提示:发呆室发呆后有2秒的busy时间

1、读书

不用说了,前面讲过

2、学习

思考

师父不在发呆室,应该如何去师父那里学习,然后返回发呆

提示

可以请人把师父搬到发呆室

3、打坐吐纳

思考

相关内容:通配符、变量提取、变量计算、触发器开关

4、练习

初期潜能很宝贵,如果要节约潜能,用练习来提高基本武功也很不错

思考

提示

这是发呆触发中触发最多的一个,触发切换也要非常熟练,希望能用自己的能力写出来,可以极大程度的锻炼能力

相关内容:触发器开关

四、红豆机器人、护镖机器人

我对zmud实用指令的了解是从红豆机器人开始的,当时看的云里雾里,现在总算明白了。而最近看了wiki的护镖半自动机器人,更是受益匪浅。所以,如果觉得对zmud机器人编写已经初步有点感觉了,可以尝试解读这两个机器人,相信会学到不少东西

五、机器人改进

我在我的新人指南贴里发了10w-50w的机器人,不过是很老很老的,这里更新的许多技术都没用上,所以漏洞百出,大家可以尝试改进

提示:句首严格触发


一些废话

由于9月5号大学开学,9月4号我要出发报道, 开学后可能要军训很长的一段时间,不能来北侠,所以我写了这篇帖子,临走前送北侠新人一份礼物,希望能给新人一点指导,减少游戏路途中的坎坷!

另外,就像开头说的,授人以鱼不如授人以渔,所以,我的新人机器人将不再维护更新,只作为新人写机器人的参考。而且,我的那个钓鱼机器人可能存在问题,运气不好会跑到华山村,新人有兴趣的可以研究研究,修补修补,嘿嘿……

注:最全面的zmud帮助请看zt无欢的大作:ZMUD462中文帮助

不过比较简略,强烈要求无欢像我这样详细说明!!!我看着都头疼。。。


更新记录

2009年01月20日

2009年02月07日

2009年02月08日

2009年07月04日

2009年07月23日

2010年01月27日