1)建立插件目录
就是在游戏AddOns目录下新建个文件夹,用插件名字命名:
...\World of Warcraft\Interface\AddOns\<插件名>
2)目录中需要一个插件装载用的主描述文件:<插件名>.toc
...\World of Warcraft\Interface\AddOns\<插件名>\<插件名>.toc
.toc文件格式
http://www.baifeng.me/misc/2009/01/462/
.toc文件示例
## Interface: 50300
## Title : MySmokeBombShouts
## Notes: 烟雾弹喊话
## Author:
## Version: 1.0
MyScript.lua
MyScript.lua就是插件加载后就会解析执行的脚本
包括.toc、.lua和.xml文件在内,所有的插件文本编码格式都必须是UTF-8格式
3)写MyScript.lua
lua语法编辑器环境
http://luaeclipse.luaforge.net/manual.html#installation设置一下Workspace的Text file encoding为UTF-8,编辑器报语法错误不用理,应该是没支持好UTF-8
贼的烟雾弹喊话脚本
随便找的脚本,链接:http://nga.178.com/read.php?tid=6279709&rand=954
function CountdownFunc()
CountdownFrame = CreateFrame("Frame")
FrameScript = function()
if GetTime() - MarkTime > 1 then
if S == 0 then
SendChatMessage(">>烟雾弹<<结束", "YELL")
FrameScript = nil
CountdownFrame:SetScript("OnUpdate",FrameScript)
else
SendChatMessage(S,"YELL")
end
MarkTime = GetTime()
S = S - 1
end
end
MarkTime = GetTime()
S = 5
CountdownFrame:SetScript("OnUpdate",FrameScript)
SendChatMessage(">>烟雾弹<<已释放", "YELL")
end
MainFrame = CreateFrame("Frame")
MainFrame:RegisterEvent("UNIT_SPELLCAST_SENT")
MainFrame:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED")
MainFrame:SetScript("OnEvent", function(_, _, a, b, _, c)
if a == "player" and b== "烟雾弹" then
n = type(c) == "string" and c or CountdownFunc()
end
end)
lua语法基础
http://www.cnblogs.com/ly4cn/archive/2006/08/04/467550.htmlhttp://www.lua.org/manual/5.2/
“Frame”
“Frame”,就是上面CreateFrame创建的,WOW脚本功能的主要执行体,可以看作是一种杂凑物,本身是界面框体,但不需要界面只监控WOW事件也要创建它。
Frame通过监控和处理游戏的两种事件来插入自己的功能。
全局游戏事件
第一种是全局游戏事件,比如战斗开始,某个技能开始施放,这些都是系统性的事件,Frame可以注册 Frame:RegisterEvent("XXX"),之后就保持监听状态了。
每个Frame可以根据需要注册任意多的事件,但仅能够有一个 <OnEvent>脚本。游戏会将事件名称都发送到该处理模块,然后再根据不同的事件进行响应。
事件处理函数原型:function(self, event, ...)
上面就是监控法术施放和法术施放成功的两个事件。
这类事件的列表:http://www.wowwiki.com/Events/Names(详细的事件参数要点右边的子分类,再在里面找)
界面元素本身的事件
第二种是Frame作为一个界面元素本身的事件,比如鼠标点击(OnClick)等。
OnUpdate 常用于做定时器或者刷新处理,都知道游戏有个刷新率,即每秒屏幕刷新多少次,刷新同时,这个Frame也会刷新,也就是触发OnUpdate相关的处理代码。
上面的代码就每次都在这个时机去计算当前的时间,过了1秒就减1,减够5秒就停止。这里面用到了GetTime()和SendChatMessage()这样的WoW API函数。
这类事件的列表:http://www.wowwiki.com/Widget_handlersWoW API函数列表:http://www.wowwiki.com/World_of_Warcraft_API
4)运行成功了