admin管理员组文章数量:1568692
2023年12月24日发(作者:)
魔兽插件编写普及教程ADDONS编写普及作者:VVER前言22号基本写完。比预计的要快这个不是数学书或者语文书。我不想也没有那个能力写成那样...........所以请抱着看小说的态度来看。因为ADDONS的编写是一个整体。我实在无法分清哪个是要先说 哪个是要后说所以有看不懂的地方就跳过去。接着看下面前几层楼写的相对详细些。后几层楼更多的是提示。我还是希望看官能自己分析,自己动手研究最后。短短的6层楼包含了我半年的心血,而且我语文课真的是没好好去上所以如果一时看不懂。请多读几遍 或者回帖指出,我会尽力解释的基础如果你完全的彻底的不了解什么是ADDONS,请先参考CAMUS老大的帖子的2楼:插件,宏 常见问题解答任何一个ADDONS都是由3种文件组成LUA XML TOCTOC是ADDONS的标签,就好比是一本书的封面他将告诉WOW我们编写的ADDONS的名字。作者。版本号。注释。主要文件,依赖文件,保存文件所以任何一个ADDONS中TOC文件都是必不可少的举个例子我们编写如下信息保存为文件## Interface: 1600## Title: 我是一个插件## Notes: 虽然我没有内容,但是我真的是插件然后我们进入游戏。会发现在插件列表中真的出现了我们的这个ADDONS。虽然没有任何作用。但是我们还真的迈开了第一步XML是定义ADDONS组成的框体(或者用元素这个词更贴切些。不过我更喜欢框体这个词)我们的ADDONS有多少个按扭。多少个文字。每个按扭长什么样子。具体在什么位置 等等等等都是在XML文件中定义的。我会用大量的篇幅介绍XML文件的写法。敬请期待如果XML是定义ADDONS静态的框体。那么LUA就是把这些框体动态化比如说按扭在什么时候弹出。血条在多少的时候改变颜色。进入战斗的时候把人物血条移动到屏幕中间等等等等。都是在LUA中定义
总之,LUA就是把死的框体 真正的发挥出作用来当然LUA还可以使得我们的代码简化,本地化。等等等等一个ADDONS中LUA并不是不可或缺的。但是一个ADDONS编写的好与坏。就看LUA的了StatusBar在之前我们大概知道了ADDONS的一些基本概念那么现在。在各种类型的框体中挑一个StatusBar来说说基本概念StatusBar:是WOW中用来定义类似施法条。进度条之类的一种框体,说白了就是可以根据某个数值,实时的改变条条的长短一个StatusBar有3个重要的参数
1。最大长度 maxValue2。最小长度 minValue3。当前长度 Value要动态的改变StatusBar就需要用脚本(Scripts)中的事件实时的设置当前长度(Value)(这句话可能有点饶口。不过我就这点语文水平了。。见谅见谅)准备工作首先根据我们之前的概念。一个TOC文件是必不可少的,编个## Interface: 1600## Title: 我的第一插件## Notes: 真的是我的第一插件哦然后我们当然得用XML来定义StatusBar这个框体,那么编写个不过WOW并不知道我们写了这个文件。我们得告诉他。所以在中加一句(红色的部分)## Interface: 1600## Title: 我的第一插件## Notes: 真的是我的第一插件哦好了 正式开始编写按照基本的XML文件格式 先写好基本的嵌套
现在我们把变量SVALUE设置为玩家的血量那么:
><)想知道任何一个物体的位置。只要有一个固定的参考物。再有与参考物体的相对坐标。就可以了---------------------------------------------------------------------------------------------------先来点基本概念
我们用一个方框来表示框体,那么 TOP TOPLEFT _______________ TOPRIGHT | | LEFT | CENTER | RIGHT | | BOTTOMLEFT —————————— BOTTOMLEFT BOTTOM应该有点头绪了把?之前那段代码的意思就是 把位置定义在
小地图的中心点和我们的框体的中心点X坐标为55 Y坐标为55的地方如果看不明白这句话 不要紧 我们一句一句的来分析------------------------------------------------------------------------------------------------------具体分析头一句和最后一句
我们开始定义位置了。先看第二句。point="CENTER"
参考之前我画的那张很丑陋的图。意思就是:要定义位置的框体(为了描述方便。以下简称为框体A)的中心点(CENTER)作为定义点。(定义点这个名词是我杜撰的。如果不明白。先接着往下看)relativeTo="Minimap"意思就是:给我们的框体A设置一个参考物(为了描述方便。以下把参考物简称为框体B)在这里。就是把框体B设置为小地图(Minimap)relativePoint="CENTER"同样的。也得给我们的框体B设置一个定义点在这里。就设置为中心点(CENTER)现在解释一下定义点这个我杜撰的名词为什么要有定义点这个概念呢?因为所有的框体都不是一个点。而是一个平面。而相对坐标只能是点与点的坐标。所以就必须在框体上找一个点来定义坐标而这个点。就是我所谓的定义点至于一个框体的定义点可以设置为那些,参考上面我画的那张丑陋的图搞明白了以上的概念。那么中间的那段代码
CODE:
CODE:
CODE:
这样。无论HP为多少。数值的右侧永远都和血条的坐侧对齐---------------------------------------------------------------------------------------------------------------PS:当相对坐标为0,0的时候。代码可以简化比如刚才的代码可以简化为CODE:
弄懂了脚本部分。那么去他的FLEXBAR
去他的DAB
去他的DUF
我们不需要了。我们自己就可以来做了基本概念什么是脚本。通俗的说:脚本就是告诉框体在什么时候执行什么命令同样的我们用
如何?是不是很简单呢?接着来。FLEXBAR或者DAB还有很多神奇的功能。比如根据条件自动改变按扭的位置 透明度 缩放 等等等如果我们直接在ADDONS中编写也很方便比如进入战斗状态 自动出现按扭 反之隐藏
当事件为玩家离开战斗的时候 隐藏按扭1同样的脚本和框体一样 不可能仅仅只有我上面所说的那几个。更多的脚本需要你自己去发现。。我不想罗嗦了。更多的惊喜以上2个只是很简单的例子。脚本中执行的命令还可以是相互调用。相互依存的来实现更多更复杂的功能这时候。仅仅一个XML文件已经不能满足我们的需要了。我们得在LUA文件中来编写LUA如果你有耐心看完了上面的全部内容 并且亲手去实验了
那么如何编写一个XML文件应该了然与胸了把当然一个精巧的ADDONS不可能仅仅只有XML文件而已。他还需要LUA文件LUA文件当然就是用LUA格式写的具体的LUA的语法 限与帖子的篇幅,不能详尽说明。好在现在网上的资料很多的我只说几个个人觉得很有用的部分1。引用LUA和定义函数先回头看6楼的最后那段代码我们可以把脚本的部分放到LUA中来写。首先我们新建一个文件然后在XML文件里面要告诉WOW
我们写了文件
end 定义函数的LUA命令是function现在我们就把
LUA和XML也许就上面的那段简单的代码 我们还觉得这样做并没有什么太大的意义不过。当你写了一段很复杂 很麻烦的代码的时候。这么做显然有助与你简化代码和理清思路2。代码的本地化因为WOW有很多国家的版本。所以一些变量的设置需要本地的语言。比如能在中国使用的ADDONS,有时候并不能在美国使用。这时候我们就需要做一些本地化的工作怎么做?我们把所有的需要使用当地语言的变量集中起来 在一个LUA文件中定义
(这个LUA文件。我们一般起名叫:)
而且。WOW还提供了自动判断语种的功能这些都很简单。随便打开一个ADDONS的自己看一看就明白 不罗嗦了当然LUA的作用远远不止这些毕竟LUA是一个很成熟的语言。熟练的运用将大大简化我们的工作量比如LUA的数组功能。字符串的判断更多的细节。可以在自己动手写ADDONS的过程中慢慢摸索。继承WOW已经帮我定义好了很多有用的框体所以很多的时候。我们并不需要自己完全的重新定义直接引用他们就可以了这里就要用到继承这个概念如何做?继承的命令是inherits比如我想定义一个文字框体。他的样子和显示玩家的名字的文字的样子是一样的那么:
TEXT_FRAME框体的大小 颜色 透明度 字体等等等等属性全部搞定了如果有不满意的地方 还可以重新定义。比如改变一下颜色
其中有6个框体是按扭。并且他们很多部分都是公共的。所以。如果我现在再来写那个OPENDOOR
我会先写一个父框 把6个按扭公共的部分全部写进去然后在一个一个的继承就OK了。~
具体的父框的定义 不罗嗦了大家可以随便打开一个ADDONS
找到名字后面为Template的框体。那多半就是父框了。动手分析一下把
(提示一点:在父框中的$parent就是要被继承的子框的名字)进阶StatusBar除了SetValue这个重要的命令以外。还有个SetStatusBarColor命令。是用来改变颜色的比如还是上面的例子我们现在想当HP超过50%的时候为绿色 低于50%的时候为红色那么先定义一个函数 就叫haomingzi_OnUpdate把 用来实现上面的功能function haomingzi_OnUpdate()local SVALUE=( UnitHealth("player") / UnitHealthMax("player") )*100; if SVALUE > 50 then haomingzi:SetStatusBarColor(1,0,0); endend然后我们在脚本中调用这个函数就可以了
版权声明:本文标题:魔兽世界插件编写普及教程 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1703353099a51149.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论