功能: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以及配置技能监控的开关