废话不说。魔兽世界插件主要由三种文件构成:描述文档toc;实体定义文档xml;脚本文件lua。简单来说,toc主要描述版本、作者、修改日期以及最重要的需要哪些xml文件;xml定义了插件在游戏中的界面以及处理的逻辑;lua则是具体的实现。修改一个插件的功能就是修改它的lua文件。
lua是一个脚本语言,对它不熟的可以先读读Lua脚本语言入门 <script language="javascript" type="text/javascript">document.title="Lua脚本语言入门 - "+document.title</script>。
修改示例:
我们拿一个比较简单的插件入手,本人是拿互补古蓝(沧海流星)制作的whispertable做实验的,请原作者原谅。whispertable是一个密语记录屏,顾名思义就是能够记录发送给自己的密语。在主城刷屏太快的时候非常有用。现在我们想增强它的功能,让它也能够记录小队聊天和团队聊天,同时能够记录自己发送的密语。
魔兽世界是基于事件处理编程的,即当某一事件发生以后,所有需要捕获该事件的代码都会被触发。
在whispertable的lua语句里我们看到这样的代码:
function WhisperTable_OnEvent(event)
if (event == "CHAT_MSG_WHISPER") then
local name = arg2;
local msg = arg1;
local time = string.sub(date(), 10, 17);
msg = "|cffFFFFFF"..time.."-|r"..msg;
--DEFAULT_CHAT_FRAME:AddMessage(name.."-"..msg);
if not(WhisperTable_Msg[name]) then
table.insert(WhisperTable_Name,name);
WhisperTable_Msg[name] = {};
end;
table.insert(WhisperTable_Msg[name],msg);
WhisperTable_ListShow();
end;
end
显然CHAT_MSG_WHISPER就是该插件需要捕获的事件,而arg1、arg2是该事件触发时的参数,分别为发送的文本和发送人。
我们只要在该函数中简单增加一个条件判断即可:
if (event == "CHAT_MSG_PARTY") then
local format = "小队聊天" ;
local name = arg2;
local msg = arg1;
local time = string.sub(date(), 10, 17);
msg = "|cffFFFFFF"..time.."-|r"..name..":"..msg;
if not(WhisperTable_Msg[format]) then
table.insert(WhisperTable_Name,format);
WhisperTable_Msg[format] = {};
end;
table.insert(WhisperTable_Msg[format],msg);
WhisperTable_ListShow();
end;
就完成了小队聊天记录的功能,要完全启用该功能,还需要注册事件。在onload函数中添加:
this:RegisterEvent("CHAT_MSG_PARTY");
大功告成!
然后我们就可以如法炮制地继续添加记录自己密语和团队聊天的功能了,事件分别是:
CHAT_MSG_WHISPER_INFORM
CHAT_MSG_RAID
如此就完成了一个插件的修改。是不是很简单呢?
最后附上一个比较完整的魔兽插件修改网站www.wowwiki.com,里面有全的api和事件列表以及完整的插件制作教程。本人也是初学者,希望和大家一起进步。