目前来说,炼丹机器人大家应该都有了,一般都是zmud的,zmud有个缺点,遇到断线或者发呆什么的,比较难重新连接,当然以前胖胖包这位世外高人,也指点了一下如何克服zmud机器人发呆的方法,可以通过发呆自动断线(unset keep_idle),然后重连以后启动机器人的方法。喜欢zmud的朋友可以继续钻研zmud,让机器人更加完美,当然本文只是对喜欢mush做机器人的朋友做一些抛砖引玉的功能。
首先做mush的炼丹机器人,首先要考虑通过什么快捷键让机器人启动,一般的qm机器人是通过start让机器人启动,所以参考start的写法,大家可以写一个炼丹机器人的启动指令。下面是qm机器人start的写法,具体可以查找脚本中的on_alias函数。
case "start":
world.note("7");
start_time();
set("room/id", -1);
set("next_step/flag", "");
set("quest/flag", "liandan");
send("#t+ pk_kill;#t+ ks;hp;#t+ im_special1;l budai of me;l baoguo of me;i;quest;special");
do_prepare();
break;
1. 所以我们可以根据上面的模式,写一个炼丹启动的指令,在脚本的on_alias函数中添加如下代码:
case "ld":
world.EnableTriggerGroup("ldd", true);
set("next_step/flag", "");
set("quest/flag", "liandan");
set("next_step/flag", "COMMANDS");
set("next_step/cmds","ask yao chun about 炼丹;set no_teach liandan");
goto(1388);
break;
然后按ctrl+alt+9,打开aliases这个栏位,点add按钮,新增一个命令ld,如下图片:
这样添加的意思,就是当你在游戏中输入ld并按回车,这个机器人会自动走动到1388个坐标,并ask yao chun about 炼丹,然后设定环境参数为liandan。
3.写一个函数,
function on_ld(name,output,wildcards)
{
var wcs = VBArray(wildcards).toArray();
switch (name) {
case "ld_start":
stopall();
world.EnableTriggerGroup("ldd", true);
set("next_step/flag", "");
set("next_step/flag", "COMMANDS");
set("next_step/cmds","ask xiao tong about 草药");
goto(1387);
break;
}
}
注意:在脚本文件中函数的格式都是上面的类型, 如果对函数和case有不明白的地方,建议参考JavaScript 对象简介的文章,http://www.w3school.com.cn/js/js_obj_intro.asp
2.写一个触发,如下图片:
这个是机器人比较关键的部分,以后你所有的机器人必须通过类似的触发进行制作。label就是指触发器的名字ld_start,这个要与脚本文件中的case "ld_start"的一致。script是指这个label所在函数的名称,这里写on_ld,而group是指一个组别,可以定义也可以不写,主要是为了可以管理触发器群组的,举个例子world.EnableTriggerGroup("lds",true); 这个命令的意思就是打开group名为lds下面的所有触发器。
4.然后就是进入机器人的调试阶段,你先输入ld,看机器人是不是自动走到姚春那里问炼丹的事情,问完炼丹是不是去问小童采药的事情。
5.再后面,就是自己写炼丹过程的一些触发了,我把我的触发和一些case公布给大家参考,大家可以自己写写,写的比较凌乱,大家多多见谅。
下面是炼丹函数:(其中world.GetVariable("liandan_loc"),这个是采药的地点,自己可以在ctr+alt+7的参数中自己add一个参数liandan_loc)
function on_ld(name,output,wildcards)
{
var wcs = VBArray(wildcards).toArray();
switch (name) {
case "ld_start":
stopall();
world.EnableTriggerGroup("ldd", true);
set("next_step/flag", "");
set("next_step/flag", "COMMANDS");
set("next_step/cmds","ask xiao tong about 草药");
goto(1387);
break;
case "ld_xt":
stopall();
tl = world.GetVariable("liandan_loc");
etdk();
world.EnableTrigger("ld_cy", true);
world.EnableTrigger("ld_bz", true);
set("next_step/flag", "");
set("next_step/flag", "COMMANDS");
set("next_step/cmds","l;summon chuwushouzhuo;cun dan;cai yao");
goto(tl);
break;
case "ld_cy":
send("l");
world.doafter(5, "cai yao");
break;
case "ld_fail":
send("l;cai yao");
break;
case "ld_fight":
tl = world.GetVariable("liandan_loc");
world.EnableTrigger("ld_cy", true);
world.EnableTrigger("ld_bz", true);
world.EnableTimer("timer2", false);
set("next_step/flag", "");
set("next_step/flag", "COMMANDS");
set("next_step/cmds","cai yao");
goto(tl);
break;
case "ld_cycg":
stopall();
set("next_step/flag", "");
set("next_step/flag", "COMMANDS");
set("next_step/cmds","give cao yao to xiao tong");
goto(1387);
break;
case "ld_eat":
var gt = wcs[2].toLowerCase();
if(gt == "change dan" || gt == "yinyang dan" || gt == "zhending san" || gt == "zhuque dan" || gt == "wanshou dan" || gt == "xuanwu dan" || gt == "haoyue dan" || gt == "longwan dan" || gt == "qinglong dan" || gt == "baihu dan" || gt == "longwang dan")
{
send("eat " + gt);
return;
}
break;
case "ld_bz":
world.EnableTrigger("ld_cy", false);
world.doafter(3, "cai yao");
break;
case "ld_kl":
world.EnableTrigger("ld_cy", false);
world.EnableTrigger("ld_bz", false);
world.EnableTimer("timer2", true);
send("halt;kill du she;kill du langzhong");
break;
case "ld_faint":
world.EnableTrigger("ld_cy", false);
world.EnableTrigger("ld_bz", false);
send("kill du she;kill du langzhong");
break;
case "ld_du":
world.EnableTrigger("ld_cy", false);
world.EnableTrigger("ld_bz", false);
send("halt;kill du she;kill du langzhong");
world.EnableTimer("timer2", true);
break;
case "ld_give":
set("next_step/flag", "");
set("next_step/flag", "COMMANDS");
set("next_step/cmds","liandan");
goto(1389);
break;
case "ld_cg":
stopall();
set("quest/flag", "liandan");
world.EnableTriggerGroup("ldd", false);
set("next_step/flag", "");
set("next_step/flag", "COMMANDS");
set("next_step/cmds","ask yao chun about 炼丹;ask yao chun about 炼丹;look " + world.GetVariable("weapon")+ " ;hp;l budai of me;l baoguo of me;i;set no_teach prepare");
goto(1388);
break;
}
}
如果有什么地方不懂的,可以给我留言。