北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
楼主: szybd

渡深百M留念,共享藏经阁任务机器人制作全过程

[复制链接]
 楼主| 发表于 2014-1-6 19:59:12 | 显示全部楼层
前面的原型关于战斗的方案有一个小问题:
藏经阁中没走一步都有busy的。所以走的同时发招busy没有用处,到下一个地点checkbuy,不忙时发招就可以了。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2014-1-6 22:38:33 | 显示全部楼层
眼花缭乱 已经记不得哪个变量是做什么用的了。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2014-1-6 23:01:48 | 显示全部楼层
此贴这么荡漾多姿,版主不射精,天理不容啊~~~
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 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
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2014-1-6 23:20:34 | 显示全部楼层
Execute("set cjg cjgwalk")
这个是干啥用的呢?这是一个指示语句。
看到这句话,表示走到地方了,该看见的东西,已经看到了,看不到的东西也就没有指望了。
啥东西是该看到的呢?当然是长老或僧兵。
这些该看到的东西,都需要触发器来感知。
这里有6个触发器。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 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)
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 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一下,又发现了敌人,那么敌人的计数会重复,就不准了。怎么办?
怎么做,可以保证我统计的敌人的数量肯定是准的? 这里留一个问题给大家思考。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 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
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 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
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 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
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-9-21 08:06 PM , Processed in 0.009278 second(s), 12 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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