標籤:
功能:Shows the cooldowns of enemy players above their nameplates
沒有使用Ace3庫,只包含兩個檔案:localizations.lua 和NameplateCooldowns.lua
1、localizations.lua,定義了多國語言介面文字,使用addonTable.L將文字內容傳遞給NameplateCooldowns.lua
local addonName, addonTable = ...;
addonTable.L = locales[GetLocale()];
--NameplateCooldowns.lua--
local addonName, addonTable = ...;
local L = addonTable.L;
...
Print(L["...
2、NameplateCooldowns.lua 尋找姓名板CheckForNewNameplates(),使用了WOW API的WorldFrame。姓名板框體儲存在WorldFrame框體下,使用WorldFrame:GetChildren(),通過尋找框體名字匹配字串"NamePlate",來找出所有的姓名板框體
3、姓名板框體鉤子指令碼frame:HookScript("OnShow", Nameplate_OnShow) 和frame:HookScript("OnHide", Nameplate_OnHide),配合姓名板顯示設定,調用UpdateOnlyOneNameplate來更新技能冷卻表徵圖。UpdateOnlyOneNameplate通過之前監控戰鬥日誌事件儲存的技能CD資訊來建立和更新該姓名板上的所有技能CD表徵圖。主要通過CreateFrame函數建立表徵圖,並使用frame.NCIconsCount 和frame.NCIcons 來儲存表徵圖,然後通過一系列Set函數來更新表徵圖狀態
4、整個外掛程式的主框體EventFrame,作為代碼入口,註冊了"PLAYER_ENTERING_WORLD" 和"COMBAT_LOG_EVENT_UNFILTERED" 事件的監聽函數。前者初始化一些內容,後者關注了4個變數:eventType、srcName、srcFlags、spellID。eventType監控了"SPELL_CAST_SUCCESS"、"SPELL_AURA_APPLIED"、"SPELL_MISSED"、"SPELL_SUMMON";srcName提供角色名稱;srcFlags用來判定是否敵對角色;spellID就是技能法術ID。最後還是通過UpdateOnlyOneNameplate來更新姓名板表徵圖
5、最後是‘/nc‘命令顯示的配置介面,這個配置介面做得很實用,直接列出每個職業可以監控的技能,讓我們自己選要監控哪些,並且滑鼠移上去可以看到技能的詳細資料。GUIFrame就是一個簡單的Frame,使用按鈕、划動條、字型等等來建立介面。技能表徵圖按鈕監控了"OnEnter"、"OnLeave"、"OnClick"用來顯示和隱藏技能Tooltip以及配置技能監控的開關
NameplateCooldowns外掛程式分析