zmud中#WA的妙用
zmud中#WA命令的妙用不知道会玩pkuxkx多久,所以有一点体会就写出来吧。
在写zmud机器人时往往会遇到这种情况:希望立即提取某一个或一组数值(如气血值),再马上对这个数值进行判定,然后根据情况决定下一步的行动。最常见的例子就是少林跳楼涨dodge,跳下来之后必须马上决定是吸气呢还是继续跳呢还是去打坐或睡觉。对这种情况zmud的#WA命令提供了很好的解决办法。
#WA就是#WAIT的简略写法。许多人可能只知道#WA加个数值表示等待一定的时间,实际上#WA本身也可以单独用。在zmud 4.62中#WA表示等待下一行出现,在7.21版本中表示等待服务器端传输上个命令的output的结束,简单地说,就是等待提示符再次出现(在pkuxkx中提示符是>)。比如在命令输入hp;#WA;hi那么在462中显示结果为
>hp
≡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━≡
hi
【 精神 】 100 / 100 【 精力 】 0 / 0 (+ 0)
【 气血 】 100 / 100 【 内力 】 0 / 0 (+ 0)
【 食物 】 0 / 400 [饥饿]【 潜能 】 104
【 饮水 】 357 / 400 [缺水]【 经验 】 2
≡━━━━━━━━━━━━━━━━━━━━━━━◎北大侠客行◎━━≡
> 你双手抱拳,作了个揖道:各位英雄请了!
在721中显示的结果为
>hp
≡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━≡
【 精神 】 210 / 220 [ 64%]【 精力 】 0 / 0 (+ 0)
【 气血 】 130 / 140 [ 77%]【 内力 】 0 / 1 (+ 0)
【 食物 】 0 / 400 [饥饿]【 潜能 】 20032
【 饮水 】 0 / 400 [饥渴]【 经验 】 7496
≡━━━━━━━━━━━━━━━━━━━━━━━◎北大侠客行◎━━≡
> hi
你双手抱拳,作了个揖道:各位英雄请了!
从上两例可以看出来,4.62中#WA是等待确定的一行,而7.21中#WA是等待服务器端把上个命令的结果完整地输出。因此我们可以利用这点来有效地提取hp数值。下面7.21里一个简单的跳楼机器人:
#ALIAS tiaolou {enter;#6 u;out}
#TRIGGER {你已稳稳地站在地上。} {#WA 2000;hp;#WA;#IF @neili>1000 and @jing>300 and @qi>450 {tiaolou} {#IF @neili>1000 {exert regenerate;exert recover;tiaolou} {exert regenerate;exert recover;dazuo 500}}
#TRIGGER {你运功完毕,深深吸了口气,站了起来。} {hp;#WA;#IF @neili>1000 and @jing>300 and @qi>450 {tiaolou} {#IF @neili>1000 {exert regenerate;exert recover;tiaolou} {exert regenerate;exert recover;dazuo 500}}
这是个相当简化的跳楼机器人,在鼓楼小院输入tiaolou即开始运行。如果是在4.62中,则上面trigger的命令中#WA被替换成4个#WA,同样也可以确保读出当前的气血内力值。
相对来说,7.21中的#WA命令更为好用,因为它不会受到干扰,比如chat或rumor频道消息。
此外,在zmud 7.21中,#WA可以有更多的用途。比如当你内力值很高的时候(如一万多),如何一口气向师傅请教几千上万次?如果手动操作,要不就输入太多的命令系统拒绝执行,要不就是等待时间过多。721中的#WA可以循环,因此可帮你实现这个功能。下面是一个简单的一口气像书生请教一千次literate的例子。
#LOOP 1000 {learn shu sheng for literate 50;#WA;exert regenerate;#WA}
这一用法还将适用于内力值很高时在少林领悟。各位可以试试自行开发。
[ 本帖最后由 swift 于 2009-3-21 10:05 PM 编辑 ] 添加到wiki里了,算是为北侠做点贡献 写的真不错,我以前居然不知道,好好研究一下。 补充说明一下,在cmud中已经取消了#WA命令,代之以waitfor,从适用范围来说,waitfor不如wa。在上文的例子中,跳楼仍然可以用waitfor实现,但是如何一次性输入上千个命令而不被系统踢出或拒绝执行?这个waitfor就做不到了
[ 本帖最后由 swift 于 2009-3-21 10:00 PM 编辑 ] zmud的#wa是单线程的,即一个zmud的多个id窗口同时输入#wa是排队执行的,特烦。 原帖由 sure 于 2009-3-22 12:40 AM 发表 http://pkuxkx.com/forum/images/common/back.gif
zmud的#wa是单线程的,即一个zmud的多个id窗口同时输入#wa是排队执行的,特烦。
多个id同时大量的wa在zmud会造成巨慢,721的改进是#WA命令可以循环了,因此简化了不少程序。另外等待服务器的回馈信息,这个挺好,可以实现高效地输入大量命令。 cmud在某个版本(二点几?)之后终于也实现了多线程的wait #ala 更妙
页:
[1]