美丽华分享网站
 欢迎来到美丽华魔兽分享站! 

宏命令之语法

1073
发表时间:2024-05-01 00:11作者:美丽华

1、什么是宏命令条件:

条件语是宏的重要组成部分,用以实现根据不同情况执行不同命令的功能,即一定程度上的判断能力。(当然暴雪为了不让它太逆天做了很多限制)以下是一个的整合技能宏:

/cast [harm] 心灵震爆;真言术:盾

另外一个版本:

/cast [help] 真言术:盾;心灵震爆

前者的意思是,判断当前目标是否敌对,是则对它释放心灵震爆,否则按照常规方式释放盾,所谓常规方式就是等效于从技能书中拉出来的图标。

后者则是反过来,判断当前目标是否友善,是则盾,否则按照常规方式释放心灵震爆。

2、可以使用条件语的命令

以下是当前客户端中安全化命令的列表:

#show (1)

#showtooltip (1)

/assist

/cancelaura

/cancelform

/cast

/castrandom

/castsequence

/changeactionbar

/clearfocus

/cleartarget

/click

/dismount

/equip (2)

/equipslot (2)

/focus

/petagressive

/petattack

/petautocastoff

/petautocaston

/petdefensive

/petfollow

/petpassive

/petstay

/startattack

/stopattack

/stopcasting

/stopmacro

/swapactionbar

/target

/targetenemy

/targetfriend

/targetlasttarget

/targetparty

/targetraid

/use

/userandom

注(1):#show和#showtooltip不是真正意义上的安全化命令,但是它和/use以及/cast的内部机制相仿。

注(2):/equip和/equipslot逻辑上也不算是安全化命令,因为它们的功能是可以通过插件和脚本实现的。

3、[target=]条件语

[target=]条件语让我们可以指定宏的判断和作用目标(等号后写单位标识符或者队友名字),就是说判断和作用目标是同一个,你不能实现对A目标判断再对B目标施放法术。target=可以简写为@(读作at或者target=都可以),如 [target=player] 和 [@player] 是等价的。当它省略不写的时候等价于 [@target] 也就是当前目标。注意target=的作用是“指定”,不是“判断”,学过C或者类似语言的同学会比较容易理解,这两者就是一个等号(赋值)和两个等号(相等)的区别。

这是一个简单的例子:

/cast [help][@targettarget,help][@player] 真言术:盾

它按从左到右顺序判断:当前目标、目标的目标是否友善,是则给它盾,否则给自己盾。

一个条件中可以包含若干个条件语(help,harm,@target等),条件语之间用逗号隔开,是“和”关系(读作而且便可),它们没有先后顺序,但阅读上我们总是把@的目标先说。

4、注意事项

判断条件还可以在前面加no来表示相反的逻辑,如nohelp,noharm;但是noharm并不等于help,因为显然逻辑上help需要目标存在为前提,noharm则包括目标不存在和help两种情况(所以我们经常把它和targetenemy一起用);而且实际上存在一些单位,它们既不是help也不是harm,下面会说到。

如果某一个子句中没有(省略了)条件,则认为它被判定为成立;参数大多数时候为法术、物品名称、或者单位名称、单位标识符。

条件语是对大小写敏感的,需要全部小写,否则会报错。

/cast [harm,nodead][@targettarget,harm,nodead] 心灵震爆;[help,nodead][@targettarget,help,nodead] 真言术:盾;真言术:盾

它的意思是:先判断目标或目标的目标是否敌对而且没死(条件1、2),是则心灵震爆(参数1);否则判断目标或目标的目标是否友善而且没死(条件3、4),是则真言术:盾(参数2),再否则直接释放(条件5为空)真言术:盾,结果是对自己施放真言术:盾。

一条命令只会执行一个动作,一旦前面的条件满足便不再判断后面的条件。判断的优先级很重要,因为当你设计稍微复杂一点的宏的时候会出现复数个条件同时成立的情况(比如目标敌对和目标的目标友善同时成立),必须设定好采用哪一个条件的判断和参数。

注意条件和参数同时为空的情况,原文的例子:

/petattack [@focus,harm];

它表示如果焦点是敌对的,则让BB上去咬,但是注意这后面还有一个分号,它的后面没有条件或参数,它等价于这二者任一:

/petattack [@focus,harm][]

/petattack [@focus,harm][@target]

如果前面的条件不成立则让BB咬(玩家的)当前目标。

5、[target=]的注意事项

很多命令的参数是可以直接指定目标的。比如/target party1就可以把小队中第一个队友作为你的目标。而用/target [target=party1]的话,虽然看起来别扭,但是效果也是一样的。但是宏的设计者不希望我们根据一个单位的状态而对另一个单位执行动作,因此大多数情况下[target=]条件和命令参数只能有一个发生作用。例如:

/target [target=focus, dead] party1

客户端会把party1直接忽略掉——因为你已经指定了[target=focus]。不过这种情况也有例外,就是个别命令拥有一个“特殊单位”(其实也就是该命令会影响的单位标志符)。当在[target=]中使用的是该命令的“特殊单位”时,命令执行目标不会被设置为该单位,而命令参数中指定的目标也不会被忽略。例如:

/focus [target=focus, dead] [target=focus, noharm] target

由于focus是/focus命令的特殊单位,所以/focus的目标就不会被[target=focus]设置成焦点,而是target,即当前目标。如果没有指定target,/focus就相当于没有参数,同样是把当前目标设为焦点。

宏命令  特殊单位

/target  target

/focus  focus

/startattack  target

/petattack  pettarget

6、常用命令条件语

存在(exists):很简单,目标存在即为真,你选中了一个目标@target就存在,设定了焦点@focus就存在,但是从逻辑上大家也看得到,一些条件中包含了“存在”的前提(help、harm、dead等),所以上面也说过,其实exists用的不多,而noexists反而更常见。

死亡(dead):目标挂了,和存在类似,你不会想要对一个挂了的人做什么(除了复活),所以一般我们会用到nodead,它更多的用来防止我们选错技能目标后鼠标进入待选择状态。

姿态(stance:0/1/2/…/n):表示处在按照姿态栏顺序的哪一个姿态下,多个用/链接,不写数字表示在任意姿态下(显然这对XD才有意义)。

功能键状态(modifier:shift/ctrl/alt):可以简写为 [mod:shift/ctrl/alt] 表示配合这些功能键按下时成立;nomod也用的很多,表示不按任何功能键时成立。注意:假设你的宏里设置了alt+快捷键 的功能,而alt+快捷键设置给了动作条上的一个按钮,那么后者的优先级更高,宏的功能不会被执行。

点击状态(button:1/2/…/5/<虚拟按键号>):鼠标左、右、中(滚轮)、侧1、侧2键按上去是不一样的效果,记得上面click也可以选择按键吧,那个也可以和这个配合的,也许你可以做一个吃喝的省键位宏,不过我不是鼠标流,宏格子也不太够。。

已装备(equipped:<物品类型>):

引导中(channeling:<技能名称>):判断正在引导某一个技能,名称省略时表示引导任何技能。注意区分引导和吟唱(读条)的概念。武僧常用的引导为是怒雷、毛线、闪电。

另外,神鹤踢虽然描述上说是引导技能,但它并不能通过这个条件来判断,就是说系统并不承认它是引导技能,[channeling:神鹤引项踢] 是不会成立的。

宠物(pet:<宠物名称或类型>)

战斗(combat):很简单,战斗中通过,战斗外不通过,用的非常多的条件语。

行动方式、室内外状态(mounted,swimming,flying,indoors & outdoors):分别表示:在坐骑上、正在游泳、正在飞行、在室内、在室外、允许飞行。

显然这些通常用来相对智能地,下坐骑、选择合适坐骑释放。

允许飞行 (flyable)

小队/团队队友(party/raid):表示你@的单位处于你所在的小队或者团队中。

在小队/团队中(group:party/raid)引导中(channeling:<技能名称>):表示你自己处于一个小队或团队中。

宠物(pet:<宠物名称或类型>)

战斗(combat)

行动方式、室内外状态(mounted,swimming,flying,indoors & outdoors,flyable)

小队/团队队友(party/raid)

在小队/团队中(group:party/raid)

在哪个天赋下(spec:1/2):判断当前处于主天赋(1)还是副天赋(2)下。


 
微信
抖音
B站