魔兽世界lua笔记(2、编写一个打断喊话插件)
魔兽世界lua笔记(2、编写⼀个打断喊话插件)
前⾯我们介绍了lua的⼀些基本⽤法
然⽽⼀切的⼀切,还是为了能够搞魔兽插件,今天终于步⼊正题,来搞⼀个简单的魔兽插件
⼀、插件的结构
先来看看插件的结构吧,⾸先,插件是在World of WarcraftInterfaceAddOns⽬录下的,相信你已经知道了。
⽬录下⾯有很多⽂件夹,我截图了⼀部分。
这⾥⾯每⼀个⽂件夹都是⼀个插件,这些插件有的是完成⼀个独⽴的⼯作,有的只是⼀个⼦模块。⼀般来说,你实现的功能不太复杂,那⽤⼀个⽂件夹就可以了,如果你搞了⼀个巨复杂的插件,例如DBM,通常来说你就要规划你的模块。
魔兽的插件可以做很多事情,blz本⾝就是插件的最⼤⽤户,魔兽的登录界⾯、服务器选择、⼈物选择界⾯、游戏⾥⾯的UI等等,都是⽤插件来实现的(默认alt+z快捷键可以隐藏的部分,都是插件实现的),当然blz的有些插件有⼀些并没在Addons⾥⾯,⽽是隐藏到了客户端⾥⾯。
上图⾥⾯,Blizzard开头的是blz公司⾃⼰的插件,dbm开头的是dbm的插件,其他的是⼀些单体插件。
下⾯我们从这⾥⾯了⼀个⽂件结构最简单的BuffMaster(增益⼤师)来说:
这⾥⾯只有两个⽂件和BuffMaster.lua,下⾯我们来介绍⼀下
⼆、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了吗?

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。