背景:
阅读文章

MUSHclient应用实例:如何用mush做简单的炼丹机器人

[日期:2021-03-18] 来源:  作者: [字体: ]

 目前来说,炼丹机器人大家应该都有了,一般都是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;
           
           
         }   


如果有什么地方不懂的,可以给我留言。

收藏 推荐 打印 | 录入:sbso | 阅读:
相关内容       MUSHclient 
本文评论   [发表评论]   全部评论 (0)
内容推送
52mud提供
一起回忆泥巴游戏QQ群68186072
52mud官方微信公众平台
热门评论