szybd 发表于 2014-1-6 19:59:12

前面的原型关于战斗的方案有一个小问题:
藏经阁中没走一步都有busy的。所以走的同时发招busy没有用处,到下一个地点checkbuy,不忙时发招就可以了。

feehoo 发表于 2014-1-6 22:38:33

眼花缭乱 已经记不得哪个变量是做什么用的了。

pinkagaric 发表于 2014-1-6 23:01:48

此贴这么荡漾多姿,版主不射精,天理不容啊~~~

szybd 发表于 2014-1-6 23:17:56

根据上述的方案调整,cjggonext()修改如下:走之前,先yun qi,yun powerup,走过去被busy了,这事就干不成了。
function cjggonext()
      cjgfindenemyflag = "none"
      Execute("yun qi")
      Execute("yun powerup")
      Execute(cjgcurrentstep)
      cjggotoposition(cjgnextx,cjgnexty)
      Execute("set cjg cjgwalk")
end

szybd 发表于 2014-1-6 23:20:34

Execute("set cjg cjgwalk")
这个是干啥用的呢?这是一个指示语句。
看到这句话,表示走到地方了,该看见的东西,已经看到了,看不到的东西也就没有指望了。
啥东西是该看到的呢?当然是长老或僧兵。
这些该看到的东西,都需要触发器来感知。
这里有6个触发器。

szybd 发表于 2014-1-6 23:24:16

name = "cjg6"
   match="^[>\\s]*少林.*\\(Husi sengren\\).*"
   cmd = "cjgsengbing('一') "
   addmytriggerzz(name,match,cmd)

   name = "cjg7"
   match="^[>\\s]*(\\S+)位少林.*\\(Husi sengren\\).*"
   cmd = "cjgsengbing('%1') "
   addmytriggerzz(name,match,cmd)

   name = "cjg8"
   match="^[>\\s]*少林.*\\(Husi zhanglao\\).*"
   cmd = "cjgzhanglao('一') "
   addmytriggerzz(name,match,cmd)

   name = "cjg9"
   match="^[>\\s]*(\\S+)位少林.*\\(Husi zhanglao\\).*"
   cmd = "cjgzhanglao('%1') "
   addmytriggerzz(name,match,cmd)
----------以上四个是看到敌人的触发器。
还有一个是没看到敌人就知道有敌人的触发器:
   name = "cjg10"
   match="^[>\\s]*护寺僧人大叫一声,招来了附近的护寺僧众,向你猛攻过来!.*"
   cmd = "cjgfindenemy()"
   addmytriggerzz(name,match,cmd)
----------------------------------------------
第六个就是我们的指示触发器。
   name = "cjg11"
   match="^[>\\s]*设定环境变量:cjg = \"cjgwalk\".*"
   cmd = "cjgwalkfinish() "
   addmytriggerzz(name,match,cmd)

szybd 发表于 2014-1-6 23:34:36

这些触发器,触发后都干啥事呢?也就对应的函数起什么作用呢?
cjgsengbing(num)
cjgzhanglao(num)
这两个个函数就是统计看到的敌人数量,并累加。这样我们就知道有几个对手:几个长老,几个僧兵
--------------------------------------------------------------------------
cjgfindenemy()
这个函数表明肯定有敌人,和前面的有重复之嫌,这个触发器不要也可以。不过从容错角度讲,加入有好处,毕竟有时会丢行的。
function cjgfindenemy()
        cjgfindenemyflag = "yes"
end

-----------------------------------------------------------------------
cjgwalkfinish()
这个函数是知道走过去了,也知道有没有发现敌人了,有敌人就要开干。没敌人就继续走。
function cjgwalkfinish()
        if cjgfindenemyflag == "yes" then
                if cjgsengbingnum+cjgzhanglaonum ==0 then
                        Note("这里没有敌人,问题待查")
                        cjgwalk()
                else
                        cjgfight()
                end
        else
                Note("此地无敌人,继续走吧")
                cjgwalk()
        end
end
------------------------------------------------------------------------
终于看到了cjgfight()函数,说要战斗,说半天,还没开打啊?!
不要着急,打仗嘛,讲究步步为营,瞎打能行吗?
------------------------------------------------------------------------
上面的处理有个问题:
我走过去了,又手工look一下,又发现了敌人,那么敌人的计数会重复,就不准了。怎么办?
怎么做,可以保证我统计的敌人的数量肯定是准的? 这里留一个问题给大家思考。

szybd 发表于 2014-1-6 23:36:41

看到没有,明明叫fight函数,不过还是没打,为啥呢?busy着呢,打也白搭。等空下来再说
function cjgfight()
        if cjgzhanglaonum > 0 then
                cjgduishouid = "husi zhanglao"
        else
                cjgduishouid = "husi sengren"
        end

        checkbusystart()
        addunbusyfunc(cjgfightunbusydo)
        checkbusyon()
end

szybd 发表于 2014-1-6 23:42:02

终于开打了,每次开打前,先加状态,如果状态已经加过了,反正不消耗什么,如果状态正好失效了,加上嘛。
然后呢?看看当前对手是不是zhanglao,如果是zhanglao,就busy他,如果已经被busy了,再busy一下也不消耗什么,这样处理可以免去记录busy状态的麻烦。
不是长老,我还懒得busy他呢,我有天木和天炎,开了大智,普通僧兵根本不是个。
好了,终于要发招了,发什么招 呢?cjgpfm(cjgduishouid),秘密在这里,等会儿讲。
最后的Execute("follow "..cjgduishouid)起什么作用?
这个也留做作业吧,请大家思考。
function cjgfightunbusydo()
        Execute("yun qi")
        Execute("yun powerup")
        pfmzuida("husi sengren")
        if cjgduishouid == "husi zhanglao" then
                cjgbusy(cjgzhanglaonum)
        end
        cjgpfm(cjgduishouid)
        Execute("follow "..cjgduishouid)
end

szybd 发表于 2014-1-6 23:43:31

今天就到这里了。明天继续。哦,把cjgpfm(cjgduishouid)说一下吧。其实就是一个罗汉拳,不带加力的。内功省着点用。
function cjgpfm(nameid)
        Execute("kill "..nameid )
        Execute("unwield all")
        Execute("bei none")
        Execute("enable cuff luohan-quan")
        Execute("bei cuff")
        Execute("perform cuff.luohan "..nameid)
end
页: 1 2 3 4 [5] 6 7 8 9 10
查看完整版本: 渡深百M留念,共享藏经阁任务机器人制作全过程