魔兽世界插件编程解析(二)

除了官方支持的元数据之外,在自定义插件的.toc文件中还可能包含许多其他的标记。TOC文件可以列出每个Lua文件(包括子目录中的文件)。这些文件都按照TOC文件中列出的次序,由游戏客户端进行加载、解析和执行。也就是说你可以在文件层面上定义局部变量,这些变量对于其他文件是不可用的。
1.Lua脚本文件和XML文件
Lua文件即可以用于定义插件的行为,又可以用来动态的创建窗口。.toc文件可以从插件中下载任何.XML文件。这些文件中的标记被解析和加载时,系统会用UI.xsd模式进行验证。也就是说XML文件中可以使用<Script file=“SomeFile.lua”/>标签来加载Lua文件,这也是用户界面默认要做的事情。而且每个XML文件都应该从XML文件加载的根目录的<UI>元素声明开始:

<Ui  xmlns=“http://www.blizzard.com/wow/ui”
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation="http://www.blizzard.com/wow/ui
..\FrameXML\UI.xsd”>
</Ui>

当加载这些文件时,在你的魔兽世界中安装的Logs\FrameXML.log文件中会显示出现的错误。一旦你的插件运行不正常,就应该检查一下这个文件,看看在验证文档时是否有错误记录。

2.媒体文件
在游戏客户端插件也可以包含自定义的图形,声音和字体等,从而为你提供各种不同的视听风格。这些文件包含在插件自己的目录里,并通过魔兽世界的目录来全路径标明地址。
(1)音乐。
如果有一个名为mysound.mp3的音频文件,你想在MySound插件中包含它,则你需要把它放在如下的目录中:

Interface\Addons\MySound\mysound.mp3

在游戏中运行下边的命令,这个音频文件就会播放,由于在Lua中会把反斜杠字符作为转义字符,因此要转义反斜杠字符:

/run PlaySoundFile(“Interface\\Addons\\MySound\\mysound.mp3”)

(2)图形。
加载窗口纹理时,魔兽世界支持两种不同的图形格式。要加载的文件必须是这两种文件的一种,并且满足以下基本要求:
(1)文件的高度和宽度要大于或等于2像素,同时小于512像素。
(2)文件的高度和宽度要是2的整数次幂,但并不要求相同。
另外,文件还要包含一个alpha频道,它对你所使用的图像编辑软件很重要。接下来介绍两种主要的图形格式。

BLP格式
当你使用User Interface Customization Tool提取Blizzard Interface Art后,你会发现所有的文件都拥有一个.blp扩展名。这种图形格式是Blizzard创造的,并应用于魔兽争霸III和魔兽世界中。
TGA格式
这是一种比较简单的图像格式,它可以用来存储带有透明度信息的彩色图像。TGA不能使用无损压缩,也就是说这种图像在作为保存图像时,不能和JPG文件一样不收损。
3.实现本地化插件。
(1)为每个地方语言添加一个文件。
为你翻译的地方语言添加一个新的本地化文件。若没有什么翻译,就在你开发的插件中为“基本”地方语言创建一个简单的文件。例如在我的插件中,就是在我的目录结构中添加一个Localization.enUS.lua文件,并把这个文件添加到.toc文件的顶部,保证第一时间加载这个文件。
(2)创建一个包含基本串的全局表。
假设插件名字为MyAddon,就可以在Localization.enUS.lua文件中创建一个名字为MyAddonLocalization的全局表。可以通过使用完整字符串或使用标记的方式向这个文件中添加基础翻译。
下面就是一个使用完整字符串翻译的表定义集。既用完整字符串作为键又将它作为值。

MyAddonLocalization = { }
MyAddonLocalization[“Frames have been locked ”]=“Frames have been locked”
MyAddonLocalization [“Frames have been unlocked”] =“Frames have been unlocked”

它可以用于较短的字符串,但用于较长大字符串键就会变得非常冗余。
我们可以使用一个较短的字符串或标记来代替完整字符串作为表的键。本地化文件如下:

MyAddonLocalization = {}
MyAddonLocalization[“FRAMES_LOCKED”]=“Frames have been locked”
MyAddonLocalization [“FRAMES_UNLOCKED”] =“Frames have been unlocked”

4.创建插件框架
你的插件必须位于Interface\Addons目录中,它位于魔兽世界基础安装路径的一个子目录中。可以通过创建一个名为WowXMLExample的目录将你的插件命名为WowXMLExample这个目录的相对路径应当为:
World of Warcraft\Interface\AddOns\WowXMLExample
接下来创建一个.toc文件,若没有一个TOC文件,插件将不起作用,因此先使用下面的代码创建一个TOC文件:

 ##Interface: 
 ##Title:WowXMLExample
 ##Description:Example   addon for World of Warcraft Programming

 WowXMLExample.xml

这个小文件声明了Interface编号,以及一个用于插件的标题和描述。其加载的唯一文件是 WowXMLExample.xml,接下来你将创建这个文件。

<Ui  xmlns=“http://www.blizzard.com/wow/ui”
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation="http://www.blizzard.com/wow/ui
..\FrameXML\UI.xsd”>
</Ui>

文件需要这个基本的声明来验证正确无误。使用这段代码在插件的目录中创建 WowXMLExample.xml文件。

5.使用外部库

在尝试学习某个库的辅助函数前,应该先学习如何使用魔兽世界API以及XML定义来写一些基本的插件。

未完待续(_)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容

  • 魔兽世界中的插件是文本和多媒体文件的集合。这些文件与元数据一起进行封装并在客户端加载。实际上我们使用的插件还添加了...
    编程爱好者阅读 5,722评论 0 2
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,544评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,087评论 18 139
  • 首先是例行的课程介绍包括主题,时间安排,主讲人的自我介绍等等。这些内容比上一次要好一些。还有能再改进的地方,不是一...
    凯里木阅读 140评论 3 1
  • 去年的有一段时间疯一般喜欢看那本《我的朋友陈白露小姐》,为此还多买了一本想强行灌输给朋友,后来因为忘记此事也就...
    桃九阅读 589评论 0 1