Login

Eva Framework

简介

Eva Framework是一个高度可扩展的WoW插件快速开发框架.

优势

  • 轻量, 高效, 框架本身内存占用不超过100k, 以实用为准则, 并没有为实现某些花哨的开发能力而创建操作大量的对象.
  • 封装了WoW插件引擎模型内部的复杂性, 为WoW中所有请求提供了统一接口, 开发者无需再去关心如何处理请求, 只需关注请求来临时做什么. 框架侵入性极低, 开发者可以轻易的将插件转移入或转移出框架.
  • 强大的命令调用引擎, 支持单功能调用, 组功能调用, 能够通过延时模拟多线程.
  • 强大的框架级动态控制能力, 开发者可以随时加载卸载插件, 启用停止插件内部任意功能, 甚至能够动态改变UI请求方式, 统一管理请求层面对象及变量范围, 从而能在一定程度上避免由于开发者知识不足或失误所造成的变量范围混乱, 频繁创建无用对象等缺陷.
  • 使开发变的层次清晰, 框架支持层次式开发, 使您的插件变得层次结构情绪, 易于阅读与维护.
  • 稳定, 开发者无需担心因WoW版本的变更而导致框架频繁变更, 框架的抽象是基于WoW插件引擎的核心机制, 不牵扯具体API, 最好的例子便是WoW1.x变更到2.x时导致大量插件失效, 而Eva只是针对lua5.0升级至5.1的一个语法改变后即可正常使用.

  • 学习曲线平滑, 降低了WoW插件的开发难度, 接口少而简单, 面向对象的调用方式, 非常容易上手即使您没有插件开发经验.

技术详情

  • 库与框架的不同
    • 库, 为应用提供了常见的功能调用, 你的插件需要主动调用库.
    • 框架, 包含一个库, 插件需要按照框架规范编程, 由框架主动调用插件来执行. 是应用开发的更高级形式.

插件执行流程图

eva.jpg

应用概览

   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


插件类, 插件函数库类

EVA (last edited 2008-06-22 14:02:42 by 月色狼影)