第一章 入门(魔兽世界Lua插件开发指南)

[复制链接]

该用户从未签到

2380

主题

2433

帖子

9139

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9139
QQ
跳转到指定楼层
楼主
发表于 2023-12-21 19:45:26 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

想要查看内容赶紧注册登陆吧!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
该教材的出版时间是2009年,由于游戏与代码的迭代特性,本书的内容已经与现在你实际接触到的游戏与代码内容有所差异,有些内容可能已经过时,甚至是被淘汰“过期的”,请大家自己斟酌参考。若出现由于原文与本帖翻译有所不同而导致的错误或损失,概不负责。

共14个章节和2个附录。这是我翻译的第二个章节,其余章节的翻译内容我会在以后陆续发帖分享。也希望阅读的人不要吝啬你们的点赞,只要点一下便能给予我莫大的支持和鼓励。

  本章是关于一些魔兽插件开发的前期准备工作,如一些你可能用得到的工具、网站和素材。但大多数可能已经不是那么好用了,但好在这章里面没有什么太重要的内容,大家稍微浏览一下即可。这章篇幅较短,我就简单翻译一下,给之后的翻译合集开个头。
  我已经出了到目前为止所翻译的几个章节的合集,有兴趣的可以自行浏览
  最后,如果有人在阅读过程中,如果发现哪里翻译错误,或错别字需要更正,请发评论或发私信告知,谢谢大家。
  接下来让我们正式开始这次的阅读吧。

第一章 入门
    什么是Lua?
    什么是插件?
    有用的程序、工具和网站
        网站
            · WoWWiki
            · WoW[“Compares”]
            · WowAce / Curse
            · UI & Macros Forum
            · DeadlyBossMods.com
            · Lua.org / Lua-users.org
        游戏内置工具
            · DevTools
            · Swatter
            · WoWLua
            · TinyPad
        程序
            · Interface AddOn kit
            · MPQ Editor
        集成开发工具
            · LuaEdit
            · WoW UI Designer
            · AddOn Studio
            · SciTE
在我们进入第二章的Lua语言之前,本章将讨论有关Lua语言和《魔兽世界》插件的一些非常基本的知识。你还将看到一些我们将在整本数中使用的有用工具。

什 么 是 Lua ?
(What Is Lua?)


Lua是一种编程语言,由巴西里约热内卢天主教大学的Roberto Ierusalimschy、Luiz Henrique de Figueiredo和Waldemar Celes于1993年开发。Lua在葡萄牙语中是月亮的意思,正确的发音是“LOO-ah”。Lua在MIT许可协议下适用,这是一个不太受限制的许可协议,只要你保留版权声明和许可证,就基本可以将Lua语言用于任何用途。
  Lua的优点是其可扩展性、简单、效率和可移植性。很容易编写和添加功能模块,也很容易将Lua作为脚本语言嵌入到另一个程序(如游戏)中。脚本语言是在另一个大型应用的特定部分中使用的编程语言。因此,《魔兽世界》(用C++编写)使用Lua作为其用户界面(UI)。实际上由很多游戏使用Lua来编写用户界面脚本或配置文件(例如战锤Online和孤岛惊魂)。但是也可以用Lua编写整个程序,因为有一些扩展允许你使用库或框架,如wxWidgets(wxLua)、.net框架(LuaInterface)或来自Lua的例如OGRE(Lugre)一样的3D引擎。这些扩展也称为绑定(bindings),因为它们将Lua绑定到功能更强大、更复杂的框架或库。
  Lua简单易学,语法简单明了。任何人可以在不了解语言的情况下阅读和理解小型Lua脚本。因此,可以使用Lua作为配置文件的语言,不掌握编程的人可以编辑这些配置文件。Lua是一种动态类型的语言,这基本上意味着你在编程时会有很大的自由和灵活性。你将在第二章中了解更多关于这个特性的信息。尽管Lua很简单,但它是一种非常强大的多范式编程语言(multiparadigm programming language)。它提供了指令式的、函数式和面向对象的范例来编写脚本。我将在接下来的章节中展示这些范例对你的意义。你也不需要关心内存管理——Lua提供了一个非常好的增量垃圾收集器(incremental garbage collector)。垃圾收集器是一个程序,它与你的脚本交错运行,并释放你的程序以前使用过的任何未使用内存。增量意味着它一直在小步运行。
  尽管Lua是一种功能齐全、功能强大的多范式语言,但它仍然非常快。自Lua 5.1使用虚拟机(一种接受Lua代码并执行它的程序)以来,它成为了此类脚本语言中速度最快的程序之一。还有一个更快的x86体系结构的即时编译器(just-in-time compiler,一个动态地将Lua转换为计算机本机代码的程序)。
  Lua可以使用数千行代码快速编译和执行长脚本,并轻松处理大量数据。可以编写Lua脚本来创建其他包含数十万项(entry)的大型表的Lua脚本,从而在脚本中创建持久数据。Lua编辑器可以根据需要快速加载和编译这些数据文件。
  如果你认为需要安装几兆的软件才能让Lua在你的计算机上运行,请再考虑一下。Lua虚拟机只有160KB,编译器只增加了200KB。(这些文件的大小仅对于Windows x86上的Lua 5.1.4)
  Lua是普通的ANSI C编写的,所以它的可移植性很好。它几乎可以在你听说过的所有机器及其和操作系统上运行,有些你可能都没听说过,例如:Lua已经在LEGO MINDSTORMS NXT平台上成功编译。
  一般来说,获取关于Lua的更多信息的一个好地方是它的官网,http://www.lua.org/
什 么 是 插 件 ?
(What Are WoW Addons?)

可以使用Lua和XML修改《魔兽世界》的用户界面。XML是一种功能强大的数据描述语言,但是在第五章之前你不需要担心它。它可以用高度定制的方式去替换整个默认UI,这就被称为插件。Lua被当作脚本语言,而XML当作创建图形用户界面元素(user interface elements)的简单方法。
  《魔兽世界》的发行商,暴雪娱乐提供了一个非常强大的用户界面API(应用程序编程接口,一组可以用来交流的脚本语言函数——在这里是Lua),允许玩家编写游戏的大部分脚本。插件几乎能做任何事情,从单位框体替换和聊天工具上的动作栏(action bars over chat utilities),到例如Bejeweled一样的内置小游戏。
  玩家们很快就开发出了暴雪认为过于强大的插件,因为它们太接近机器人了。像Decursive这样的插件可以扫描整个团队的debuff,并通过一键驱散它们。另一个插件让用户只需要一个键就可以选择最优的目标和治疗法术去治疗。使用这些插件的治疗者可以在战斗中反复地按同一个键来达成完美的发挥。另一个插件甚至允许你走在某些预定义的路径上,比如熔火之心中的跑尸。
  因此,2.0补丁将某些操作限制为“安全代码(secure code)”,即来自默认UI的代码。被限制的动作是选取目标(targeting)、施法和移动相关的功能。然而,许多功能仍然可以在特定情况下可以使用,例如仍然可以创建一个副本框体插件。但是现在已经不可能再创建刚才提到的那些战斗中自动执行战斗相关任务的插件了。
  默认的UI提供了普通用户玩游戏时所需的所有功能,但是插件可以提供高级功能或不同的主题。图1-1显示了游戏提供的默认UI。


     图1-1,默认UI
一个经过大量修改的、替换了几乎所有内容的用户界面,可能与图1-2所示的UI类似。

     图1-2,高度修改的UI

图1-2中的用户界面几乎替换了所有内容。它看起来像是一个完全不同的游戏UI,甚至替代了游戏使用的默认字体。你还可以看到被替换的小地图、动作栏和鼠标提示(tool tips)。
每个人都可以访问网站,下载并安装一个插件,不过在1150万魔兽玩家中,只有少数人能够创建插件。读完这本书,你将称为这少数人中的一员。你可能已经迫不及待地想开始了,所以让我们看看书中会用到的一些有用的工具。
有 用 的 程 序、工 具 和 网 站
(Useful Programs, Tools, and Web Sites)

暴雪几乎没有提供任何与API接口相关的文档,但是你可以阅读默认UI的源代码来了解所有提供的功能是如何工作的。有一些网站可以通过提供暴雪的API接口代码和文档来帮助你。还有一些游戏内的工具可以帮助你调试或编写代码。
  因此,本节将介绍一些网站和程序,我们将在本书中使用。

网站 (Web Sites)
  这些网站包含很多有价值的信息。你将经常需要它们,特别是那些含有API功能文档的网站。

WoWWiki
  http://www.wowwiki.com/是一个你会经常使用的网站。它是一个wiki,提供了大量有关接口API的有价值的信息。表1-1显示了这个wiki中最重要的页面,你将经常需要使用这些页面。

表1-1 有用的WoWWiki页面

页面    描述
World_of_Warcraft_API   所有可用API函数的列表
Events_(API)            所有事件列表
Widget_API              使用GUI元素(小部件)的API函数列表

WoW[“Compares”]
  网站http://wowcompares.com/允许你浏览或下载默认用户界面的代码。该网站还对默认UI代码的变更保持跟踪。你可以比较或下载不同版本的《魔兽世界》界面的标准差异(unified diffs,包含两个版本之间所有变化的文件)。

  · WowAce / Curse
  http://www.wowace.com/是Ace项目的网站,现在属于http://www.curse.com/。你可以在那里找到与Ace框架相关的模块和文档。Curse是最大的插件网站,所以把你要写的插件发布在那里是个不错的主意。

  · UI & Macros Forum
  官方UI和宏论坛http://forums.worldofwarcraft.com/board.html?forumId=11114&sid=1是寻找官方声明的好地方。你还可以在那里找到与接口相关补丁的说明。

  · DeadlyBossMods.com
  如果你对这本书和它的示例代码有任何疑问,请在我的论坛http://www.deadlybossmods.com/提出。

  · Lua.org / Lua-users.org
  Lua的官方网站是http://www.lua.org/。你可以下载或浏览Lua源代码,并在那里阅读官方的Lua参考手册。你也可以在那里阅读到本书的第一版。网站http://lua-users.org/是Lua的一个非官方wiki。

○ 游戏内置工具 (In-Game Tools)
  游戏内置工具是魔兽世界的插件,可以在游戏中帮助你调试或编辑你的插件。

  · DevTools
  DevTools是开发人员必须拥有的插件。你可以在WoWInterface.com上获得它:http://www.wowinterface.com/downloads/fileinfo.php?id=3999。它提供了几个斜杠命令,其中一个是:
Code c:
  1. /dump <expression>
复制代码
这将计算表达式并显示其值。它能够在聊天框中显示复杂的数据结构,因此你可以轻松地调试它们。
  这个插件的另一个强大功能是它的事件跟踪框体(见图1-3),可以通过使用/devents来显示。
  插件还有一些更有用的功能,你应该阅读它的自述文件(readme file),它做出了具体解释。


图1-3,DevTools事件跟踪窗口
Swatter
  Swatter提供了一个改进的报错框体,这是必需的,因为在《魔兽世界》中显示Lua错误的默认框体无法使用。与默认错误框体不同,Swatter可以同时处理多个错误消息,并显示堆栈跟踪以供调试。你可以在图1-4中看到一个被Swatter捕获的错误消息。
  这个插件包含在一些插件包中,比如Auctioneer,但是可以在http://zip.morganna.org/libs/!Swatter/上找到一个独立的版本。


图1-4,Swatter显示一条错误消息
WoWLua
  WoWLua是一个具有Lua语法高亮功能的游戏脚本编辑器。你可以使用这个插件编写、保存、加载和执行《魔兽世界》中的Lua脚本。图1-5显示了一个带有简单Lua脚本的编辑器。
  下载地址: http://www.wowinterface.com/downloads/info7366-WowLua.html


图1-5,带有一个简单脚本的WoWLua
TinyPad
  TinyPad与WoWLua类似。它是一个游戏内的文本编辑器,可以将文本作为脚本执行。与WoWLua不同,它不提供语法高亮显示,但它支持使用项目链接,所以在调试使用或创建物品链接的插件时,它非常有用。
  下载地址:http://www.wowinterface.com/downloads/info4417-TinyPad.html
程序 (Programs)
  有一些独立的程序可以提供有用的信息。

  · Interface AddOn kit
  界面插件kit是一个程序,自动提取默认UI。第三章介绍了如何提取和使用默认UI。
  下载地址:http://us.blizzard.com/support/article.xml?articleId=21466

  · MPQ Editor
  MPQ Editor是一个强大的程序,允许你浏览和修改被《魔兽世界》使用的MPQ存档(MPQ archives)。MPQ文件是暴雪游戏使用的存档格式(archive format),这些存档包含了游戏使用的所有游戏数据文件。在第三章中也介绍了如何使用这个程序。
  下载地址:http://www.zezula.net/en/mpq/dowload.html
集成开发工具 (IDEs)
  使用Lua根本不需要功能齐全的集成开发工具(IDE),因此,一个普通的文本编辑器就足够了。IDE通常结合了文本编辑器、编译器和调试器。在为《魔兽世界》编程时,IDE的问题在于你的调试环境通常就是游戏本身。但是外部程序不能访问游戏,所以你会花很多时间调试游戏中的插件。这并不是说IDE是完全没用的。一个好的IDE可以在编写插件时提供基本的功能,比如语法高亮显示、检查或自动填充。
  我将提供一个SciTE的定制版,我使用它来编写插件。你可以在http://www.apress.com/和我的网站http://www.deadlybossmods.com/上找到这本书的代码下载包。但我也会在这里展示一些其他的IDE。使用哪个IDE或编辑器由你决定。

  · LuaEdit
  LuaEdit是Lua的一个功能完整的IDE,但不为《魔兽世界》提供任何支持。特别是调试器可能非常强大。它允许你查看Lua的内部堆栈和所有本地变量,设置断点,并逐行执行脚本。
  开发独立的Lua脚本时,这个IDE是一个不错的选择。但它对于《魔兽世界》插件的使用是有限的,因为你不能使用IDE提供的大部分调试功能。
  下载地址:http://www.luaedit.org/


图1-6,LuaEdit集成开发工具
WoW UI Designer
  WoW UI Designer是一个非常强大的IDE,可以编辑Lua脚本和XML文件。它甚至有一个《魔兽世界》的GUI设计器(见图1-7)。然而,IDE仍处于beta阶段,尤其Lua编辑部分缺乏一些功能,例如,没有可用API函数的自动填充。
  如果你需要创建一个简单的用户图形界面(如配置菜单),而不需要深入挖掘大型XML文件,那么它的GUI设计器是一个很好的工具。它的XML编辑器也很好,因为它可以检查你的XML是否有效,以及是否会被游戏识别。当我们在第五章讨论框体时,你会学到更多关于XML的知识。
  下载地址:http://www.wowinterface.com/downloads/info4222-WoWUIDesigner.html


图1-7,WoW UI Designer的UI编辑器

AddOn Studio
  AddOn Studio是《魔兽世界》强大的IDE。它属于Microsoft Visual Studio,但它是一个独立的程序,你需要运行的所有东西都包含在56MB的下载文件中。
  这个IDE提供了你在开发插件时可能需要的一切:一个基本的WYSIWYG GUI设计器(见图1-8),Lua语法高亮显示,甚至对《魔兽世界》的API函数基本智能感知支持。注意,对于像Lua这样的动态类型语言,智能感知和类似的自动填充功能永远不会像对于C++或Java这样的静态类型入门语言那样强大。IDE无法知道变量的类型或对象的方法,因为它们是在程序运行时动态创建的。
  下载地址:http://www.codeplex.com/WarcraftAddOnStudio


SciTE
  SciTE(基于Scintilla的文本编辑器)是我用来开发插件的编辑器。它没有像GUI设计器那样的花哨特性,但它简单、快速、可扩展、易于使用和功能强大。它支持Lua语法高亮显示、自动完成和《魔兽世界》API函数的调用提示。SciTE可以通过纯文本文件进行完全配置。你可以使用这些配置文件更新几乎所有内容,比如语法高亮显示、代码折叠和编辑器的行为。图1-9显示了带有简单Lua脚本的SciTE。


该编辑器还将Lua作为脚本语言嵌入,因此你可以编写Lua脚本向IDE添加新功能。这可能是一个非常强大的功能。本书的最后一章讨论了Lua的其他用途。
  SciTE可用于Windows、Linux和OS X,不像前面提到的IDE,它们只能用于Windows。
  SciTE的下载地址包含在本书的源代码中:http://www.apress.com/

分享到:  QQ好友和群QQ好友和群
收藏收藏
回复

使用道具 举报

快速回复高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表