作 者 简 介 James Whitehead II是许多流行的魔兽世界插件的作者,他的作品有PerfectRaid、Clique、LightHeaded、TomTom以及里给出的许多其他小插件。从魔兽世界Beta版问世起,他就开始开发插件,并且一直活跃在魔兽世界UI论坛和Lua社区中。当他正在用自己的众多账号中的一个玩魔兽世界的时候,您可能会在游戏服务器的Stormrage(US)区中遇到他,或者在Ravencrest(EU)区中看到他正在兴奋地练级。 Jim毕业于雪城大学(Syracuse University),他在那里获得了计算机专业的学士和硕士学位。现在,他正在英国牛津大学攻读博士学位,同时他也是该校计算实验室(Computing Laboratory)的助教。在空闲时间里,他喜欢代表伍斯特学院(Worcester College)参加划船比赛,或者与朋友们一起野外探险。 Bryan McLemore从2005年初就成为魔兽世界UI社区的一名成员。在开发了KC_AutoRepair插件后,他成为Ace Project和的创始人之一,以Kaelten的ID与Brent Miller(魔兽世界UI社区的注册账号)共同工作。在加入Brent的官方部门后,Bryan开始将越来越多的时间花在WowAce上,而不是开发自己的插件上;然而,他仍然坚持继续开发OneBag和KC_Items插件。闲暇时,他一般在美国服务器上的Whisperwind区中玩魔兽世界。 另外,在他的其他空闲时间里,他还负责开发Ace3,并且专注于开发自己的插件,同时维护几个相关的网站。Bryan最近与妻子和女儿搬到加利福尼亚州,开始从事Web开发和系统管理的工作。他们现在居住在旧金山市。 Matthew Orlando是诸多魔兽世界插件的作者,这些插件包括BuyEmAll,CogsBar和MacroTalk。他具有13年的编程经历,并从2006年初开始活跃于插件社区中。除了精通Lua语言和魔兽世界API外,他还维护着“Cogwheel’s Complete Macro Guide”,这是一个关于魔兽世界宏指南的重要论坛。 Matthew目前与妻子Juliella居住在加利福尼亚州的塞巴斯玻(Sebastopol)市。他在Kistler Vineyards公司从事客户数据服务、数据库编程和网站开发等方面的工作。 前 言 魔兽世界游戏(WoW)自2004年11月23日发售以来,已迅速地成为有史以来最流行的视频游戏之一。目前它900多万的用户,它已经家喻户晓了。魔兽世界是一个引人入胜的环境,您不需要多少时间上手便可以定制角色、探索新的世界,以及与朋友组团合作。一些玩家晚上花费4~6小时在公会进行组队,试图打败最后、最强大的怪物。另一些玩家则喜欢PVP战斗,将时间花在竞技场(Arena)或是战场(Battleground)上,试图提高他们的声望。还有一些玩家仅仅是享受通过游戏与团队或是朋友在一起的时间。魔兽世界满足了各种玩家的需求,这很可能是它如此成功的主要原因。 游戏实现各种娱乐风格的一种方式,便是以插件的方式定制用户界面。对于那些具有技术灵感,或是单纯地追求完美的玩家,暴雪公司将其用户界面的定制完全开放,允许这些玩家改变其所有功能。插件可以是简单地改变生命条的颜色、增加一个显示随机表情的新命令,也可以复杂到提供多功能的网络日历,以允许公会组织和协调事件。除此之外,暴雪继而提供了对用户界面社区的推动和支持,这种方式是其他游戏开发人员所从未尝试过的。 用户界面社区在过去的几年中迅速地增长,并且没有停止的迹象。编写本书的目的在于为读者提供所需要的工具来为魔兽世界用户界面进行自定义修改,包括对编程语言、术语以及插件结构的介绍。目前,急需编写的插件成千上万个,本书也为您提供了实现它们的方法。 读者定位 本书可以为以下对象提供帮助:希望学习如何修改已有插件的新手插件用户,希望向作品中添加更多令人兴奋的功能的中级插件作者,以及资深插件开发人员——他们可以将本书作为极其复杂的魔兽世界用户界面系统的参考。本书假定,读者对魔兽世界游戏十分熟悉,并且对编程感兴趣。了解任何一门编程语言的读者将会发现书中的很多概念十分熟悉。 具有极少、甚至没有编程经验的读者应当首先着重于本书的第I部分,该部分讲授了Lua——一门用于编写插件的编程语言。尽管没有任何编程经验的读者会学习到足够的知识来创建和修改插件,但是他们或许仍然希望(或者需要)从其他的资料中得到更加通用的编程课程。 对于具有编程经验的读者,前面的几个章节会非常简单。其中的示例可以使这些读者十分迅速地掌握Lua编程语言的基本语法。若读者已经对高级脚本语言(如Python)非常熟悉,则可以简单地跳过前几章,然后直接进入第Ⅱ部分,即基本的插件编程。这一部分详细介绍了魔兽世界插件系统是如何工作的,并引导读者完成第一个插件的编写。 已经编写过插件的读者或许希望直接跳到本书的第Ⅲ部分。该部分的章节引入了一些特殊概念,并展示了在插件编写工作中使用这些概念的示例。同时,也包括对一些更加复杂的系统(如工具提示、下拉菜单和状态头)进行了详细讨论。 此外,本书的第Ⅳ部分包括了关于魔兽世界API的极为详细的参考,包括事件和工具集。 本书的组织方式 本书分为4部分,其主题的复杂程度逐渐由低到高。 第Ⅰ部分介绍了Lua和XML,使读者快速地上手这两门语言,便于创建插件。 第Ⅱ部分讨论了插件的初步构成,以及事件驱动(event-driven)的魔兽世界插件编程的基本概念。在本部分,读者将创建自己的第一个插件,并熟悉WoW中的常用API。 第Ⅲ部分通过从头到尾实现一些插件,将读者引入更加高级的主题中。 最后,第Ⅳ部分为整个API的完备参考,包括函数、工具集、事件以及安全模板。 网站上的信息 每隔几个月,暴雪会为魔兽世界发布新的补丁,补丁可能会引入新的内容、修正已有错误,甚至会极大地改变游戏机制。结果是,本书所涉及的内容会随着时间而改变。为了处理这个问题,我们已经为本书建立了一个相应的网站:我们不期望对核心概念进行彻底的改动,但任何特定的细节改动都会在网站中列出,包括这些改动是如何影响本书内容的。除了作为一个内容勘误表之外,该网站也包含了本书所有参考内容的在线版本。 进一步的信息 魔兽世界用户界面社区是一个非常令人兴奋的场所,其中包含了许多无限可能的想法,以及这些想法的定制和实现。魔兽世界本身已经是一个很有趣的游戏;使用它作为平台来开发插件,在为用户提供帮助的同时,增强他们的游戏体验,对于作者本身也是一种鼓励。 译 者 序 魔兽世界(WoW)无疑是一款倍受青睐的游戏。它是著名的游戏公司—— 暴雪娱乐(Blizzard Entertainment)公司制作的第一款网络游戏,属于大型多人在线角色扮演游戏。玩家可以在其中扮演自己喜欢的英雄四处冒险,完成挑战性的任务,探索未知领域,加入公会与志同道合的人一起体验游戏的乐趣等。其精美的画面,引人入胜的游戏情节,让无数玩家废寝忘食流连忘返。据最新的统计数据显示,目前魔兽世界在全球累计用户数已经突破了1100万,甚至超过了现在地球上许多小国的全国人口总数。自2005年4月正式公测以来,现在已有500多万注册用户见证了这款史诗般的游戏势不可挡的市场占有力,曾经运营过它4年的九城公司也在商业上取得了很大的成功。 魔兽世界游戏之所以能取得如此巨大的成功,在很大方面上得益于它的开放插件机制。魔兽世界插件是魔兽世界的辅助工具类程序,它允许玩家定制符合自己个人爱好的游戏界面,并允许玩家根据需要改变相应功能。毫无疑问,魔兽世界也为魔兽世界插件创造了巨大的商机。目前流行的魔兽世界插件主要包括3类。第一类是整合插件类,安装之后就可以使用。这些整合插件有一个共同的特征是插件包中的任何一个插件都是无法单独使用的。第二类是单体插件,就是只能实现某一种或几种功能的插件。相对于整合插件,单体插件的功能多样,可以随意选择、随意组合以及调试系统等。第三类是根据原有的单体插件,修改或者整合以后派生的插件,这种插件现在越来越流行。 魔兽世界的游戏客户端包括两个主要部分:游戏世界和用户界面。游戏世界是一个三维世界,它包括很多角色和互动对象。这些元素在脚本语言的接口中是不容易访问并且不能改变。用户界面由游戏客户端的其他元素组成,包括按钮、窗体、地图和选项窗口等。用户可以编写插件来增加或改变已有的元素从而增强功能,或者以一种不同的方式显示信息。魔兽世界编程,即利用Blizzard提供的官方编程接口编写脚本程序,对WoW默认的界面进行自定义修改。 本书由浅入深、全面细致地介绍了如何编写程序实现各种插件。本书不需要任何编程基础,书中大量通俗易懂的示例程序可供读者参考和实践。首先,本书介绍了Lua和XML语言,之后分别讨论了各种插件的构成方式,并通过一些详细的实例揭示了插件的实现方法。此外,本书最后还提供了综合性的API参考文献、API目录、事件和工具集等。本书能够满足不同层次用户的需求,包括各种新手插件用户,中级插件作者以及资深插件开发人员。相信在本书的帮助下,您能够创造出属于自己的、绚丽多彩的、功能丰富的魔兽世界插件! 本书共31章,其中正文中第1章,第6~15章,第17章、第18章、第20~29章由浙江工商大学计算机与信息工程学院杨柏林副教授译(共计23章);第2~5章、第16章、第19章、第30章、第31章由郑州大学软件技术学院张卫星老师译(共计8章);北京航空航天大学虚拟现实与技术国家重点实验室的王聪同学完成附录等部分的翻译工作。最后,译者要感谢郑州大学信息工程学院的吴云鹏等同学,他们也为本书的翻译做了很多工作。敬请广大读者提供反馈意见,读者可以将意见发送到wkservice@vip.163.com,我们会仔细查阅读者发来的每一封邮件,以求进一步提高今后译著的质量。 杨柏林 2010年3月26日