<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    常言笑的家

    Spring, Hibernate, Struts, Ajax, RoR

    魔獸世界宏(二)

    一、基本概念

      什么是宏命令
      玩過EQ的都知道一點宏的知識,比如組隊時用來告訴隊友你的行動,告訴目標等。最簡單的比如puller 常用的: /v %t過來了,大家集中火力。 法師常用的: /v 我要催眠%t,大家不要打醒他 這些宏個性鮮明,是EQ的一大樂趣之一。
      然而EQ畢竟是N年前的游戲,宏也比較簡單,和它比起來。WOW的宏就復雜和強大的多了。它的函數就有上千種,如果都掌握,能實現許多匪夷所思的功能。
      一個可以完成一個相對比較復雜的命令.比如戰斗中發布命令,如果打字當然不算麻煩,但在戰斗中卻很要命.浪費了時間和生命.一個簡單的宏便可以用一個鍵來完成這一切.
    二、宏命令的設置流程
      首先,回車,再敲/MACRO。看見了吧?會彈出一個窗口,上面有New(新建宏命令)和Complete(完成宏命令)兩個按鍵。點New,又會彈出一個窗口,哇,花花綠綠的,里面包括了WOW幾乎所有的技能圖標,隨你喜歡,隨便選一個!它就是你設置的宏命令的圖標了,給它取個名字吧!方便你用的時候好找。然后回到第一個窗口,在它上面有一個輸入菜單(別告訴我找不到…它可是占了這個窗口的一半多…)在里面輸入特定的內容,然后點Complete。接下來你要做的就是把這個代表你宏命令的圖標用鼠標左鍵拉到快捷欄里,想怎么用就怎么用…
    三、 基本宏命令
      

    1. 什么是宏


      宏是由一組宏命令組成的。以下是一些普通宏命令:
                    /say (/s)
                    /whisper(/w, /talk, /t)
                    /emote(/e, /em, /me)
                    /dance
                    喜愛PVP的人,應該不會忘了這個:/spit
            
            利用宏,我們可以把這些宏命令放到技能欄上點擊使用,而且可以同時做多個動作。寫宏的時候,每條動作寫在一行上,就像在聊天界面中輸入的一樣。比如,讓你的角色喊一聲“Everybody, dance now!”然后開始跳舞的宏:
      /y Everybody, dance now!
      /dance
      一個基本完整的宏命令列表可以參考這里:《宏命令全表》,不過個別新添加的宏命令還沒有被收錄。WoWWiki有很多關于宏的資料,尤其是腳本和/run命令(后面將會提到)。
      注:我先在此說一下,宏的執行是立即進行的。這意味著當你點擊技能欄上的一個宏時,宏命令會一條接一條地執行,執行完后才會返回游戲控制。這將會產生兩個重要問題:第一,如果寫了一個會執行很長時間的宏(如:/run for i=1, 1000000000 do end),游戲會被卡死,直到它執行結束;第二,也是更重要的一點,那就是宏命令不可能具有延時功能。這一現象在我們熟悉/cast之類的命令后就可以很清楚地感覺到。而一些提供了延時執行命令功能的插件,只能是能執行一些所謂的“良性命令”,如交談、表情和對于其他插件命令的調用(不過戰斗中更換武器是可以進行的)。
      

    2. 怎樣寫宏


      首先,打開你的宏窗口:單擊主菜單上的“宏”按鈕,或者在聊天界面中輸入/macro(/m)回車。在宏窗口的頂端,可以看見兩個標簽:“通用宏”和“<你的角色名>的專用宏”。通用宏被存儲在賬號專有的文件夾中,被所有角色共享。而角色專用宏則存儲在角色自己的文件夾下,是角色專用的(廢話……囧)。在標簽下面是18個存放宏的欄位。再往下是一個欄位,用于顯示當前選中的宏;還有一個“修改名稱/圖標”的按鈕,用于修改選中的宏。然后是一個用于顯示、編輯當前宏的文本框。最下面是三個按鈕,傻子也能看出它們是干什么的。
      如果要創建一個宏,首先單擊窗口下方的“新建”按鈕,這時窗口旁邊會顯示一個對話框,用于選擇圖標和輸入宏的名稱。如果選擇了第一個圖標(就是那個很紅很暴力的問號),WoW會自動根據你宏命令中涉及的技能或物品選擇圖標。選好圖標,輸入完名稱,就可以單擊“確定”按鈕了。
      順便提幾點:1.使用問號圖標的宏,可以通過使用#show指定顯示的圖標。2.雖然可以給不同的宏起相同的名字,但是最好不要這樣做。因為有些插件和宏命令是通過宏名稱來調用宏的。3.在圖標列表中可以添加自定義的圖標。
      現在,你選擇的宏圖標被顯示在欄位中了(還會顯示部分宏名稱)。同時,新建的宏被選中,圖標顯示在當前選中宏的欄位中:現在你可以寫你的宏了。單擊編輯文本框,然后輸入吧。
      注:宏限定為255個字符,傳聞這樣做是為了以后可以把用戶的宏上傳到服務器中。不過……現在能做的就是遵循這個限定,至于想要把宏移植到其他機器上使用,請參見第三部分的宏的移植。
      寫完宏以后,只要把它的圖標拖放到技能欄中就可以了。當你執行一個宏,或者是關閉宏窗口的時候,宏都會自動保存的。現在點擊宏的圖標,看看效果吧!
      

    3. 施放法術


      在正常游戲過程中,很多宏命令通過聊天窗口輸入使用似乎并不好用,但是在宏中就不一樣了。在特定場合下,簡簡單單的表情宏也可以產生有趣的角色扮演效果哦,那么,繼續看……
      這個:/cast,它是最常見的宏命令了。作用嘛,就是施放一個技能書中的技能(包括寵物的)。最簡單的用法就是這樣:
      /cast 暗言術:痛
      把這個宏放到技能欄上點擊,將會對目標施放你最高級的痛。這和把技能書中的痛拖到技能欄上,然后點擊的效果是一樣的。我們制作的宏同樣會在技能欄顯示你的技能冷卻狀態和射程狀態,點擊后同樣能正確的施放痛。如果宏使用了問號圖標,那么還同樣會顯示痛原有的圖標。
      那直接用技能不就行了么,何必用宏呢?繼續看,在宏中通過集成多條命令可以產生什么效果吧,這才是宏的價值所在。比如說你是個法師,想讓隊友知道你要羊掉誰,你該怎么辦?用宏吧,一個簡單的/p命令加上一個/cast就可以了(使用這個無恥的插件可以達到更好的效果:CCWarn,不過我們現在需要的只是這個簡單易懂的教學例子):
      /cast 變形術
      /p 我羊了%t!誰打誰扛著哈!
      注:由于宏的執行是立即進行的,所以不管目標是否有效技能是否冷卻,宏被點擊時/p命令就執行了,也就是說這兩行命令的順序顛倒后效果是相同的。如果你想在確定成功施放一個技能后才執行某條命令,你可以試試這個插件:AfterCast。AfterCast可以設定在施放某個技能后執行一條宏命令,當然,是在第1節末尾所提到的限制之下的。如:
      /aftercast /p 請隊友點門,把懶豬%t揪過來!
      /cast 召喚儀式
      i.關于技能名稱和等級的說明
      /cast命令對技能名稱是十分嚴格的,文字、標點、空格,一個都不能錯。為了防止出錯,編輯宏時,你可以打開你的技能書,按下Shift然后單擊你的技能圖標,技能名稱和等級就會被正確地輸入到你的宏編輯文本框中,如:
      /cast 暗言術:痛(等級 5)
      如果把“(等級5)”刪掉,宏在執行時就會自動選擇你最高級別的技能執行;不過在很多場合下,還是需要指定級別的技能,比如術士放逐就需要根據時間來選擇技能。另外要注意,等級指示中使用的括號是英文的半角括號,等級與數字間有一個半角空格。而一些技能名稱中的括號,比如“精靈之火(野性)”中的括號,是中文的全角括號。以下宏命令不能正常執行:
      /cast 精靈之火(野性)
      /cast 精靈之火(野性)(等級 1)
      而以下的命令是正確的:
      /cast 精靈之火(野性)
      /cast 精靈之火(野性)()
      空的括號效果和沒有括號是一樣的。由于255字符限制的存在,空間還是要節省的,所以空括號可以刪掉了……
      

    4. 使用物品或者飾品


      使用物品和飾品和施放法術是類似的。用于使用物品的命令是/use,后面只需要加上物品的名字就可以了。例如:
      /use 綠色機械陸行鳥
      另外,還有以下其它的使用格式:
      i./use <裝備欄>
      這種格式可以使用指定裝備欄中的物品。具體使用請參見《裝備欄編號方式》。例如:
      /use 13
      使用第一個飾品。
      ii./use <背包> <欄>
      這種形式是在指定背包中確定物品欄的,比如你總是把貓食狗糧放在行囊的第一個欄位中,那么你就可以用這樣的宏來喂養寵物:
      /cast 喂養寵物
      /use 0 1
      背包的編號為0-4,順序是從右到左,即0是行囊。物品欄則是從上到下從左到右,從1開始依次編號的(與書寫順序相同):
      1 2 3 4
      5 6 7 8
      ……
      或者是:
      1 2
      3 4 5 6
      7 8 9 10
      ……
      如果怕把/cast和/use的用法混淆了,那就徹底搞混吧,因為它們其實本來就是完全一樣。/cast可以使用物品,而/use也可以施放技能。這一點在目前看來似乎沒有什么,但是到后面,介紹命令條件語和施法隊列時,你會發現能把物品和技能混合在同一條命令中是多么爽的一件事。
      

    5. 集成多個動作


      首先,在一個宏中想一鍵釋放多個法術是不行的。大多數技能和很多物品會觸發公共冷卻(GCD),防止你同時做太多的動作。即使一個技能釋放失敗,如果它可以觸發GCD,那么它也會阻止后續/cast命令的執行。這是2.0版本之后的設定,之前可能看到這樣的宏:
      /cast 壓制
      /cast 斬殺
      /cast 致死打擊
      /cast 破甲
      但是現在,記住,這種宏已經不能正常執行了。如果壓制施放失敗,雖然沒有觸發GCD,客戶端也不會繼續執行后續的技能施放。不過令人欣慰的是部分技能還是可以集成到一個宏中。任何不觸發GCD的瞬發技能后面可以接上另一個技能(“下次近戰攻擊”型的技能,如英勇打擊也歸于此類)。一個技能可以通過看說明知道它是否瞬發,至于是它是否觸發GCD通過實驗就可以知道。
      2.3版本之前,在這個瞬發無GCD技能之后需要加上一個/stopcasting才可以施放其后的技能。施放第一個技能后,游戲客戶端會認為當前在施法狀態,而/stopcasting就可以解除這個狀態,就可以解決后續技能不能釋放的問題。但是由于技能是瞬發,/stopcasting實際上并不能取消技能的施放。
      而現在這里可以不用/stopcasting了,例如:
      /use 短暫能量護符
      /cast 奧術強化
      /stopcasting
      /cast 氣定神閑
      /stopcasting
      /cast 炎爆術
      

    6. 選擇目標


      選擇目標是宏的另一個主要作用。此類功能可以用專門的目標選擇命令實現,改變當前的目標;也可以在一些命令中用[target=]命令條件語實現,臨時指定施法或使用物品的目標,而不改變當前目標。命令條件語在第二部分將會講到到。現在我先介紹目標選擇命令。
      最基本的命令是/target,用法如下:
      /target Cogwheel
      /target的選擇是經過最佳相近匹配的,也就是說,如果我正站在你附近(并且附近沒有誰叫Cog的),你執行/target Cog,我就會變成你的當前目標。至于這種機制是利是弊……那就取決于實際情況了,因為這個東東貌似不穩定,有時會得到莫名其妙的結果。比如下面這個宏就可能不是很好用:
      /target 黑翼法師
      /cast 痛苦詛咒
      如果附近沒有黑翼法師呢?或許結果就是:選中了團里的某個人,因為他的名字在某種意義上比較相近。雖然你的詛咒不會真對他們放出來,但還是夠囧的。另外一個問題是,它可能會選擇你身后一個離你100碼的單位——根本不是你想選中的那一個……不過在2.3版之后,增加了一個/targetexact命令,第一個問題得到解決了。
      除了用人名進行選擇之外,還可以通過單位標識符進行選擇。單位標識符(Unit ID)是用于標識特定單位的字符串。比如你的當前的目標就可以用“target”來表示,而你自己對應的標識符是“player”,如果你有寵物,那么它的標識符是“pet”。另外,通過在一個正確的標識符后加上target,就可以獲取他的目標。如此變態也可以:
      /target targettargettargettargettargettarget
      這里是一個可用ID的全表:《單位標識符》。
      i.其他選擇命令
      以下是其他的目標選擇命令:
      ? /assist
      不加任何其他參數時效果是選擇你目標的目標,如果在其后加上人物名稱,那么就會選擇對應人物的當前目標。例如:
      /assist Cogwheel
      另外,在客戶端的界面選項中有一個選項,可以設置用/assist選中一個敵對目標時是否自動進行攻擊。
      ? /cleartarget
      清除當前目標。
      ? /targetexact
      準確選擇,如果附近沒有單位的名字和給出的參數完全匹配,就不會切換目標。
      ? /targetlasttarget, /targetlastfriend 和 /targetlastenemy
      顧名思義,分別用來選擇上一個目標、上一個友方目標和上一個敵對目標。如果你之前沒有過任何目標,那么這些命令不會產生任何影響。
      ? /targetenemy 和 /targetfriend
      選擇敵方目標和選擇友方目標。這兩條命令是按一定順序循環選擇指定類型的目標的,和使用Tab鍵的效果類似。如果在命令后加上一個1作為參數,那么就會按循環的反方向進行選擇。例如:
      /targetenemy 1
      效果就和按下Shift+Tab鍵一樣。
      注:這兩個宏命令每個宏中只能用一次。
      ? /targetparty 和 /targetraid
      按距離循環選擇你附近的小隊或團隊隊友,與/targetenemy類似,也可以用1作為參數改變選擇的循環方向。
      

    7. 控制寵物


      之前在講施放技能的時候提到過,使用/cast命令可以施放寵物的技能。玻璃渣把法師的水寶寶的霜星起名叫“冰凍術”就是為了避免和法師自身的“冰霜新星”技能沖突,從而導致不能在宏內使用。但是有寵物的職業會發現,如果宏只能施放技能的話,甚至還不如寵物技能欄的功能。別急,燃燒的遠征中,新增了以下這些宏指令:
      i./petattack
      讓你的寵物去攻擊你的當前目標。當然,在命令后加參數可以指定攻擊的對象。
      ii./petfollow
      寵物切換到跟隨狀態,同時取消攻擊。
      iii./petpassive, /petdefensive 和 /petaggressive
      寵物切換被動、防御和主動攻擊狀態。同寵物技能欄上的最后3個按鈕。
      iv./petautocaston 和 /petautocastoff
      打開/關閉寵物技能的自動施放。例如:
      /petautocaston 折磨
      /petautocastoff 受難
      不過美中不足,沒有直接切換自動施放狀態的宏命令,我將在后面“模擬點擊”部分提到一個解決方法。
      

    8. 宏在動作欄的顯示控制


      如果一個宏使用問號圖標,魔獸世界客戶端會默認把宏內容中的第一個技能或物品的圖標、冷卻狀態等信息顯示在技能欄上。比如前面所講的這個例子:
      /use 短暫能量護符
      /cast 奧術強化
      /cast 氣定神閑
      /cast 炎爆術
      客戶端會把奧術強化的狀態信息作為宏的狀態顯示。但是這恐怕不是我們所希望的,因為這個宏的目的是炎爆,前幾行的奧強氣定都只是為了最后把一個大大的臉盆給丟出來。如果在宏的前面加上這樣一行,炎爆術就會被當作宏的默認技能:
      #show 炎爆術
      如果使用了問號圖標的話,宏還會直接顯示炎爆的圖標。#show的參數機制和/cast類似,可以使用技能名、物品名、物品編號(如item:12345)、裝備欄或者背包+物品欄編號。
      和#item類似的還有#showtooltip。正常情況下,鼠標指向宏的時候,提示信息顯示的是宏的名字。而這在絕大多數情況下是很不好用的(除非你用了TheoryCraft之類的插件可以顯示詳細的技能信息)。而用#showtooltip就可以指定宏在鼠標指向時顯示的信息,用法同#show。另外,如果使用了#showtooltip的話,就沒必要再用#show了。
      如果客戶端自動選擇的技能符合你的要求,那么可以只用#showtooltip而不加參數來顯示該技能的說明,這樣可以節約空間。
      請注意:#show和#showtooltip與/開頭的宏命令不同,是大小寫敏感的,也就是說只能用小寫字母。
      

    9. 其他的命令


      現在有了足夠的基礎,以下這些命令我就只簡要地講解一下了。有些命令看似沒啥用,但如果配合將在第二部分介紹的命令條件語,它將會產生驚人的效果。
      i.裝備物品
      用于裝備物品的命令有兩個:/equip和/equipslot。/equip的參數為物品名稱,效果是把對應物品裝備到默認的裝備欄中,類似在背包中右鍵單擊物品(如:一件單手武器就會被裝備到主手上)。而/equipslot的參數為裝備欄編號和物品名稱,效果是把物品裝備到指定欄位中去。例:
      裝備武器:
      /equip 虛空角斧
      把飾品裝備在第二個飾品欄中:
      /equip 14 棍子上的胡蘿卜
      注意:即使是在戰斗中,插件頁是可以直接使用裝備命令的。因此在AfterCast和Chronos中可以使用裝備命令。如果插件內部會檢查命令是否經過安全化可能就不那么好用了,因為它屬于“安全化”指令——但是事實上它并沒有受到安全限制。
      ii.隊列施法或使用物品
      很多時候我們需要經常按一定順序使用固定的一些技能或物品。這樣的操作是可用/castsequence宏命令進行傻瓜化的。/castsequence命令用法是在后面寫上一些技能或物品的名稱,之間用英文的半角逗號分隔,和/use、/cast類似。技能名、物品名、物品代號、裝備欄代號和背包位代號都可以混合使用。每次執行宏,就使用當前的技能或物品(從第一個開始),如果成功,隊列的當前位置就被移至下一個技能或物品。也就是說需要反復執行宏來按順序使用這些技能或物品。當最后一個技能/物品成功使用后,這個隊列就被重置到開頭。比如:
      /castsequence 獻祭, 腐蝕術, 痛苦詛咒, 生命通道
      這是痛苦術士起手的招牌動作。注意,如果獻祭沒有施放成功(比如魔法不足,超出范圍,被沉默了等等),這個隊列不會繼續執行,直到獻祭放出去。所以下面這個宏是屁用沒有的:
      /castsequence 壓制, 斬殺, 致死打擊
      在技能列表之前,可以插入一個條件語,用于另外指定一些隊列的重置條件。語法是:
      reset=n/target/combat/shift/alt/ctrl
      以上的這些條件都可以任意共存。其中,n是數字,表示從某次執行宏開始,經過n秒后沒有再次執行這個宏,那么隊列就被重置到開頭。這一點很重要,因為這意味著無法利用reset條件語來精確計時(比如讓某技能一冷卻就用)。target條件表示當目標切換時,宏隊列重置;combat條件表示脫離戰斗后重置;shift,alt和ctrl表示當執行宏時指定的鍵為按下狀態時重置。例如:
      /castsequence reset=10/shift 第一個技能, 其他技能, 一些物品
      如果這個宏圖標使用的是問號,就會自動顯示下一個要施放技能的圖標。但如果/castsequence前面還有其他/cast和/uses命令,這個功能就沒有了,而且玻璃渣也沒有提供什么命令來解決這個問題。
      iii.隨機施法或使用物品
      
    最常見的例子就是希望隨機召喚一個坐騎來裝B,使用/castrandom或者/userandom宏命令很容易實現這個功能。用法和/castsequence類似,如:
      /castrandom 迅捷綠色機械路行鳥, 軍用黑色機械路行鳥, 召喚恐懼戰馬
      iv.攻擊
      以前的宏是/attack,后面可以寫上單位名作為攻擊對象,無參數則以當前目標為對象。效果是切換當前的攻擊狀態(攻擊/停止攻擊)。但是這個宏從2.2.3開始就被廢除了,只能使用/startattack和/stopattack了。分別用來攻擊和停止攻擊。如:
      /startattack Cogwheel
      v.技能欄控制
      有兩個控制技能欄翻頁的宏:/changeactionbar和/swapactionbar。前者接受一個數字作為參數,表示要切換到的技能欄頁碼。常見的是獵人用來轉換近戰遠程攻擊狀態:
      /cast 雄鷹守護
      /changeactionbar 1
      和
      /cast 靈猴守護
      /changeactionbar 2
      /swapactionbar命令后面要寫兩個頁碼,表示來回切換指定的兩個技能頁。如果當前技能頁不是兩個頁碼中的一個,當前頁就會被設置為第一個頁碼指定的技能欄頁。
      /swapactionbar 1 2
      vi.移除增益效果
      /cancelaura命令可以移除自己不想要的增益效果(BUFF),比如主坦需要移除身上的拯救祝福:
      /cancelaura 拯救祝福
      vii.退出形態
      除了戰士,任何有“形態”概念的職業(德魯伊、暗牧)都可以用/cancelform來退出當前形態:
      /cancelform
      /use 超強治療藥水
      2.3版本之前,上面這個宏由于形態取消有一個延遲,為了達到效果需要執行兩次。不過2.3版本后,小德可以只點一次就產生效果了。
      viii.中止施法
      前面簡單提到了/stopcasting命令,不過它存在的目的顧名思義,是用來打斷當前施法的。這對處理緊急情況很有用,比如我的術士:
      /stopcasting
      /cast 暗影灼燒
      ix.終止一個宏:/stopmacro
      /stopmacro如果不配合條件語來使用是沒有什么意義的。它一般用來實現條件執行的功能:如果滿足了某些條件,則中止宏繼續運行。具體用例請參見設置焦點(focus)。
      x.解散坐騎
      /dismount
      不用再說什么了吧?
      xi.保存一個目標用于后續動作
      /focus宏可以把一個目標設為焦點(focus),然后可以在其他指令中使用這個focus。比如你的老大指定了一個目標讓你羊著。你要做的就是選擇它,然后輸入/focus。然后你就可以用這個宏羊著它了,而不用管你當前目標變成了誰:
      /cast [target=focus] 變形術
      注意,focus的作用可不僅僅如此,具體還是請參見設置焦點(focus)一節的內容,那里有更深入的剖析。
      xii.模擬點擊
      /click命令的參數為一個按鈕(本質上來說是一個窗口)的名稱,執行的效果就相當于用鼠標點擊了這個按鈕。默認情況下,它的效果相當于左鍵單擊,也可以根據設置成其他按鍵點擊的效果。至于按鈕名稱可以通過一下方式獲知:
      ? 使用插件。某些插件,比如MoveAnything,提供了查看窗口名稱的功能。
      ? 查看界面的源代碼。這一般是非常嫻熟非常牛B的插件制作者才能做到的。
      ? 用這樣一個宏獲取當前鼠標所指的窗口名稱:
      /run local f=GetMouseFocus(); if f then DEFAULT_CHAT_FRAME:AddMessage(f:GetName()) end
      /click可以用于很多用途。比如利用它可以一次執行很多宏。還有,假設你有一個宏太長了,遠遠超過255字符限制。你就可以把后面寫不下的代碼寫到另一個宏中,而前面那個宏的末尾寫上:
      /click MultiBarRightButton1
      再把第二個宏拖到那個叫MultiBarRightButton1的欄位中。這樣執行第一個宏就相當于執行了所有的宏命令。
      另外,這個宏還可以用來做一些其他命令沒法辦到的事。比如前面提到的切換寵物技能自動施放狀態的功能,就可以這樣解決:
      /click PetAttackButton5 RightButton
      這個命令的涵義就是右鍵單擊一下寵物欄上第五個按鈕。
      用于指定按鍵的參數還可以是LeftButton(左鍵,默認),MiddleButton(中鍵),Button4(4號鍵)和Button5(5號鍵,職業玩家的鼠標……)。在掌握這些之后,第二部分結尾處還會介紹更復雜的,利用/click產生分支判定效果的例子。
      

    10. 進階:腳本


      i.腳本有哪些限制?
      腳本是一個強大的工具,它按照LUA語言的語法執行,利用客戶端提供的接口可以產生強大的智能。所以玻璃渣就給它加了限制,防止它被濫用而影響游戲平衡性。我之所以要先講腳本的限制,為的是讓大家對它別抱太大希望。雖然腳本還是很有用,但是不能用來施法、使用物品、改換技能欄或改變當前目標。這些功能只能依靠那些“安全化”的命令來實現。
      ii.什么是腳本?
      魔獸世界客戶端的用戶界面是可以通過LUA腳本控制的。通過/run和/script命令就可以執行腳本(我個人推薦使用/run,節省字符數……)。在命令后面書寫腳本內容,中間不能換行。不過一個宏中可以包含多個/run命令。
      過多關于LUA語言和編程的內容本文就不再贅述。如果你有一定的編程經驗,那么就可以訪問lua.org學習LUA語言。如果沒有什么基礎,那么請先看《編程入門》了解一些基本概念。
      玻璃渣提供了很多API函數(Application Programming Interface),可以在LUA腳本中調用來實現對界面的控制。關于API函數和相關的內容可以看看這篇文章:《界面DIY》(如果你打算花時間好好研究魔獸世界插件的話,WoWWiki是最優選擇)。我不可能把所有關于用戶界面的細節都講到,因此我只打算用我最常用的一個宏做例子,簡單地講一下。想了解得可以看上面給出的鏈接,或者這里:《Mod Author Resources sticky》。
      下面這個宏是我給出的例子,它會向所有和你目標相同的人發送悄悄話,通知他們改變目標(我的插件CCWarn也是就是基于這段代碼的)。這樣就可以防止已被羊的人受到攻擊。
      /cast 變形術
      /run for i=1,GetNumRaidMembers()-1 do local u,t="raid"..i,"target"if UnitIsUnit(u..t,t)then SendChatMessage("Change targets! Trying to sheep...","WHISPER",nil,UnitName(u))end end
      呃……貌似看起來有些亂……不過沒辦法……首先,宏是有255字符數限制的,所以常常要用一些不美觀的方式去寫代碼。其次,腳本要寫在一行中。這兩個條件導致代碼的可讀性很低。如果把代碼單獨拿出來美化一下的話,應該是這個樣子:
      for i = 1, GetNumRaidMembers() - 1 do
      local unit = "raid"..i
      if UnitIsUnit(unit.."target", "target") then
      SendChatMessage("Change targets! Trying to sheep...", "WHISPER", nil, UnitName(unit))
      end
      end
    四、 命令條件語
      

    1. 什么是命令條件語


      命令條件語是插入在宏命令中,使宏根據條件執行不同功能的語句。舉個例子,下面這個宏的作用是,如果是友方目標就施放恢復,如果是敵方目標就上痛:
      /cast [help] 恢復; [harm] 暗言術:痛
      當這個宏執行時,首先檢查[help]條件,判斷當前目標是否是一個可以接受治療/增益法術的目標。如果[help]條件成立,那么就施放恢復并執行下一條命令,否則(即沒有目標,或目標不接受有益技能)繼續執行下一個子句,也就是分號后[harm]那里,再判斷[harm]條件。[harm]條件和[help]條件相反,判斷目標是否接受敵對法術。同上,如果條件成立就釋放“暗言術:痛”并執行下一條命令。如果條件不成立,由于后面沒有其他子句,這條宏命令就算執行完了,但是什么動作都沒有做。
      注:如果沒有寫[harm]條件,實際運行效果是差不多的。不過,如果你沒有目標或者當前目標不接受任何法術,那么屏幕上將會出現錯誤信息,或者對于某些技能,鼠標將會變成選擇施放目標的狀態。
      

    2. 可以使用條件語的命令


      只有那些“安全化”命令可以接受命令條件語。其實正是經過安全化的命令才需要條件語。常規命令,比如說聊天、表情之類的,可以通過腳本來實現命令條件語的功能。而且暴雪不想限制大家在聊天時使用分號(;)。如果/s命令可以使用命令條件語的話,那么下面這個命令就會只說hello:
      /say Hello; I’m a n00b
      以下是當前客戶端中安全化命令的列表:
      #show1
      #showtooltip1
      /assist
      /cancelaura
      /cancelform
      /cast
      /castrandom
      /castswquence
      /changeactionbar
      /clearfocus
      /cleartarget
      /click
      /dismount
      /equip2
      /equipslot2
      /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邏輯上也不算是安全化命令,因為它們的功能是可以通過插件和腳本實現的。
      當然,如果你希望在常規命令中使用命令條件語,就需要安裝專門的插件。MacroTalk,這是我的一個作品,通過在非安全化命令前添加/opt,然后在/opt中處理各類條件來實現對不同命令的調用(當然只能是非安全化命令)。最新版的SuperMacro中應該也有類似的功能。
      

    3. [target=]條件語


      該條件語使得宏命令除了可以對條件進行判斷外,還可以設置動作的目標。例如,下面這個宏運行時,無論當前目標是誰,玩家只會給自己綁繃帶:
      /use [target=player] 厚靈紋繃帶
      Target條件語在指定動作目標的同時,也指定了進行條件判斷的目標。下面這個垃圾宏是一個純教學例子,看我的說明:
      /cast [help] [target=targettarget, help] [target=player] 快速治療
      這個宏運行的時候,首先會檢查[help]條件。如果條件為真,那么就開始吟唱快速治療。否則就跳至第二個條件,[target=targettarget, help]。此時,判斷目標和技能目標都被設定為你當前目標的目標,然后進行help條件判斷。如果條件成立就對你當前目標的目標施放快速治療,否則再跳至第三個條件。而第三個條件總是成立的,所做的只是把你自己當作施法目標。
      

    4. 語法


      命令條件語是按什么規則生效的?恐怕要回答這個問題很容易引起混亂。所以,趁還沒有正式開始講,我先用一些現實生活的例子做類比。看不懂不要緊,這只是些概念,技術性的內容后面都還會再提到的。
      i.條件語語法簡介
      所有的宏命令的基本工作方式是相同的:一個命令,后面帶上一個或多個參數(取決于命令的要求,有些甚至不需要任何參數)。看下面這些例子:
      /cast 猛擊
      \___/ \___/
      | |
      | 參數
      |
      命令
      /petattack
      \_______/ \/
      | |
      | 參數(為空)
      |
      命令
      /castsequence reset=target 獻祭, 腐蝕術, 痛苦詛咒, 生命虹吸
      \_________/ \_______________________________________/
      | |
      命令 參數
      而命令條件語可以通過對一組條件進行的判斷來選擇命令的實際參數。首先,可以用分號分隔出若干個“若干組條件+參數”這樣的子句,邏輯上,分號就相當于高級語言中的else或是elseif。條件的組數不定,也可以沒有,同一組條件用一個方括號括在一起。而每組條件中有可以包含多個條件。就像這樣:
      /命令 [一組條件] [另一組條件] 參數1; [又一組條件] 參數2; ……
      前面的例子已經說明了,宏命令的解釋過程是從左至右的。當一組條件被判定成立時,命令就會采用其對應的條件。如果某一個子句中不包含條件,那么就被無條件判定為成立。像/cast XXX這種簡單的宏命令就可以理解為一個只有一個子句的宏,而這個子句又不包含條件。而如果一個宏的任何一組條件都不為真,那么它就完全不會執行。
      ii.條件語法
      每組條件都是由逗號分隔的一些條件語組成的,各條件不分前后次序。邏輯上,[target=]總是先發生作用,然后其他的條件才進行判定。逗號在這里可以理解為“并且”,也就是說各條件簡是邏輯“與”的關系。比如[help, nodead, target=focus]的含義就是:我的焦點是友善的,并且是只活的。
      注意:條件是對大小寫敏感的,如果你把[help]寫成了[Help],宏運行時會報錯。
      條件中有組合式的使用方式,比如nodead,同樣對于help,你可以用nohelp表示相反的條件。但是nohelp不等于harm:首先,help和harm都要求目標存在才有可能成立;其次,有些目標,比如中立陣營NPC、非戰斗寵物或者護送任務NPC等,既不算help,也不算harm。
      還有些條件可以指定一些特定的參數。比如[stance],姿態,單獨使用時表示“在任一姿態中”(顯然這對戰士來說是廢話一句)。如果給它加上參數,就可以指定在某個姿態下,格式是在條件語后寫上冒號(:),然后后面寫上參數,每個參數間用斜線(/)分隔。綜上所述,一個條件語的完整格式如下(<>表示其中的部分是可選的):
      [<no>condition<:parameter</parameter</parameter<…>>>>]
      下面舉個例子,如果在戰斗或防御姿態施放盾擊,否則轉入防御姿態:
      /cast [stance:1/2] 盾擊; 防御姿態
      這個宏用偽代碼寫的話就是:
      IF 當前在姿態1或姿態2
      THEN 用盾擊
      ELSE 切換防御姿態
      注意:“no”前綴是對整個條件和所有參數的修飾,即把原來的真變為假,假變為真。比如[nostance:1/2]表示“不在姿態1也不在姿態2中”。
      iii.完整的EBNF語法
      對EBNF規范很熟悉的人,以上內容可以概括為:
      command = "/", command-verb, [ {command-object, ";" } command-object] ]
      command-verb = ? any secure command word ?
      command-object = parameters
      parameters = ? anything which may be passed to the command word ?
      condition = "[" condition-phrase { "," condition-phrase } "]"
      condition-phrase = [ "no" ], option-word, [ ":" option-argument { "/" option-argument } ]
      option-argument = ? any one-word option, such as 'shift, 'ctrl', 'target', '1', '2' ?
      iv.參數為空
      有些命令是可以沒有參數的,這里就存在著一個陷阱。比如:
      /petattack [target=focus, harm];
      很多初學者一看,認為這個宏的含義應該就是判斷焦點是否為敵對,如果是,就把寵物送上去咬。而實際上呢?讓我們分析一下:
      /petattack [target=focus, harm] ;
      \________/ \______________/ V V V
      | | | | |
      命令 條件語1 | | 參數2 (為空)
      | |
      | 條件語2(為空)
      |
      參數1 (為空)
      現在看出來了吧?由于那個分號的存在,這個語句實際上包含兩個子句,而一個條件語為空的子句是被當作條件成立處理的,因此即使前面的條件語1不成立,也會執行一個/petattack。
      v.條件為空
      有時我們需要在特定條件下對特定目標施放技能,并在條件不成立的情況下按常規施放。這中效果可以通過使用一組空條件來獲得。下面例子中的宏在執行時會對你鼠標指向的友方單位施放圣光閃現。如果鼠標沒有指向任何單位或者指向的目標不是友善的,那么就會按常規對當前目標施放,或者根據設置(如自動自我施法、自我施法功能鍵)對自己施放。
      /cast [target=mouseover, help] [ ] 圣光閃現
      vi.[target=]條件語與命令參數
      
    很多命令的參數是可以直接指定目標的。比如/target party1就可以把小隊中第一個隊友作為你的目標。而用/target [target=party1]的話,雖然看起來別扭,但是效果也是一樣的。但是宏的設計者不希望我們根據一個單位的狀態而對另一個單位執行動作,因此大多數情況下[target=]條件和命令參數只能有一個發生作用。例如:
      /target [target=focus, dead] party1
      客戶端會把party1直接忽略掉——因為你已經指定了[target=focus]。不過這種情況也有例外,就是個別命令擁有一個“特殊單位”(其實也就是該命令會影響的單位標志符)。見下表:
      命令 特殊單位
      /target target
      /focus focus
      /startattack target
      /petattack pettarget
      當在[target=]中使用的是該命令的“特殊單位”時,命令執行目標不會被設置為該單位,而命令參數中指定的目標也不會被忽略。例如
      /focus [target=focus, dead] [target=focus, noharm] target
      由于focus是/focus命令的特殊單位,所以/focus的目標就不會被[target=focus]設置成焦點,而是target,即當前目標。如果沒有指定target,/focus就相當于沒有參數,同樣是把當前目標設為焦點。
      

    5. 命令條件語


      下面給出一張條件總表,每一個條件在后面我都會再給出更詳細的介紹。
      i.總表
      
    WOW2.0在對宏命令系統的更新中,宗旨就是把玩家從按“一鍵萬能宏”按到手抽筋的狀態中“解脫”出來。不過有一些宏的用法是被官方認可了的,它們獲得了“玻璃渣祝福”的效果——可以通過使用條件語來重現。
      下面列出宏命令系統中支持的所有條件語。如果你需要的判斷條件沒有在此列出,那么就不可能通過該條件來執行安全化命令的動作。這是中央的死龜腚,誰都沒辦法,不過以后也有可能會再增加一些。
      ? help 目標可以接受增益法術
      ? harm 目標可以受到攻擊
      ? exists 目標存在
      ? dead 目標已經掛了
      ? stance:0/1/2../n 玩家在某姿態下
      ? stealth 玩家在潛行狀態下
      ? modifier:shift/ctrl/alt 某功能鍵被按下
      ? button:1/…/5/<虛擬按鍵號> 宏通過某鍵點擊執行
      ? equipped:<裝備類型> 玩家裝備了某類型物品,參見《裝備類型》
      ? channeling:<法術名稱> 玩家正在引導某法術
      ? actionbar:1/…./6 當前技能欄為某動作欄
      ? pet:<寵物名稱或類型> 玩家當前寵物為某寵物
      ? combat 玩家正在戰斗狀態
      ? mounted 玩家在騎乘狀態
      ? swimming 玩家在游泳
      ? flying 玩家在飛行狀態
      ? flyable 玩家正處在一個允許飛行的地界
      ? indoors 玩家在室內
      ? outdoors 玩家在戶外
      ? party 目標在玩家的小隊中
      ? raid 目標在玩家的小隊或團隊中
      ? group:party/raid 玩家在某集體中(小隊/團隊)
      ii.敵/友(help / harm)
      沒什么好說的,保留空地一塊,等待補充。
      iii.存在(exists)
      如果目標存在條件為真。比如[exists],如果你沒有目標,該條件就不成立。而對于[target=focus, exists],如果你設置了焦點目標,條件就成立。不過很多情況下該條件用不到,因為[help],[harm],[dead],[party]和[raid]條件成立的情況下,[exists]條件是必定成立的。
      iv.死亡(dead)
      如果判斷對象已經掛了,條件就成立。
      v.姿態(stance:0/1/2/…/n)
      姿態是指對技能能否施放有影響的狀態,比如戰士的姿態,小德、薩滿、暗牧的形態,盜賊的潛行狀態。而騎士的光環、獵人的守護都算是姿態。單獨用[stance]是指在任意一種姿態下,就相當于[stance:1/2/…/n]這樣把所有姿態列出來,對戰士來說就是永遠成立的。而[stance:0]就相當于[nostance]表示不在任何形態下。而[stance:0/3]就表示在形態3下或者不在任何形態下。
      姿態的編號和面板上的順序是對應的。下面給出各職業的姿態表:
      編號 小德 戰士 暗牧 盜賊 薩滿
      1 熊形態 戰斗姿態 暗影形態 潛行 幽靈狼
      2 海豹形態 防御姿態
      3 豹形態
      4 旅行形態
      5 梟獸/樹形態
      6 飛行形態
      注意:上面給出的是全表。如果少了某個姿態,其下方的形態就依次上移。我承認,我這話是針對小德說的……
      下面給出例子:
      /cancelform [nostance:0/1/3]
      /cast [stance:1/3] 精靈之火(野性);[nostance] 精靈之火
      如果在熊/貓形態,施放精靈之火(野性);在人形態,施放精靈之火;在其他形態就先退出,然后施放精靈之火(WOW2.3以后可以這樣,2.3之前該宏只能退出形態)。
      vi.潛行(stealth)
      對于盜賊來說由于[stance]的存在反而顯得多余。這個是給暗夜、法師、貓德用的,我的意思是它可以用來判斷影遁、隱形和貓的潛行。
      vii.功能鍵狀態(modifier:shift/ctrl/alt)
      它是節省技能欄的好幫手,可以讓一個宏對不同功能鍵做不同動作,比如:
      /cast [modifier, help] [modifier, target=targettarget, help] 快速治療; [help] [target=targettarget] 強效治療術
      該宏會依次判斷你的目標和目標的目標是否友善,條件成立的話,如果按下了某功能鍵,施放快速治療,否則施放強效治療術。
      當然也可以指定特定的功能鍵。[modifier:shift/ctrl]表示Shift或者Ctrl被按下;如果想表示兩個鍵同時按下則可以這樣實現:[modifier:shift, modifier:ctrl]。
      但是要注意這樣一種情況,比如你的宏是通過A鍵執行的,然后根據Shift來做判斷。但是你的Shift+A被設置了另外一個動作,那么你按下Shift+A的時候,執行的就是其對應的動作,而不是你的宏。另外,modifier可以被簡寫做mod以節省空間。
      viii.功能鍵變量
      雖然說mod指定的只能是shift、ctrl或alt,但是還可以通過一些系統變量來間接指定。比如SELFCAST這個系統變量,是指“自我施法功能鍵”,默認值為alt,可以通過某些插件修改,表示按下該鍵后執行的動作都是針對玩家自身的。下面看這個例子:
      /cast [modifier:SELFCAST, target=player] [target=mouseover] [ ] 強效治療術
      這樣的話,不管你系統設置的自我施法鍵是什么,宏命令都會正常執行。下面給出其他的一些系統變量,括號內為默認值,后面為中文含義:
      ? AUTOLOOTTOGGLE(shift) 自動拾取鍵
      ? STICKYCAMERRA(ctrl) 鏡頭跟隨
      ? SPLITSTACK(shift) 物品堆疊分離
      ? PICKUPACTION(shift) 拖動技能欄按鈕
      ? COMPAREITEMS(shift) 物品比較
      ? OPENALLBAGS(shift) 打開所有背包
      ? QUESTWATCHTOGGLE(shift) 任務追蹤
      ix.點擊狀態(button:1/2/…/5/<虛擬按鍵號>)
      與[modifier]類似,可以根據不同的鼠標點擊按鈕做不同動作。1為左鍵,2為右鍵,3為中鍵,4和5則對應五鍵鼠標上另外兩個擴展鍵。如果是通過鍵盤觸發宏,那么也相當于左鍵點擊。比如我的坐騎宏:
      #show迅捷綠色機械陸行鳥
      /userandom [nobutton:2, flyable, nomounted] 黑色獅鷲; [nomounted] 黑色戰豹, 迅捷綠色機械陸行鳥
      /dismount [noflying]
      非右鍵鍵點擊時,如果沒在坐騎上就召喚坐騎;如果右鍵點擊并且不在飛行狀態則取消坐騎。而虛擬按鍵號一般可以忽略,有些動作條插件可以在不同條件下向宏按鈕提供不同的虛擬按鍵號,具體情況請查看插件說明,我們在此不作討論。
      x.裝備(equipped:<物品類型>)
      [equipped]條件可以判斷指定類型的物品是否被裝備。物品類型號可以是裝備欄名稱,物品類別或者物品子類別。比如我根據盾牌裝備狀態判斷該用盾擊還是拳擊:
      #show [equipped:Shields] 盾擊; 拳擊
      /cast [equipped:Shields,stance:1/2] 盾擊; [equipped:Shields] 防御姿態; [stance:3] 拳擊; 狂暴姿態
      利用[equipped]這里的#show可以根據裝備顯示不同的圖標。下面的偽代碼用來解釋上面/cast命令的執行過程:
      if 裝備了盾牌 and 在防御姿態 then
      /cast 盾擊
      else if 裝備了盾牌 then
      /cast 防御姿態
      else if 在狂暴姿態 then
      /cast 拳擊
      else /cast 狂暴姿態
      下面再給出一個變態的壓制宏作例子:
      /equip [noequipped:Two-Handed Axes] 水晶熔鑄戰斧
      /cast [nostance:1] 戰斗姿態; [equipped:Two-Handed Axes] 壓制
      xi.引導中(channeling:<技能名稱>)
      在引導法術的狀態下,如果施放另外一個法術將會打斷施法。這個條件語就是用來防止這一情況的。當然,它還有些其他的用途,比如只打斷特定的引導技。只用[channeling]的話表示正在引導任意技能,或者后面可以指定任意個引導技能的名稱表示正在引導其中一個。
      注意:引導和吟唱是兩碼事,[channeling]條件只對引導技能,如奧書飛彈、吸取生命、精神鞭笞等有用。
      xii.技能條(actionbar:1/…/6)
      系統默認的界面中有一個主技能條,可以翻頁。而用這個條件就可以根據當前技能頁作出不同反應。比如獵人可以拿來把守護做成姿態:
      /swapactionbar 1 2
      /cast [actionbar:1] 雄鷹守護; 靈猴守護
      這樣就可以切換1號和2號兩個技能頁,換到1頁時施放雄鷹守護,2頁時則施放靈猴守護。
      xiii.寵物(pet:<寵物名稱或類型>)
      對任何有寵職業來說這個條件都很有用,它可以根據你寵物狀態來執行動作,可以根據寵物名字,也可以是類型(比如Voidwalker,Boar,Imp,Wolf等),如果只用[pet]的話表示帶著任意寵物。比如法師可以根據是否有水寶寶施放不同的霜星:
      /cast [pet] 冰凍術;冰霜新星
      xiv.戰斗(combat)
      如果在戰斗狀態則條件成立。
      xv.行動方式、室內外狀態(mounted, swimming, flying, indoors & outdoors)
      這些都無庸贅述,要說的就是它們都是對玩家自身狀態的判斷,而不是目標。
      xvi.允許飛行 (flyable)
      用于判斷是否處在可以使用飛行坐騎的地區。
      xvii.小隊/團隊隊友(party/raid)
      判斷目標是否是自己的小隊或團隊中的隊友。
      xviii.在小隊/團隊中(group:party/raid)
      注意和前面的區別。這個用于判斷玩家自己是否處在小隊或團隊中,并且團隊包括小隊。這對加狀態很有用,比如:
      /cast [group, nomodifier] 奧術光輝; [help] [target=player] 奧術智慧
      如果在隊伍中,施放奧數光輝;如果按下功能鍵或者不在隊伍中則施放奧術智慧。
      

    6. 命令條件語的應用


      在第一部分中提到的很多命令,如果不配合條件語的使用,是沒有什么價值的。而上述內容也只給出了一小部分的應用示例。作為本部分的壓軸內容,下面兩段將會把你帶入一個更高的境界。
      i.設置焦點(focus)
      focus是一個單位標識符(參見《單位標識符》),就像target、player、raidpet1target一樣。你可以將它設定為某一個單位,玩家或者NPC。比較簡單的設置方法是通過按鍵設置。在按鍵設置中有兩個選項:“焦點目標”和“目標焦點”。我不知道這是哪個腦殘翻譯的,其實際含義分別是“以目標為焦點”和“以焦點為目標”。當你設置了焦點以后,就可以用focus這個標識符了,也可以通過“目標焦點”綁定的按鍵把你設的focus作為你的當前目標。話說按鍵綁定也太小兒科了,下面來看看什么是職業玩家的focus用法。
      作為一個有控制技能的專業DPS,我們最常用的就是控場宏。我們可以預先把你的“被監護人”設為你的焦點,然后用這種宏來調教他——而此過程中并不用切換目標:
      /cast [target=focus] 變形術
      而作為一個灰常牛逼灰常嫻熟的治療,你可以把焦點設為你的主坦。另外還可以通過一些頭像增強插件,比如FocusFrame來觀察你焦點的狀態。
      不過職業玩家一般不用按鍵綁定設置焦點,而是用/focus和/clearfocus宏命令來設置或清除焦點。/focus直接就可以達到按鍵綁定的效果了,而通過參數指定/focus的目標更是按鍵綁定所沒有的功能:
      /focus party3target
      上面的只不過是教學示例,實際上職業玩家是這樣用的:
      /focus [target=focus, noharm] [target=focus, dead] [modifier]
      /stopmacro [target=focus, noexists]
      /cast [target=focus] 變形術
      第一行先判斷以下三個條件,如果滿足任意一個,就把你的當前目標設為焦點(不要忘記,focus是/focus命令的特殊單位,參見[target=]條件語與命令參數):
      ? 你的當前焦點不是敵對目標(如果焦點不存在該條件也成立)
      ? 你的焦點已經死了
      ? 某個功能鍵被按下了
      第二行判斷你的焦點是否存在,如果不存在就終止宏的運行。這樣控場是不是很方便?我們注意到這里用了/stopmacro命令,而不是在/cast命令中對焦點是否存在進行判斷。這樣的好處是我們可以在宏的最后加上更多的內容,比如一個小隊喊話。
      下面這個宏也很有用,可以把你的目標和焦點互換:
      /cleartarget [target=target, dead]
      /clearfocus [target=focus, dead]
      /target focus
      /cleartarget [target=focus, noexists]
      /targetlasttarget
      /focus target
      /targetlasttarget
      前兩行的作用是把死亡的目標和焦點清除掉。第四行的作用是防止你沒有當前焦點,導致當前目標不變,以至于在第五行選擇了你以前的一個目標。
      ii.用/click進行分支判定
      假如你想讓一個按鍵根據不同的功能鍵施放不同的技能,并且根據左鍵右鍵選擇不同的施放目標,那么我可以給你這樣的一個例子:
      /cast [modifier:shift, button:1, target=party1] [modifier:shift, button:2, target=player] 強效治療術; [modifier:ctrl, button:1, target=party1] [modifier:ctrl, button:2, target=player] 快速治療; [nomodifier, button:1, target=party1] [nomodifier, button:2, target=player] 恢復
      哦……對不起,不大好看……而且貌似超過255個字符限制了。重新寫一下:
      /cast [modifier:shift, button:1, target=party1] [modifier:shift, target=player] 強效治療術
      /cast [modifier:ctrl, button:1, target=party1] [modifier:ctrl, target=player] 快速治療
      /cast [target=player] 恢復
      不過如果我們寫一個宏根據不同按鍵點擊分別選擇兩個不同的宏,而把功能鍵狀態的判斷放到這兩個宏中的話,條理就會更清晰了:
      主宏:
      /click MultiBarLeftButton2; MultiBarLeftButton3
      輔助宏1:
      /cast [mod:shift, target=party1] 強效治療術; [mod:ctrl, target=party1] 快速治療; [target=party1] 恢復
      輔助宏2:
      /cast [mod:shift, target=player] 強效治療術; [mod:ctrl, target=palyer] 快速治療; [target=player] 恢復
    五、 附錄
      1. 自定義圖標
      如果想自定義宏的圖標,可以把做好的圖標放在游戲目錄的“.\Interface\Icons”文件夾中(可能需要自己新建)。文件格式應該是界面材質規定的.BLP或24位無壓縮的TGA文件。圖片的長寬必須是2的自然數次冪,但不得超過512,比如可以是32×32、512×128等。注意:圖片如果不是正方形,在界面顯示中是會走形的……
      2. 宏的移植
      個人賬戶的角色通用設置都保存在游戲目錄的“.\WTF\Account\賬戶名稱”文件夾下,每個角色分別的數據則保存在“.\WTF\Account\賬戶名稱\服務器名\角色名稱”文件夾下,包括自定義的宏、按鍵設置、插件數據等,其中macros-cache.txt保存著宏的定義。
      3. 更多信息
      如果你有關于宏的疑問,并且在此找不到答案,可以看看這里:《Macro FAQ & Repository》,其中包含很多對于常見問題的解答和一些很好的例子。而且最好多看看wowwiki.com(不過在中國訪問的話很可能需要代理),可以獲得很多東西,比如宏和腳本相關的文章,還有數據控喜歡的關于游戲算法的研究。
      4. 鳴謝
      首先要感謝的是Slouken,他在暴雪一直關注著我們的反饋,如果沒有他對廣大玩家建議的重視就沒有今天的宏命令系統。
      還要感謝的是Iriel,Tem,Cladhaire等很多高手與大家分享知識。
      還要感謝論壇上那些一直為大家做出貢獻的朋友,Neuro,Shirik,Jelly,Lunessa,Troodi,Lealla,Aella,Valaron等等,還有很多我不記得名字的朋友,感謝你們。
      5. 譯者注
      這個中文版譯自http://www.wowwiki.com/Making_a_macro 這篇文章,
      原文鏈接自http://forums.worldofwarcraft.com/thread.html?topicId=96143900&sid=1

    posted on 2010-03-11 15:44 常言笑 閱讀(3950) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    My Links

    Blog Stats

    常用鏈接

    留言簿(5)

    隨筆分類

    隨筆檔案

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国内自产拍自a免费毛片| 国产亚洲精品影视在线| 暖暖日本免费在线视频| 午夜老司机永久免费看片| 免费精品久久久久久中文字幕| 亚洲精品亚洲人成在线麻豆| 亚洲精品无码不卡在线播放HE| 国产美女无遮挡免费视频| 成视频年人黄网站免费视频| 日本在线免费播放| 国产特黄特色的大片观看免费视频| 成人婷婷网色偷偷亚洲男人的天堂 | 国产精品公开免费视频| 国产91免费在线观看| 免费看一级做a爰片久久| 麻花传媒剧在线mv免费观看| a级毛片在线免费看| 成人特级毛片69免费观看| 99亚洲乱人伦aⅴ精品| 亚洲日韩AV一区二区三区中文| 亚洲国产成人无码av在线播放| 亚洲伊人久久大香线蕉苏妲己| 国产成人精品日本亚洲| 亚洲精品国偷自产在线| 亚洲成人一区二区| 波多野结衣免费视频观看| 免费一看一级毛片全播放| 国产一区二区三区免费看| 国产精品无码免费视频二三区| 日本免费人成黄页在线观看视频| 在线观看的免费网站| 国产一卡2卡3卡4卡无卡免费视频| 中文字幕亚洲免费无线观看日本| 久久aⅴ免费观看| 日韩免费的视频在线观看香蕉| 青青草原1769久久免费播放| 女同免费毛片在线播放| 日韩精品免费视频| 亚洲一区二区三区免费在线观看| 免费99精品国产自在现线| 成年美女黄网站18禁免费|