作者:武当小道诸葛不亮(Zgbl)
本指南原帖为新人机器人指南,本贴保证持续更新
推荐一个专业性很强的zmud帮助,面向7.21的Zmud教程 for Wiki
另一个,糖果(sghjjj)出品的三级加精的大作Zmud机器人制作--基础知识,技巧以及实例讲解
最全面的zmud帮助,请在zmud里输入#help,还可以具体查询,比如#help if
咳咳,看我那个帖子的机器人有那么多人下,我忍不住说一声。
自己制作的机器人,才是最好的机器人
,我的那些机器人的完善,其实大家自己完全可以做,更加锻炼自己的水平,因为没人能够提供从新手到变态的所有机器人。
呃,所以,我觉得,与其不断完善那些机器人,还不如写个新人机器人指南,毕竟,授人以鱼不如授人以渔。
另外说明,我写的是zmud4.62的机器人编写方法,而且是非常基础的一些功能,这些功能在zmud7.21中同样可用。
机器人的主体构架是触发器,类似电脑的操作系统。 触发器的原理,就是根据你给出的条件,自动侦测mud里出现的语句,符合条件后自动执行指令。说简单点,就是条件反射。
最基本的触发,就是没有任何编程内容,纯粹的条件反射,非常适合新人编写。这种触发是工作量最大的,但是编写容易,不容易断,是机器人触发器部分的主体。
如果需要使用多个指令指令,每个指令间用英文分号;隔开
例如,新人利用发呆室读书,就可以只用一个基本触发搞定。
注意: 发呆室已经被cut,所以这个只是个例子而已 触发思想:
示例:
你发呆了一会儿 out
你的动作没有完成,不能移动 out
发呆室 du book for 50;out;fadai
三个触发做成读书机器人
#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 内力已经到达999,自动停止打坐,那么,当内力到达999时,机器人除了自动停止打坐,还会弹出一个在所有windows窗口之前的对话框提醒玩:内力已经到达999,自动停止打坐。
作用:自动把该触发语句用一个新的mud窗口显示
这也是极其实用的,最常见的是把闲聊内容单独用一个窗口显示,避免遗漏重要信息
【闲聊】 #cap chat
注:Zmud自动换行造成的多行,还是按照一行计算
另:#cap也可以一次性提取多行,比如#cap 3 chat,就是提取三行
那么,当有人通过闲聊频道说话的时候,内容除了在主窗口内显示,还会出现在一个以chat命名的窗口内
作用:显示指定的内容
这个指令格式是 #show 指定内容
效果是在mud窗口里面显示指定内容,字体颜色为Zmud默认颜色
这个指令可以用来进行提示
慕容任务里,用变量提取慕容复说的叛徒地址,储存在@zone变量中,然后计时器里面以五秒为循环,执行指令#show 叛徒在@zone附近
如提示是归云庄练功房,那么任务时,每隔五秒就会自动显示
叛徒在『归云庄练功房』附近
另: #say也有同样效果,而且颜色更鲜明(Zmud讯息颜色),推荐用#say
尽量不用#show和#say作为触发信息,因为这种触发方式及其容易扰乱Zmud的窗口内容回显,导致机器人不稳定。
最简单的例子就是#show和#say是瞬间显示的,而服务器端信息有延迟,用#show和#say作为触发,回显内容可能出现在服务器返回信息之前,导致某些触发提前发动,扰乱机器人运行。
扰乱Zmud回显的例子,就是#show这种内部回显的内容,可能会因为时间的巧合而插在Zmud某行信息的中间,把信息直接割断成两行,导致触发器无法运行
所以,如果要进行自触发,最好使用 tell自己 之类的方法,用服务器返回信息作为触发内容
作用:自动删除一行内容,不予显示
这是避免一些刷屏而使用的,比如可以屏蔽恶意刷屏,比如可以让闲聊不显示
【闲聊】 #gag
那么,当有人通过闲聊频道说话的时候,就可以自动删除,避免影响
但是,#gag删除的语句,只是不显示,实际仍然存在,依旧会引发触发。所以,用这个屏蔽闲聊不如tune channel chat,因为这个是用闲聊触发,那么就算删除不显示,闲聊内容其实也已经进入了触发,如果闲聊中有人说“你运功完毕”之类的话,仍然会触动你的触发
作用:根据变量数目执行目标指令 格式:#case @数字变量 {指令一} {指令二} {指令三} …… {指令N} ……(注意要用@)
原理:根据自动执行对应变量值的指令,如变量为2,则执行指令二
示例:详见wiki护镖,贫道也是从那里学来的
作用: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,不小心点错了概不负责.
简易机器人的一些知识,就到此为止
下面,我将就新人常用的机器人给点建议,新人可以把这些作为上面教程的考试,按照提示,参考我的新手机器人(最好不参考别人的,自己写),做出一个完全属于自己的机器人
再次强调:自己制作的机器人,才是最好的机器人
。因为机器人是自己制作的,自己对它的一切都无比熟悉,维护、修改、完善都能最好地进行,别人地机器人,最好只是参考、学习和借鉴。
思考:
属性提取有很大的好处,配合状态栏,可以随时知道自己的状态,配合机器人,可以实现许多内容
提示:
许多触发器都要进行hp,实时提取最新状态
相关内容:通配符、变量提取
思考:
平时mud是手动连接,可以做成自动连接,进入后顺便领取装备,购买食品等;同样,为避免断线问题,自动连接也可以在断线后自动重新登陆
提示:
断线重新登陆,可能会询问这个人物正在游戏,是否取代(y/n)
注:别名设置里,可以设置一个名为 atconnect 的命令,里面的指令会在mud连接至服务器时自动执行
如做慕容信件任务时,要求技能均衡而且最好不超过80,那么需要在技能到达指定等级时自动停止;如练功时,要练到某个程度便停止;如新手打坐时,要注意不要超过999,否则会无法使用发呆室,等等。进度的侦测可以很灵活的对机器人执行进度进行控制。
提示:skills可以查看所有技能,可以写个触发侦测技能等级
相关内容:通配符、变量提取、if判断
由于游戏中各类事务比较多,触发也可能非常多,那么如果想中止挂机,可以做一个别名,一次性关闭所有机器人触发
比如别名名字为chufa,指令为#t- xue;#t- dz;#t- tuna;#t- lian……
思考
考虑把苏州往返制作成为别名
考虑把挂鱼饵和钓鱼的指令制作成为别名
(提示二比较难制作,但是更加完美,不容易产生意外情况或者触发器断开,比如我的那个钓鱼机器人为了方便新人理解,就是用提示一的方法制作,运气不好会跑到华山村……)
提示:钓鱼完成的语句可以作为触发语句
相关内容:通配符、变量提取、if判断
相关内容:通配符、变量提取、if判断
最大内力精力小于1000,经验小于11w,年龄小于18的玩家,可以利用发呆室瞬间回复精气,这是新手最大的优势,可以辅助快速成长
思考:为了更大程度的体现发呆室的优势,缩短修炼时间,不发呆时候的行动应该越快越好
提示:发呆室发呆后有2秒的busy时间
不用说了,前面讲过
思考
师父不在发呆室,应该如何去师父那里学习,然后返回发呆
提示
可以请人把师父搬到发呆室
思考
相关内容:通配符、变量提取、变量计算、触发器开关
初期潜能很宝贵,如果要节约潜能,用练习来提高基本武功也很不错
思考
提示
这是发呆触发中触发最多的一个,触发切换也要非常熟练,希望能用自己的能力写出来,可以极大程度的锻炼能力
相关内容:触发器开关
我对zmud实用指令的了解是从红豆机器人开始的,当时看的云里雾里,现在总算明白了。而最近看了wiki的护镖半自动机器人,更是受益匪浅。所以,如果觉得对zmud机器人编写已经初步有点感觉了,可以尝试解读这两个机器人,相信会学到不少东西
我在我的新人指南贴里发了10w-50w的机器人,不过是很老很老的,这里更新的许多技术都没用上,所以漏洞百出,大家可以尝试改进
提示:句首严格触发
由于9月5号大学开学,9月4号我要出发报道, 开学后可能要军训很长的一段时间,不能来北侠,所以我写了这篇帖子,临走前送北侠新人一份礼物,希望能给新人一点指导,减少游戏路途中的坎坷!
另外,就像开头说的,授人以鱼不如授人以渔
,所以,我的新人机器人将不再维护更新,只作为新人写机器人的参考。而且,我的那个钓鱼机器人可能存在问题,运气不好会跑到华山村,新人有兴趣的可以研究研究,修补修补,嘿嘿……
注:最全面的zmud帮助请看zt无欢的大作:ZMUD462中文帮助
不过比较简略,强烈要求无欢像我这样详细说明!!!我看着都头疼。。。