这是魔兽世界什么插件好用

TAG标签: >
> 魔兽世界插件如何使用 简单教学指南
魔兽世界插件如何使用 简单教学指南
发布时间:13-04-01 13:53
来源:未知
责任编辑:52PK
[复制链接]
  我们指的魔兽世界插件简称Addons (Add-Ons),指的就是用户游戏界面UI (User
Interface)中可以自我定义的部分。其中很多玩家喜欢自定义UI就是想要属于自己的WOW用户游戏界面,这也是突出自己个性的一种表现吧。
  那么插件是如何使用***的呢?
  下面我们来简单介绍下插件的使用方法。
  如果你以前从来没有***过任何Addons/Mod(插件),那么有几个小任务在你***Addons(插件)之前.
  1.依次创建目录, 你的wow***目录\Interface\Addons interface和addons如果存在就不用***了。
  2.下载下来插件以后,看压缩包
  (1)如果是interface目录,那就直接接压到你的wow***目录里面
  (2)如果是addons目录,那就直接接压到interface目录下
  (3)非以上三个的话,就解压到addons目录下
  3).另外某些插件对某些插件或者是Function
Library(功能库)有依赖性,请把被依赖的Addons/Mod(插件)也下载下来并***.
  4).角色选择画面的左下方有一个按钮&插件&,可以便于你在进入游戏之前调节具体加载哪个插件
  当然,在使用这些插件的时候需要库文件的支持,这里就不做详细说明了。
  1.如果您不想继续使用这个插件了,您可以直接到游戏***目录里Interface文件夹下的AddOns目录里,找到这个插件的文件夹,然后直接删除即可。
  2.Mod有两种情况,一种是在线***版,一种是解压版.
  (1).如果是在线***的,可能需要在添加删除里面删除,如果找不到,那么就手动把 X:\World Of Warcraft\ 目录下的相关文件删除,再把
X:\World Of Warcraft\Interface\ 目录下的相关文件夹删除.
  (2).如果是解压版,只需要把 X:\World Of Warcraft\Interface\ 目录下的相关文件夹删除即可.
  一般的魔兽世界插件都有配置面板,你可以按ESC,点击界面,然后在&插件&选项卡里可以找到你要配置的插件。
  如果这个插件没有配置面板,你可能需要命令行来配置。一般来说,插件的命令行就是插件名本身。比如战斗统计插件Recount,在聊天框内输入:&/recount&(没有引号),就可以看到详细的配置。
  以上就是简单的插件***、删除以及配置方法。
  如果大家有需要的魔兽世界插件可以通过/ui/进行下载
  小编推荐:
点击您支持的评价印象,支持的越多,评价的印象越靠前
*网友评论仅代表其个人看法,并不表明本站同意其观点及描述。
Copyright © 2002- 版权所有 52PK游戏网 渝ICP证B2-号 渝网文(-010号>>>>>>责任辑编
美工 制作:炊饼脆梨豆包
        
      
插件搜索: 
插件首字母检索:                         
共39条 上一页 [1]     &&第1234页
Skinner功能强大的界面换肤插件,能做出非常漂亮的透明效果,右键点击小地图图标进行设置。
适用版本:4.3,4.3
总下载量:22401
插件类型:
SilverDragon稀有怪追踪提醒插件,提供多种探测方式(鼠标指向,小队目标,姓名板)来探测你周围的精英怪,当发现精英怪时提醒你,并在大地图和小地图上给出标记。
适用版本:4.3,4.3
总下载量:15463
插件类型:
老牌装备属性统计&比较插件&StatCompare。StatCompare&3.0系列增加了对天赋带来的属性统计,可通过设置来启用/禁用改统计。要启用这个功能必须要同时加载&StatCompareChar&全属性预估模块。
适用版本:4.3,4.3
总下载量:10347
插件类型:
StatusBars2强大的战斗指示器,是由SkaDemon针对巫妖王之怒重写的插件,将玩家、目标、宠物的血量、能量(魔法,怒气等能量系统)、连击点、Buff、DEBUFF、施法条信息等显示在屏幕上。
适用版本:4.3,4.3
总下载量:7988
插件类型:
SyUnitFrame是一款小巧简单的头像增强插件,插件没有配置命令,拿来就可用。
适用版本:4.3,4.3
总下载量:7687
插件类型:
有了SAL,一切又关考古的不快都将烟消云散,考古变得前所未有的轻松。因为整个插件完全是图示,没有文字,所以可以放心使用英文版。
适用版本:4.3,4.3
总下载量:7061
插件类型:
Shadowed&Unit&Frames是由国外著名插件作者Shadowed的新款头像插件。该头像插件简洁强大,能实现各类你所需要的头像功能。
适用版本:4.3,4.3
总下载量:5916
插件类型:
snDress是一个全职业装备物品预览插件,包括了各类副本套装(T1-T13)、竞技场套装(S1-S11),以及支持自定义的物品预览。
适用版本:4.3,4.3
总下载量:5244
插件类型:
SimpleMinimap小地图增强插件,提供小地图的移动,&缩放,&美化等功能。
适用版本:4.3,4.3
总下载量:4913
插件类型:
sFilter是一款强大的,可定制性高的法术计时和法术技能提醒插件,支持全职业各类重要法术技能的时间计时和层数显示,以及全职业各类重要的法术技能特效触发后的提醒。
适用版本:4.3,4.3
总下载量:4393
插件类型:
共39条 上一页 [1]     &&第1234页
Copyright & 1996 - 2010 SINA Corporation, All Rights Reserved
北京网通提供网络带宽1995人阅读
因为我是新手,只能做一个非常简单的插件,21点扑克游戏。比较有趣吧,插件也可以做一个游戏?游戏中的游戏!
2.编写魔兽世界插件准备
首先你要一个最新的魔兽世界客户端,我的有26G大小。记得要申请一个试玩账户,试玩账户不会消耗游戏时间,可不能用正常账户,那调试代码烧点卡烧的厉害!用什么编辑器呢?魔兽世界插件大部分是Lua,一部分是XML,SciTE比较适合Lua,但我感觉用NotePad++比较好。前期可能要用下一个大型的编辑器叫”AddOn Studio for World of Warcraft”,有点像VS。它用来调试XML不错。还要准备3个第三方魔兽世界插件来帮助我们!BugGrabber,BugSack,TinyPad。前面两个是调试用的,如果我们写的插件有错误的话会提示第几行,什么错误。TinyPad是一个游戏内记事本功能的插件,可以在里面写Lua脚本,直接游戏运行,当我们要测试少量的wow
API比较有用看完《Programming in Lua, 3rd Edition》和《Beginning Lua with World of Warcraft Add-ons》(真的看完就不用往下看这篇教程了=。=,对英语阅读有一定要求,但不难)比较有用的网站,, 。暴雪是没有公布插件API的,只能google了。
总结下跟一般的编程一样的。
运行效果查看:魔兽世界客户端+试玩账户
编辑器:首推NotePad++,SciTE,AddOn
调试:!BugGrabber,BugSack,TinyPad + print(“”) ,print 可以在游戏中打印日志,我们可以打印变量来调试。
教程:《Beginning Lua with World of Warcraft Add-ons》&
当然不能每次重启魔兽世界客户端来看修改效果,我们可以做一个简单的宏来重载所有UI,当你修改了你的插件的XML或者Lua文件时,可以重载所有UI来看到修改效果。当然Shift+点击BugSack也有同样的效果。修改toc或者新增图片,音乐资源是不能靠重载UI来生效的,要重启魔兽世界客户端。
3.还是先写一个插件版的Hello World吧
把上面提到的三个插件!BugGrabber,BugSack,TinyPad,google下,都下载下来。拷贝到\Interface\AddOns 目录下。进入游戏,输入/pad
就可以打开TinyPad了,我们输入print(“Hello World”),再点击上面的菜单有个功能是run this page as a script,就可以看到效果了。
4.写一个简单插件界面吧
点击Click按钮就会调用我们一个Lua函数,点击Close,整个界面就会隐藏。
这次是一个完整的插件,名字叫testButton,包括三个文件:
Frame.lua& -- 用来存放脚本
Frame&&&&&& -- 用来描述界面,以XML编写
testButton.toc -- 用来描述我们的插件,比如插件支持的魔兽世界版本,插件名字,插件作者,插件包含文件等等。
先来看下testButton.toc
Author: Walle
Interface: 50400
Title: testButton
Version: 1.0
再看下xml,里面有两个button
&Uixmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance&xmlns:xsd=&http://www.w3.org/2001/XMLSchema&xmlns=&/wow/ui/&&
&&&&&Framename=&Frame1&parent=&UIParent&toplevel=&true&enableMouse=&true&movable=&true&clampedToScreen=&true&&
&&&&&&&&&Size&
&&&&&&&&&&&&&AbsDimensionx=&200&y=&200&/&
&&&&&&&&&/Size&
&&&&&&&&&Anchors&
&&&&&&&&&&&&&Anchorpoint=&CENTER&&
&&&&&&&&&&&&&&&&&Offsetx=&-35&y=&34&/&
&&&&&&&&&&&&&/Anchor&
&&&&&&&&&/Anchors&
&&&&&&&&&BackdropbgFile=&Interface\DialogFrame\UI-DialogBox-Background&edgeFile=&Interface\DialogFrame\UI-DialogBox-Border&tile=&true&&
&&&&&&&&&&&&&BackgroundInsets&
&&&&&&&&&&&&&&&&&AbsInsetleft=&11&right=&12&top=&12&bottom=&11&/&
&&&&&&&&&&&&&/BackgroundInsets&
&&&&&&&&&&&&&TileSize&
&&&&&&&&&&&&&&&&&AbsValueval=&32&/&
&&&&&&&&&&&&&/TileSize&
&&&&&&&&&&&&&EdgeSize&
&&&&&&&&&&&&&&&&&AbsValueval=&32&/&
&&&&&&&&&&&&&/EdgeSize&
&&&&&&&&&/Backdrop&
&&&&&&&&&Frames&
&&&&&&&&&&&&&Buttonname=&BtnClose&inherits=&UIPanelButtonTemplate&text=&Close&&
&&&&&&&&&&&&&&&&&Size&
&&&&&&&&&&&&&&&&&&&&&AbsDimensionx=&75&y=&23&/&
&&&&&&&&&&&&&&&&&/Size&
&&&&&&&&&&&&&&&&&Anchors&
&&&&&&&&&&&&&&&&&&&&&Anchorpoint=&TOPLEFT&&
&&&&&&&&&&&&&&&&&&&&&&&&&Offsetx=&69&y=&-134&/&
&&&&&&&&&&&&&&&&&&&&&/Anchor&
&&&&&&&&&&&&&&&&&/Anchors&
&&&&&&&&&&&&&&&&&Scripts&
&&&&&&&&&&&&&&&&&&&&OnClick&
&&&&&&&&&&&&&&&&&&&&&&self:GetParent():Hide()
&&&&&&&&&&&&&&&&&&&&/OnClick&
&&&&&&&&&&&&&&&&&/Scripts&
&&&&&&&&&&&&&/Button&
&&&&&&&&&&&&&Buttonname=&BtnClick&inherits=&UIPanelButtonTemplate&text=&Click&&
&&&&&&&&&&&&&&&&&Size&
&&&&&&&&&&&&&&&&&&&&&AbsDimensionx=&75&y=&23&/&
&&&&&&&&&&&&&&&&&/Size&
&&&&&&&&&&&&&&&&&Anchors&
&&&&&&&&&&&&&&&&&&&&&Anchorpoint=&TOPLEFT&&
&&&&&&&&&&&&&&&&&&&&&&&&&Offsetx=&69&y=&-100&/&
&&&&&&&&&&&&&&&&&&&&&/Anchor&
&&&&&&&&&&&&&&&&&/Anchors&
&&&&&&&&&&&&&&&&&Scripts&
&&&&&&&&&&&&&&&&&&&&OnClick&
&&&&&&&&&&&&&&&&&&&&&&BtnClick()
&&&&&&&&&&&&&&&&&&&&/OnClick&
&&&&&&&&&&&&&&&&&/Scripts&
&&&&&&&&&&&&&/Button&
&&&&&&&&&/Frames&
&&&&&&&&&Scripts&
&&&&&&&&&&&&&OnLoad&
&&&&&&&&&&&&&&&&self:RegisterForDrag(&LeftButton&)
&&&&&&&&&&&&&/OnLoad&
&&&&&&&&&&&&&OnDragStart&
&&&&&&&&&&&&&&&&self:StartMoving()
&&&&&&&&&&&&&/OnDragStart&
&&&&&&&&&&&&&OnDragStop&
&&&&&&&&&&&&&&&&self:StopMovingOrSizing()
&&&&&&&&&&&&&/OnDragStop&
&&&&&&&&&/Scripts&
&&&&&/Frame&
这个XML看起来有点复杂,可以用Addon Studio 建一个项目,拖个按钮进去,玩玩。就大致了解上面的东西了。无论是Frame还是Button等都有大小用下面的来表示一个200×200的。
&AbsDimension x=”200″ y=”200″ /&
Anchors 来表示位置。point可以设置CENTER,TOP,LEFT等等,下面的Offset是偏移量,比如你设置了CENTER,那么-35就是中心偏左35。
&Anchor point=”CENTER”&
&Offset x=”-35″ y=”34″ /&
&/Anchors&
Backdrop表示Fram的边框,直接从Addon Studio抄下来。
我们注意到Button有个属性是inherits,继承的意思
inherits=”UIPanelButtonTemplate”&这里表示简单的继承了WOW原生的按钮样式,按钮可以设置非常复杂的样式,这里不再赘述,大家可以参考WOW API。
XML中都可以加脚本,比如这里:
self:GetParent():Hide()
&/OnClick&
&/Scripts&
它的效果就是简单的使整个都隐藏起来。
我们对整个Frame还增加了拖动效果。
还有必须说明的是一般用XML能实现的,直接用Lua代码也可以的。
比如设置宽度,高度,可以这样写:
Frame1:SetWidth(500)
Frame1:SetHeight(500)
大家可以在tinypad中,执行看下效果。不单单是改变属性,创建一个按钮也可以用Lua代码的。大家可以去Google。
最后看下Frame.lua
它里面就是一个简单的function:
function BtnClick()
print (“BtnClick”)
5.还是先介绍下21点的游戏规则
回到我们的扑克游戏来。
懂的童鞋就直接可以跳过了,容我摘抄一段:
21点一般用到1-8副牌。庄家给每个玩家发两张牌,一张牌面朝上(叫明牌),一张牌面朝下(叫暗牌);给自己发两张牌,一张暗牌,一张明牌。大家手中扑克点数的计算是:K、Q、J 和 10 牌都算作 10 点。A
牌既可算作1 点也可算作11 点,由玩家自己决定。其余所有2 至9 牌均按其原面值计算。首先玩家开始要牌,如果玩家拿到的前两张牌是一张 A 和一张10点牌,就拥有黑杰克(Blackjack);此时,如果庄家没有黑杰克,玩家就能赢得2倍的赌金(1赔2)。如果庄家的明牌有一张A,则玩家可以考虑买不买保险,金额是赌筹的一半。如果庄家是blackjack,那么玩家拿回保险金并且直接获胜;如果庄家没有blackjack则玩家输掉保险继续游戏。没有黑杰克的玩家可以继续拿牌,可以随意要多少张。目的是尽量往21点靠,靠得越近越好,最好就是21点了。在要牌的过程中,如果所有的牌加起来超过21点,玩家就输了----叫爆掉(Bust),游戏也就结束了。假如玩家没爆掉,又决定不再要牌了,这时庄家就把他的那张暗牌打开来。一般到17点或17点以上不再拿牌,但也有可能15到16点甚至12到13点就不再拿牌或者18到19点继续拿牌。假如庄家爆掉了,那他就输了。假如他没爆掉,那么你就与他比点数大小,大为赢。一样的点数为平手,你可以把你的赌注拿回来。
没做这个游戏之前我也大致知道21点游戏规则,没有想到还有个保险的东西。大家可以去搜下有关21点的flash游戏来玩下。
6.Lua基础教程
老实说,我写这个插件不是为了写一个帮助的插件,是想要学习下Lua的语法。所以看《Programming in Lua, 3rd Edition》就很有必要。
下面只是列举下一些非常基础的Lua语法,用来做我们这次《21点扑克游戏》足够用了。21点扑克游戏,我写了一个函数来得到手里牌的总的值。我们知道A这个牌比较特殊,即可当1,也可做11,但不可能有两张牌都作为11,总的就是&=22就爆掉了。下面这个函数比较简单,先尝试循环所有的牌,对值相加,如果没有A的话就直接返回,如果有A的话,尝试把它以11点来算,如果没爆的话就是最佳值。
functionGetTotalValue(cards)
containAce = false&&&&&&&&&&&&&--
totalValue = 0
anotherTotalValue = 0
v inipairs(cards)
do&&&&&&&&&--
&&&&&&&totalValue
= totalValue + v.value
&&&&&&&ifv.value
== 1 then&&&&&&&&& --
&&&&&&&&&&containAce
&&&&&&&end&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&end&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&ifcontainAce
&&&&&&anotherTotalValue
= totalValue + 10 --
&&&ifcontainAce
and anotherTotalValue &= 21 then
&&&&&&returnanotherTotalValue
&&&returntotalValue
简单解释下就是Lua中可以以一行作为结束,都不用加;,局部变量前缀是local,有点像Javascript中的var,但Lua的Local也可以直接不写就是全局变量了。Lua会有很多end,for循环结束有end,if结束也有end,function结束也是end。C++ 中的 && 和 || 在 Lua中是 and 和 or,另外 C++中的
!= 在 Lua 中是 ~=
Lua中最重要的就是Table,它没有Javascript中的Array,但这个Table比Array还要强大。再来看一个例子,是我们这个游戏的初始化牌的方法。总共牌共有52张。
POKER_CARD_NAME
POKER_CARDS
= {&&&&&&&&&&& --
= &Queen&,
&&&&[&10&]
= &Eight&,
= &Seven&,
= &Three&,
POKER_SUITS
= &Hearts&,
= &Diamonds&,
= &Clubs&,
= &Spades&,
ranks = {&K&,&Q&,&J&,&10&,&9&,&8&,&7&,&6&,&5&,&4&,&3&,&2&,&A&}
suits = {&H&,&D&,&C&,&S&}
cards = {}
cardsByRank = {}
value = 10
r inipairs(ranks)
&&&&cardsByRank[r]
s inipairs(suits)
&&&&&&&&cards[#cards
+ 1] = {& --// #cards可以得到cards这个table的长度,这里每个card又是一个table
&&&&&&&&&&&&rank
= POKER_CARDS[r],
&&&&&&&&&&&&suit
= POKER_SUITS[s],
&&&&&&&&&&&&name
= POKER_CARD_NAME:format(POKER_CARDS[r], POKER_SUITS[s]), --
&&&&&&&&&&&&code
&&&&&&&&&&&&value
&&&&&&&&cardsByRank[r][s]
= cards[#cards]
&&&&&&&value
= value - 1
7.再讲下别的注意事项
我们这个插件游戏中,需要用到扑克的图片。魔兽世界插件是支持图片显示的,用Frame中的texture就可以了。具体大家可以看代码,图片格式支持两种,一种是TGA,另外一种我忘了。图片大小比较变态,要(2的n次方) x (2的n次方)。比如一个64×128就是合格的图片大小。
魔兽世界插件也支持音乐播放,好像支持mp3格式和ogg格式。大家可以用”格式工厂”软件来转换。播放音乐的API是PlaySoundFile,参数是路径。
function InsurancePayMusic()
PlaySoundFile(“Interface\\AddOns\\BlackJack\\sounds\\ins_pay.ogg”)
8.这次做的插件下载地址
也可以访问github地址:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:598198次
积分:6843
积分:6843
排名:第2314名
原创:159篇
转载:44篇
译文:12篇
评论:129条
广州前端开发:
杭州前端开发:
杭州嵌入式开发:
文章:18篇
阅读:29689
阅读:26600
(2)(2)(1)(1)(1)(2)(1)(1)(2)(2)(1)(1)(1)(3)(7)(9)(3)(5)(23)(35)(34)(19)(42)(2)(2)(1)(8)(1)(1)您所在的位置: &
LUA学习笔记:魔兽世界自定义界面插件
LUA学习笔记:魔兽世界自定义界面插件
bilzzard论坛
LUA学习笔记中魔兽世界自定义界面插件 是本文要介绍的内容,主要是来了解操作系统的库文件没有包含在魔兽世界UI的PATH路径之中,具体内容看本文详解。
LUA学习笔记中魔兽世界自定义界面插件 是本文要介绍的内容,主要是来了解操作系统的库文件没有包含在魔兽世界UI的PATH路径之中,本文是对魔兽世界自定义界面插件的介绍,内容主要是如何进行自定义的UI插件(Custom UI)进行定义:
用户界面(UI - User Interface)向导
近来有许多玩家蜂拥而入了WOW团体,他们中有许多,就像我一样,有着一些编程经验并且希望试着创建UI插件。由于有着众多编程语言和接口,不少人可能会走些弯路,我希望以下内容能够减少以上这些情况(至少减少为寻找那些函数的资料而头痛的烦恼):
(译注:其实并不难,其内容只涉及到一些脚本语言和XML文档的知识,就算你没有写过程序,也能胜任。)
1、准备开始
(1)可以选用的工具
第一步必须明白将要做些什么,但是为了能够正确的开始,我们必须选择一些编写脚本的工具。我想首先重要的一点是编辑器(用专业术语来说就是IDE-integrated development evironment), 这可能有许多种选择。由于我们编写脚本的语言是LUA(译注:一种脚本语言,参见:www.lua.org),我们需要的编辑器应当是针对这种语言的,以下十供选择的列表:
blua.sourceforge.net/ (译注:sourceforge.net是一个著名的开源项目网站)
B:Lua这是首当其充的脚本编辑工具之一,它提供了强大的IDE所提供的功能,足够用来编辑WOW的UI。而且它是用Java语言编写的,不论在何种操作系统中尼都能运行它。
.br/luaeclipse/ (译注:一个运用于Eclipse IDE下的插件,建议使用过Java语言的专业人士使用。)
Lua Eclipse ? 这是另外一个Java环境的IDE,我没有用过这个IDE(译注:本文中的我不代表译者),它基于Eclipse 平台(译注:请参见www.eclipse.org),它是一个有着多种功能的插件,我确信这是一个很好的工具。
EditPlus ? 这是替代记事本程序的有效工具,这也是我编辑LUA的工具。它有着多种你所需的功能,而且它有着LUA语言的Schema(译注:Schema可以理解为一种模板,它规定者文件如何定义等内容)。但是它有着30天的评估期,你得注册拥有它。
这只是3种建议,我认为一旦掌握了B:Lua后,你就能够更好地使用其它工具了。
(2)目标:WOW文件
你拥有了编辑器后,一切只是刚刚开始,我们需要一些工具来编辑WOW。首选的工具是WinMPQ,下载地址:/dwnload.html#WinMPQ
你需要运行库(VB4运行库)来运行它(译注:一般windows都***了),有了它你就可以打开游戏目录中的MPQ文件或者MoPaO 文件。MPQ是暴雪公司存储游戏资料的文件格式,如果你有兴趣研究的话,请参阅:www.campaigncreations.org/starcraft/inside_mopaq/index.htm
有了WinMPQ,你就可以解开文件内容,并且打包到游戏***目录。
了WinMPQ,你就可以解开文件内容,并且打包到游戏***目录,里面就是你所需的所有内容。Interface.mpq文件里面有基本的界面数据,并且有着大量柯作为例子的文件。Patch.mpq文件里有着所有的补丁内容,在游戏运行时将覆盖所有基础的文件。
打开WinMpq,我们将所有基础界面文件作为例子来使用。下面还将示范如何保证数据与最新的补丁保持一致。使用&Open&选项打开interface.mpq文件(该文件在游戏***目录下),找到一个叫FrameXML的文件夹(还有一个叫glueXML的文件夹,不去管它),选中目录下所有文件并且解压到游戏***以外的目录下。
同样,打开Patch.mpq,其中不仅仅有界面文件,还有许多更新文件。打开Interface\FrameXML目录,将其中的内容解压到刚才interface.mpq文件的解压目录中,并覆盖已有的文件。这样我们就有了一份最新的游戏界面FrameXML目录数据作为参考。(你也可以用WinMPQ 解压其他的文件,例如音乐文件等)。
2、有了目标之后
一切准备就绪,让我们开始制作第一个插件吧!
首先你的知道具体文件的安排,哪个文件是做什么的。让我们看以下魔兽世界的***吧。其中有许多目录,我们将要操作的目录是Interface目录(若不存在请创建)。在该目录下有3个主要的目录:
FrameXML: 有所有暴雪提供的界面,你将打交道的文件都在这。
GlueXML: 包含&游戏之外&的界面,例如登入界面,服务器选择,角色创建等。你不太需要关心这些文件。
AddOns: 所有游戏角色的模型。
在AddOns目录下每个角色都有其所有的目录并且有一个内容表。
(1)初始化
我们要开始创建&Hello world&啦!(译注:&Hello world&常指第一个程序),创建1个叫hello_world的目录在AddOns下,即Warcraft/Interface/AddOns/hello_world。在目录中建立1个叫hello_world.toc的文件,这就是内容表了,它定义了WOW该如何装载插件内容。例如以下就是文件内容:
Interface:&4114& &Title:&Hello&World& &Notes:&The&obligatory&hello&world&script&?&WoW-style!& &OptionalDeps:& &Dependencies:& &hello_world.xml&&
作一下解释,第一行表示新的代码段的开始。事实上每次暴雪更新补丁后,当前的版本号都会更新。如果你的脚本没有最新的版本号,那么这段脚本将&不会&装载入游戏。这就是为什么版本更新导致插件无法使用的原因。
你可以通过打开Interface\FrameXML\FrameXML.toc文件来知道当前的版本号。接下来两行的Title和Nodes就不必解释了吧(译注:分别为标题和注解,可选)。在下一行,OptionalDeps中你可以列出所有你的插件的名称(你可以列出其他插件,用空格分隔)。Dependencies也是同样的,但它不是可选的,我不太确定如果没有这一行你的插件是否会装载。最好所有的都写,不管它是不是可选的,这样所有人都能更好阅读你的代码。
在开始的声明之后,你将写入一些XML文件的名称(次序未定),一行写一个文件的名称。你也可以将XML文件写在子目录中,例如&core/hello_world.xml&,这样能使文件夹里看起来更简洁。
哦。有些复杂了是么?其他不用管先看
(2)加入内容
下面将是最有意思的部分,让我们从简单的开始。在目录中创建hello_world.xml文件(该文件名应写在了FrameXML.toc中),内容如下(译注:XML文件格式请寻找有关文档):
&xmlns=&/wow/ui/&&xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance&&
xsi:schemaLocation=&/wow/ui/&& &&file=&hello_world.lua&& && &&name=&hello_world_core&& && && &this:RegisterEvent(&VARIABLES_LOADED&);& && && &if&(event&==&&VARIABLES_LOADED&)&then& &hello_world_initialize();& &end& && && && &&&
(请看wow.nevir.net/tutorial/hello_world/hello_world.xml)
哦。有些复杂了是么?其他不用管先看&script file=&hello_world.lua&/&这一行,它告诉游戏 hello_world.lua 是脚本文件,也就是插件运行的脚本所在。每个界面都用&Frame&的标签(Tag)扩起来。这里我们使用了一个Frame标签来简单地把所有事件脚本包进来,你也可以将所有的界面上的按钮,窗口等定义在Frame标签里面。在&Frame&标签里,可以定义其一个叫name的属性(如:&Frame name=&hello_world_core&&)
注意里面的值必须在整个文件里是唯一的。建议你用你的插件模块名称作为前缀开始,后接下划线,再接上Frame真正意义的名称。在上面的例子里,我们把它叫做core,因而组成了上述名字。
在&Frame&标签里有个&script&标签,其中是真正脚本的内容。在这里有许多事件(译注:即魔兽世界游戏程序在某阶段将做的某个动作),其中 &onLoad& 和&OnEvent&是最常用的2个。
其中&onLoad&是当你选择了角色进入游戏时而角色Laoding画面开始之前的将响应的事件(换句话说,你的插件在登入画面时是不会被装载的)。在我们的代码中,我们注册了this给了一个叫&VARIABLES_LOADED&的事件(译注:看不懂代码的朋友还是先看看一些脚本语言的介绍书籍),this代表了当前的Frame,即这个名字叫hello_world_core的Frame,this就是指向该Frame的对象/变量(指向该Frame对象的实例),这里的&:&相当于引用方法的表达符(像其他某些脚本语言中的&.& 号),而RegisterEvent函数的作用是告诉游戏程序在VARIABLES_LOADED事件发生时(VARIABLES_LOADED是游戏内定义的事件)通知你定义的Frame。说到这里又得说说&OnEvent&这个标签了,在其中有一个默认的变量event,它的值就是当前游戏里产生的事件的名称(就好比上面的VARIABLES_LOADED)。
(译注: 真的是要了解编程的了哦。 这里处理事件就类似Win32处理事件的代码模式,可以用if(event=事件名称){操作代码}else if(event=事件名称2){操作代码}&..或者 switch case的方式来完成。)
现在,暴雪提供了存储变量的方法,你可以用RegisterForSave(&variable_name&)的方法来定义一个变量在游戏过程中。
在我们的例子中,当VARIABLES_LOADED发生后,将调用hello_world_initialize()函数来处理。对啦,这个hello_world_initialize()函数还没定义呢,下面就介绍如何定义函数。
(3)补完 (译注:写代码的部分,会写脚本的人一定看得懂,不会写的需要学习:&)
好了,现在是真正要写代码的时候了。创建1个叫作hello_world.lua的文件。内容如下:
function&hello_world_initialize()& &&--&add&our&very&first&chat&command!& &&SlashCmdList[&HELLOW&]&=&hello_world_& &&SLASH_HELLOW1&=&&/hellow&;& &&SLASH_HELLOW2&=&&/hw&;& &end &function&hello_world_command(msg)& & & --&this&function&handles&our&chat&command& &message(msg);& &end&&
这里我不想对语法做出解释,如果不懂请看LUA的文档,那里会详细地介绍。参见:www.lua.org/manual/5.0/
注意这里系统的I/O 库文件,操作系统的库文件没有包含在魔兽世界UI的PATH路径之中。至于暴雪定义的函数(内置的)和事件,你可以在Cosmos网站上找到,参阅:www.cosmosui.org/texts/BlizzardCommands.xml
回到代码,在我们的函数中,我们定义了1个聊天用的命令。似乎我们的代码看起来挺怪的,是的,我们是直接修改了SlashCmdList这个表,其作用是当我们输入宏&/hellow 消息& 或者&/hw 消息&是会调用hello_world_command()函数,(至于游戏内部如何这种关系做映射不在本文讨论范围内)然后玩家看到打出&消息&的聊天信息的窗口(译注:事实上是msg()函数创建的窗口)。可以看到&消息&作为参数传递给了hello_world_command()函数。
以上所有做的就是一个简单的插件,它加入了两条命令(宏)。如果你想测试它,进入游戏,输入/console reloadui(重新加载UI),在登入游戏后的聊天框中输入&/hellow Why hello there!&,你会看到游戏中弹出一个消息框,消息是&Why hello there!&。
这就是我们基本的例子,以后我可能抽空给出一些其它的例子。
如果你已经完成了以上这个例子,我真是要为你鼓掌了呀!(那花了你不少时间来阅读吧。)
如果你感兴趣的话,以下还有不少资料:LUA (www.lua.org/manual/5.0/),暴雪定义的函数(www.cosmosui.org/texts/BlizzardCommands.xml)。另外,试着看看Interface/FrameXML/BasicControls.xml文件,里面有不少操控语句;还有Font.xml文件,你可以定义自己的字体,颜色等。
小结:LUA学习笔记:魔兽世界自定义界面插件的内容介绍完了,希望通过本文的学习能对你有所帮助!【编辑推荐】【责任编辑: TEL:(010)】
关于&&&&&&的更多文章
据媒体报道,微软公司昨天宣布,公司将采用新的企业Logo.这是微
既然强大的Android Studio来了,有什么理由不去用呢?
北京时间日,苹果在加利福尼亚召开新品发
免费下载+应用内购买(In-App Purchase)已成为移动应用
现在天气渐凉,秋意越来越浓厚了,上周,公司全体组织
Java学习笔记在JavaWorld技术论坛(.tw/)和作者的网站(http://caterpillar.onlyfun.net/Gossip/)提
Windows Phone专家
Android开发专家
51CTO旗下网站

参考资料

 

随机推荐