GladiatorlosSA插件分析

功能:敌对技能和打断信息语音提示

使用了Ace3库

1、文件分两部分:ace3库的embeds.xml + 多国语言的Locales\locales.xml;功能和配置界面的GladiatorlosSA.lua、spelllist.lua、options.lua

2、embeds.xml,用了13个库(库文件内部都有详细注释):
LibStub 定义了一段放在每个插件库开头的代码,可以使得已经加载过的库,如果没有更新的版本,不会再继续加载(即直接return,不会往后执行创建变量和定义函数等等)
CallbackHandler-1.0 一套基础的事件(编程语言的“事件”概念,非WOW事件)&回调机制代码支持
AceAddon-3.0 提供了一个简单的插件代码模板,比直接用WOW API起头方便
AceEvent-3.0 简单包装了一下CallbackHandler-1.0
AceTimer-3.0 提供了只用一次的定时器和重复触发的定时器
AceDB-3.0 帮助管理了SavedVariables,可以方便地选择把数据保存成角色专用或者所有角色公用,并且提供了一套多配置和配置文件导入导出切换机制
AceDBOptions-3.0 给AceDB-3.0提供了一套配置界面选项(该选项传递给AceConfig-3.0来生成界面)
AceLocale-3.0 提供了多国语言支持,可以同时使用多套语言,比如一套原版的一套翻译的,未翻译的部分,可以显示成原版的语言
AceConsole-3.0 控制台命令支持
AceGUI-3.0 图形界面控件支持,按钮之类的,内置了22个控件
AceConfig-3.0 可以通过简单的描述类代码来生成插件配置选项图形界面
LibSharedMedia-3.0 用来在不同插件之间共享多媒体数据(声音、字体、贴图等),共享实际上就意味着支持别的插件的皮肤和资源
AceGUI-3.0-SharedMediaWidgets 基于LibSharedMedia-3.0的一套图形界面控件

3、Locales\locales.xml,直接使用了LibStub("AceLocale-3.0"):NewLocale(...)机制,简单粗暴。GladiatorlosSA默认的基础语言是英语"enUS"

4、核心功能文件GladiatorlosSA.lua、spelllist.lua、options.lua,弄懂了上面的库,这3个文件就容易懂。
options.lua就是插件配置界面的描述;spelllist.lua就是发音技能列表,里面每个英文对应Voice目录里的一个ogg语音文件;GladiatorlosSA.lua就是完成监控并发声。
在GladiatorlosSA.lua文件里通过GladiatorlosSA:PlaySpell(listName, spellID, ...)来发声,使用了WOW API PlaySoundFile
PlaySpell由熟悉的COMBAT_LOG_EVENT_UNFILTERED(event , ...)战斗日志监控函数调用,函数内具体首先使用了API IsInInstance 确定是战场、野外还是竞技场,然后同样是通过筛选使用传入的“event , ...”参数内容,如"SPELL_AURA_APPLIED"、"SPELL_AURA_REMOVED"等,并列上其它条件,满足后触发发音提示。同时函数代码最后还支持自定义发音提示。
GladiatorlosSA.lua最后还有一个出于性能考虑的Throttle节流函数,这个函数被安插在了整个文件的很多地方,如果判定需要节流就直接return不执行后续的播音之类的操作

时间: 2024-08-29 22:51:40

GladiatorlosSA插件分析的相关文章

【jQuery】结合accordion插件分析写插件的方法及注意事项

1.jQuery插件的命名方式:jquery.[插件名].js 2.对象方法附加在jQuery.fn上,全局函数附加在jQuery对象本身上 3.插件内部this指向的是通过选择器获取的jQuery对象 4.结尾加分号,插件头部最好也加分号 5.插件应该返回一个jQuery对象,保证插件的链式操作 6.插件内部应用完整的jQuery而不是$,但可以利用闭包,将jQuery传入,使插件内部可以继续使用$符合作为jQuery别名 7.闭包另一大好处:可以避免内部变量影响全局空间 :(function

DispelFrames插件分析

功能:Shows new frames for dispellable buffs for target and focus, and a bright border around default buff frames. 使用了Ace3库 分析: 1.xml定义了两个框体:DispelFrames_TargetFrame和DispelFrames_FocusFrame 2.这两个框体设置了同一个脚本OnUpdate函数:DispelFrames_OnUpdate 3.DispelFrames_

HiShop2.x版本中的上传插件分析,得出所用的模板语言为Underscore.js 1.6.0且自己已修改

效果: 上传组件非常的酷,但是分析其使用JS写法使用了模板语言的,代码如下: <script type="text/j-template" id="tpl_popbox_ImgPicker_listItem"> <# _.each(dataset,function(url){ #> <li> <span class="img-list-overlay"><i class="img-l

NameplateCooldowns插件分析

功能:Shows the cooldowns of enemy players above their nameplates 没有使用Ace3库,只包含两个文件:localizations.lua 和NameplateCooldowns.lua 1.localizations.lua,定义了多国语言界面文字,使用addonTable.L将文字内容传递给NameplateCooldowns.lualocal addonName, addonTable = ...;addonTable.L = lo

使用AndroidStudio dump heap,再用 Eclipse MAT插件分析内存泄露

1.eclipse mat插件的安装 Help->Install new software,如下图,一直下一步即可 2.AndroidStudio dump heap 3.AndroidStudio 点captures查看dump 文件 4.导出为标准的dump文件 5.eclipse 打开mat,并导入4导出的文件 file->open file 选择即可 6.OQL查找Activity内存泄露 select * from instanceof android.app.Activity 再右

Gladius插件分析

功能:竞技场对手框体 使用了Ace3库 1.文件分为三部分:Embeds.xml:Gladius.lua+Localizations.lua+Options.lua:Modules\*** 2.Embeds.xml库部分:AceSerializer-3.0 可以把任意变量序列化成一个字符串,并用字符串恢复原有变量值DRData-1.0 控制递减数据库 3.Gladius.lua+Localizations.lua+Options.lua,后面两个是老东西,多国语言和插件配置界面:Gladius.

博客站点选择SqlServer数据库版本技巧及微信打赏插件分析[图]

首先和大家分享一个有趣的社会现象,也是关于IT行业的,对于技术方面来说,就不用多说了,这些年的进步和变化大家都有目共睹,虽然我只是一个技术小白,但是最近也开始不断的学习中. 自媒体平台其实就是博客的集中营: 这两年出现了火爆的自媒体平台,卷走了大量的原创数据,没错,原创数据对于任何一个互联网公司来说,都是至关重要的,尤其是搜索行业,谁得到了原创的大数据,谁就掌握了搜索的主导权,谁就是行业的NO.1,这就是原创数据的重要性. 记得在几年以前,我们都喜欢写博客,那时候有成熟的博客系统,大家随便买个虚

CNI IPAM插件分析 --- 以hostlocal为示例

skel.CmdArgs数据结构如下所示: type CmdArgs struct { ContainerID string Netns string IfName string Args string Path string StdinData []byte } // cni/plugins/ipam/host-local/main.go 1.func cmdAdd(args *skel.CmdArgs) error 1.调用ipamConf, confVersion, err := allo

Wireshark使用drcom_2011.lua插件协助分析drcom协议

drcom_2011.lua是来源于Google code上的一个开源项目中的一个插件,感谢网络大神的分享 需要使用drcom_2011.lua分析drcom协议的话,需要把drcom_2011.lua放到wireshark安装目录下(例如C:\Program Files\Wireshark), 然后打开安装目录的init.lua(用高级一些的文件编辑器打开可以看到分行信息),在最后一行加入dofile("drcom_2011.lua"),保存. 然后重启wireshark,在筛选器那