魔兽世界用户界面自定义指南
2006-12-09 08:45:44.0
《魔兽世界》的用户界面是使用XML文件定义界面的外表和布局的,而Lua文件则包含了脚本功能。这篇文档简短地介绍了如何修改这些文件来自定义你的界面。自定义界面需要一定的相应技术知识支持,所以请在你熟练掌握XML和Lua后再尝试修改用户界面。
 

现在我们并不提供对《魔兽世界》用户界面修改的官方支持。如果你准备对用户界面进行修改的话,希望你勤做备份。:)
 

要修改你的用户界面,请在魔兽世界文件夹中创建一个名字为“Interface”的目录,然后将所有的的界面数据和图案文件拷贝到这个文件夹中。这个文件夹中将包含所有你所安装的用户界面。如果你想删除自定义界面的话,你只需要删除Interface目录就可以了。但是绝对不要删除Data目录下的Interface目录,只要删除魔兽世界安装文件夹根目录下的Interface文件夹,这个文件夹应该是在你第一次创建自定义界面的时候就出现的。
 

如果你在使用自定义用户界面的时候碰到错误,那在你报告错误之前请将你的自定义用户界面的文件夹删除然后再试一下。之所以要求这么做是为了确定这个错误在没有修改的游戏中是否依然存在。如果是的话,那你就需要向我们报告这个情况了。
 

如果你在使用自定义用户界面时出现了错误,请先删除游戏根目录下的Interface目录再报告问题。这是因为如果在删除Interface目录之后就不再出现问题,那么你的游戏版本本身是没有错误的。如果此时错误仍然出现,那么你可以向我们报告。
 

XML 布局
 

关于游戏用户界面布局的文件可以在InterfaceFrameXML文件夹中找到。

“FrameXML.toc”是个列表,其列出了所有当你进入游戏的时候所需要载入的XML文件。所列的文件是按照顺序载入的。所有在载入中出现的错误都将被记录在根目录下的“FrameXML.log”中。
 

每个XML文件基本上都描述了屏幕上的一个UI元素。如果你想了解其语法的话,你可以看一下原有的文件。XML文件严格按照XML1.0编制。如果你能找到一个XML语法的检查器,你可以查看在UI.xsd文件,并从其中找到所有魔兽世界用户界面所使用到的XML语法。
 

Lua 脚本
 

所有的界面功能实现都是通过Lua脚本来完成的。

Lua 5.0在线手册可以通过以下网址查看:
 

如果你想要了解Lua是如何编辑脚本来定义界面的话,最好的方法就是查看那些XML文件中的脚本,那些脚本前都会标注<script>的标签,另外就是查看Lua的文件。Lua文件中的功能一般都是被相应的XML文件所使用的。
 

开始学习
 

最适合开始学习自定义界面所进行研究的文件 是“BasicControls.xml”。
 

在这个文件的顶部都包含了一个“_ERRORMESSAGE()”功能, 当你在使用自定义脚本发生错误的时候,会弹出一个错误信息窗口。另外还内置了一个“message()”功能,当自定义界面功能发生冲突的时候也会有相应的信息窗口跳出。
 

另外在这些文件中,一些材质细节也是由XML定义的。它们有“虚拟的”属性,这意味着它们实际上并没有被创造出来,而只是进行了定义而留在以后进行属性遗传。在一个框架或者窗口小部件,也就是“DialogBoxFrame”被定义之后,这个框架也是虚拟的。其包含了一个指针来定义其和父类,也就是一个背景和子类按键按下去之后隐藏对话框之间的关系。
 

每个框架都包含了许多的层,每个层都包含了一些材质和字体串。每个材质和字体串必须有相应的指针并且恰当设置大小来使其可见。指针补偿和尺寸大小限制在1024x768像素大小。
 

在文件的最底部我们将会定义一个实际的框架,叫做“ScriptErrors”。这个框架是用于继承我们之前定义的对话框,并显示文件顶部的信息。
 

它是怎么工作的?
 

当框架、材质或字符串在XML中定义之后,它的初始属性被定义并且被作为一个适当的类型物体加入到Lua的名称空格之中。每个种类的物体都有其成员功能来修改其物体属性。这就是我们如何能够从脚本中显示错误对话框的方式。
 

每个框架都有一系列的脚本处理器,这些处理器会在特定状况下启动。比如说,UIParent就有OnLoad状态,这个状态会在边框加载的时候启动;OnEvent,这个我们稍候再谈;OnUpdate,这个当每次游戏升级的时候会启动;OnShow,每次当边框显示的时候就会启动。
 

OnEvent处理器很特殊。这个处理器让游戏和界面可以沟通。魔兽世界游戏本身和界面的关系并不密切。每当有动作发生的时候,这个动作会相应的激活而不是直接指向界面。每个动作的框架注册器的对应关系,以及动作的发生时间,OnEvendt处理器都会将其反映给该框架。
 

如果界面不能把动作返回给游戏的话,那自定义界面能够对动作有相应的反应也没有用了。这个游戏提供了很多功能来改变其中的信息和游戏数据。在提供的Lua文件中附带了如何修改这些功能的例子。
 

插件
 

最新版本的魔兽世界增加了一个add-on的功能,利用这个功能你可以增加用户界面而不需要修改已经存在的界面文件。
 

这个功能特色一个不错的介绍:
 

使用技巧
 

魔兽世界支持动态重新载入用户界面。任何时候你都可以修改XML和Lua文件然后输入"/script ReloadUI()"(没有引号),然后按回车来重新载入。如果在载入过程中遇到语法错误的话,你可以编辑,修改并重新载入。
 

如果你不确定脚本中描述的是什么,使用“message()”共能来打印出信息然后从中了解。一旦对话框出现,你的脚本会一直让其显示,除非你点击按钮关闭这个对话框,否则“message()”命令不会显示任何东西。
 

你可以随意进行修改。如果你不小心改错了什么东西,你可以轻松地重新开始。如果你有什么问题,你可以查看一下我们的界面自定义论坛 http://www.worldofwarcraft.com,你可以从中看看你的问题是否已经有别人遇到过,或者你也可以在其中提出你的问题。
 

总结
 

通过修改界面文件,你可以感受到乐趣,虽然这种行为并没有任何的技术支持。我们所希望的是,魔兽世界在用户界面方面可以为大家提供一个健全的并且灵活的系统。
 

文章评论
[以下网友留言只代表其个人观点,不代表中华网的观点或立场]
2008-01-11 18:16:42.0
好难啊。
发表评论
昵 称:
主 页:
内 容:
表 情: