從這裏開始,我們將一起學習魔獸世界插件(Addons)的知識,這是一門很有趣的學科。只要你玩WoW就不可能沒用過插件,檢查一下你的WoW安裝目錄下的Interface/Addons/文件夾,插件並非第三方專有,暴雪同樣需要這玩意,只不過和凡人玩的有所區別。
關於插件的基本概念,在之前的文章我已經做了解釋,今天着重介紹.toc。WoW的插件由3個文件組成,分別是.toc、.xml和.lua。.toc中標註了關於插件信息的定義,以及需要加載的.xml的位置。.xml是插件的核心,包括界面、功能等元素都在其內。lua是一種嵌入式腳本語言,在WoW中實現.xml調用的函數。換句話說,.toc告訴WoW插件的名字和.xml的位置,.xml告訴WoW插件都有什麼,怎樣工作,具體事宜則交由.lua來處理。
今天講解.toc的結構和寫法,TOC全稱爲Table of Contents,就是目錄的意思。
.toc的位置在World of Warcraft/Interface/AddOns/MyAddon/MyAddon.toc。其中紅色部分爲你的插件名稱,必須保證完全一致,包括大小寫。Windows系統不區分大小寫,但WoW客戶端區分(case-sensitive),在開發過程中一定要注意。WoW只能讀取1024字節/行,富裕出的部分將被忽略並且不報錯。
客戶端識別標籤(Client Recognized Tags):
Interface:
格式:##Interface:11200
所有標籤都要以"##"開頭,到行尾結束,這裏Interface表示插件對應的遊戲客戶端的版本號,也就是我這個插件是爲哪個版本的WoW開發的。紅色部分11200就表示我這個插件適用於1.12。如果插件的Interface號和當前遊戲客戶端版本號不一致,那麼遊戲默認不會加載插件,這也就是爲什麼遊戲一升級,好多插件就不能用了的原因,但你可以在插件管理面板中手動加載"過期插件",這樣遊戲就會忽略Interface,最好的辦法還是儘快升級插件到新的版本以避免不必要的麻煩。
獲取當前客戶端版本號有點麻煩,你當然可以啓動遊戲然後看看屏幕上顯示的一串數字,但那個是錯誤的。WoW的每次更新會寫一個版本號在FrameXML.toc裏,但這個文件被埋在一個MPQ中。暴雪爲此專門提供了一個工具http://ftp.blizzard.com/pub/WoW/other/InterfaceAdd OnKit_Win.zip類似一個解壓縮工具,用這東西打開World of Warcraft/Data/patch.mpq,文件較大可能需要需要一點時間。打開之後你會看到一個列表,找到Interface/FrameXML/FrameXML.toc,雙擊然後用隨便什麼文本編輯器打開就可以看到版本號了。
Title:
格式: ##Title: My Addon
##Title-zhCN: 我的插件
Title表示插件的名稱,也就是插件管理面板裏顯示的那個。支持多語言定義,默認爲英語。其他語言要在Title後面加上後綴,就像上面那樣。zhCN表示簡體中文,zhTW就是臺灣的繁體中文。前面2個小寫是語言,後面2個大寫是國家和地區。
還有個好玩的東西就是顏色,WoW支持字串形式的顏色定義。插件面板默認字體顏色是黃,你可以根據自己的喜好自行定義文本顏色,這裏就用到顏色字串。顏色字串以"|c"開頭"|r"結束。中間是16進制αRGB顏色代碼和要顯示的文本。比如我要將"我的插件"幾個字顯示爲藍色。那麼就應該是:
##Title: |cff0000ff我的插件|r
其中|c表示接下來的8位字符是顏色代碼,以α(alpha透明度)、R(紅)、G(綠)、B(藍)順序排列。前面2位ff表示被着色的文本完全不透明,但需要指出的是並非所有的地方都支持透明。之後就是着色的文本了,這裏就是"我的插件",|r表示顏色結束,如果沒有結束標記,那麼WoW將顏色代碼以後到這一行結束的全部文本都進行着色。
值得一提的是,這個顏色字串應用相當廣泛,包括人物ID也可以,這也是爲什麼暴雪禁止使用符號和數字以及英文漢字混合的原因了,當然也是考慮到搜索的方便。
Note:
格式:## Notes: This is my first AddOn.
## Notes-zhCN: 這是我的第一個插件。
只有Title和Notes標籤支持其他語言,除此之外都要用英語書寫。Notes包含插件的說明內容,就是對插件功能的簡單描述,將出現在插件管理面板中鼠標經過的地方。
RequiredDeps:
格式:## Dependencies: someAddOn, someOtherAddOn
## RequiredDeps: someAddOn, someOtherAddOn
Depend是依賴的意思。爲了讓插件更好地工作,某些插件開發者會使用第三方庫或其他現成的插件作爲基礎和輔助,這麼做的有點就是節約了開發成本,也使開發過程簡便了許多,不足的地方就是,要讓插件正常工作,系統必須確保所依賴的文件都要存在,否則,如果任何依賴的庫或插件缺失,當前插件加載都會失敗。依賴的名稱即依賴插件的名稱,也就是目錄文件夾的名稱。如果需要依賴多個庫或插件,彼此用逗號","隔開。注意大小寫一致。
注: Dependencies、RequiredDeps、Dependancies[sic]結果是一樣的。
OptionalDeps:
格式:## OptionalDeps: someAddOn, someOtherAddOn
可選依賴是當前插件爲了實現某些附加功能而依賴的外部庫或插件,但如果依賴的東西不存在,那麼當前插件也可以正常工作,但是使用可選依賴的插件必須寫明當依賴不存在的時候也可以工作。
LoadOnDemand:
格式:## LoadOnDemand: 1
## LoadOnDemand: 0
從1.7開始,插件可以用命令來加載,而不用非得在用戶第一次登錄的時候加載。如果啓用這一功能,此插件則必須在未來某個時候被另一個插件加載。這是爲了避免加載一些特殊的不常用的插件而導致內存資源佔用,非常有效。副魔助手(Enchantrix)就用到了這一特性。
LoadWith:
格式:## LoadWith: someAddOn, someOtherAddOn
1.9新加的。和LoadOnDemand一起用,這使你的插件跟隨某個插件一起被加載(通常是暴雪的UI模塊,像Blizzard_AuctionUI)。
SavedVariables:
格式:## SavedVariables: someVariable, someOtherVariable
從Interface版本2150開始有的,保存的變量是當前流行的存儲不同人物角色的方式。這些變量在客戶端啓動或UI重載(reload)時被載入。SavedVariables標籤現以取代RegisterForSave函數,後者已經不再受客戶端支持。注意在OnLoad事件過程中,SavedVariables並未完全加載所以必須假設包含nil(空)值直到以插件文件名爲參數的ADDON_LOADED事件被觸發。
這比以前那個爲保存註冊變量的腳本強的多,因爲即便你的插件被禁用或因爲錯誤、版本不匹配等問題沒有加載,SavedVariables依然會被保存。
SavedVariablesPerCharacter:
格式:## SavedVariablesPerCharacter: somePercharVariable
這個標籤和SavedVariables工作方式一樣,只不過是給予每個角色創建的。以前這個標籤只能用角色名來區分不同的角色,現在可以根據服務器和角色名一起來區分了。
DefaultState:
格式:## DefaultState: enabled
## DefaultState: disabled
這裏的enabled/disabled狀態被寫在WTF/Account/{youraccount}/AddOns.txt裏,紅色部分是你的帳號名。並且這個文件會覆蓋的DisabledAddOns.txt,後者爲了保持兼容仍然會被老版本的加載。
Secure:
格式:## Secure: 1
這個標籤被添加到Blizzard_UI(1.11中作爲默認UI一部分)。它的確切目的無從知曉,但一個可能就是它告訴客戶端是否要爲插件尋找一個簽名。
非標準標籤:
用##標示還可以添加更多額外的信息,某些第三方插件甚至使用自行提供的信息。下面是一些常用的標籤:
插件元數據標籤:
這些標籤和Title、Notes放在一起,並可用GetAddOnMetadata("addon", "field")來調用。
Author:
格式:## Author: MyName
作者的名字,也可以是Email地址。
Version:
格式:## Version: 1.0
插件的版本號。可以是任何字符串,因爲自動更新的工具會解析數字,所以最好是以數字版本開頭。
X-<data>:
格式:## X-email: [email protected]
## X-Foo: I love pancakes
## X-Foo-zhCN:我愛煎餅
任何以X-開頭的標籤。
Ace2注視標籤:
和Ace不一樣,Ace2直接從TOC文件提取插件元數據,特定的域(field)進行特定的處理,即Version和X-Date,那麼你就可以用CVS和Subversion關鍵字例如$Rev$作爲它們的值。
除了正經域以外,它還可以尋找下列自定義的域。
X-Date:
格式:## X-Date: 12-06-2007
插件的發佈日期。
X-eMail
插件的網站。
X-Category:
格式:## X-Category: Raid
插件的Ace2目錄。
此目錄在AceAddon.lua中聲明。
local CATEGORIES = {
["Action Bars"] = "Action Bars",
["Auction"] = "Auction",
["Audio"] = "Audio",
["Battlegrounds/PvP"] = "Battlegrounds/PvP",
["Buffs"] = "Buffs",
["Chat/Communication"] = "Chat/Communication",
["Druid"] = "Druid",
["Hunter"] = "Hunter",
["Mage"] = "Mage",
["Paladin"] = "Paladin",
["Priest"] = "Priest",
["Rogue"] = "Rogue",
["Shaman"] = "Shaman",
["Warlock"] = "Warlock",
["Warrior"] = "Warrior",
["Healer"] = "Healer",
["Tank"] = "Tank",
["Caster"] = "Caster",
["Combat"] = "Combat",
["Compilations"] = "Compilations",
["Data Export"] = "Data Export",
["Development Tools "] = "Development Tools ",
["Guild"] = "Guild",
["Frame Modification"] = "Frame Modification",
["Interface Enhancements"] = "Interface Enhancements",
["Inventory"] = "Inventory",
["Library"] = "Library",
["Map"] = "Map",
["Mail"] = "Mail",
["Miscellaneous"] = "Miscellaneous",
["Quest"] = "Quest",
["Raid"] = "Raid",
["Tradeskill"] = "Tradeskill",
["UnitFrame"] = "UnitFrame",
}
其他注視標籤:
Email:
格式:## eMail: [email protected]
插件作者Email地址。
toc文件頭格式註釋
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.