背景:
阅读文章

ZMUD机器人制作(精)

机器人实例-打坐吐纳机器人

[日期:2013-12-11] 来源:mud游戏网  作者: [字体: ]
这个机器人的制作非常简单,仅仅需要第二章和第三章的知识就足够了.但是一个新手做出来的机器人和高手做的比起来就会显得简陋.

实际制作过程

希望机器人具备的特点:稳定,效率最大化,适用面最大化,打坐吐纳完毕自动下线

A 稳定方面:防发呆,断线自动重连

B 率最大化方面: (a)1000内力或者精力以下充分利用打坐或者吐纳双倍
                   (b)气血或精神如果够,刚好打坐吐纳至内力精力增加;如果不够,将气血精神用完,然后使用恢复手段
                   (c)利用休息周30%的提速,并且对付恶心的噩梦周

C 适用面方面:打坐吐纳统一为一个机器人,由于内力比精力重要,选择优先打坐,内力达到设定目标时自动转化为吐纳,同时可以设定精力优先于内力。对还没有脱离发呆室的未成年人同样适用。

步骤一:如果你听从了我的建议,相信你一定制作了4个专门的trigger来抓取hp的信息,然后给它们统一取一个class名并且保存到一个专门的文件,那么恭喜你,你现在要做的仅仅就是加载这个文件,去掉经验值和潜能抓取的2个trigger,这一步就完成了。

#tri {【%s气血%s】%s(%d)%s/%s(%d)%s~[(*)~%~]%s【%s内力%s】%s(%d)%s/%s(%d)}
       {#var qixue %1
        #var qixue_max %2
        #var qixue_health %3
        #var neili %4
        #var neili_max %5} {hp}
#tri {【%s精神%s】%s(%d)%s/%s(%d)%s~[(*)~%~]%s【%s精力%s】%s(%d)%s/%s(%d)}
       {#var jingshen %1
        #var jingshen_max %2
        #var jingshen_health %3
        #var jingli %4
        #var jingli_max %5} {hp}


步骤二:开始对内力,精力,气血,精神进行计算,来确定dazuo tuna的数值

先计算打坐
#math need [@neili_max*2+1-@neili]
//计算还需要多少内力才能使内力上限增加
#if (@neili_max<1000) {#math need (@need+1)/2}
//内力不足1000,需要减半,注意(@need+1)是为了防止/2之后自动取整造成结果不足以使内力上限增加
#var @dazuo [@qixue-(@qixue_max+9)/10]
//最多能供使用的气血是@qixue-@qixue_max/10,加9也是为了对付取整
#var need [(@need*100+129)/@sudu]
//通过一个变量@sudu来调整需要打坐的数值,+129对付取整
#var need %min(@dazuo,@need)
//%min表示2者之间小的那个
#var need %max(@need,10)
//%max表示2者之间大的那个,最终need的值就是你dazuo的数值了。注意@dazuo的值可能小于10
#if (@dazuo<10) {恢复} {dazuo @need}}
//气血不够恢复,否则dazuo

再计算吐纳,只需要做少量的修改,用同样的变量就可以了,尽量减少使用变量的数目
#var need [@jingli_max*2-@jingli+1]
#var need [(@need*100+129)/@sudu]
#math dazuo @jingshen-(@jingshen_max+9)/10]
#math need %min(@need,@dazuo)
#var need %min(@need,10)
#if (@dazuo<10) {恢复} {#if ((@neili>500)|(@fadai=0))
                              {tuna @need} {dazuo 500}}
//与打坐的时候不同,当你脱离了发呆室并且内力不够时,选择打坐,以确保有足有的内力恢复精神

步骤三:根据time的信息来修改@sudu的值,需要2个trigger
#tri {本周为噩梦之周*降低*降低(%d)~%} {#var sudu [100-%1]}
//抓取打坐吐纳速度降低的数值到%1,对@sudu进行修改
#tri {本周为(*)之周} {#if (%1!="噩梦") {#if (%1="休息") {#var sudu 100} {#var sudu 130}}}
//最前面判断%1是否=噩梦,以避免跟第一个trigger发生干扰

步骤四:把步骤二和三合起来
#tri {本周为噩梦之周*降低*降低(%d)~%}
  {#var sudu [100-%1]
   #if (@neili_max>=@neili_aim) {#var action 0}
//用@action的值来控制行为,值为1就打坐,值为0就吐纳
   #if @action {#math need [@neili_max*2+1-@neili]
              #if (@neili_max<1000) {#math need (@need+1)/2}
              #var @dazuo [@qixue-(@qixue_max+9)/10]
              #var need [(@need*100+129)/@sudu]
              #var need %min(@dazuo,@need)
              #var need %max(@need,10)
              #if (@dazuo<10) {恢复} {dazuo @need}
            }
           {#var need [@jingli_max*2-@jingli+1]
            #var need [(@need*100+129)/@sudu]
            #math dazuo @jingshen-(@jingshen_max+9)/10]
            #math need %min(@need,@dazuo)
            #var need %min(@need,10)
            #if (@dazuo<10)
             {恢复} {#if (@jingli_max<@jingli_aim)
                   {#if ((@neili>500)|(@fadai=0)) {tuna @need} {dazuo 500}}
                   {#var zhanghao {};#var mima {};quit}
//再加入一个if语句,判断精力最大值如果没有达到目标,就吐纳,否则清空变量zhanghao和mima的值,然后退出,其中zhanghao和mima中保存着你id的帐号和密码,这样做是为了阻止自动连线
                 }
           }
    }
#tri {本周为(*)之周}
  { #if (%1!="噩梦") {#if (%1="休息") {#var sudu 100} {#var sudu 130}}
    #if (@neili_max>=@neili_aim) {#var action 0}
    #if @action {#math need [@neili_max*2+1-@neili]
              #if (@neili_max<1000) {#math need (@need+1)/2}
              #var @dazuo [@qixue-(@qixue_max+9)/10]
              #var need [(@need*100+129)/@sudu]
              #var need %min(@dazuo,@need)
              #var need %max(@need,10)
              #if (@dazuo<10) {恢复} {dazuo @need}
            }
            {#var need [@jingli_max*2-@jingli+1]
            #var need [(@need*100+129)/@sudu]
            #math dazuo @jingshen-(@jingshen_max+9)/10]
            #math need %min(@need,@dazuo)
            #var need %min(@need,10)
            #if (@dazuo<10)
             {恢复} {#if (@jingli_max<@jingli_aim)
                   {#if ((@neili>500)|(@fadai=0)) {tuna @need} {dazuo 500}}
                   {#var zhanghao {};#var mima {};quit}
   
                }
           }
    }


步骤五:制作恢复的方法,dazuo和tuna时恢复的方法不一样,需要if语句来判断
#alias 恢复 {#if @action {#if @fadai {out;fadai} {exert recover;hp;time}}
//打坐时的恢复方法,@fadai用来指示是否脱离发呆室,分别采用发呆和吸气的方法来恢复
            {#if @fadai {out;fadai} {#if (@neili<500)
                               {dazuo 500} {exert regenerate;hp;time}
                             }
             }
//吐纳的恢复方法,exert regenerate之前要判断内力是否够用
          }
#tri {你发呆了一会儿,发现自己居然精神百倍!} {#wa 1500;enter;hp;time}
#tri {你吐纳完毕,睁开双眼,站了起来。}
           {#if @fadai {hp;time} {exert regenerate;hp;time}}
//能发呆就不用内力恢复,由于吐纳之前确定内力够用,是可以吸气的
#tri {你运功完毕,深深吸了口气,站了起来。}
           {#if @fadai {hp;time} {exert recover;hp;time}}


步骤六:制作数个按钮来修改zhanghao,mima,fadai,action,jingli_aim,neili_aim按钮制作下一章再讲,制作技巧则在第八章讲到。不制作按钮也可以手动修改。
     
加入断线自动重连,手动修改一个zmud系统自带alias
#alias {atconnect} {@zhanghao;@mima;yes} {System}
#tri {欢迎来到北大侠客行!} {w;s;d;#if @fadai {out;fadai} {exert recover;exert regenerate;hp;time}}
由于网络速度的原因,用完发呆室之后的#wa 1500并不能消除busy
#tri {你的动作还没有完成,不能移动。} {#wa 1500;enter;hp;time}
另外机器人会由于某些原因中断,需要一个办法来让它重新运转。这是为了对付地痞以及网络速度等不确定因素,具体办法我会在第七章讲到。

至此机器人已经基本制作完成了。这个实例旨在抛砖引玉,完全面对新手,注释得也特别详细。
本例为了让新手能学得更多才做得复杂些,其实将未成年人和成年人混在一起并不是很好,会使机器人制作难度加大很多,看起来也很复杂。
另外在下一章中会用函数的方法将本例的计算大大简化。

【内容导航】
第1页:聊聊zmud和机器人 第2页:机器人的核心灵魂
第3页:variable和alias的初级应用以及if语句 第4页:机器人实例-打坐吐纳机器人
第5页:buttons﹑系统变量﹑function 第6页:Variable和Alias的更多应用
第7页:掌控时间 第8页:提高机器人稳定性和适用面
第9页:丰富你的机器人 第10页:机器人实例--朝廷守门机器人
第11页:Path的用法 第12页:variable和alias的进一步应用
第13页:遍历实现的一种方法 第14页:路径的逆转和简化
第15页:实际例子--解决乱入的2种办法
收藏 推荐 打印 | 录入:sbso | 阅读:
相关内容       机器人  zmud 
本文评论   [发表评论]   全部评论 (0)
内容推送
52mud提供
一起回忆泥巴游戏QQ群68186072
52mud官方微信公众平台
热门评论