插件基础逻辑运算及逻辑结构分析插件的逻辑运算,主要是根据lua的规则编写而成。lua的逻辑运算相当方便,使用lua的逻辑运算写宏,相当的方便。
所有这些在编写过程中并不区分字母大小写。
例如:
/Cast [life<0.3]无相诀
意思就是:如果“生命值比例小于0.3”,则释放技能“无相诀”
一般来说“中括号”里面的都属于逻辑判断的内容!
而无需判断,直接省略判断语句即可!
例如:
/Cast 无相诀
完全省略了判断语句,无需判断即能释放!
1.真假判断在插件中,只有 false 会被判断为假,其他全部会被判断为真。
例:
/skill [fight ] 后撤
上例的意思 ,如果在战斗状态, 则释放后撤技能
2.分句间的“且”“或”逻辑运算例句1:
/Cast [fight,life<0.3]无相诀
其中逗号,是“且”运算,表示多个条件都成立
该句的意思是:如果“战斗状态中”并且“生命值比小于0.3”,则释放技能“无相诀”
例句2:
/Cast [life<0.5 ; mana<0.5]徐如林
其中分号,是“或”运算,表示多个条件其中之一成立
这句的意思是:如果“生命值比小于0.5” 或者 “内力值比小于0.5”,则释放技能“徐如林”
例句3:
/print [fight , tar, ota]
/print [life <1; mana<1 ; buff:擒龙诀]
第一句,是连续三个判断,做“且”运算. 从左到右, 如果遇到值为false的,该判断的返回结果就是false(假). 否则会返回最后一个判断的值
如果[在战斗状态][又存在目标][自身又在读条] 则会返回 [ota]的值,即自身的运功进度。
第二句,连续三个判断,做“或”运算. 从左到右, 如果遇到值为真的 ,就会返回该判断的值, 否则会返回false(假,也是最后一个判断的值)
如果 life<1 为假 , mana<1为真 ,则会返回mana<1的值,即true(真) , 最后一个判断根本不会进行判断。
对于某些较为复杂的语句如何理解呢?例:
/cast [buff: aaa>2 & bbb | ccc & ddd<3 ] 技能x
看起来是不是好复杂!不用怕,教你如何分解
可以看出来句子中,冒号后面的,用“&”“|”拆分后有4个部分
“aaa>2”、“bbb”、“ccc”、“ddd<3”
把这四个部分分别接上都前面的内容“buff:”,再将“&”换成逗号,将“|”换成分号,即:
[buff:aaa>2 , buff:bbb ; buff:ccc , buff:ddd<3]
就变成几个小短句了!就变成我们最熟悉的内容了!
相信你一定很容易就能掌握了!
3.关于优先级例句:
/Cast [fight,life<0.3 ; nofight,mana<0.3] 技能x
中括号的内容如何理解?
根据优先级,“或”运算(分号)的优先级 低于 “且”运算(逗号)的优先级
为了便于理解,用小括号分解中括号的内容即是:
[(fight,life<0.3) ; (nofight,mana<0.3)]
优先级高的逗号先结合,就给他加个括号!
意思就是:如果(fight,life<0.3)或者(nofight,mana<0.3),则释放技能“技能x”
是不是很容易嘛!
关于详细的运算优先级,请参见命令文档。
4.其他的运算除了最基本的或且运算外,超级宏还提供了非运算、大小比较运算、数字五则运算等,
在使用的过程中,注意他们的优先级,弄不明白,可以用前面提到的加括号方法来整理语句,以便理解与运用!
同时,括号可以改变默认的结合优先级,更方便的写成想要的内容!
5. if 结构插件支持标准的IF 结构,支持多层嵌套
例:
/if [fight]
/skill 后撤
/else
/skill 蹑云逐月
/end
上句的意思是: 如果在战斗状态,则释放 [后撤] ,否则释放[蹑云逐月]。
6. 用 ”或” ”且” 结构模拟 if 结构/if [fight]
/var [life] v_a
/else
/var [mana]v_a
/end
上句用到了自定义变量的结构.(详细请参加其他说明文档),
代码的意思就是 如果战斗状态, 则赋值v_a为生命值 ,否则赋值为内力值。
我们可以用逻辑运算来模拟这句代码的意思:
/var [fight , life ; mana] v_a
这句的意思跟上句是一模一样的。
因为根据,插件的运算规则 ,对[fight , life ; mana]进行判断, 由于“且”的结合优先级比“或”高,他就等同于[(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 [fight]
/var [horse]v_b
/else
/var [life] v_b
/end
7.常见逻辑结构解析/skill [tmbufftime:钟林毓秀<1.5] 钟林毓秀 —第一句示例
/skill [tnombuff:钟林毓秀 ; tmbufftime:钟林毓秀<1.5] 钟林毓秀 —第二句示例
/skill [(tmbufftime:钟林毓秀 ; 0)<1.5] 钟林毓秀 –第三局句示例
第一句 与 第二、三句表示的逻辑原理并不相同
[tmbufftime:钟林毓秀] 返回的是 目标存在归属于自身的该buff的剩余时间,
当目标有该buff的时候就会返回剩余时间, 当没有该buff的时候会返回false
在插件中 false(假) 用来做大小比较/加减乘除余 运算的时候, 会返回false (假)
即 [false < 1.5] 会被判断为假
所以第一句的意思是: 目标存在归属自身的该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 的运算时间远比 一个 ”或” 运算的时间长,也提高了效率!

第二节:条件判断(if结构)条件语句(If,Elseif,Else,End)
当您编写代码时,您常常需要为不同的判断执行不同的动作。 您可以在代码中使用条件语句来完成此任务。
if、elseif 以及else 语句用于执行基于不同条件的不同动作。 一般来说,if可以单用,但elseif和else是必须配合if使用的。
有if结构的必须由end来闭合。
1.if 语句 在条件成立时执行一系列动作
语法:
/if [条件A] —-可多个条件并列
/skill ……
/var ……
/end —每个if,必须要有一个配套的end,切记
实例:
/if [tprepare:无懈可击|天音化物|雨钓江秋|火舞金刚|龙甩尾]
/skill 打断,厥阴指 —-万花打断技能
/end
2.If…Else 语句 如果您希望在某个条件成立时执行一些代码,在条件不成立时执行另一些代码,请使用 if….else 语句。
语法:
/if [条件A]
/skill ……
/var ……
/else
/skill ……
/var ……
/end —每个if,必须要有一个配套的end,切记
实例:
/if [buff:6394]
/ownp 无诗 —万花ZB405武器
/else
/ownp 朱明承夜 —万花445特效武器
/end
3.ElseIf 语句 如果希望在多个条件之一成立时执行代码,请使用 elseif 语句:
语法:
/if [条件A]
/skill ……
/var ……
/elseif [条件B]
/skill ……
/var ……
/elseif [条件C]
/skill ……
/var ……
/end —每个IF必须要有一个配套的end
实例:
/var [tmbufftime:商阳指] v_uy —定义一个存储商阳指剩余时间的变量
/var [tmbufftime:钟林毓秀] v_vl —定义一个存储钟林毓秀剩余时间的变量
/var [tmbufftime:兰摧玉折] v_lc —定义一个存储兰摧玉折剩余时间的变量
/if [v_uy<=v_vl,v_uy<=v_lc]
/var [tmbufftime:商阳指] v_dot
/elseif [v_vl<=v_lc,v_vl<=v_uy]
/var [tmbufftime:钟林毓秀] v_dot
/elseif [v_lc<=v_uy,v_lc<=v_vl]
/var [tmbufftime:兰摧玉折] v_dot
/end
教程是固定的,命令的用法却不是固定的,教程给的只是基础的用法,深入的用法,在不违反基本语法规则的情况下,还是得靠自己灵活的应用。
第三节:变量与自定义变量变量与自定义变量变量的基本含义例句1:
/Skill [life<0.4] 无相诀
变量的含义即是:每次运行都可能是不同的值。
变量一般都是写在方括号内进行逻辑运算,从而影响到一行语句的运行结果。
例句中,每次运行,life的值都可能是不同的值,从而影响到无相诀的施放,那么这里 life就是一个变量。
广泛一点,整个方括号内的也都可以看作一个变量。
变量的类型目前插件的变量类型,有布尔型、数字型、字符串型。
布尔型,即 “真”<true> ,假<false> 两种结果
/Skill [horse] 战八方
如[horse]的判断结果只有两种,<true><false>
变量值为<true>的时候,判断为真,执行技能[战八方]
数字型,如life、mana、sun、moon 这类,是个数字
一般用来进行大小比较
例如:
/Skill [sun<50] 赤日轮
字符串型,很少用到。暂不讲解!
为了了解变量的类型,可以查阅说明文档中相关部分。
同时,插件提供了打印功能,可以打印出变量的运行结果
/print [horse]
/print [sun]
用这处理方式,就可以在聊天栏的黄字中看到输出的结果,便于宏的调试
关于“真”与“假”/cast [...] 技能
类似这样的语句,中括号当中的判断结果,
如果是为<false>,那么就称之为“假”,就不会执行释放技能!
除<false>之外的所有值,都会被判断为真,而执行释放技能!
自定义变量简析如例句1中,<life>这个变量是属于插件本身提供的判断。
而自定义变量,就是我们通过命令赋值,需要的时候再调用运算。
所有的自定义变量名都是以“v_”开头,
/var定义或者修改变量的值,使用时如同插件本身的判断一样处理即可。
例句2:
/var [life]v_life
/Skill [v_life<0.4]无相诀
上例句中,第一行通过/var 命令将life的值赋值给 自定义变量 v_life
第二行,直接引用变量进行判断,如同使用life一样
宏头部自定义开关变量以“#”开头的宏头部命令中,#varbool、#varnum定义的开关,本质上也是一个自定义变量
例句3:(一篇结构完整的简短的宏)
#name 自定义变量
#varbool v_a
#varnum v_b,2
/Skill [v_a]后撤
/Skill [v_b=1]扶摇直上
上面的宏内容定义了两个开关,
一个是#varbool定义的开关,变量名为v_a,他的值在<true><false>之间切换,默认值为<true>
另外一个#varnum 定义的开关,变量名为v_b,他的值在<1><2>之间切换,默认值为<1>
后面两句/Skill的执行,完全依赖于这两个自定义变量的值
自定义变量的生命周期#varbool、#varnum定义的变量,会在加载时设置默认值,会一直存在
未进行任何赋值操作的变量,默认返回值为<false>。
仅通过/var 命令赋值的变量,在游戏小退、修改宏之后会重置为<false>。
一般来说,超级宏里面有四种自定义变量
1. varbool
2. varbox
3. varnum
4. v_变量
varnum是写法比较高明的varbox,故只剩下三种变种(其实严格来说还有一种,但是为了使教程通俗易懂,故不在此教程里面)
首先说下varbool和varnum,varbool和varnum是用在头部的变量,可以改变宏的界面,让用户可以通过界面选择他要的功能,达到与用户沟通的目的,是超级宏的特点功能之一。当初的主流宏的功能还是很简单的时候,宏写手们都是冲着这个功能而纷纷改用超级宏,为剑三PVE宏打开了全新的一页,新手请务必马上熟练这个功能。
varbool指的就是布尔(bool)的方式来定义一个变量,简单的说法就是,只有开和关。
写法是:
#varbool v_变量的名字,tip:变量的作用,tip_1:开启状态,tip_2:关闭状态,Icon:1234
分析:
#varbool告诉插件你正在定义一个varbool变量
v_变量的名字:就是在这里定义变量,必须以v_开头,超级宏所有的变量都是以v_开头,其次是变量名字非常重要,确保对宏写手来说易于辨认,因为需要在宏里面引用,写法不可以错
tip这里就是告诉用户这个这个变量是做什么的,你要写什么都可以,迟些在宏里面不会引用到,因为只是给用户看的,建议写得直观点,让用户可以马上明白
tip_1:如前面所说varbool有两个状态,开或者关(真或者假),所以tip_1就是解释第一个也就是默认的状态—-开。你写什么都可以,不过一般上都是写模式开启中之类的,同样的这个也不会引用在宏里面。还有不要把tip_1和tip搞乱,tip是向用户解释整体功能,tip_1是针对开关的状态解释。
tip_2如果你已经明白tip_1那么tip_2也是同样的道理,只是tip_2是解释第二个开关,也就是关闭状态。
icon:1234选择你要的图标,游戏里的图标都可以通过ctrl来查找iconID,如果不设置这点的话,将会使用默认太极图图标。
那么要怎样在码里面引用这个varbool呢?
很简单:
/skill [v_变量的名字]技能
因为【v_变量的名字】非假即真,直接使用就可以
例子#varbool v_自动扶摇,tip:扶摇模式,tip_1:开启状态,tip_2:关闭状态,Icon:1485