常言笑的家

Spring, Hibernate, Struts, Ajax, RoR

Zmud新手机器人指南

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


一、基本触发

最基本的触发,就是没有任何编程内容,纯粹的条件反射,非常适合新人编写。这种触发是工作量最大的,但是编写容易,不容易断,是机器人触发器部分的主体。
如果需要使用多个指令指令,每个指令间用英文分号;隔开

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

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

示例: 复制内容到剪贴板 代码:
你发呆了一会儿
out

------------------------------------------------------------------------------- 复制内容到剪贴板 代码:
你的动作没有完成,不能移动
out
------------------------------------------------------------------------------- 复制内容到剪贴板 代码:
发呆室
du book for 50;out;fadai
三个触发做成读书机器人

-------------------------------------------------------------------------------
-------------------------------------------------------------------------------

二、#wa指令

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

作用一:当一次发送出的命令过多时,会有溢出,最后的部分命令可能无法执行,导致机器人中断,所以大量指令之间,需要一定的等待
作用二:许多事件都有一定的busy time,在这段时间内,会无法移动,或者无法使用pfm和exert或其他,那么,就需要针对busy time,设定等待

再看上面的读书机器人,做出3个触发,完全只是为了处理busy问题,而读书和发呆,其实很简单,所以如果解决了busy,一个触发足够
触发思想:利用#wa解决发呆busy,然后以发呆为触发条件进行指令,由于发呆大概有2秒的busy,为保守,#wa设定在三秒以上

示例: 复制内容到剪贴板 代码:
你发呆了一会儿
#wa 3000;enter;du book for 50;out;fadai
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------

三、触发器分类

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

触发器可以设定种类,一来能够方便使用和整理;二来可以整类触发器统一开关,能够实现更多的用法
开关一类触发器的指令是#t+(打开)#t-(关闭),格式为#t+ 触发器种类

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

-------------------------------------------------------------------------------
-------------------------------------------------------------------------------

四、通配符与变量提取

有了基本触发和#wa,其实已经可以写出几乎所有机器人,但是有的难免繁琐,而且不一定能够达到最高效率,比如打坐,为避免浪费气血,打坐的数值应该跟随最大内力的变化而变化,这个要求,上面两个方法就无法做到。
所以,接下来才是机器人的重头戏,我觉得堪比人的记忆功能——通配符与变量提取

-------------------------------------------------------------------------------

通配符

名词解释
通配符:可能玩家在系统、浏览器等的搜索功能里面使用过。通配符,就是用一些指定的符号,来代表其他内容,这是计算机的一种创举,把带入了模糊思想精密的计算机程序中,能够弥补计算机的很多不足。
变量:变量,说白了就是一个量,你用一个名字来指代这个量,而这个量的内容,可以是文字、符号、数字等东西。而变量的神奇之处就在于一个“变”字,变量值可以根据要求自动变化,就能进行为真正的动态运行。

通配符介绍:
*    星号是最简单的通配符,指代一切字符

? 问号指代一个或者零个字符
%s 这个通配符,指代任意长度的连续空格
%d   这个通配符,指代任意长度的连续数字

%x 这个通配符,指代任意长度的不包含空格的字符
%w   通配任何字母(a-z)
%a   通配任何数字和字母(等于%d+%w)
%n   通配任何以+或-开头的数字
%x   通配任何非空格
[range] 通配任何在range范围内的字符
^ 表示一行的开头,想要你的trigger在一行的开头才有效,就在最前面加上这个
$ 表示一行的结尾。
(通配符)将括号里面的内容依次提取存放到参数%1~%99里

我对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,格式有两种
格式一:#if (条件) {指令}
格式二:#if (条件) {条件成立的指令} {条件不成立的指令}

格式一中,如果条件成立,便自动执行大括号内的指令,如果条件不成立,便自动跳过
格式二中,如果条件成立,便自动执行第一个大括号中的指令,如果条件不成立,便自动执行第二个大括号中的指令

示例:
还是用内力数值的变量提取。新人利用发呆室打坐吐纳,就必须保证最大内力和最大精力都在1000以下。那么,内力和精力的数值提取触发中,就可以加入#if指令进行判断。
设计思想:用@maxneili的数值和999作比较,相等时就停止打坐,不相等就继续 复制内容到剪贴板 代码:
#if (@maxneili=999) {#t- dz;#t- tuna;halt;quit}-------------------------------------------------------------------------------
-------------------------------------------------------------------------------

七、句首严格触发

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

^:这个符号的输入方式是,在英文输入状态下,按着shift按钮不放,按下键盘左边的6
^符号用在触发语句开头,作用是进行严格触发,当触发语句开头有^的时候,该语句必须位于行首才能被触发
行首严格触发作用:避免机器人错误触发,比如我就有被空手道chat 你受伤过重xxxxx弄得quit的惨痛经历…………

示例:
1、行首触发 复制内容到剪贴板 代码:
原语句:> 你深深吸了几口气,脸色看起来好多了。
触发语句:^??你深深吸了几口气,脸色看起来好多了
2、伤害触发(注意伤害描述是英文括号加一个空格,那么如果要进行行首严格触发,就要特别小心别漏了那个空格) 复制内容到剪贴板 代码:
原语句:( 你受伤不轻,看起来状况并不太好 )
错误触发:^??( 你受伤不轻,看起来状况并不太好 )
正确触发:^????你受伤不轻,看起来状况并不太好
或者:^??~(%s你受伤不轻,看起来状况并不太好

---------------------------------------------------------
具体讨论请看行首严格触发的问题

八、定时器

定时器,就是根据你指定的时间为周期,定期执行指定命令
定时器的设置很简单,就不赘述了

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

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

-------------------------------------------------------------------------------
-------------------------------------------------------------------------------

九、别名

别名,是为了方便操作而设计的。别名可以用一个指令来指代一串指令,其中,别名的名字不能用中文
别名是很常用的,北侠mud打包下载中,就把各区域往来的路径制作成为别名。

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

-------------------------------------------------------------------------------
-------------------------------------------------------------------------------

十、宏键

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

我个人建议把小键盘设定为行走宏键
1:sw
2:s
3:se
4:w
5:l
6:e
7:nw
8:n
9:ne

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

-------------------------------------------------------------------------------
-------------------------------------------------------------------------------

十一、实用小指令

触发器指令中,有一些指令作用很简单,但是很使用,比如#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
-------------------------------------------------------------------------------
#gag:自动删除一行内容,不予显示
这是避免一些刷屏而使用的,比如可以屏蔽恶意刷屏,比如可以让闲聊不显示

示例: 复制内容到剪贴板 代码:
【闲聊】
#gag
那么,当有人通过闲聊频道说话的时候,就可以自动删除,避免影响

但是,#gag删除的语句,只是不显示,实际仍然存在,依旧会引发触发。所以,用这个屏蔽闲聊不如tune 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-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
简易机器人的一些知识,就到此为止

posted on 2011-08-15 20:51 常言笑 阅读(7655) 评论(2)  编辑  收藏

Feedback

# re: Zmud新手机器人指南 2014-10-09 11:51 刘一笑

历久常新,一直有帮助啊  回复  更多评论   

# re: Zmud新手机器人指南 2015-08-24 12:44 shader

帮了新手大忙啊  回复  更多评论   



只有注册用户登录后才能发表评论。


网站导航:
 

My Links

Blog Stats

常用链接

留言簿(5)

随笔分类

随笔档案

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜