找回密码
 注册
搜索
查看: 4779|回复: 21

【本了带你学Mush】《武当任务详解》

[复制链接]
门派:桃花岛
发表于 2019-2-23 23:57:08 | 显示全部楼层 |阅读模式
本帖最后由 liumaisj@tj 于 2019-2-24 02:33 编辑

看到小猪猪大神都开教学贴了,我这不赶紧跟上,只怕好东西都被讲完了!

嘿嘿,我自己比较擅长各种任务打补丁,也算是对武当、雪山、华山和送信有过一定程度的研究,那就从我的角度剖析一下这四个任务流程,介绍一下各个函数的作用。

大家熟悉了之后,机器人做任务时遇到各种问题,也知道从哪里下手了!

好了,闲话少说!开讲了!
--------------------

【任务模块介绍】

1.主要触发器定义,变量定义。
2.主函数(起始函数)初始化。
3.到达任务处,要任务。
4.要完任务后的考虑(获取任务地点、任务npc名字、武功等信息)。
5.任务放弃或任务执行。
6.出发前往目的地。
7.到达目的地后搜索。
8.搜索丢失后重新查找,以及搜索次数控制。
9.搜索成功后叫杀,与npc战斗。
10.战斗失败或达到搜索失败次数则返回放弃,战斗成功则返回领取奖励。


大致就是这10步操作,其它任何任务都可以拆分成这10步操作,也就是说,如果吃透一个任务流程,再看其它的任务就会觉得比较简单了!

如果能吃透所有任务流程,照猫画虎编写一个任务机器人也不是什么太难的事了!

评分

1

查看全部评分

门派:桃花岛
 楼主| 发表于 2019-2-24 00:02:27 | 显示全部楼层
本帖最后由 liumaisj@tj 于 2019-2-24 00:10 编辑

1. 主要触发器定义:

function wudangTrigger()

里边的内容就不一一讲解了,我主要说说怎么看这种触发器定义的函数。

DeleteTriggerGroup("wudangAsk")

任何触发器群定义之前,最好执行一下delete操作,以免有同名的冲突,这是一种非常好的编程习惯。

--------------
create_trigger_t('wudangAsk1',"^(> )*你向宋远桥打听有关",'','wudangAsk')

这是创建触发器,格式为——

create_trigger_t('触发器名字',"触发器匹配内容",'','信息匹配后调用的函数名字')

^(> )* 这是正则表达式,翻译过来就是行首^,有或者没有(>空格),*表示有或者没有。

意思就是——

> 你向宋远桥打听有关
你向宋远桥打听有关

这两种句式都会触发!

function wudangAsk()
    EnableTriggerGroup("wudangAsk",false)
    EnableTriggerGroup("wudangAccept",true)
end

wudangAsk()的内容很简单,如果已经向宋远桥打听任务了,则关闭wudangAsk触发器群组,开启wudangAccept群组,换句话说,就是准备要接任务了!

最后,SetTriggerOption("wudangAccept1","group","wudangAccept"),这种句式就是把相应触发器划归群组,便于将来对同类触发器进行批处理。

比如所有武当接受任务的触发器,都放进这个group里。

好了,有关触发器定义函数,就讲解到这里!明天继续讲解其余流程!

评分

1

查看全部评分

门派:古墓派
发表于 2019-2-24 00:11:13 | 显示全部楼层
哈哈,正好我写不动了,你继续吧,任务的我不写了。
门派:桃花岛
 楼主| 发表于 2019-2-24 00:11:44 | 显示全部楼层

2.主函数(起始函数)初始化。

本帖最后由 liumaisj@tj 于 2019-2-25 17:37 编辑

function wudang()--武当任务主函数,也是起始调用的函数
    if hp.shen<0 then
           return turnShen('+')--这个应该是判定正神不够,可以自动转换正神的,但是turnshen这个函数没找到,看来已经没有这个功能了!
        end
    wudangTrigger()--这个就是调用之前讲的武当触发器定义了。
    job.level=nil--这些是变量初始化,这里先不讲作用,等遇到了再解释。
    job.lost=0
    job.name='wudang'--任务名称初始化为‘wudang’,这个非常非常关键,很多功能的调用都是通过这个来控制的,比如肚子饿了,发出咕咕声,如果判断是处于任务中,则不会去吃喝,否则就会战斗中突然跑去吃喝,导致任务失败。
    return check_halt(wudangGo)--以上程序跑完后,接下一个函数wudangGo,check_halt的作用就是检查不忙后,再调用wudangGo
end

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

function wudangGo()--到达武当山,三清殿后,准备要任务。
    return go(wudangBegin,"武当山","三清殿")--go这个函数的使用,在小猪猪的教学贴里有详细介绍,这里就不介绍了,大家可以去看看。
end
function wudangBegin()--要任务前的准备,如果是newbie,也就是选择了任务前内力准备,则返回内力准备,否则直接调用wdstart
    if newbie==1 then return zhunbeineili(wdstart) else return wdstart() end
end
function wdstart()--武当任务开始,先执行prepare_lianxi,然后再执行wudangStart
    return prepare_lianxi(wudangStart)
end  

----------
大家也许会奇怪,为什么要任务前,要检查内力,检查练习呢?

原来做任务前,内力不足的话,会导致战斗失败,而状态busy,则无法要到任务,所以检查内力和检查是否busy,就分别由zhunbeineili()和prepare_lianxi()两个函数完成。

先看prepare_lianxi(),它是定义在job.lua中。

prepare_lianxi=function(func)--这个函数是带参数的,(func)就是参数,是一个函数参数。
   prepare_trigger()
   EnableTriggerGroup("prepare_neili",true)
   flag.prepare=1
   if func~=nil then--如果函数参数不为空,则job.prepare=func,后边就可以调用这个函数参数了。
      job.prepare=func
   else
      job.prepare=test   
   end
   condition={}
   exe('cond')--这里是检查condition状态,看看是否busy.
   return check_busy(prepareLianxi)--最后转去函数prepareLianxi(),check_busy()就是检查是否busy,小猪猪的帖子有详细解释。
end
function prepareLianxi()--这个函数就是真正的准备练习技能的函数了。
   if mydummy==true then--如果发现有大米出现,则直接转去做大米任务。
      EnableTriggerGroup("prepare_neili",false)
      DeleteTriggerGroup("prepare_neili")
      return dummyfind()
   end
   if (not condition.busy or condition.busy == 0) and job.prepare~=duHhe_start and job.prepare~=duCjiang_start then--如果不busy,也不是渡江渡河开始状态,则转去内力准备
      return prepare_neili(job.prepare)--这里就是先内力准备,然后执行job.prepare,这个变量在上边已经赋值为func这个参数了,也就是wudangStart
   end
   if condition.busy>60 then --如果busy>60秒,则练功和打坐等待。
                                if score.party=="姑苏慕容" and need_dzxy=="yes" and dzxy_level==3 and hp.food>50 and hp.water>50 and (locl.time=="戊" or locl.time=="亥" or locl.time=="子" or locl.time=="丑" ) then
                                  messageShow("任务监控:是三段斗转星移,而且是晚上,可以去看星星领悟斗转星移了!","white")
                                  return check_halt(checkdzxy)
                                end
         end
   flag.jixu=1
   if hp.neili_max>hp.neili_lim-10 then
      exe('unset 积蓄')
   elseif job.prepare and (job.prepare==test or job.prepare==duHhe_start or job.prepare==duCjiang_start) then
      exe('unset 积蓄')
   else
      flag.jixu=0
      exe('unset 积蓄')
   end

   if job.zuhe["gblu"] and not locl.id["铜钱"] and hp.exp<2000000 then exe('drop 1 coin') end

   prepare_neili_a()

end
----------

prepare_neili=function(func,p_cmd)--准备内力函数异常复杂,后边还调用了prepare_neili_a,prepare_neili_b,prepare_neili_c等等,这里就不详细介绍了,将来有机会另外开贴详细介绍。

   local l_db
   if func~=nil then
      job.prepare=func
   else
      job.prepare=test   
   end

   tmp.db=p_cmd
   l_db=1/2
   if tmp.db and type(tmp.db)=="number" and tmp.db<2 then
      l_db=tmp.db
   end

   if hp.neili>hp.neili_max*l_db and job.prepare~=test and job.prepare~=fight_prepare then
      return check_bei(job.prepare)
   end
   
   prepare_trigger()
   EnableTriggerGroup("prepare_neili",true)
   flag.jixu=1
   exe('unset 积蓄')
   flag.prepare=0
   exe('yun jing;yun jingli;hp')
      if job.zuhe["gblu"] and not locl.id["铜钱"] then exe('drop 1 coin') end
         prepare_neili_a()
end
-----
好了,今天这贴是关于武当任务初始化的,大家只需要记住几个关键点!

1.wudang()函数是初始化函数,将触发器和变量等初始化。
2.去武当山,三清殿,用go函数找宋远桥要任务。
3.zhunbeineili(任务前准备内力),preparelianxi(如果busy则练功等待,否则就跳转去准备内力)     
                        

评分

1

查看全部评分

门派:桃花岛
 楼主| 发表于 2019-2-24 00:12:17 | 显示全部楼层

占楼3                                             
门派:桃花岛
 楼主| 发表于 2019-2-24 00:12:51 | 显示全部楼层
占楼4                                 
门派:桃花岛
 楼主| 发表于 2019-2-24 00:13:32 | 显示全部楼层

占楼5                                          
门派:桃花岛
 楼主| 发表于 2019-2-24 00:14:06 | 显示全部楼层

占楼6                                   
门派:桃花岛
 楼主| 发表于 2019-2-24 00:14:39 | 显示全部楼层
占楼7                        
门派:桃花岛
 楼主| 发表于 2019-2-24 00:15:11 | 显示全部楼层
占楼8                                          
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|书剑永恒MUD ( 闽ICP备14012032号|闽公网安备 35050202000162号 )

GMT+8, 2025-5-1 02:22 , Processed in 0.033720 second(s), 31 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表