主題:個人總結的CWOW2.0宏編輯大眾教程
說明:本教程只講解動作指令和條件判定語句,不包括條件引用(例如對話判定、識別)部分。
全教程共分三篇:第一篇講解2.0版本宏(以下簡稱“2宏”)的構成,包括宏的格式,宏的意義以及可實現和不可實現的功能等等;第二篇將詳細介紹2宏的指令分類及各指令的意義及經典實例;第三篇將針對一些特殊的指令及參數進行一些實例講解,還將列出一些可引用的宏參數代碼。
第一篇:原來這就是2宏
對於宏的定義我就不多說了,玩過WOW的玩家都知道個大概。我主要說說2宏與1.0版本的宏之間的區別和共性,也就是說2宏現在能做什麼,不能做什麼。
首先說系統對宏的執行判定改變。在1.0時代,系統對宏指令的執行判定規則是“順序平行”。也就是說,無論你寫多少條指令,系統都會按照宏裡所編寫的指令順序平行的執行,此判定方式的結果就是多條平行指令將按從上到下的順序執行,直到有某一指令執行成功或者無任何指令執行成功。舉個例子,經典的BWL紅龍MT傻瓜宏:
/cast 英勇打擊
/cast 盾牌猛擊
/cast 復仇
/cast 破甲
此宏在1.0時代執行的效果是:連續點擊宏時,不斷的施放英勇打擊,有盾牌猛擊施放盾牌猛擊,無盾牌猛擊施放復仇,無盾牌猛擊也無復仇則施放破甲。也就是從上到下,有什麼技能出什麼技能,上一個技能無法使用就出下一個技能。
到了2.0時代,系統對宏的執行判定完全改變了,其規則是“平行同類優先”。簡單的說,就是無論你寫多少條指令,系統都將同時對所有指令進行執行,但同類指令會優先執行最上面的。此結果將導致同類的動作指令中,只有一個能被系統執行,其他的都會被屏蔽掉。這也就是所謂的“有公共CD技能無法實現一宏施放”。雖然這一改動將導致以往的傻瓜邏輯宏無法實現,但也增加了同一宏的多判定執行的可能,也就出現了現在按alt、shift、ctrl以至鼠標左右中鍵執行不同指令的判定(SS一鍵三吸的宏沒了,可是出現了一鍵六招,福兮禍兮)。
然後說系統對數值狀態邏輯判定的改變。1.0時代,遊戲支持宏語句對任意目標某一屬性和狀態的數值調用,也就是說可根據某單位的某一數值信息(血量,藍量,能量,怒氣以至連擊點數)來進行指令的執行判定。到了2.0時代,系統則關閉了此功能,只向UI端口開放,而且封閉了非被動狀態的屬性判定調用,也就是BUFF和DOT的判定。於是SS三吸、戰士斬殺、盜賊冷剔、獵人雙釘子、牧師快速罩等等一系列宏就沒了,經典的一鍵解業變成了打地鼠。不過無論怎麼改,去了舊的也才會來新的。2宏的命令跟1.0時代相比,更加簡單易懂了,編寫起來也容易了很多。
最後說說2宏的格式。這裡就不再與1.0比較了,沒有實際意義。直接說明2宏的格式構成。其基本構成方式為:
/<動作指令> [<條件指令A1>,<條件指令A2>,<條件指令A3>,……] <法術A(物品A)>; [<條件指令B1>,<條件指令B2>,<條件指令B3>,……] <法術B(物品B)>; [<條件指令C1>,<條件指令C2>,<條件指令C3>,……] <法術C(物品C)>;……宏命令中[]以內的“,”表示條件指令的並列關係,也就是“並且”,與其對應的是“/”,意思是“或者”。不同法術間的“;”表示選擇關係,也就是“否則”,與其有相同用法但意義不同的是“,”意思是“然後”,這個用在特殊的動作指令宏裡,後面會詳細講到。
對於此格式,有個特殊的說明,就是如果針對不同的選擇性條件指令進行判斷,但施放的是同一法術時,可以將[]條件指令進行直接並列,而無需再用“;”進行相同法術的分隔,當然,也可以重複寫成標準格式。比如2.0的牧師一鍵治療命令:
/cast [modifier:alt, target=player]治療術;[help]治療術;[help, target=targettarget]治療術
也可寫成:
/cast [modifier:alt, target=player][help][help, target=targettarget]治療術
其執行效果均為:當目標友善,或者目標的目標友善,則施放治療術,按住alt則對自己施放治療術。
宏內<動作指令>與[<條件指令>]間一定要空格,但[<條件指令>]與[<條件指令>]之間,[<條件指令>]與<法術(物品)>間可不空格。
到目前為止,我還沒有發現網上有對2宏指令進行分類整理的帖子,這也是讓很多宏自編者覺得困惑的主要原因之一。根據我自己的歸納和整理,將所有的2宏指令分成三大類,每一大類中再分幾個小類。具體說明和列舉如下:
第一大類:動作指令,即宏命令裡“/”後面的指令,是最一般的用來執行動作的命令。這是一條可執行的宏命令的軀體,可以說是一個宏語句想要實現的意圖。又可分為直接動作指令和條件動作指令兩類。
1、直接動作指令:也就是編寫後可直接執行某一動作的動作指令,可追加條件指令,但後面不用再接法術名稱或物品名稱。此類指令很簡單,包括:
/startattack 開始攻擊
/stopattack 停止攻擊
/stopcasting 停止施放(此動作指令後可追加某一法術名稱,但實際意義不大,所以這裡依然作為直接動作指令)
/stopmacro 停止喊話
/assist 協助
/focus 設置焦點目標
/clearfocus 清除焦點目標
/cleartarget 清除目標
/petattack 寵物攻擊
/petfollow 寵物跟隨
/petstay 寵物原地停留
/petpassive 寵物被動姿態
/petdefensive 寵物防禦姿態
/petagressive 寵物主動姿態
/dismount 下馬
這些都是直接動作指令,執行效果就是直接開始或終止某一動作或狀態。後面均可追加條件指令,表示符合某一或某些條件時進行此動作。
2、條件動作指令:也就是需要接法術名稱或者物品,並可依靠條件指令進行選擇執行的一些動作指令。這類指令最常用到,也是使得宏多樣化的基本指令。此類指令很常見,包括:
/cast 施放
/castrandom 隨機施放
/castsequence 順序施放
/cancelaura 取消BUFF
/cancelform 取消姿態
/equip 裝備
/equipslot 裝備到指定位置
/use 使用
/userandom 隨機使用
/changeactionbar 切換動作條
/swapactionbar 順序切換動作條
/petautocaston 寵物自動施放技能開
/petautocastoff 寵物自動施放技能關
/click 點擊
這一類指令的共同特點就是後面必須追加某一法術,物品或者某一參數代碼,當然也可以用條件指令來進行判斷,表示符合某一或某些條件執行某一法術(使用某一物品或執行某一動作)。這類命令裡有些需要使用參數代碼,在最後我會給出常用的參數代碼列表。
第二大類:條件指令,即宏命令裡[]中間的部分,是否執行某一動作指令所依據的條件。這是一條可執行的宏命令的靈魂,它告訴系統宏的某一動作指令什麼情況下是可行的,什麼情況下是不可行的。這類指令又分成兩類:狀態條件指令和指針條件指令。
1、狀態條件指令:顧名思義,就是指明某一狀態作為動作執行條件的指令。這一條件指令是2宏裡最有特點的一個指令群它使得宏的功能更加實用和多樣。此類命令很多,包括:
help 目標友善
harm 目標敵對
exists 目標存在
dead 目標已死
stance:<X> 處於某個姿態
stealth 潛行狀態
modifier:<X> <X>可以是shift/ctrl/alt,shift/ctrl/alt被按下狀態
button:<X> <X>可以是1/2/……5/<系統定義按鍵>,用鼠標的某個按鍵點的宏
equipped:<X> <X>可以是某個物品種類/身上某個裝備格/某物品的類型/或者子類型,裝備此(類)物品
channeling:<X> <X>為某法術名,某法術正在引導中
actionbar:<X> <X>為1到6的某一個參數代碼,指定的動作條頁面已被顯示
pet:<X> <X>可為寵物種類或指定寵物的名字,指定寵物存在
combat 處於戰鬥狀態
mounted 騎乘狀態
swimming 游泳狀態
flying 飛行狀態
indoors 在室內
outdoors 在戶外
group:party/raid 正在一個小隊/團隊中
這些命令指明在某狀態下,宏定義動作指令可施放。所有狀態條件指令前面都可以加個“no”,表示相反的狀態,比如nostealth表示非潛行狀態,nodead表示沒死。在宏語句中,此類指令都寫在[]中間,前面交代過,可以用“,”或者“/”來分隔,表明選擇條件指令之間的關係是“並且”還是“或者”。
2、指針條件指令:即表明動作指令所針對的對象。此條件指令很特殊,只有一個,就是target。其實與其說target是條件指令,不如說是指針指令。但是由於其應用在宏裡的tine是寫在[]之間的,所以把它歸結在條件指令裡,以方便記憶宏的書寫格式。此指令格式為:
target=<X> <X>可以為player/target/pettarget/targettarget/<某人或寵物的名字>……,動作施放目標為玩家/當前目標/寵物目標/目標的目標/某人或寵物……
注意在此條件指令後有個“=”,這也是target指令的特殊標誌。在使用target指令的語句裡,不表示目標為某某的狀態,而是表明此動作指令將向某某發出。
另外,最近開始流行多指針條件指令判定了,也就是為了追求戰鬥時的效率,用最快的方法來施放技能。最突出的一個條件指令就是target=mouseover。簡單說明一下目前WOW可以實現的目標指針條件指令種類,常用的就不說了,不常用有focus,即焦點目標,這是個可以脫離選擇而獨立進行監視的目標,需要使用/focus動作指令或指定系統快捷鍵來完成設置。還有就是mouseover。target=mouseover意思就是將動作指令的指針指向鼠標停留目標上,此時你無需選中這個目標,只要鼠標停留在目標的身上,使其顯示高亮就可以了。
第三大類:輔助指令,即用來輔助完善宏的功能的指令。常用的有兩個:
#show 在宏圖標上顯示指定圖標
#showtooltip 在宏圖標上顯示說明
這兩條指令後面均可追加技能或者物品名,則在宏圖標選擇界面裡選擇了“?”圖標的時候,會顯示指定的圖標和說明。關於“?”圖標,在遊戲升級補丁說明中有詳細講解,這裡就不再贅述了。只說兩點,一是這兩條指令要和“?”配合使用才能發揮最大的作用,其次是#showtooltip指令一定要放在宏的最開頭,否則會失效。另外多說一句,“#”後面有無空格均可。
三大類指令說完了,最後說說比較特殊的一個條件動作指令:
/castsequence 順序施放
這個動作指令雖然被歸入條件動作指令,但大部分條件指令都不適用於對其進行約束,因為此動作指令所要執行的內容其實是一個動作序列,每點擊此宏一次,系統將按編寫好的動作序列順序施放法術。/castsequence指令本身有個專用的條件限定指令reset=<X>。意思是在<X>條件下,宏序列重置到最初狀態。當<X>是數字的時候,則表示宏序列在<X>秒後重置。此命令初看時會覺得比較雞肋,但其實如果用特定的方法去使用,則作用很大,效果很出人意料。後面將有例子可以參考。