WOW UI定制入门(1)zT

      {书:物以类聚} 2005-8-4 13:35
Chapter One

玩了WOW有一段时间了,除了游戏本身所提供的基本功能之外,其它WOW的功能我都尽量的尝试.在这里我提供一下我个人的心得.

相信很多的玩家都知道,WOW有所谓的合法外挂(COSMOS),但是WOW又非常的严格的抓所谓的非法外挂,那么合法的外挂与非法的外挂差别在哪?

其实所谓的合法外挂,只是在于一些有心的玩家利用了WOW所提供的功能,以及指令,另外在WOW的游戏核心上,另外写了一些辅助性质的SCRIPT来帮助游戏接口的简易操作.至于非法外挂,就是利用任合游戏本身所没提供的功能来增加自身的利益(包括了所谓第三者程序third party program).

既然WOW本身有提供这样的功能,身为玩家的我们为什么不尽量的利用这些好处呢?有鉴于台湾玩家在获得这些信息上的困难(因为有关于这方面的讨论,大部分都是英文),我在这里提出讨论,或许能带给台湾的玩家另外一种的游戏体验.

暴风雪在WOW的官方网站上有很明确的提到,UI的修改是玩家对于游戏整体体验中的一部分.但是什么是UI?UI修改又是什么?

UI是USER INTERFACE(使用者接口),在WOW中,所有的UI都是模块化的,每一个按钮,每一个窗口都是属于某一个模块的定义.玩家在玩游戏的时候,并不是直接的对于游戏核心下达游戏指令,而是先在UI上面的动作,然后在藉由UI的模块上下达游戏核心指令.例如我们按下游戏中攻击的按钮,WOW会先检查这个按钮的定义是什么,然后才执行这个定义下的指令.

那么修改UI的好处又是什么呢?这样说好了.WOW本身所提供的UI,其背后的定义都是最基本的,最简化的.比如说快捷键按钮的设计,以及每个指令动作.在按钮以及窗口的设计上,使以简单容易上手为主要目的.但是对于进阶玩家而言,又会觉得WOW所提供的快捷键按钮不够用,所以自己在UI上面加以修改,这样就不但可以自行决定快捷键按钮的数目,也可以把这些按钮摆在自己最喜欢的地方.

另外关于指令动作上(键盘与老鼠在UI上面的指令),WOW基本的UI设定都是一个指令一个动作.我们按一个按钮,WOW做一个动作.但是我们可以自行设定UI,达到玩家的下达一个指令,WOW同时做很多动作.

比如说,WOW给玩家在攻击上的选择是,按TAB会帮玩家找出画面上距离最近的敌人(原始设定是20码的距离范围内),然后玩家必须按攻击的按钮或是T,在这样的情况下才会攻击.玩家下达了两个指令,做了两个动作.但是在UI的修改上,我们不但可以修改画面上距离最近的敌人的距离范围(适合远距离攻击的玩家),我们还可以设定按下TAB按键,不但会自动定位距离最近的敌人,还会自动开始攻击.

在这个讨论串当中,我主要是针对指令UI上的设定提出讨论,因为关于画面上的设定已经有很多现成的选择(COSMOS).因此我将针对CLASS上面辅助型的UI设定.在藉由讨论上,让台湾的玩家们也有机会自行设计出最方便,最有效率的攻击,法术施展,以及宠物控制.

当然我绝对欢迎玩家针对任何的UI设定提出讨论,但是我不见得有能力回答.毕竟我个人比较不喜欢去研究画面的排列,所以这方面花的功夫也比较少.



Chapter Two

上一篇文章介绍了UI修改的最基本观念,在这篇文章中我将提供UI修改上的最基本的动作,工具以及数据来源.


在我们要对UI做任何的修改或是制作模块之前,我们必须先了结WOW的UI基本结构.在WOW的数据夹里面,我们可以找的一个DATA的子目录.在这个子目录里面,包括了所有WOW会?#092;用到的档案,包括了模块,图形,字型等等.这些都压缩在所谓的MPQ档案里面.拿我个人的档案来做例子,我的MPQ檔在C:Program FilesWorld of WarcraftData下面.而所有UI可以?#092;用到的档案都压缩在interface.mpq档里.

要检查MPQ档案里面有些什么,我个人建议WinMPQ这个程序.为了避免大家担心我放病毒,在这里我建议大家自行上GOOGLE查哪里可以下载WinMPQ.

因为游戏的UI的基本设定都在interface.mpq,所以我不建议大家直接对于interface.mpq里面的档案直接修改.大家可以把所需要的档案解压出来.只要做完修改后不存回interface.mpq里面,在这样的情况下,都不会影响到基本设定.

那么大家会问修改完之后的档案该存在哪呢?首先到WOW的目录里面,然后开一个先的子目录叫做interface.以我个人的例子是C:Program FilesWorld of Warcraftinterface.然后大家可以把修改好或是制作好的档案存在这个数据夹下面.当WOW加载游戏数据的时候,WOW会自动到这个数据夹里面检查哪些模块蛟撦d入.

虽然UI修改可以?#092;用到WOW现有的档案,但是为了方便教学,我在这里提出的例子将不会用到WOW现有的档案.事实上,除了要做游戏画面上的设定,大部分的情况下,我们不见得要用到WOW现有的UI档案,只要我们制作模块用的都是WOW所提供的核心指令就可以了.

在制作模块之前,我先介绍一下每一个模块所需要的最基本的档案.每个模块都需要一个介绍档,toc檔.定义档,xml,以及核心檔,lua檔.这三种档案都可以用笔记本或是任何的文书处理程序来做修改.

为了方便介绍,我举出一个简单的例子来解释这三个档案.现在让我们设计个 Hi 模块.这个模块当你执行的时候,他会在你的游戏画面上出现一个 Hi 的信息.

因为我们这个模块叫做Hi,所以我们需要三个档案

hi.toc
hi.xml
hi.lua
(模块的名称最好与档案的名称相对应)

现在让我介绍一下hi.toc的格式:

## Interface: 4150
## Title: Hi
## Notes: just want to say hi
## OptionalDeps:
## Dependencies:
hi.xml

在## Interface:后面的数字代表了目前WOW的版本.制作模块的作者有义务维持模块支持最新版的WOW,所以每当WOW做出更新的时候,模块的制作人得检查模块是否还能工作,当确定还能工作的时候,就可以更新射个数字.更新这个数字有两个意义:第一,WOW会检查每个模块的这个数字,如果与WOW版本相辅合,那么就会加载,不然就会档掉.第二,玩家可以确定这个模块的版本是可以使用的版本.

我在这里不建议除了模块的制作人修改这个数字.因为有时候模块的设计可能很复杂,在不是制作人的情况下,很可能不知道到底没有更新的模块是否还跟最新版的WOW兼容.如果玩家自行更改这个数字让它跟WOW的版本数字一样的话,WOW就会自动加载这个模块.如果模块不兼容的情况下,很可能会造成游戏上的困扰.

写到这里,玩家可能会问要去哪里找WOW最新的版本数字.当执行WOW游戏的时候,在登入的画面上的最左下方,可以找到这个信息.以目前我写这个教学的时间而言,WOW最新版所提供的信息是Version 1.2.1 (4150).大家要用的是4150这个数字,而不是1.2.1这个数字.

在## Title:后面,模块制作人打的字符就是这个模块的名称.

在## Notes:后面,模块制作人打的字符就是这个模块的简介

## OptionalDeps:后面, 模块制作人标示出这个模块是否有其它的额外的模块可以支持这个模块.当这个地方有标示其它的模块的时候,并不代表玩家们也必须要有这个额外模块,只是有了这个额外的模块,可以让这个么模块的功能更加完整.

## Dependencies:后面, 模块制作人得标示出这个模块必须要使用的的档案(包括了必须使用到其它模块的档案,请注意,上面选择性模块的档案并不需要在这里标示).

因为这个教学模块并不需要用到其它的模块,所以只需要标示出模块定义文件 hi.xml.

hi.xml的介绍:

基本上XML可以当做网页设计档案(HTML)来看,可是严格的来说,XML是拿来作为定义上或是数据传输上所使用的.如果玩家对于XML的语法以及如何?#092;用有兴趣,可以到http://www.w3.org/XML/查询更详细的数据

现在我只介绍XML在WOW模块设计上该如何?#092;用.


CODE

<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/">
<script file="hi.lua"/>

<Frame name="hi_core">
<scripts>
<OnLoad>
this:RegisterEvent("VARIABLES_LOADED");
</OnLoad>
<OnEvent>
if (event == "VARIABLES_LOADED") then
hi_initialize();
end
</OnEvent>
</Scripts>
</Frame>
</Ui>




大家可以忽略前面几行<Ui xmlns ......... />.基本上每一个WOW模块XML文件都必须要有这几行.

重要的是 <script file="hi.lua"/> 在这里大家得定义出模块的核心档案是什么.以我们目前的例子,核心档案是hi.lua.

在 <Frame name="hi_core"> 这里定义出模块在游戏画面中要使用的的子画面的名称.这个名称必须是独一无二的,避免与其它的模块画面冲突到.

在上面的例子中我们可以看到<OnLoad>和<OnEvent>的标示,基本上<OnLoad>的意思是当WOW在加载游戏接口的时候,因该要做出什么动作.以我们的例子,我们要在WOW游戏里注册一个变量叫做"VARIABLES_LOADED".
<OnEvent>的意思是,如果发生了什么事件,那么该做出什么动作来反应.以我们的例子,如果注册"VARIABLES_LOADED"成功的话,我们就执行hi_initialize(). 当然,如果没有注册成功,也就不会有事件发生,这代表了我们的模块没有加载到游戏里面,所以我们也就没有后续动作.

hi.lua的介绍:
lua 是一个script语言.WOW所有的UI模块都是建立在这个语言之上.对于lua想要更深入的了解,请到官方网站:http://www.lua.org/manual/5.0/ 在这里可以查到所有关于lua的语法以及使用方式.
标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commenttime}{commentauthor}

{CommentUrl}
{commentcontent}