[樂游網(wǎng)導(dǎo)讀]《魔獸世界》玩家都喜歡使用宏來完成一些動作,接下來我們將為小伙伴們介紹魔獸世界6.0德拉諾宏的寫法,希望能夠幫的上你!
《魔獸世界》玩家都喜歡使用宏來完成一些動作,接下來我們將為小伙伴們介紹魔獸世界6.0德拉諾宏的寫法,希望能夠幫的上你!
本文將著重探討宏的判斷機制這一最重要也是最難的部分,講解如何寫出優(yōu)美合理的判斷語句,泛用于任何職業(yè)以及專精,對于文中之錯誤及疏漏望各位玩家指正。
但這不是一篇面向零基礎(chǔ)新手的宏命令完全教程,需要讀者大致了解宏的形式和基本判斷項(比如exists,help等),零基礎(chǔ)的讀者可以移步隔壁看基礎(chǔ)教學(xué)貼。
本帖基于6.0.3版本而寫,但由于宏在歷代版本改動都非常非常小,因而本帖可能不會隨著版本的推進而頻繁更新。
有用的外部鏈接
斜杠命令(Slash Command)列表?| 判斷項列表 | API列表 |
最近wowprogramming更新得不勤快,如有疑問也可去wowwiki。
6.0.2的改動以及存在的bug
*通用宏上限提高到120個,基本不可能用完了。
*切換目標(biāo)時有可能出現(xiàn)判斷遲滯,導(dǎo)致動作條按鈕上的圖標(biāo)錯誤。不過宏仍舊能夠正常運作,只是顯示錯誤而已。這可能是由于動作條按鈕本身的代碼造成的(待查證)。
事實上宏這種東西從2.1.0版本加入安全模板一來沒有發(fā)生過大的變動,只是偶爾加入新的簡寫或是判斷條件。
術(shù)語
判斷表達式,判斷式(Option Set):由若干判斷項組成,封閉在方括號[]中的真值表達式。繼承自安全模板,能在受保護環(huán)境下允許運作的唯一判斷形式。
術(shù)語
判斷表達式,判斷式(Option Set):由若干判斷項組成,封閉在方括號[]中的真值表達式。繼承自安全模板,能在受保護環(huán)境下允許運作的唯一判斷形式。
下面進入正題
一,寫宏的基本法則
宏最主要的應(yīng)用是帶有判斷的施法,這也是下文主要應(yīng)用的模型。一個典型的這種宏可以抽象成以下形式:
Code(c):
/cast [表達式1-1][表達式1-2]技能1;[表達式2]技能2;技能3
--宏的模型
[項1,項2,項3, ...]
--表達式的模型
--注:表達式中定義單位target=或@不是一種判斷條件,但它重新指定了后續(xù)所有涉及目標(biāo)的判斷和最終技能施放的對象。比如指定了@mouseover后,后續(xù)的help/exists/dead之類的判斷都會基于鼠標(biāo)懸停的單位。
在這個模型下,討論:
1. 邏輯及判斷順序(法則一,!極為重要)
涉及判斷就有真值,但是不要被這個帶有濃重編程和數(shù)學(xué)色彩的詞嚇倒。概括來說就兩句話:
<1>方括號內(nèi)各分項之間是AND的關(guān)系,用逗號間隔,只有各個分項都為真整個方括號(表達式)才為真。方括號內(nèi)各項之間沒有順序要求。
<2>各個方括號之間是OR的關(guān)系,判斷順序是從左至右,遇到第一個方括號為真時即結(jié)束判斷,而忽略其后的所有項目。
大部分宏出錯/不能用/判斷混亂的原因就是在此。寫宏的時候必須把條件強的(或者說優(yōu)先級高的)判斷放到前面,弱的(泛用型的)判斷放到后面。舉個例子,昨天回答了問答區(qū)一個人的提問,他的宏
Code(c):
1:#showtooltip
2:/cast [nomod,spec:2]煉獄沖擊;[nomod,target=mouseover,exists,harm,spec:2]煉獄沖擊
無法對鼠標(biāo)懸停目標(biāo)放。究其原因就是,[nomod,spec:2]這一個表達式弱于后者[nomod,target=mouseover,exists,harm,spec:2],后者不僅需要無修飾鍵和第二專精,同時需要存在一個可攻擊的鼠標(biāo)懸停目標(biāo)才會為真,導(dǎo)致了后者為真時前者一定為真。按照上文的<2>,從左至右的順序?qū)⒂肋h是前者表達式率先為真,因而無法對懸停目標(biāo)施放煉獄沖擊。修改的方法很簡單,把兩個判斷調(diào)換位置即可:
Code(c):
1:#showtooltip
2:/cast [nomod,target=mouseover,exists,harm,spec:2]煉獄沖擊;[nomod,spec:2]煉獄沖擊
3:--修改后的宏
當(dāng)然我在回答中還給出了優(yōu)化方案,后文會詳細(xì)介紹如何優(yōu)化。
2. 技能整合(法則二)
對于把多個技能整合進一個/cast命令里,在不同的條件下自動判斷施放不同的技能,只有一條格式法則:不同技能之間用分號;間隔。具體可以參照本章開頭提出的宏模型。
要注意,一個/cast任何情況下至多只能施放一個技能,而且各個方括號之間仍舊遵循上文提出的<2>判斷順序法則。
3. 技能堆疊(法則三)
如果要做到一鍵同時放出兩個或更多的技能,必須有多行/cast命令,這就是技能堆疊。這種宏通常用于爆發(fā)技能,喝藥開飾品開技能需要同時完成。
其法則是:至多只能擁有一個產(chǎn)生/受到GCD影響的技能,幸運的是爆發(fā)類技能和藥水等物品幾乎都設(shè)計成不占用GCD。
Code(c):
1:#showtooltip
2:/cast 奧術(shù)強化
3:/use 13
4:/use 14
這樣的宏是可行的,因為飾品和[奧術(shù)強化]本身并不產(chǎn)生GCD,甚至再加兩行
Code(c):
/cast 氣定神閑
/cast 奧術(shù)沖擊
也是合法的。但是,形如以下的宏是非法的:
Code(c):
1:#showtooltip
2:/cast 驅(qū)邪術(shù)
3:/cast 審判
4:/cast 十字軍打擊
因為三者都產(chǎn)生GCD和/或被GCD影響,最終的效果是只相當(dāng)于第一行[驅(qū)邪]有用。不要妄圖這種方法能實現(xiàn)按優(yōu)先級施放技能。
4. 技能替代(法則四)
技能替代是一個十分有意思的機制,自CTM引進。這種機制允許某[基礎(chǔ)技能]在特殊情況下被另一個[替代技能]替代,而即便在替代的情況下,通過宏命令施放[基礎(chǔ)技能]時會自動定向到[替代技能],其最終的結(jié)果是正常施放[替代技能],宏的圖標(biāo)也會隨之變化。
這種機制有兩種情況:
1)單向的替代,/cast [替代技能]不會施放出基礎(chǔ)技能,但是/cast [基礎(chǔ)技能]是任何情況下通用的。
舉例:神牧的[圣言術(shù):罰]在黃輪和藍輪下轉(zhuǎn)換成[靜]和[佑],只要宏
Code(c):
1:#showtooltip
2:/cast 圣言術(shù):罰
就能自動根據(jù)輪的顏色轉(zhuǎn)換技能,但因為這是[罰]被單向地替代,反過來如果宏里寫[靜]或[佑],在紅輪下就會放不出技能。
2)雙向的等價,[基礎(chǔ)技能]和[替代技能]是完全等價的,就如同一個技能,任何情況下用宏施放任意一個技能的結(jié)果都是放出當(dāng)前激活的那一個。比如[腐蝕術(shù)]和[獻祭]兩者,SS玩家可以分別在不同天賦下試試。
這種機制對于寫宏非常有利,我們不需要為了技能被替換而另開一個宏。更深入的一點,以下兩個技能需要重點提及:
Code(c):
1:#showtooltip
2:/cast 秘法炸彈
3:--這個技能對應(yīng)法師75級天賦中的[虛空風(fēng)暴],[寒冰炸彈]和[活動炸彈]。[秘法炸彈]被單向替代。
Code(c):
1:#showtooltip
2:/cast 神圣爆發(fā)
3:--這個技能對應(yīng)牧師90級天賦,也是單向替代。
如果其他職業(yè)也有類似的天賦基礎(chǔ)技能,請歡迎補充。
二,寫宏的靈魂:邏輯和優(yōu)先級
和自己圈子里的很多人說過,寫宏其實和編程沒多大關(guān)系,需要的是一點數(shù)學(xué)的邏輯思維。尤其是那些技能整合宏,對在各種判斷條件下到底哪一個技能才是優(yōu)先的必須心里有譜。實際上這是上文中法則一之<2>的推演,本質(zhì)上仍舊是按照越優(yōu)先越靠前的方式排列整個技能和判斷序列。正因如此,上文法則一才是宏最最重要的法則,而優(yōu)先級正是寫宏的靈魂。
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:--比如這個術(shù)士宏,它的邏輯等價于:
5:--如果[目標(biāo)死亡且可協(xié)助]或[按住shift并且目標(biāo)可協(xié)助]或[其他按住shift的情況下對自己]施放[靈魂石]
6:--否則,如果[有按下其他任何修飾鍵]則施放靈魂鏈接
7:--否則任何其他情況下放盾墻
8:--此外,如果[目標(biāo)死亡且可協(xié)助]還會順帶切換回之前的目標(biāo),目的是戰(zhàn)復(fù)后目標(biāo)切回怪身上
有人可能會問,[help,dead][mod:shift,help][mod:shift,@player]這一串看不懂,為什么先來個shift修飾后面又來一個,這里就涉及到優(yōu)先級的問題了。
首先[help,dead]指定了[目標(biāo)死亡且可協(xié)助]的情況,它是優(yōu)先級最高的,只要滿足這兩個條件,其他任何條件不管滿足不滿足都會戰(zhàn)復(fù)目標(biāo)。
其次,[mod:shift,help]這一判斷代表[按住shift并且目標(biāo)可協(xié)助],但是它還有個隱藏條件。因為要判斷到這一層,首先必須前者[help,dead]為假,也就是當(dāng)[目標(biāo)不可協(xié)助或者目標(biāo)不死]的情況。所以其實這個判斷應(yīng)該是[(目標(biāo)不可協(xié)助或者目標(biāo)不死)并且按住shift并且目標(biāo)可協(xié)助],由于不可協(xié)助和可協(xié)助互斥,所以實際判斷的真值應(yīng)該是[目標(biāo)不死并且按住shift并且目標(biāo)可協(xié)助],滿足這個條件,對目標(biāo)放靈魂石。
再次,[mod:shift,@player],這里只用了一個判斷即shift修飾,上文說過@player不是判斷條件。但因為前一個判斷已經(jīng)有一種按下shift的情況被取走了,那么這里的判斷表示[其他按住shift的情況下對自己]施放靈魂石。
然后,[mod]是個廣義的修飾鍵判斷,當(dāng)alt/shift/ctrl中任何一個或多個被按下是都為true。當(dāng)然shift在前面的判斷中被取走,那么這里表示的是[按下alt/ctrl中任何一個或兩個],他等同于[有按下其他任何修飾鍵]則施放靈魂鏈接。
最后,無盡決心沒有任何判斷,它是恒真的。也就是在其他任何條件下都會施放無盡決心。
上面這個例子有些復(fù)雜,下面會通過一個相對簡單的實例來闡述如何運用這種模式寫宏。
法師法術(shù)反制及焦點反制/懸停解詛咒整合宏
要求是:焦點可攻擊按住任何修飾鍵都是焦點反制,不按修飾鍵且敵對目標(biāo)是對目標(biāo)反制,鼠標(biāo)懸停到友善目標(biāo)是解詛咒,目標(biāo)是友善目標(biāo)是解詛咒,默認(rèn)狀況下是對目標(biāo)的反制。
首先就是厘清優(yōu)先級。
*個人的習(xí)慣是修飾鍵優(yōu)先級比懸停高,也就是按了修飾鍵應(yīng)該嘗試對焦點放而不是對懸停解詛咒;而同時懸停的優(yōu)先級應(yīng)該比目標(biāo)的優(yōu)先級高。這個優(yōu)先級可以根據(jù)自身需要調(diào)整。
那么整理之后的優(yōu)先級就是:
第一優(yōu)先級:焦點反制敵對目標(biāo),判斷式[mod,@focus,exists,harm]
第二優(yōu)先級:懸停解可協(xié)助目標(biāo)詛咒,判斷式[@mouseover,exists,help]
第三優(yōu)先級:對友善目標(biāo)解詛咒,判斷式[help]
第四優(yōu)先級:敵對目標(biāo)反制,判斷式[harm]
第五優(yōu)先級:反制,無判斷式(恒真)
*要注意,harm和help有關(guān)系,但并不是help=noharm或者harm=nohelp。harm代表目標(biāo)可攻擊,help代表目標(biāo)可協(xié)助(能給他加血上buff等),此外還有一種既不能攻擊也不能協(xié)助的狀態(tài),稱為"被動(Passive)"。
現(xiàn)在可以直接寫出宏了,那就是:
Code(c):
1:#showtooltip
2:/cast [mod,@focus,exists,harm]法術(shù)反制;[@mouseover,exists,help][help]解除詛咒;[harm]法術(shù)反制;法術(shù)反制
3:--第一行的#showtooltip不是命令行,它的作用是能在鼠標(biāo)提示上顯示技能的有關(guān)信息
這個宏運作起來是符合要求的,但是可以繼續(xù)優(yōu)化。從邏輯上而言,第四與第五優(yōu)先級可以合并,而且exists沒必要與harm和help連用。因此最終的宏是:
Code(c):
1:#showtooltip
2:/cast [mod,@focus,harm]法術(shù)反制;[@mouseover,help][help]解除詛咒;法術(shù)反制
三,終極形態(tài):宏的優(yōu)化
宏有字?jǐn)?shù)限制,每個漢字或是英文字母都占1字,最后還有個換行符占1字,總共加起來不能超過256個字符(不包括標(biāo)題行)。因此在一些特殊的環(huán)境下,寫出來的宏會很長很長,那么優(yōu)化有時候就有必要。
優(yōu)化的目的是讓宏看起來更整潔優(yōu)美,更精短同時兼顧功能,以方便日后修改等操作。
優(yōu)化一:注意判斷之間的關(guān)系,去掉多余的判斷項。
Code(c):
1:#showtooltip
2:/cast [mod]技能1;[nomod]技能2
后面的nomod判斷就是多余的,可刪除。
優(yōu)化二:去掉多余的exists。
當(dāng)exists與harm,help,dead等本身就需要判斷"目標(biāo)狀態(tài)"的項目在同一個方括號內(nèi)連用時,exists多余。因為后者為真,exists一定為真;相反exists為假后者一定為假。
Code(c):
1:#showtooltip
2:/cast [@mouseover,exists,help][]快速治療
其中的exists可以刪除。
優(yōu)化三:恒真判斷([])
它就是一個空的方括號,在任何條件下都返回true。當(dāng)最后的收尾技能和前一個相同時,不需要使用分號重復(fù)寫技能名,只需要一個空括號即可。
比如還是上面的快速治療宏,其等同于:
Code(c):
1:#showtooltip
2:/cast [@mouseover,help]快速治療;快速治療
3:--可以簡并成
4:#showtooltip
5:/cast [@mouseover,help][]快速治療
優(yōu)化四:靈活運用/stopmacro
它的作用是在這一行終止當(dāng)前宏運行,可以加判斷式。
優(yōu)化五:慎用nochannelling項
特別是暗牧!
Code(c):
1:#showtooltip
2:/cast [nochannelling:精神鞭笞]精神鞭笞
若你的延遲不是非常低,這宏會嚴(yán)重浪費輸出時間。原因是它需要本地客戶端停止引導(dǎo)才會允許施放,而此時服務(wù)器早就引導(dǎo)完了。正確的方法是用顯示即使延遲的施法條插件,比如Quartz,在引導(dǎo)進入紅區(qū)時施放下個鞭笞。
優(yōu)化六:注釋符(--,兩個連寫的減號)
一種特殊命令,寫在一行的最開頭,作用是把一整個命令行全部注釋掉,讓其不產(chǎn)生任何效果。
實用性的例子如打斷施法+反制宏,當(dāng)插了反制雕文的時候,打斷施法這一行就沒有必要了。這時候就可以把宏改寫成如下形式:
Code(c):
1:#showtooltip
2:--/stopcasting
3:/cast 法術(shù)反制
注意注釋符的用法。下次需要他有作用的時候,簡單地刪除注釋符即可。用它保存暫時不用的長段復(fù)雜代碼,需要時刪除以釋放,方便有效。
優(yōu)化七:圖標(biāo)選問號,#showtooltip后面留空
如果是整合技能宏,一般情況下圖標(biāo)都選問號,這樣圖標(biāo)就會跟隨技能變化。而#showtooltip這一行一般不需要后面附加技能。當(dāng)在特殊情況下,例如寫一個氣定奧沖綁定宏,氣定在奧沖之前,但是非要把圖標(biāo)成奧沖的時候,才寫成:
Code(c):
1:#showtooltip 奧術(shù)沖擊
2:/cast 氣定神閑
3:/cast 奧術(shù)沖擊
四,常用宏模板
1. 治療/傷害技能混合宏,附帶指向施法,或者用于解buff和攻擊性技能組合:
Code(c):
1:#showtooltip
2:/cast [@mouseover,help]治療技能;[harm]攻擊技能;治療技能
2. 治療指向宏,無指向?qū)δ繕?biāo):
Code(c):
1:#showtooltip
2:/cast [@mouseover,help][]治療技能
3. 經(jīng)典的修飾鍵整合宏:
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
這個宏最近已經(jīng)被玩壞了,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。
這個用法需要關(guān)閉界面設(shè)置中的點擊施法選項。
按鍵綁定中綁定alt+1,在這個動作按鈕上放技能1
建立一個宏
Code(c):
1:#showtooltip
2:/cast [mod]技能2;技能3
把這個宏放到鍵1上。
其結(jié)果就是alt+1放出技能1,1+alt放出技能2,直接按1是技能3。
7. 智能坐騎宏
自帶的隨機坐騎真的有點,*咳咳*。
Code(c):
1:#showtooltip
2:/run local m=GetCurrentMapAreaID()if(m==610 or m==613 or m==614 or m==615) then CastSpellByName("深淵海馬") end
3:/cast [flyable]飛行坐騎
4:/cast [swimming]水生坐騎;陸地坐騎
這種帶判斷的上古宏對于坐騎還是可以用滴!用它能夠只在瓦斯琪爾召喚海馬。
結(jié)語
希望本文能稱為宏命令的普及做一份微薄的貢獻。內(nèi)容雖然很長,但是囊括了大部分寫判斷的要素。如果各位看官今后寫此類遇到了什么問題,本文或許會提供答案。
喜歡
頂
無聊
圍觀
囧
難過專業(yè)的游戲下載、綜合門戶網(wǎng)站
Copyright 2009-2016 www.chengbote.com 版權(quán)所有
鄂ICP備17018784號-1
熱門評論
最新評論
支持( 0 ) 蓋樓(回復(fù))