看到论坛上很多新手抱怨没有机器人,其实别人的机器再好也没有自己做的机器好,修改别人的机器得先看懂别的的机器流程,其所花时间完全可以自己做一个机器了。而且自己做的机器要修改也容易。其实zmud提供的触发、别名、变量已经把机器制作极其简化了。
下面是本人制作自动灭妖机器的一些心得和经验,希望能对新手们有帮助。废话不多说进入正题。
一、制作全自动灭妖机器的流程
(一)、接任务
灭妖首先是接任务,那么如何用机器得到自己的灭妖任务呢?
#trigger {^{~> 李|李}靖对你说道:近有(%x)~((%*)~)在(%x)为非作歹*} {killname=%1;killid=%2;killwhere=%3;#ts 200;#show 灭妖地点:@killwhere} {} {519}
如果李靖的任务是:李靖对你说道:近有马猴怪(Mahou guai}在通天河为非作歹,请速去降服!
那么上面这个触发的作用就是:
1、将 马猴怪 赋值给变量Killname即@killname=马猴怪;
2、将 Mahou guai 赋值给变量killid即@killid=Mahou guai;
3、将 通天河 赋值给killwhere即@killwhere=通天河;
4、在Zmud字幕上显示:灭妖地点:通天河
说明;#show ,其作用时在屏幕上显示其后面的内容,只有自己能看到;#t+ K_bac意思是开启类名为K_back的触发;#ts 200意思是将计时器
时间设置为200秒,具体数值可以改动。
(二)执行所接任务
前面已经得到所接任务信息,那么如何开始任务呢?
#trigger {灭妖地点:通天河} {fly tongtian;#5 n;#wa 2000;#t+ Kill_yao;look;#if @findyaoOk<1 {PHTongTian}} {} {519}
#trigger {@Killname~(@killid~)} {findyaoOk=1;#stop;follow %lower(@killid)} {Kill_yao} {548}
#trigger {你决定开始跟随@killname一起行动。} {#t+ K_back;#t- Kill_yao;#t+ Kill_hp;say;kill %lower(@killid)} {Kill_yao}
{548}
#trigger {这里没有@killid。} {#back;follow %lower(@killid}} {Kill_yao} {548}
下面进行说明:
1、#t+ Kill_yao, 打开类名为Kill_yao的触发
2、#if @findyaoOk<1 {PHTongTian},如果没有发现怪,则执行路径即将通天河全部地点走完,如果已经发现怪则由第二条Trigger控制。
说明:FindyaoOk是一个变量,初始值为0,用于判断是否有发现怪;PHTongTian是通天河的路径,当然我建议将路径做成别名,而不是做
成path。具体命令为#alias PHTongTian {#slow .路径内容}
3、@Killname~(@killid~),这是你所要灭的怪的信息,其当前内容是:马猴怪(Mahou guai),用于灭妖触发,该条触发的作用是:看到
这只怪则将变量findyaoOk赋值为1,并停止行走,跟随你所灭的妖怪。
说明:%lower()是将()中变量的内容转化为小写字母;{kill_yao}是你这个触发所属的类名;{548}表示载入这个脚本时这个触发是关闭的即
没有启用;(519}则表示载入这个脚本时其相应触发是启用的。
4、第三个触发意思是你已经跟随你所灭的妖怪一起行动,即确定找到妖怪并且跟其在同一地点,则执行say命令,并执行kill命令,至于
为什么执行say命令,后面解释.
5、有时候会遇到走过的情况,即服务器延时,看到怪了,但走过去了,即程序运行到后面的路径,因此做了第四个触发,即已经看到怪
,但和怪不在同一地点就返回到你行走路径的前一步并执行follow命令,直到到达怪所在地点。
ok至此搜怪工作完成,是不是很简单呢?
(三)找到怪,开始灭妖流程
#trigger {你自言自语不知道在说些什么} {#wa 1000;hp;say} {Kill_hp} {514}
#trigger {精神:%s%d~/%s(%d)} {#if %1<=85 {docshen}} {Kill_hp} {514}
#trigger {气血:%s%d~/%s(%d)} {#if %1<=85 {docqi}} {exert recover;pfOkqi=0}} {kill_hp} {514}
#trigger {精神:%s(%d)~/%s%d} {#if %1>=1000 {pfOkshen=1} {exert refresh;pfOkshen=0}} {Kill_hp} {514}
#trigger {气血:%s(%d)~/%s%d} {#if %1>=1000 {pfOkqi=1;#show 是否用特技} {exert recover;pfOkqi=0}} {kill_hp} {514}
#trigger {是否用特技} {#math pfOkover (@pfOkshen+@pfOkqi);#if @pfOkover>=2 {pfm}} {kill_hp} {514}
#trigger {^{~> 你|你}已经陷入昏迷状态等等,须要停止灭妖并退出的触发} {quit} {kill_hp} {514}
#trigger {^{~> 你|你}动作还没有完成不能退出等等} {#wa 500;quit} {kill_hp} {514}
开始灭妖就涉及气血和精神的恢复和吃药以及用特殊技能和法术的问题,前面六个触发用于解决前述问题。下面逐一讲解。
1、第一个触发作用时每秒看一次自己的气血值,为循环执行触发,其控制触发的命令是say,即你自言自语不知道在说些什么,当然也可
以用其他的,但要注意不要干扰到别人。
2、第二、三条触发作用是当最大气血或精神低于85%时吃药或者丹,具体内容为别名docshen和docqi,这两个别名,须要定义,看自己
的习惯是用祭赛国的药还是朱紫的药,一次是吃一包还是几包;例:#alias docshen {#2 eat dan}表示一次吃两颗丹,#alias docqi {fu wan}
表示一次用一颗丹桂丸。按自己的须要定义别名,很简单。
3、第四、五条触发作用是当气血和精神低于一定数值,这里是1000(可以改动)时用内力恢复精神和气血。并判断变量pfOkqi(气血
值是否达到用特殊技能的安全要求其值为0表示不满足要求,为1表示满足要求);pfmshen则用于判断精神值是否满足要求。
5、第六条触发作用时,当气血和精神值均满足特殊技能要求即安全的情况下用特殊技能,否则不用,pfm为你的特技的别名,具体用什么
特技须要自己定义,例:#alias pfm {perform pili;enable stick kusang-bang;perform three;enable stick qianjun-bang},也可以定义为法
术加武功#alias pfm {cast mihun on %lower (@killid);perform pili on %lower(@killid)}。
6、后面的语句是用于打不过妖怪时的保护(退出游戏),很简单,不详细说明。
说明:^表示从文本最左边开始匹配你的触发内容;#math pfOkover (@pfOkshen+@pfOkqi)将@pfOkshen和@pfOkqi的数值相加后赋给变量
pfOkover,即@pfOkover=@pfOkshen+pfOkqi。
(四)灭妖完成的返回问题
这分为两种情况,一、走路径没有找到怪,二、找到怪并灭妖成功
对于第一种情况可以用Zmud的计时器来控制,到时间视为没有找到怪,返回。至于计时器的执行内容,自己根据所编机器设置。
现在我说一下第二种情况,灭妖成功,返回。
#trigger {从天上飘下??天书等等,须要注意的是这里不能有重复的触发,即所有触发必须是单一的,否则返回会出现错误} {#t-
kill_hp;#wa 5000;cast chuqiao} {K_back} {514}
#trigger {你的法力不够不能够灵魂出窍等等} {#wa 3000;mingsi 200} {K_back} {514}
#trigger {你行功完毕从冥思中回过神来????} {#wa 1800;exert refresh;#wa 500;cast chuqiao} {K_back} {514}
#trigger {你正在??还在战斗要灵魂出窍就死定了等等} {#ts 60;#wa 500;#case %random(1,11) {s;cast chuqiao} {u;cast chuqiao}
{d;cast chuqiao} {n;cast chuqiao} {e;cast chuqiao} {w;cast chuqiao} {nw;cast chuqiao} {ne;cast chuqiao} {nd;cast chuqiao}
{sw;cast chuqiao} {se;cast chuqiao}} {K_back} {514}
#trigger {你动作还没有完成不能,不能灵魂出窍??具体内容记不太清了} {#wa 3000;cast chuqiao} {K_back} {514}
#trigger {一股灵气从你脑门上钻出,随风飘去,转眼就不见了。} {#ts 200;#t+ K_backtwo;#t- K_back;n;#wa 1800;north;enforce none;kill
wuchang;cast escape} {K_back} {514}
#trigger {只好对着你长唳一声,折了回去!} {#wa 1000;n;#wa 2000;#2 s;kill wuchang;cast escape} {K_backtwo} {514}
#trigger {*无常死了。} {#wa 2000;kill wuchang;cast escape} {K_backtwo} {514}
#trigger {你现在不能用魔法!} {#wa 1000;n;#wa 2000;s;kill wuchang;cast escape} {K_backtwo} {514}
#trigger {只听趴!地一声,你从半空中掉下来,跌了个屁股开花!} {#t+ start_all;#t+ Start_one;#wa 2000;fly sky;hp;#t-
K_backtwo;} {K_backtwo} {514}
以上触发基本能满足灭妖完成回去接任务的要求,当然我这里写的是用登仙大法返回,返回的方法很多,具体情况可以根据你的人物情况修改,必要时可以用大米帮助返回。比如放个大米在地府,到地点后随便变个什么东西,让大米get出来。当然这段返回触发并不完善,至于考
虑到走错位置,怎么出去的方法在这里不作详解,这里只介绍基本的流程。
说明:#case %random(1,11) {} {} ……。
1、%radom是个取随机数的函数,%radom(1,11)是在1—11之间随机选择一个数;
2、#case 变量 {} {} {},是当变量为一定的值时,根据变量的数值执行括号内的内容,比如变量=1则执行第一个括号内的内容,变
量=2则执行第二个括号内的内容,=3则执行第三个括号内的内容;变量=4呢??如果#case 变量 后面只有3个可执行内容则相当于
#case 4-3 {} {} {},即执行第一个括号内的内容。
(五)从地府出来后的恢复问题
重新接任务前当然要将人物状态调整到最佳,保证满气血,满精神,满食物,满内力和法力的情况,总不能让自己的id在半残废状态下灭
妖吧。下面说一下,恢复气血的方法。即打坐和冥思的算法。
#trigger {只听趴!地一声,你从半空中掉下来,跌了个屁股开花!} {#t+ start_all;#t+ Start_one;#wa 2000;fly sky;hp;#t-
K_backtwo;}{K_backtwo} {514}
在返回工作完成时,上面这个触发,定义开启了触发类为Start_one的触发;因此,恢复的触发的类名必须定义为start_one,默认载入时为
关闭,当然你也可以定义成其他类,看个人喜好,不过类的定义必须前后一致。
#trigger {你行功完毕吸了口气???站起来??} {#wa 1800;exert recover;#wa 500;hp} {Start_all} {514}
#trigger {你冥思完毕????} {#wa 1800;exert refresh;#wa 500;hp}
#trigger {内力:%s(%d)~/%s(%d)} {#math dz_num (2*%2-%1)/86*20;#wa 1000;#if %1>=%2 {dazuo @dz_num;#t+ Start_three;#t-
Start_one} {dazuo 400}} {Start_one} {514}
#trigger {法力:%s(%d)~/%s(%d)} {#math ms_num (2*%2-%1)/80*20;#wa 1000;#if %1>=%2 {mingsi @ms_num;#t+ Start_two;#t-
Start_two} {dazuo 400}} {Start_two} {514}
#trigger {食物:%s(%d)~/%s%d} {#if %1<=300 {fly tianzhu;#8 w;#2 s;e;buy dan;#wa 1000;eat dan;#wa 3000;w;fly sky;#t-
Start_three;#t- Start_all;AskLiJing} {#t- Start_three;#t- Start_all;AskLiJing}} {Start_three} {514}
说明:
1、AskLiJing变别名,内容是从天宫到李靖所处位置并问任务。
2、#if %1>=%2 {mingsi @ms_num;#t+ Start_two;#t- Start_two} {dazuo 400},#if是条件判断语句,整个语句效果是:如果内力值低
于最大内力值就dazuo 400;否则dazuo 变量dz_num的数值,{dazuo 400}根据自身情况修改,至于变量dz_num的值的计算方法后面有讲解。
3、#math dz_num (2*%2-%1)/86*20,这是打坐的计算方法,即打坐多少气血能最大限度的接近最大内力值,而不不会超过内力限制.至于
为什么是公式,那得部xyj的开发者了。须要说明的是这里的数字86,和恢复法力里的80,这个是怎么得出来的呢??这里借用老酒的讲解来解释
。
其中86是转化率参数,计算方法是你的根骨/3+内功心法/10+random(3),最后乘以2。这就是你每打坐20点气血可以得到的内力,以我
为例,根骨39,内功心法 170,(39/3+170/10+random(3))*2=60~66,也就是我每dazuo 20可能最多得到66点内力,最少得到60点内力,我用最
大值来做参数,这样打坐的时候就能保证我既可以尽量多的达到内力的两倍上限,但是也不会超过造成内力最大值提升。
法力的原理一样,只是把根骨和内功心法换成灵力和法术。(选自老酒的讲解)
法力的补满,同样道理。
本人补充一点,以老酒的数值(39/3+170/10+random(3))*2=60~66为参照说明:如果是39,那么39/3=13人人会算,但如果根骨是38呢?
38/3=13吗?不是的,mud里的取值是取所得值的整数部分,小数部分并不是四舍五入,而是直接忽略掉,38/3=12.6666。按照前面所说38/3就
只能等于12而不是13。
二、结束语
很久没打过这么多字了,别说还有点累。上面所述的只是粗略的灭妖机器的制作流程,由于写得匆忙难免出现些错误或遗漏,希望大多多
包函。具体的灭妖机器须要细化并解决许多实际问题,做此文只是希望能给新手们一些编机器的帮助。当初我自己做机器时,就一个抓取任务
的触发都学了好几天,才弄明白是怎么回事。希望这篇文章能让新人们少走些弯路,能够从中体验自己制作机器的乐趣及成就感。另外也希望
高手从中指教,互相探讨。兄弟抛赽砖,有玉的尽管砸过来。
兄弟在玩xyj2000总站,游戏名为小雪(xiaoxues),现正在制作Quest机器(基于Zmud462),如有疑难还望高手们不吝赐教!!