现在的位置: 首页 > 综合 > 正文

魔兽世界编程宝典读书笔记(8)

2013年09月10日 ⁄ 综合 ⁄ 共 3744字 ⁄ 字号 评论关闭

 

现在该在游戏中创建对你自己有意义的插件了。
本章将介绍独立程序运行环境和魔兽世界客户端内部运行环境之间的区别,向您指出Blizzard提供的资源和资料,并介绍许多当您创建自己的插件时很有用的插件。
在魔兽世界里运行代码与在游戏的外面运行代码有很大不同,尤其是print()函数在游戏里并不存在,这是由于在游戏里面没有Lua解释程序来输出给定的文本。你可以借助WowLua插件进行修正,或者你也可以自己定义一个print()函数。
作为程序员来说,一辈子80%的时间都是在改正我们自己犯下的错误,而错误信息就是我们找到出错原因的最重要依据。而当你第一次安装魔兽世界时,默认情况下是不会显示错误信息的。作为普通用户来说很美妙,而作为开发者却是恶梦。(默然说话:错误信息就是生病的程序给出的病情通知,不会看错误信息的程序员,就象一个不会看化验单的医生一样,会要了人命的)所以我们需要打开错误信息的输出选项:
(1)按Esc键打开主菜单。
(2)单击“插件”按钮,打开选项窗口。
(3)在第二组选项框中,选中显示Lua错误的选项
(4)单击确定按钮保存选项。
下面可以验证一下你的选择是否起效了:按回车键进入聊天状态,在聊天窗口中输入/run message(“Hello”)然后回车。
如果你看到了下图,就说明Lua错误信息的显示已经开启成功。
你可以在聊天窗口里使用斜杠命令/script和/run运行代码,就好象你在Lua解释器里运行那样,不过,很可能一些代码是不能在魔兽世界里运行起来的,例如:
/run print(“Hello World”)
因为魔兽世界里并没有print这个全局函数,所以你将会看到一个错误信息。
在魔兽世界里有两种方法用于显示输出:
使用meaage()函数。但是这是一个弹出个窗口,会严重干扰游戏的进行。另外,它能输出的字符串长度是受限的,很不方便,所以一般会用于调试运行阶段,在正式版中一定要记得去掉它们。
使用:AddMessage()方法和相关函数向聊天窗口发送文本信息(默然说话:注意:AddMessage()的第一个字符是冒号)。它是最常用的给用户显示信息的一种主要方法。
在默认的情况下魔兽世界定义了7个聊天窗口,每一个聊天窗口都有一个函数,用来在聊天窗口显示消息。默认情况下,对任何一个魔兽世界玩家来讲,ChatFrame是主要的窗口,所以一般将它用于主输出窗口。运行下面的命令:
/run ChatFrame1:AddMessage(“Hello World”)
这个函数定位到ChatFrame1全局对象,并调用:AddMessage()方法显示一个字符串,消息应该出现在你的聊天窗口中。
能够在聊天窗口运行代码是很有用的,但它也有一个限制,因为它一次只能够接受最多255个字符作为输入。即使是宏定义也被限制在255个字符内。不过一些自定义的插件使您可以在游戏文本编辑器中编写代码,然后单击一个按钮运行它。这里介绍TinyPad、Omnibus和WoWLua。
TinyPad由Gello制作,它是魔兽世界中一个非常简洁的插件,它能够提供记事本和方便地在魔兽世界中编辑并运行代码的功能,它还可以让你凌驾和删除文本页,查找任何已经存在的文本,或者恢复文本到最近保存的状态。这个插件能够通过下面的链接下载:
http://wowui.incgamers.com/ui.php?id=1718
http://wowinterface.com/downloads/fileinfo.php?id=4417
在游戏中可以使用斜杠命令/tinypad启动这个插件,它会弹出一个窗口,在窗口的顶端有新建页面(一个手稿的图标)、删除当前页面(炸弹的图标)、运行当前页面代码(远行鞋)、恢复至最近的保存版本(熊爪)等几个按钮。另外还有页面间切换的按钮,设置选项的按钮和关闭窗口的按钮。
Omnibus由JJSheets编写。可以通过下面的链接下载:(默然说话:唉,这个插件似乎已经没有更新了。
http://static.wowace.com/content/files/136/720/Omnibus-r77752.7.zip
它除了有和TinyPad一样的外观及功能外,还提供了一些非常不错的功能,如脚本标记和命名,以及通过通信频道从一个用户向另一个用户发送脚本的功能。
WowLua在第一章已经提到,你可以在那里找到它的下载链接。它可以显示行号,并在代码错误的地方突出显示为红色。
本节无内容
魔兽世界的插件可以访问大量的API函数,它们在游戏中为完成各种任务提供了大量的信息和功能,但是当你设计一个插件时,必须要记着一些重要的约束:
在魔兽世界的Lua实现中没有任何形式的文件输入和输出。插件可以通过保存变量来存储数据,但是它们只有在游戏启动时能才加载,在游戏关闭或界面重载时才能保存。
插件不能智能地为你选择一个法术。例如,没有任何方法来选择一个合适等级的法术,从而在尽可能节省法力值的情况下杀死一个玩家。
插件不能控制角色的移动。
在创建插件时,一个通用的规则是为玩家提供尽可能多的必要信息,从而使他们可以做出正确的选择,但是应该让玩家自己做出决定并单击按钮。这意味着你可以突出显示特定的目标,或者在法术栏中突出一个玩家应该使用的法术,但做出最后决定的必须是玩家。用箭头指示玩家到下一个目标是允许的,但不能帮助玩家走到下一个目标,因为玩家应该要靠自己来完成移动。
从网站http://ftp.blizzard.com/pub/WoW/other/AddOnKit.zip下载用户界面自定义工具。这是一个中文版的用户界面自定义工具,解压之后有一个可执行文件,双击它得到下面如图所示的界面:
默然说话:很沉痛的告诉大家,在上面那个界面里点任何按钮都报错:"C:/Documents and Settings/Default User/World of Warcraft/AddOn Kit.exe"中的文件"Blizzard Interface Tutorial/SimplifiedChinese/ShowMeTheMoney/CashMoney.tga"无法打开,因为发生了2错误。 如果问题仍然存在,请联系暴雪的技术支持部门。 (MPQFile::OpenFromArchive)。我想了很多办法也解决不了,如果有人知道请联系我,或者留言告知解决方法。
Blizzard为用户界面客户区提供了在线论坛forums.worldofwarcraft.com/board.html?forumId=11114(英语)或者http://forums.warcraftchina.com/board.html?forumId=11354&sid=1(中文)
它们常常是新的用户界面信息被发布的第一个地方,尤其是介绍一个新的API函数或者对现存系统的改动时。一个新的帖子包含了所有对即将到来的用户界面改变的概述,每一个补丁都需要创建它,论坛用户可以对它进行讨论和建议。
默然说话:我发现在中文版的论坛中API的相关信息很少,很多都是用户界面的介绍,可能在中国还是以玩家为主吧。
这个是魔兽世界最早出现的信息库,包括了常识、商业理论,界面自定义。尽管这里的信息有些过时,但wiki仍然拥有一个非常大的“如何…”文档和相关页面的集合。(默然说话:当然,它是全英文的)下面的链接可以让你了解关于用户自定义界面的相关信息:
http://www.wowwiki.com/WoWWiki:Interface_customization
http://wiki.cwowaddon.com/
默然说话:我认为这是一个初学者应该要来瞅瞅的网站,这里提供了大量关于魔兽世界插件,宏,Lua语言的背景知识——对,它们都是中文的,有了这些背景知识,你可以更快速的进入状态,编写出你自己的插件。而且这里也是中国魔兽世界开发者的基地,在这里你可以认识很多的高手,和他们交流,向他们学习。
在魔兽世界外面使用Lua编程和实际编写插件代码存在很多的不同。而在游戏中使用/run或/script命令进行试验是一个开发者最常用的方式,所以你最好把自己标记为/afk(暂离)——否则公会里的成员都会认为你疯掉了。

9章将介绍插件的基本结构并且讲述怎样通过XML来创建窗体。

抱歉!评论已关闭.