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