背景:
阅读文章

ZMUD机器人制作(精)

variable和alias的初级应用以及if语句

[日期:2013-12-11] 来源:mud游戏网  作者: [字体: ]
3.1 Variable和Alias

相关命令 #var,#math,#add,,#alias
北侠众应该都知道Alias的用法吧,论坛和主页下载的zmud包里都有前辈做好的路径,要去哪里简单的输入地名的拼音就可以了。
Alias就是别名,用一个短命令替代一串长命令

另外Alias还可以带参数使用
实例一:#alias {chan} {wield sword;perform sword.chan %1 %2;unwield sword}
这样就制作一个alias,下面分别是4种使用结果
A: chan        相当于输入wield sword;perform sword.chan;unwield sword
B: chan wushi    相当于输入wield sword;perform sword.chan wushi;unwield sword
C: chan zhang san相当于输入wield sword;perform sword.chan zhang san;unwield sword
D: chan 1 2 3    相当于输入wield sword;perform sword.chan 1 2;unwield sword 3
可以看到,无论你带不带参数,带几个参数,zmud都不报错,他都按照他自己固定的理解来执行你的命令,2个参数以内的依次替换成%1 %2,多余的参数全部放在最后,没有就直接无视,相当的灵活。

Variable就是变量,只有用到了变量,才能进行各种运算,并且根据运算结果作出不同的反应。
#var为一个变量赋值,而不管这个变量存不存在。变量不存在时新建变量,存在时改变它的值。
比如#var abc 100,将100赋值给变量abc,或者说abc的值就是100了。另一种赋值方法是abc=100

变量的值用@加上变量名来使用和表示。
例如: #show abc的值是@abc   
          显示为 abc的值是100
#math 用来计算,将结果赋值给变量,zmud只支持+ - * /和()的四则混合运算,运算优先权是()大于*/大于+ -,并且仅支持整数,如果运算结果不是整数,自动进行取整运算。

小技巧一:[ ]的运用

[ ]表示运算之后结果,举例来说
#var a 100/5;#var b [100/3];#math c 100/3
#show @a,@b,@c
显示结果为100/3,33,33
没错,#var不负责运算,[]负责运算,起到了#math的作用。

小技巧二:&variable和@variable直接用在trigger的Pattern里面

实例:如何使用大米a
#tri {胡一刀说道:『我收到消息,听说&hydaddress有盗宝人&dbrname~(&dbr~)找到了闯王宝藏的地图} {}
#tri {你有种去&hydaddress找我兄弟&dbrname~(&dbr~),他会给我} {}
#alias ddd {act hydjob 地点=@hydaddress,name=@dbrname,id=@dbr}
#tri {盗 宝 人*@dbrname~(@dbr~)} {follow @dbr;hit @dbr}
可以看到第一个trigger和第二个trigger,只有Pattern,没有任何Commands
没错,&hydaddress,&dbrname,&dbr被用来做通配了,通配之后被通配的内容已经自动保存到相应变量里了,不需要任何赋值操作可以直接使用了。
命令行输入ddd就可以在动作频道发出信息让大米a去寻找盗宝人了。
最后一个trigger,@dbrname,@dbr也被用来做通配了,只有找到自己的盗宝人才会触发跟随攻击命令。
这种方法又体现了zmud的灵活性,可以省去赋值,也可以省去判断是否是自己的盗窃人
另外&和变量名中间可以再加入%d或者%w等特殊字符。比如&{%w}dbr用来表示仅仅通配字母,并且赋值给变量,不匹配的不会触发并且不会赋值。

小技巧三:现在已经讲了trigger,variable和alias,后面还会讲到button,还有macro,这些都可以互相糅合互相嵌套,任何一个都可以包含另外一个,也可以自己包含自己,再次体现了zmud的灵活。

实例:#Alias jiaxing {do 6 e;se;s;e;e;#var back jiaxingb}
    #Alias jiaxingb {w;w;n;nw;#6 w}
    #ALIAS taohua {#6 e;se;s;e;e;nd;e;e;e;e;n;enter;enter boat;#var back taohuab}
    #ALIAS taohuab {out;s;w;w;w;w;su;w;w;n;nw;#6 w}
    #alias ddd {@back}
可以看到alias里包含了变量,变量里包含alias,以上4个alias分别是嘉兴和桃花去和回的路径,但是嫌回来时后面加个b太麻烦了,就用上面这个方法。不管你是在嘉兴还是在桃花,只要去的时候是用alias去的,回来的时候统一用ddd返回。并且不影响jiaxingb,taohuab的使用。

3.2 if语句 相关命令#if

格式:#if 表达式 {commands1} {commands2}
当表达式的结果运算为真时,执行commands1,否则执行commands2

另2种变化了的格式都可以用
#if 表达式 {} {commands2}
#if 表达式 {commands1}

比如:#tri {【%s气血%s】%s(%d)%s/%s(%d)%s~[(*)~%~]%s【%s内力%s】%s(%d)%s/%s(%d)} {#if (%1>500) {dazuo 500} {exert recover;dazuo 500}}
简单的判断一下气血值,如果大于500就dazuo 500,否则就先吸气然后dazuo 500

#if 可以多重使用,commands1和commands2里面都可以包含一个或多个#if
表达式也可以是多个表达式的组合,多个表达式之间用&或者|来连接。&表示“并且”,|表示“或者”。例如
((表达式1&表达式2)|表达式3) 只要表达式3为真,总表达式就为真;只要表达式12同时为真,总表达式就为真;其他情况都不真。
注意事项:去掉中间的子括号,(表达式1&表达式2|表达式3)会造成歧义,zmud不会报错,具体结果请自行试验。

表达式里通常用到的比较符号有“>” “<” “=” “!=” “<>” “<=” “>=”,其中!=表示不等于,<>表示大于或者小于
注意事项:表达式不仅仅是比较数字,也能比较字符串甚至中文,如有需要可以加上" "
       比如(@dbr="mengmian shashou"|@dbrname="张三")

实例:做一个机器人,明教弟子碰到盗宝人先夺兵器直至成功夺掉兵器,然后用阴风刀,成功用出1次阴风刀之后用tisha来busy盗宝人,一直到将其杀掉。
ps.只是举个例子,不讨论这个打法的正确性。
需要解决的困难:自己在busy的时候,任何perform的结果都是( 你上一个动作还没有完成,不能施用外功。),无法判断接下来的动作。
假设你已经将盗宝人的名字储存到@dbrname中,将盗宝人的id储存到@dbr中。
实际给出2种制作方案:

A:#tri {盗 宝 人*@dbrname~(@dbr~)} {follow @dbr;hit @dbr;perform sword.duo @dbr;#var pfm 1}
//见面夺兵器,注意pfm的值
  #tri {可是@dbrname的看破了你的企图,立刻采取守势,使你没能夺下兵刃。} {hit @dbr;perform sword.duo @dbr}
//失败了继续夺
  #tri {你使出圣火神功的夺字诀, @dbrname顿时觉得眼前一花,手腕一麻,手中兵刃脱手而出!} {killall @dbr;perform sword.yinfeng @dbr;#var pfm 2}
//夺掉了武器,阴风刀,改变pfm的值
  #tri {你悄悄使出阴风刀,运起一股无形无质的阴寒之气,直插@dbrname胸口玉堂要穴!} {wa 3000;killall @dbr;perform dodge.tisha @dbr;#var pfm 3}
//继续改变pfm的值
#tri {却不敢出声,闭紧双眼运起铁屁股神功,假装是一块石头一动不动!} {#wa 3000;perform dodge.tisha}
  #tri {@dbrname双目难睁,无法攻击。} {#wa 3000;perform dodge.tisha @dbr}
  #tri {神目如电来去悠闲,根本没有受到影响.} {#wa 3000;perform dodge.tisha @dbr}
  #tri {~( 你上一个动作还没有完成,不能施用外功。~)} {#wa 3000;#if (@pfm=1) {perform sword.duo @dbr};#if (@pfm=2) {perform sword.yinfeng @dbr};#if (@pfm=3) {perform dodge.tisha @dbr}}
//根据pfm的值的不同来发出不同的perform

B:#tri {盗 宝 人*@dbrname~(@dbr~)} {follow @dbr;hit @dbr;#var pfm "perform sword.duo";@pfm @dbr}
  #tri {你使出圣火神功的夺字诀, @dbrname顿时觉得眼前一花,手腕一麻,手中兵刃脱手而出!} {killall @dbr;#var pfm "perform sword.yinfeng";@pfm @dbr}
  #tri {可是@dbrname的看破了你的企图,立刻采取守势,使你没能夺下兵刃。} {hit @dbr;@pfm @dbr}
  #tri {你悄悄使出阴风刀,运起一股无形无质的阴寒之气,直插@dbrname胸口玉堂要穴!} {#var pfm "perform dodge.tisha";#wa 3000;killall @dbr;@pfm @dbr}
  #tri {@dbrname双目难睁,无法攻击。} {#wa 3000;@pfm @dbr}
  #tri {神目如电来去悠闲,根本没有受到影响.} {#wa 3000;@pfm @dbr}
  #tri {~( 你上一个动作还没有完成,不能施用外功。~)} {#wa 3000;@pfm @dbr}
 
  可以看到方案B明显优于方案A,巧妙的运用了一个变量pfm储存要发的perform,而不是简单的赋值为一个数字,省去了#if语句,更加简洁直观。制作机器人的时候能简洁坚决不要复杂,会使你的机器人更加容易修改。
  #wa 3000表示等待3秒后执行后面的命令,有关#wa命令后面会讲到。
【内容导航】
第1页:聊聊zmud和机器人 第2页:机器人的核心灵魂
第3页:variable和alias的初级应用以及if语句 第4页:机器人实例-打坐吐纳机器人
第5页:buttons﹑系统变量﹑function 第6页:Variable和Alias的更多应用
第7页:掌控时间 第8页:提高机器人稳定性和适用面
第9页:丰富你的机器人 第10页:机器人实例--朝廷守门机器人
第11页:Path的用法 第12页:variable和alias的进一步应用
第13页:遍历实现的一种方法 第14页:路径的逆转和简化
第15页:实际例子--解决乱入的2种办法
收藏 推荐 打印 | 录入:sbso | 阅读:
相关内容       机器人  zmud 
本文评论   [发表评论]   全部评论 (0)
内容推送
52mud提供
一起回忆泥巴游戏QQ群68186072
52mud官方微信公众平台
热门评论