Eva Framework
简介
Eva Framework是一个高度可扩展的WoW插件快速开发框架.
开发人员: simonw... 期望更多开发者的加入, 这是我们自己的Framework
Doc: http://wiki.cwowaddon.com/EVA
Svn: http://woweva.googlecode.com
优势
- 轻量, 高效, 框架本身内存占用不超过100k, 以实用为准则, 并没有为实现某些花哨的开发能力而创建操作大量的对象.
- 封装了WoW插件引擎模型内部的复杂性, 为WoW中所有请求提供了统一接口, 开发者无需再去关心如何处理请求, 只需关注请求来临时做什么. 框架侵入性极低, 开发者可以轻易的将插件转移入或转移出框架.
- 强大的命令调用引擎, 支持单功能调用, 组功能调用, 能够通过延时模拟多线程.
- 强大的框架级动态控制能力, 开发者可以随时加载卸载插件, 启用停止插件内部任意功能, 甚至能够动态改变UI请求方式, 统一管理请求层面对象及变量范围, 从而能在一定程度上避免由于开发者知识不足或失误所造成的变量范围混乱, 频繁创建无用对象等缺陷.
- 使开发变的层次清晰, 框架支持层次式开发, 使您的插件变得层次结构情绪, 易于阅读与维护.
稳定, 开发者无需担心因WoW版本的变更而导致框架频繁变更, 框架的抽象是基于WoW插件引擎的核心机制, 不牵扯具体API, 最好的例子便是WoW1.x变更到2.x时导致大量插件失效, 而Eva只是针对lua5.0升级至5.1的一个语法改变后即可正常使用.
- 学习曲线平滑, 降低了WoW插件的开发难度, 接口少而简单, 面向对象的调用方式, 非常容易上手即使您没有插件开发经验.
技术详情
- 库与框架的不同
- 库, 为应用提供了常见的功能调用, 你的插件需要主动调用库.
- 框架, 包含一个库, 插件需要按照框架规范编程, 由框架主动调用插件来执行. 是应用开发的更高级形式.
插件执行流程图
应用概览
1 --[[
2 blockN = {
3 Name = "block name",
4 Description = "Description of cmd",
5 Enabled = true,
6 Type = "Public"|"Private"|"System",
7 RequestTypes = {"Event", "SlashCommand", "FrameEvent", "KeyBinding", "UserEvent", ...},
8 Events = {"eventNameN", ...},
9 FrameEvents = {"frameNameN:eventNameN", ...},
10 UserEvents = {"userEventNameN", ...},
11 SlashCommands = {"slashCommandN", ...},
12 KeyBindings = {"keyN", ...},
13 CustomKeyBinding = customFunction,
14 Commands = {
15 GTimer = {Interval = N, Times =N},
16 Timer = {Interval = N, Times =N},
17 ThreadMode = "Single"|"Multi",
18 {Description = "cmd notes", Function = customFunctionN, Timer = {Interval = N, Times =N}},
19 ...
20 }
21 }
22 addon = Eva.Addon:New()
23 addon:add(EVA.Block:New(block1))
24 addon:add(EVA.Block:New(block2))
25 ...
26
27 Eva.AddonRegistry:Add(addon)
28 ]]
接口API文档
AddonRegistry
插件注册表, 包含多个Addon, 管理所有注册于其中的基于Eva的插件. 负责插件的装载与卸载.
1 --添加一个addon
2 AddonRegistry:Add(addon)
3
4 --注册/装载一个addon
5 AddonRegistry:Register(addon)
6
7 --卸载一个addon
8 AddonRegistry:Unregister(addon)
9
10 --通过addon的字符串名称取得addon
11 AddonRegistry:GetChild(addonname)
12
13 --获取总共的addon数目
14 AddonRegistry:Count()
Addon
插件, 包含多个Block, 负责管理插件基本属性如名称,版本,描述等, 同时负责关键值改变的刷新.
1 --字符串, addon的名字, 需全局唯一
2 Addon.Name
3
4 --字符串, addon版本
5 Addon.Version
6
7 --字符串, 采用的哪个Eva版本开发的
8 Addon.EvaVersion
9
10 --布尔值, 是否允许动态加载
11 Addon.CanEnabled
12
13 --布尔值, 是否允许动态卸载
14 Addon.CanDisabled
15
16 --函数, 加载前执行
17 Addon.OnRegister
18
19 --函数, 卸载后执行
20 Addon.OnUnregister
21
22 --检测addon开发使用的EVA版本与用户的EVA的不同
23 --返回值, 整数, 1:= 2:> 3:< 4:Invalid
24 Addon:CheckEvaVersion()
25
26 --通过Block字符串名称获得Block
27 Addon:GetChild(blockname)
28
29 --查询addon内Block的数目
30 Addon:Count()
Block
功能集, 一个插件可以包含多个Block, Block是最基本的单位, 用于处理某一个对外功能.
1 --字符串, 功能集的名字.
2 Block.Name
3
4 --字符串, 功能集的功能描述.
5 Block.Description
6
7 --布尔值, 开关.
8 Block.Enabled
9
10 --字符串枚举, 可见性类型标识.
11 --取值, Public(公共的), Private(私有的), System(系统的)
12 Block.Type
13
14 --字符串数组, 请求类型.
15 --取值, Event(事件), SlashCommand, FrameEvent(UI窗体的事件), KeyBinding(按键绑定), UserEvent(用户自定义事件)
16 Block.RequestType
17
18 --字符串数组, 监听事件的集合.
19 Block.Events
20
21 --字符串数组, 监听UI窗体控件事件的集合.
22 Block.FrameEvents
23
24 --字符串数组, 监听SlashCommand的集合.
25 Block.SlashCommands
26
27 --字符串数组, 监听按键绑定的按键集合.
28 Block.KeyBindings
29
30 --字符串数组, 监听用户自定义事件的集合.
31 Block.UserEvents
32
33 --函数, 处理自定义按键绑定设置, 设置此项则KeyBindings失效.
34 Block.CustomKeyBinding
35
36 --对象, 动作组, 命令集合控制. 包含若干子属性.
37 Block.Commands, 对象, 动作组, 命令集合控制.
38
39 --Timer对象, 控制组的Timer.
40 Block.Commands.GTimer
41
42 --Timer对象, 为组中每个动作设置的默认Timer.
43 Block.Commands.Timer
44
45 --枚举字符串, 线程模式. 取值, Single(单线程), Multi(多线程)
46 Block.Commands.ThreadMode
47
48 --Command数组中包含多个Command, Command对象, 组成动作组的具体动作.
49 Block.Commands[i]
50
51 --字符串, 动作的描述.
52 Block.Commands[i].Description
53
54 --函数或字符串, 动作执行的函数.
55 Block.Commands[i].Function
56
57 --Timer对象, 描述本动作的延时与执行次数.
58 Block.Commands[i].Timer
59
60 --当对Block的请求部分做了动态更改后需调用才能生效.
61 Block:Refresh()
62
63 --直接调度运行Block
64 Block:Run()
Timer
控制程序的延时.
1 --非负有理数, 间隔时间, 秒
2 Timer.Interval
3
4 --整数, 循环次数, 当为负值无限循环
5 Timer.Times
6
7 --开始
8 Timer:Start()
9
10 --立即激活
11 Timer:ActiveNow()
12
13 --恢复
14 Timer:Resume()
15
16 --暂停
17 Timer:Pause()
18
19 --结束
20 Timer:End()
21
22 --终结, 不再调用下一个Timer
23 Timer:Terminate()
24
25 --重置
26 Timer:Reset()
Context
系统上下文.
1 --公共参数:
2
3 --Block对象, 当前请求的block
4 Context.Block
5
6 --字符串, 请求类型
7 Context.RequestType
8
9 --------------------------------------------------
10 --------------------------------------------------
11 --当为以下特定请求类型时系统上下文有其特定参数.
12
13
14 --SlashCommand参数:
15
16 --字符串, SlashCommand第一个空格后的所有字符串
17 Context.Slash_Arg
18
19 --字符串数组, 解析后的Slash_Arg按照空格切分开
20 Context.Slash_Args
21
22
23 --Event参数:
24
25 --字符串, 请求的事件名称
26 Context.Event_Name
27
28 --字符串数组, 事件传入的所有参数, 从1-9
29 Context.Event_Args
30
31
32 --FrameEvent参数:继承Event所有参数
33
34 --字符串, 请求的UI窗体控件名称
35 Context.Frame_Name
36
37
38 --KeyBinding参数:
39
40 --窗体对象, 引发按键的窗体
41 Context.Key_Frame
42
43 --字符串, 引发按键窗体的Unit指向
44 Context.Key_Unit
45
46 --字符串, 引发按键的按键名称
47 Context.Key_Button
2个自定义扩展的例子
1 --字符串数组, 请求类型.
2 --取值, 继承标准参数, EventChatCommand(Event扩展, 聊天事件命令), EventChatWords(Event扩展, 聊天事件模糊匹配),
3 Block.RequestType
4
5 --对象, 功能集的权限控制. 默认为空, 即无权限设置.
6 Block.Permission
7
8 --字符串数组, 允许列表.
9 Block.Permission.AllowList
10
11 --字符串数组, 拒绝列表, 拒绝优先.
12 Block.Permission.DenyList
13
14 --字符串, 当请求为EventChatCommand时有效, 匹配命令. 同样适用于Command[i].
15 Commands.ChatCommand
16
17 --对象, 当请求为EventChatWords时有效, 模糊匹配. 同样适用于Command[i].
18 Commands.ChatWords
19
20 --字符串数组, 允许词汇列表.
21 Commands.ChatWords.AllowList
22
23 --字符串数组, 拒绝词汇列表, 拒绝优先.
24 Commands.ChatWords.DenyList
25
26
27 --EventChatWords参数:继承Event所有参数
28
29 --字符串, 传入的聊天字符串
30 Context.Event_ChatMessage
31
32 --字符串, 聊天信息发送者
33 Context.Event_Sender
34
35
36 --EventChatCommand 参数:继承Event, EventChatWords所有参数
37
38 --字符串, 从Event_ChatMessage中解析出的命令
39 Context.Event_ChatCommand
40
41 --字符串数组, 从Event_ChatMessage中解析出的参数数组
42 Context.Event_ChatArgs


