判断表达式,判断式(Option Set):由若干判断项组成,封闭在方括号[]中的真值表达式。继承自安全模板,能在受保护环境下允许运作的唯一判断形式。
一,写宏的基本法则
宏最主要的应用是带有判断的施法,这也是下文主要应用的模型。一个典型的这种宏可以抽象成以下形式:
Code(c):
/cast [表达式1-1][表达式1-2]技能1;[表达式2]技能2;技能3
--宏的模型
[项1,项2,项3, ...]
--表达式的模型
--注:表达式中定义单位target=或@不是一种判断条件,但它重新指定了后续所有涉及目标的判断和最终技能施放的对象。比如指定了@mouseover后,后续的help/exists/dead之类的判断都会基于鼠标悬停的单位。
在这个模型下,讨论:
1.逻辑及判断顺序(法则一,!极为重要)
涉及判断就有真值,但是不要被这个带有浓重编程和数学色彩的词吓倒。概括来说就两句话:
<1>方括号内各分项之间是AND的关系,用逗号间隔,只有各个分项都为真整个方括号(表达式)才为真。方括号内各项之间没有顺序要求。
<2>各个方括号之间是OR的关系,判断顺序是从左至右,遇到第一个方括号为真时即结束判断,而忽略其后的所有项目。
大部分宏出错/不能用/判断混乱的原因就是在此。写宏的时候必须把条件强的(或者说优先级高的)判断放到前面,弱的(泛用型的)判断放到后面。举个例子,昨天回答了问答区一个人的提问,他的宏
Code(c):
1:#showtooltip
2:/cast [nomod,spec:2]炼狱冲击;[nomod,target=mouseover,exists,harm,spec:2]炼狱冲击
无法对鼠标悬停目标放。究其原因就是,[nomod,spec:2]这一个表达式弱于后者
[nomod,target=mouseover,exists,harm,spec:2],后者不仅需要无修饰键和第二专精,同时需要存在一个可攻击的鼠标悬停目标才会为真,导致了后者为真时前者一定为真。
按照上文的<2>,从左至右的顺序将永远是前者表达式率先为真,因而无法对悬停目标施放炼狱冲击。修改的方法很简单,把两个判断调换位置即可:
Code(c):
1:#showtooltip
2:/cast [nomod,target=mouseover,exists,harm,spec:2]炼狱冲击;[nomod,spec:2]炼狱冲击
3:--修改后的宏
当然我在回答中还给出了优化方案,后文会详细介绍如何优化。
2. 技能整合(法则二)
对于把多个技能整合进一个/cast命令里,在不同的条件下自动判断施放不同的技能,只有一条格式法则:不同技能之间用分号;间隔。具体可以参照本章开头提出的宏模型。
要注意,一个/cast任何情况下至多只能施放一个技能,而且各个方括号之间仍旧遵循上文提出的<2>判断顺序法则。
3. 技能堆叠(法则三)
如果要做到一键同时放出两个或更多的技能,必须有多行/cast命令,这就是技能堆叠。这种宏通常用于爆发技能,喝药开饰品开技能需要同时完成。
其法则是:至多只能拥有一个产生/受到GCD影响的技能,幸运的是爆发类技能和药水等物品几乎都设计成不占用GCD。
Code(c):
1:#showtooltip
2:/cast 奥术强化
3:/use 13
4:/use 14
这样的宏是可行的,因为饰品和[奥术强化]本身并不产生GCD,甚至再加两行
Code(c):
/cast 气定神闲
/cast 奥术冲击
也是合法的。但是,形如以下的宏是非法的:
Code(c):
1:#showtooltip
2:/cast 驱邪术
3:/cast 审判
4:/cast 十字军打击
因为三者都产生GCD和/或被GCD影响,最终的效果是只相当于第一行[驱邪]有用。不要妄图这种方法能实现按优先级施放技能。
4. 技能替代(法则四)
技能替代是一个十分有意思的机制,自CTM引进。这种机制允许某[基础技能]在特殊情况下被另一个[替代技能]替代,而即便在替代的情况下,通过宏命令施放[基础技能]时会自动定向到[替代技能],其最终的结果是正常施放[替代技能],宏的图标也会随之变化。
这种机制有两种情况:
1)单向的替代,/cast [替代技能]不会施放出基础技能,但是/cast [基础技能]是任何情况下通用的。
举例:神牧的[圣言术:罚]在黄轮和蓝轮下转换成[静]和[佑],只要宏
Code(c):
1:#showtooltip
2:/cast 圣言术:罚
就能自动根据轮的颜色转换技能,但因为这是[罚]被单向地替代,反过来如果宏里写[静]或[佑],在红轮下就会放不出技能。
2)双向的等价,[基础技能]和[替代技能]是完全等价的,就如同一个技能,任何情况下用宏施放任意一个技能的结果都是放出当前激活的那一个。比如[腐蚀术]和[献祭]两者,SS玩家可以分别在不同天赋下试试。
这种机制对于写宏非常有利,我们不需要为了技能被替换而另开一个宏。更深入的一点,以下两个技能需要重点提及:
Code(c):
1:#showtooltip
2:/cast 秘法炸弹
3:--这个技能对应法师75级天赋中的[虚空风暴],[寒冰炸弹]和[活动炸弹]。[秘法炸弹]被单向替代。
Code(c):
1:#showtooltip
2:/cast 神圣爆发
3:--这个技能对应牧师90级天赋,也是单向替代。
如果其他职业也有类似的天赋基础技能,请欢迎补充。
二,写宏的灵魂:逻辑和优先级
笔者和自己圈子里的很多人说过,写宏其实和编程没多大关系,需要的是一点数学的逻辑思维。尤其是那些技能整合宏,对在各种判断条件下到底哪一个技能才是优先的必须心里有谱。
实际上这是上文中法则一之<2>的推演,本质上仍旧是按照越优先越靠前的方式排列整个技能和判断序列。正因如此,上文法则一才是宏最最重要的法则,而优先级正是写宏的灵魂。
Code(c):
1:#showtooltip
2:/cast [help,dead][mod:shift,help][mod:shift,@player]Soulstone;[mod]Soul
Link;Unending Resolve
3:/targetlasttarget [help,dead]
4:--比如这个术士宏,它的逻辑等价于:
5:--如果[目标死亡且可协助]或[按住shift并且目标可协助]或[其他按住shift的情况下对自己]施放[灵魂石]
6:--否则,如果[有按下其他任何修饰键]则施放灵魂链接
7:--否则任何其他情况下放盾墙
8:--此外,如果[目标死亡且可协助]还会顺带切换回之前的目标,目的是战复后目标切回怪身上
有人可能会问,[help,dead][mod:shift,help][mod:shift,@player]这一串看不懂,为什么先来个shift修饰后面又来一个,这里就涉及到优先级的问题了。
首先[help,dead]指定了[目标死亡且可协助]的情况,它是优先级最高的,只要满足这两个条件,其他任何条件不管满足不满足都会战复目标。
其次,[mod:shift,help]这一判断代表[按住shift并且目标可协助],但是它还有个隐藏条件。因为要判断到这一层,首先必须前者[help,dead]为假,也就是当[目标不可协助或者目标不死]的情况。
所以其实这个判断应该是[(目标不可协助或者目标不死)并且按住shift并且目标可协助],由于不可协助和可协助互斥,所以实际判断的真值应该是[目标不死并且按住shift并且目标可协助],满足这个条件,对目标放灵魂石。
再次,[mod:shift,@player],这里只用了一个判断即shift修饰,上文说过@player不是判断条件。但因为前一个判断已经有一种按下shift的情况被取走了,那么这里的判断表示[其他按住shift的情况下对自己]施放灵魂石。
然后,[mod]是个广义的修饰键判断,当alt/shift/ctrl中任何一个或多个被按下是都为true。当然shift在前面的判断中被取走,那么这里表示的是[按下alt/ctrl中任何一个或两个],他等同于[有按下其他任何修饰键]则施放灵魂链接。
最后,无尽决心没有任何判断,它是恒真的。也就是在其他任何条件下都会施放无尽决心。
上面这个例子有些复杂,下面会通过一个相对简单的实例来阐述如何运用这种模式写宏。
法师法术反制及焦点反制/悬停解诅咒整合宏
要求是:焦点可攻击按住任何修饰键都是焦点反制,不按修饰键且敌对目标是对目标反制,鼠标悬停到友善目标是解诅咒,目标是友善目标是解诅咒,默认状况下是对目标的反制。
首先就是厘清优先级。
那么整理之后的优先级就是:
第一优先级:焦点反制敌对目标,判断式[mod,@focus,exists,harm]
第二优先级:悬停解可协助目标诅咒,判断式[@mouseover,exists,help]
第三优先级:对友善目标解诅咒,判断式[help]
第四优先级:敌对目标反制,判断式[harm]
第五优先级:反制,无判断式(恒真)
*要注意,harm和help有关系,但并不是help=noharm或者harm=nohelp。harm代表目标可攻击,help代表目标可协助(能给他加血上buff等),此外还有一种既不能攻击也不能协助的状态,称为"被动(Passive)"。
现在可以直接写出宏了,那就是:
Code(c):
1:#showtooltip
2:/cast [mod,@focus,exists,harm]法术反制;[@mouseover,exists,help][help]解除诅咒;[harm]法术反制;法术反制
3:--第一行的#showtooltip不是命令行,它的作用是能在鼠标提示上显示技能的有关信息
这个宏运作起来是符合要求的,但是可以继续优化。从逻辑上而言,第四与第五优先级可以合并,而且exists没必要与harm和help连用。因此最终的宏是:
Code(c):
1:#showtooltip
2:/cast [mod,@focus,harm]法术反制;[@mouseover,help][help]解除诅咒;法术反制
扩展资料:
常用宏模板:
1.治疗/伤害技能混合宏,附带指向施法,或者用于解buff和攻击性技能组合:
Code(c):
1:#showtooltip
2:/cast [@mouseover,help]治疗技能;[harm]攻击技能;治疗技能
2. 治疗指向宏,无指向对目标:
Code(c):
1:#showtooltip
2:/cast [@mouseover,help][]治疗技能
3. 经典的修饰键整合宏:
Code(c):
1:#showtooltip
2:/cast [mod]技能1;技能2
或者更多的技能:
Code(c):
1:#showtooltip
2:/cast [mod:shift]技能1;[mod:ctrl]技能2;[mod]技能3;技能4
4. 翻页宏:
Code(c):
1:#showtooltip
2:/cast 技能
3:/changeactionbar n
这个宏最近已经被玩坏了,n可取1-6。
5. 花式宏,双修饰键/三修饰键判断:
Code(c):
1:#showtooltip
2:/cast [mod:alt,mod:ctrl,mod:shift]技能
按照需要自己整合,就是这个套路。
6. 花式用法:
拆分1+alt和alt+1(按键顺序)。
*1+alt指的是先按住1然后不放去按alt,保持alt松开1(此时放技能),最后松开alt。
这个用法需要关闭界面设置中的点击施法选项。
按键绑定中绑定alt+1,在这个动作按钮上放技能1
建立一个宏
Code(c):
1:#showtooltip
2:/cast [mod]技能2;技能3
把这个宏放到键1上。
其结果就是alt+1放出技能1,1+alt放出技能2,直接按1是技能3。
推荐于2017-11-26
WOW超简单宏命令设置教程——献给为了微操作而进化成章鱼的人们(转自wowchina *justred)
在WOW的世界中,可能你会第一次接触到“宏”这个名词。
什么是宏命令?
说白了就是同时把几个技能热键绑到一起用一个键来代替,就像是一份计划书一样,你事先在里面输入你常用的一些命令,当你想用的时候只要按下这个键就可以了。
宏命令的设置流程:
首先,回车,再敲/MACRO。看见了吧?会弹出一个窗口,上面有New(新建宏命令)和Complete(完成宏命令)两个按键。点New,又会弹出一个窗口,哇,花花绿绿的,里面包括了WOW几乎所有的技能图标,随你喜欢,随便选一个!它就是你设置的宏命令的图标了,给它取个名字吧!方便你用的时候好找。然后回到第一个窗口,在它上面有一个输入菜单(别告诉我找不到…它可是占了这个窗口的一半多…)在里面输入特定的内容,然后点Complete。接下来你要做的就是把这个代表你宏命令的图标用鼠标左键拉到快捷栏里,想怎么用就怎么用…
宏的一般用途:
你可以在宏命令里输入一些你可能经常会说的话或是一些搞笑的语句。
比如,你可以在宏窗口里输入以下内容:
“/say 各位部落的牛鬼兽魔们…赏小弟点钱吧…”
或者“/say 我是奸商!长期收购各种皮类材料。”
甚至“/say 哇,那个人的背影好像一条狗耶!”
其中/say就是说的意思,当然你也可以输入/yell,这个是全区域大叫的意思(你试试刷屏看看…如果你想见GM的话)另外/g是工会说话而/p是小队说话。
当你想让人看到这些话时,只需要点击代表那句话的宏键就可以了。
一般比较酷的人(比如我)会在宏命令里连续写上好几行的内容,搭配上动作表情和语音,比如当你向某人求婚时:
第一行内容:“/Kneel”
第二行内容:“/say 如果你不嫁给我,那么我就一辈子不起来…”
或者当你被怪物追杀时:
第一行内容:“/v help”
第二行内容:“/say 哪位兄弟发发慈悲先,帮我把屁股上的狗嘴翘开…”
其中/Kneel就是让你跪下来的动作而/v help则是发出求救的声音(真的有声音!)。当然,在游戏里有好多动作和声音选项可以用在宏里面,你可以在聊天窗口上的一个选项里看到所有的动作和语音选项。
几个常用的宏命令:
/Assist 这是个援助进攻的命令。当你的队伍同时面对几个敌人时,只要点击自己的队友(一般是队伍中的战士),然后使用这个命令,你的目标就会变成战士所选中的目标。大家集中火力消灭一个起!
/Cast 这是个使用技能的命令。当你在宏命令里输入/Cast 技能名(技能等级)或者只要按住Shift同时用鼠标点击一下你想要输入的技能的图标。例如当你是一个战士,想制作一个使用战斗怒吼的宏时,你可以输入/Cast Battle Shout(Rank 1)或者是直接按住Shift点击Battle Shout这个技能的图标。当然你可以在一个宏的不同行上输入几个技能,那么当你使用这个宏时,几个技能就会一起释放出来,再用不着你像章鱼一样同时按下几个键了 。
%t 这个符号也许会经常出现在你的宏命令里,它是一个代码,代表你当前所选中的人名。例如,你在宏里写下这么一句。(注意:后面要加一空格。)
“/g %t ,今天天气真好,有没兴趣和我一起上山采蘑菇…”
如果你点中一位名叫苯笨的玩家,那么当你按下这个宏时,你就会说:“笨笨,今天天气真好,有没兴趣和我一起上山采蘑菇…”
/Target 这是一个自动选择目标的命令,你可以在宏里输入/Target (xxx),那么当你按下这个宏时,你将自动选定这个叫xxx的目标。
宏命令在战斗中的用途:
对WOW有所了解的人都知道,在WOW中的组队战斗中非常讲究配合。其中,战士要充当一个肉盾角色,牢牢的吸引住怪物,法师盗贼等进攻型角色则要在尽量造成杀伤力的同时又要保证怪物对自己的仇恨不超过战士,别让怪物丢下战士追着自己打,而牧师等职业更是肩负着为队伍成员加血的重要责任。那么在这个分工细致的战斗过程中,时时刻刻让队友们知道自己在干什么,希望队友们干什么是非常有必要的。这便是宏在战斗中的用途了。
我们举一个例子吧。
比如我们的女牛头战士挂牛头卖狗肉正准备对一头叫金牙的狗头人发起攻击,那么在进攻前她会先按下这个宏:
“/P 同志们请注意,同志们请注意!我把%t 老兄勾引来了,大家埋伏好准备打劫…”翻译过来也就是“同志们请注意,同志们请注意!我把金牙老兄勾引来了,大家埋伏好准备打劫…”
这样提醒全队玩家是非常有必要的,否则大家都不知道即将面临一场战斗那可糟糕了……想象一下,如果没有宏命令,挂牛头卖狗肉一边拉怪还要一边辛苦的敲字…
于是乎,纯洁的金牙老兄便被牛嫂勾引过来了,殊不知,面临它的将是一队如狼似虎的部落玩家…
当金牙老兄出现在部落众的视线里时,我们的亡灵法师骨头按下了这个宏:
“/Target (挂牛头卖狗肉)
/P %t 请放心!目标已经锁定!
/Assist
/p %t ,你逃不掉了…”
翻译过来就是对队友们说“挂牛头卖狗肉请放心!目标已经锁定!金牙,你逃不掉了…”同时目标已经自动转向了挂牛头卖狗肉选中的金牙。
接下来女牛头人使劲对金牙挑衅,增加仇恨度,到了一定时候,牛头便又按下了这个宏。
“%t 已经完全对我着迷!同志们超家伙上啊!”
翻译过来就是“金牙已经完全对我着迷!同志们超家伙上啊!”
早就在一旁等的不耐烦地一帮部落禽兽们立刻欢呼雀跃的跑上前去,其中还以亡灵法师骨头最为积极,他的宏是这么设的:
“/p 社会主义好,社会主义好,社会主义的钢炮准的呱呱叫,我在瞄,你在跑,打中以后痛得你是哇哇叫,啊,哇哇叫…”
/Cast Fireball(Rank 1)”(释放一级火球术)
于是乎骨头边唱着歌边扔了个火球出去…
战斗很快就结束了,大家把金牙扒了个光,发现并没有什么值钱的东西,于是队里的巨魔牧师磨了蘑牙,选定挂牛头卖狗肉又按下了这个宏:
“/p 漂亮的%t 小姐,我来给你补补妆,接着发挥你的魅力去勾引人吧!
/Cast Lesser Heal(Rank 2)”释放2级轻微治疗。
相信以上的宏除了可以让你更好的掌握一场战斗的同时也能让你在激烈的战斗中会心一笑吧?其实宏在战斗中发挥的作用远不止这些,如何更好(更有趣)的设置属于你自己的宏也是WOW的乐事之一。
在文章的最后,我狠狠地按下了这个宏:
“/祈祷
/Say 一定要上榜…
/Target 众编辑
/Cast 迷魂大法(Rank 100000)”
魔兽世界cd宏怎么使用,这里分享下宏的使用方法。
1、首先在电脑中进入魔兽世界,打开主菜单,点击“宏命令设置”。
2、进入设置界面,点击“新建”,如下图所示。
3、然后在打开的右边框内,输入宏的名称,如下图所示。
4、输入名称后,给宏选择一个喜欢的图标,如下图所示。
5、最后点击保存,如下图所示,宏的创建就完成了。
2014-02-20
2014-02-20