前面我们介绍了lua的一些基本用法

然而一切的一切,还是为了能够搞魔兽插件,今天终于步入正题,来搞一个简单的魔兽插件

一、插件的结构

先来看看插件的结构吧,首先,插件是在World of WarcraftInterfaceAddOns目录下的,相信你已经知道了。

目录下面有很多文件夹,我截图了一部分。


这里面每一个文件夹都是一个插件,这些插件有的是完成一个独立的工作,有的只是一个子模块。一般来说,你实现的功能不太复杂,那用一个文件夹就可以了,如果你搞了一个巨复杂的插件,例如DBM,通常来说你就要规划你的模块。

魔兽的插件可以做很多事情,blz本身就是插件的最大用户,魔兽的登录界面、服务器选择、人物选择界面、游戏里面的UI等等,都是用插件来实现的(默认alt+z快捷键可以隐藏的部分,都是插件实现的),当然blz的有些插件有一些并没在Addons里面,而是隐藏到了客户端里面。

上图里面,Blizzard开头的是blz公司自己的插件,dbm开头的是dbm的插件,其他的是一些单体插件。

下面我们从这里面找了一个文件结构最简单的BuffMaster(增益大师)来说:

这里面只有两个文件BuffMaster.toc和BuffMaster.lua,下面我们来介绍一下

二、toc文件简介

核心是BuffMaster.toc文件,这是插件的声明文件,每个插件都必须有这么一个文件,他的文件名跟插件的目录名一样,作用是用来告诉wow客户端,你的插件的文件都放在哪里,当然也还有一些别的作用,这个也不用太深究,随着功力的提升慢慢了解就好。

下图就是toc文件的内容,我大概介绍一下:

  • 第一行是插件的适用版本,70100代表这个插件适用于7.1.x版本,老胡写这篇文章的额时候已经是7.2.5,所以如果运行这个插件就会提示已过期,改为70200就ok了。——很多人问插件过期了怎么改,就是这么简单
  • 后面好多行,都是插件的名字,英文的,简体中文的,繁体中文的,等等
  • Dependencies,依赖哪个插件,这里写的是依赖BigFoot,所以如果玩家勾选了这个插件,但是没勾选BigFoot,就会提示“依赖没有启用”(忘了是不是这么提示的了),导致你的插件不能运行。但实际上这个插件跟大脚没有任何关系,即不是大脚开发的,也不需要依赖大脚,就是大脚的一个流氓行为,所以完全可以删了这一行。很多人问怎么把一些插件分离成单体——这里已经告诉你答案了。但是,有些确实需要依赖的,如果要分离就要改代码了。
  • LoadOnDemand,意思是需要的时候才加载,目的是用不到这个插件的时候就不用占用内存了
  • 最后一行,是关键,这里指定了我们插件中文件的路径BuffMaster.lua,这个文件名不需要跟插件名一致。

我们再来看一下DBM-Core的

看看toc文件,上面大同小异,下面是这个插件引用的文件资源

三、编写一个魔兽插件

好了,我们来动手搞一个简单的插件,插件的目的是打断的时候说一句话,这样你就不用再做打断喊话宏啦。

首先我们照猫画虎在Addons下面新建一个文件夹,我起名叫_InterruptWarning,前面有个下划线是为了排序的时候在前面,避免混到一堆插件中找不到,是不是好机智,哈哈。

然后分别编写两个文件的内容,先来toc的,这个就不重复介绍了

再来lua的

这个得好好介绍一下了,因为这个插件虽然代码不多,但是涉及的知识还不少。请看好左边的行号,老胡下面一行一行介绍:

  • line1: 定义一个变量interuptFrame,同时给他赋值,用魔兽的CreateFrame方法创建了一个frame,后面我们将为这个frame加特技
  • line2: 加第一个特技,注册一个事件,COMBAT_LOG_EVENT_UNFILTERED,也就是当战斗日志产生之后触发,点击链接可以查看详细介绍
  • 跳到line11: 家第二个特技,这里定义了档事件触发的时候,通知interruptEvent这个方法,也就是3-10行这个方法
  • line4: 判断是不是战斗日志事件
  • line5: 获取事件触发的参数,我们需要的是eventType和sourceName这两个,含义分别是时间类型和事件来源
  • line6: 判断,如果事件类型是技能被打断,并且事件来源的名字是玩家的名字,这说明当前玩家成功打断了一个技能
  • line7: 说一句话:interrupt >> [xx技能]
    一个简单的事件触发机制。

有点编程基础的人可能懂了,没基础的小白一般还懵逼着,因为老胡这个例子本身就有难度。因为老胡也不想搞个print(1)之类的,然后就告诉你插件做好了。。

那小白怎么才能懂呢,一句话,猛练自然强,练习题来了,请参照老胡的例子实现一个场景,萨墓里面主母这个boss,中了[吞噬之饥]这个debuff之后,会持续掉血,但是又不明显,所以很多人看不到,每次都要团长提醒,作为团长,现在请你实现一个功能,中了debuff的时候,就说三声“我中了[吞噬之饥],等下踩[雷霆震击]消debuff”,做好了可以qq老胡交流376665005。

有自信的可以做一个更好的例子。不但自己中了提醒,团里的其他人中了,还可以私密提醒他。

最后,上面例子的源码,声明一下,老胡并未测试,如果不能用,纯属正常。

怎么样,这个技能你get了吗?

魔兽世界lua笔记(2、编写一个打断喊话插件)相关推荐

  1. 魔兽世界lua笔记(3、魔兽界面位置修改)

    关于插件,以前在nga上看人说,老外大多用单体插件,国内大多用整合插件. 不论是单体还是整合,后者是默认的UI,总是会有自己觉得不舒服的地方,那么就自己来动手微调一下吧. 首先来举一个例子:比如盗贼的 ...

  2. 魔兽世界lua笔记(4、集合石插件修改,实现集合石亮灯hack)

    如果你这个版本还在玩魔兽世界,并且在集合石找过团队,那你一定会发现,大家都开始看"灯"了. 所谓的灯,就是图里面绿色小点,队长查看你进度的时候,绿色表示打过这个boss,灰色代表没 ...

  3. 编写一个GStreamer插件

    前面章节对GStreamer做了概述,不过我们最终用到主要是插件,下面我们对插件做一个简单介绍,大部分内容都是copy的,并非原创,主要用于学习记录,英文好的可以看官方文档,我和官方校对过,翻译的大体 ...

  4. ROS学习笔记十:用C++编写一个简单的服务和客户端

    ROS学习笔记十:用C++编写一个简单的服务和客户端 这一节主要介绍如何使用C++编写一个简单的服务和客户端节点. 编写服务节点 由于在前面的练习中,已经向beginner_tutorials软件包中 ...

  5. fceux源码解析_FCEUX金手指加强版 - 使用Lua脚本语言编写FC/NES金手指脚本

    一直觉得大部分的FC/NES模拟器的作弊码金手指不是那么方便使用, 比如魂斗罗1代, 玩家的武器可以通过修改0xAA的值来改变: 0x11为M弹(重机枪),0x12为F弹(圈圈),0x13为S弹(散弹 ...

  6. 从零开始编写一个上位机(串口助手)QT Creator + Python

    提示:本博客作为学习笔记,有错误的地方希望指正,此文可能会比较长,作为学习笔记的积累,希望对来着有帮助.   绪论:笔者这里使用的是QTCreator和Python来实现一个简单的串口上位机的开发的简 ...

  7. 读书笔记:编写高质量代码--web前端开发修炼之道(二:5章)

    读书笔记:编写高质量代码--web前端开发修炼之道 这本书看得断断续续,不连贯,笔记也是有些马虎了,想了解这本书内容的童鞋可以借鉴我的这篇笔记,希望对大家有帮助. 笔记有点长,所以分为一,二两个部分: ...

  8. 在windows程序中嵌入Lua脚本引擎--编写自己的Lua库

    在<在windows程序中嵌入Lua脚本引擎--建立一个简易的"云命令"执行的系统>一文中,我提到了使用Lua的ffi库,可以让我们像写C代码一样写lua程序.这是个非 ...

  9. idea可以使用flash框架吗_这个框架厉害了,使用它几分钟就可以编写一个微信插件...

    大家好,我是章鱼猫. 今天给大家推荐的这个项目是「Wechat Spellbook」-- 一个使用 Kotlin 编写的开源微信插件框架,底层需要 Xposed 或 VirtualXposed 等 H ...

最新文章

  1. java注解简单实例
  2. python会议室系统预定_python项目篇-酒店(会议室,电影)预定
  3. java 四种内存_不可访问内存 Java四种引用包括强引用,软引用,弱引用,虚引用...
  4. java之String
  5. 扩展坞可以把手机投到显示器吗_解锁4K 60Hz毕亚兹USB Type-C扩展坞体验
  6. python创建二维空列表_python定义二维空数组
  7. 重启openstack服务_如何“ Kubernetize” OpenStack服务
  8. linux curl 特殊字符,遇到问题--curl--- url参数中有+、空格、=、%、、#等特殊符号的导致传参不全 | 易学教程...
  9. c语言制表符号大全,C语言指令表与符号表;
  10. SpringMvc-HandlerExceptionResolver
  11. only has output.xml, how to check failed step.
  12. 如何在html中写json格式数据类型,html中如何美化展示json格式数据
  13. switchhosts使用
  14. flv.js插件播放flv格式的视频实例(vue)
  15. “振心计划”受益房东超20万,爱彼迎中国活跃房源同比增长超两成
  16. 多语言机器翻译 | (1)多语言翻译模型简介
  17. Ubuntu由于没有公钥,无法验证下列签名。
  18. 关于'//![cdata['和 '//]]'解答
  19. 系统封装Win10专业版1803
  20. Unity AI 语音识别、语音合成、人机交互(一)

热门文章

  1. 御龙在天手游怎么不显示服务器了,御龙在天手游经验怎么找回 等级不掉队方法解析...
  2. 用会声会影10制作高保真电子相册
  3. esp32录音功能开发_使用ESP32音频采样
  4. 浅谈新兴室内外无线局域精准定位技术UWB(超宽带)
  5. 微信小程序填坑之路(六):wx.getUserInfo 接口的变动与使用
  6. win10计算器rsh_厉害了我的哥!win10计算器自带程序员模式太强大了!
  7. 天秀!一张图就能彻底搞定Pandas!
  8. 第五课 田中さんは会社へ行きます。
  9. tableau prep builder etl工具使用注意事项
  10. java毕业设计MVC土特产交易平台系统源码+系统+数据库+lw文档+调试运行