无色幽明 发表于 2014-03-26

《超级宏官方教程》第三章·第1节:逻辑运算基础—— 主稿:YYL

第三章·第1节:逻辑运算基础

主稿:YYL


插件基础逻辑运算及逻辑结构分析插件的逻辑运算,主要是根据lua的规则编写而成。lua的逻辑运算相当方便,使用lua的逻辑运算写宏,相当的方便。所有这些在编写过程中并不区分字母大小写。例如:
/Cast 无相诀意思就是:如果“生命值比例小于0.3”,则释放技能“无相诀”一般来说“中括号”里面的都属于逻辑判断的内容!而无需判断,直接省略判断语句即可!
例如:
/Cast 无相诀完全省略了判断语句,无需判断即能释放!
1.真假判断在插件中,只有 false 会被判断为假,其他全部会被判断为真。例:/skill 后撤上例的意思 ,如果在战斗状态, 则释放后撤技能
2.分句间的“且”“或”逻辑运算例句1:
/Cast 无相诀其中逗号,是“且”运算,表示多个条件都成立
该句的意思是:如果“战斗状态中”并且“生命值比小于0.3”,则释放技能“无相诀”
例句2:
/Cast 徐如林
其中分号,是“或”运算,表示多个条件其中之一成立
这句的意思是:如果“生命值比小于0.5” 或者 “内力值比小于0.5”,则释放技能“徐如林”
例句3:/print 第一句,是连续三个判断,做“且”运算. 从左到右, 如果遇到值为false的,该判断的返回结果就是false(假). 否则会返回最后一个判断的值如果[在战斗状态][又存在目标][自身又在读条] 则会返回 的值,即自身的运功进度。第二句,连续三个判断,做“或”运算. 从左到右, 如果遇到值为真的 ,就会返回该判断的值, 否则会返回false(假,也是最后一个判断的值)如果 life<1 为假 , mana<1为真 ,则会返回mana<1的值,即true(真) , 最后一个判断根本不会进行判断。对于某些较为复杂的语句如何理解呢?例:
/cast 技能x
看起来是不是好复杂!不用怕,教你如何分解
可以看出来句子中,冒号后面的,用“&”“|”拆分后有4个部分
“aaa>2”、“bbb”、“ccc”、“ddd<3”
把这四个部分分别接上都前面的内容“buff:”,再将“&”换成逗号,将“|”换成分号,即:

就变成几个小短句了!就变成我们最熟悉的内容了!
相信你一定很容易就能掌握了!
3.关于优先级例句:
/Cast 技能x
中括号的内容如何理解?
根据优先级,“或”运算(分号)的优先级 低于 “且”运算(逗号)的优先级
为了便于理解,用小括号分解中括号的内容即是:
[(fight,life<0.3) ; (nofight,mana<0.3)]
优先级高的逗号先结合,就给他加个括号!
意思就是:如果(fight,life<0.3)或者(nofight,mana<0.3),则释放技能“技能x”
是不是很容易嘛!
关于详细的运算优先级,请参见命令文档。
4.其他的运算除了最基本的或且运算外,超级宏还提供了非运算、大小比较运算、数字五则运算等,
在使用的过程中,注意他们的优先级,弄不明白,可以用前面提到的加括号方法来整理语句,以便理解与运用!
同时,括号可以改变默认的结合优先级,更方便的写成想要的内容!
5. if 结构插件支持标准的IF 结构,支持多层嵌套例:/if /skill 后撤/else/skill 蹑云逐月/end上句的意思是: 如果在战斗状态,则释放 [后撤] ,否则释放[蹑云逐月]。
6. 用 ”或” ”且” 结构模拟 if 结构/if /var v_a/else/var v_a/end上句用到了自定义变量的结构.(详细请参加其他说明文档),代码的意思就是 如果战斗状态, 则赋值v_a为生命值 ,否则赋值为内力值。我们可以用逻辑运算来模拟这句代码的意思:/var v_a这句的意思跟上句是一模一样的。因为根据,插件的运算规则 ,对进行判断, 由于“且”的结合优先级比“或”高,他就等同于[(fight , life) ; mana]这样就类似两个分句的或运算,即(fight , life) 或 mana, 由于上面的例子讲到,或运算,返回遇到的第一个真的值,所以(fight , life)为真就返回他的值, 否则会返回 mana的值(真假与否都会返回)。fight , life 又是两个语句间的且运算, 且运算,返回第一个假,否则会返回最后一个值则,如果战斗状态,返回life的值,否则会返回false(假)。上面的串起来就是 .如果fight 返回life ,否则返回mana,跟if结构的逻辑一模一样。用 ”或” ”且” 结构模拟 if 结构 的一个例外/var [ fight , horse ; life]v_b用例5的分析,这句的意思就是 如果fight ,则赋值 horse ,否则 life但是,如果当fight为真,horse为假的时候. (fight , horse)总体的值为假,则运算结果为life即horse为假,无论fight的值为何,都会返回life的运算结果,这时用传统的IF结构才能胜任,如下:/if /var v_b/else/var v_b/end
7.常见逻辑结构解析/skill 钟林毓秀   —第一句示例/skill 钟林毓秀 —第二句示例/skill [(tmbufftime:钟林毓秀 ; 0)<1.5]钟林毓秀–第三局句示例第一句 与 第二、三句表示的逻辑原理并不相同 返回的是 目标存在归属于自身的该buff的剩余时间,当目标有该buff的时候就会返回剩余时间, 当没有该buff的时候会返回false在插件中 false(假) 用来做大小比较/加减乘除余 运算的时候, 会返回false (假)即 会被判断为假所以第一句的意思是: 目标存在归属自身的该buff ,且剩余时间小于1.5秒的时候释放钟林毓秀,如果要表示没有该buff,或者该buff时间 小于1.5 秒,则为第二句 [ tnombuff:钟林毓秀 ; tmbufftime:钟林毓秀<1.5]用 ”或”运算但是从代码的简洁度及运算的速度来看,我们可以有更高级的表现方式第三句 其中的 (tmbufftime:钟林毓秀 ; 0)根据前面提到的逻辑运算方式 [ false ; 0 ]返回的是第一个遇到的 真,所以他等同于 0那么这个小分句的意思,就是 如果存在该buff,则返回时间, 不存在则返回0那么 [ (tmbufftime:钟林毓秀 ; 0)<1.5]的意思就可以表示为,存在该buff的时间小于1.5秒,或者不存在该buff,与第二句,完全一样! 提高 了简洁度,同时,tnombuff 的运算时间远比 一个 ”或” 运算的时间长,也提高了效率!http://121.199.25.18/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif

页: [1]
查看完整版本: 《超级宏官方教程》第三章·第1节:逻辑运算基础—— 主稿:YYL