北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 9150|回复: 7

zmud中#WA的妙用

[复制链接]
发表于 2009-3-21 18:11:52 | 显示全部楼层 |阅读模式
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    [100%]  【 精力 】 0     / 0     (+   0)
【 气血 】 100   / 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 编辑 ]

评分

参与人数 1精华 +30 收起 理由
icer + 30

查看全部评分

北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2009-3-21 18:21:35 | 显示全部楼层
添加到wiki里了,算是为北侠做点贡献
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2009-3-21 20:16:50 | 显示全部楼层
写的真不错,我以前居然不知道,好好研究一下。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2009-3-21 21:58:56 | 显示全部楼层
补充说明一下,在cmud中已经取消了#WA命令,代之以waitfor,从适用范围来说,waitfor不如wa。在上文的例子中,跳楼仍然可以用waitfor实现,但是如何一次性输入上千个命令而不被系统踢出或拒绝执行?这个waitfor就做不到了

[ 本帖最后由 swift 于 2009-3-21 10:00 PM 编辑 ]
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2009-3-22 00:40:00 | 显示全部楼层
zmud的#wa是单线程的,即一个zmud的多个id窗口同时输入#wa是排队执行的,特烦。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2009-3-22 01:20:52 | 显示全部楼层
原帖由 sure 于 2009-3-22 12:40 AM 发表
zmud的#wa是单线程的,即一个zmud的多个id窗口同时输入#wa是排队执行的,特烦。

多个id同时大量的wa在zmud会造成巨慢,721的改进是#WA命令可以循环了,因此简化了不少程序。另外等待服务器的回馈信息,这个挺好,可以实现高效地输入大量命令。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2009-3-22 01:23:49 | 显示全部楼层
cmud在某个版本(二点几?)之后终于也实现了多线程的wait
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2009-5-11 08:47:57 | 显示全部楼层
#ala 更妙
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 11:26 AM , Processed in 0.010509 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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