关于TOC文件
- Interface - 标记该插件用于wow的哪个游戏版本,如果标记值低于当前游戏版本将不能被加载,除非用户选择加载过期插件,所以,大版本更新时,最好修改这个标记值来符合新的游戏版本,可以在进入游戏后使用宏来获得当前游戏的版本号:
/run print((select(4, GetBuildInfo())))
- Title - 插件的名称,不需要和插件名一致,会被显示在选择人物界面的插件列表中。如果需要实现不同语种的客户端显示不同的文字的话(本地化机能),可以修改标签名,在标签名后加上一个"-",再跟上客户端的语种名就可以了,比如国服的实际标签名: Title-zhCN。如果客户端的语种对应的标签不存在,那么就使用默认的Title标签的值。
- Notes - 在插件列表中,鼠标移到插件名称上时显示的提示信息。同样,可以用类似-zhCN这样的后缀来做本地化申明。
- RequiredDeps, Dependencies, 或者任意以 “Dep” 开始的字符串 - 一些以逗号分割的其他插件的名字,表示本插件必须在这些插件都存在,且都已经被加载的情况下,才能被加载,也就是插件依赖。
- OptionalDeps - 一些以逗号分割的其他插件的名字,表示如果这些插件存在,那么这些插件需要在本插件加载前,被加载,可选依赖。
- LoadOnDemand - 如果这个值被设置为1,那么这个插件不会在游戏开始时就加载,而是由其他插件在需要时,另行加载,wow自带的一些插件都是如此设置的。
- LoadWith - 一些以逗号分割的其他插件的名字, 如果本插件的LoadOnDemand为1,那么,当这些插件在游戏开始被加载时,也加载本插件。
- LoadManagers - 一些以逗号分割的其他插件的名字, 如果这些插件都不存在,那么客户端会自动加载本插件,如果这些插件中的一个存在,那么,本插件将按照LoadOnDemand设置为1的情况处理。
- SavedVariables - 一些以逗号分割的变量名称,这些变量一般是保存在游戏中的Lua全局环境中的表,这些变量的值在退出游戏时将被保存到硬盘上,在下一次游戏开始再被加载进入游戏,可以用来保存用户的配置信息等。这些变量的值对同一账户在同一服务器的所有角色都是通用的。
- SavedVariablesPerCharacter - 类似SavedVariables,不过,每个角色都有各自不同的变量值,也就是说,SavedVariables适合保存通用配置,SavedVariablesPerCharacter适合保存个人配置。
- DefaultState - 本插件安装后默认是否开启,如果设置成 “disabled”,那么只有在插件列表中勾选本插件后,才会被加载。默认值 “enabled”
- Author - 作者名字
- Version - 插件自身的版本号
关于lua文件加载
假设插件名为TestAddon,有两个Lua文件
test.lua,
another.lua`。
下面是加载插件的代码:
-- Load TestAddon
local TestAddon = {}
f = loadfile("test.lua")
f("TestAddon", TestAddon)
f = loadfile("another.lua")
f("TestAddon", TestAddon)
-- 上面两个参数,第一个表示插件名,第二个是一个table(这个table可以作为各个文件间交换数据的存储位置)
test.lua
:
local addonName, addon = ...
print(addonName .. " is loaded.")
addon.TestAddon = 123
another.lua
:
local addonName, addon = ...
print("TestAddon is " .. addon.TestAddon)
每次书写全局变量都需要addon.
,开头也是很麻烦的事情,下面推荐一种普通插件的写法:
在test.lua
中:
-- 插件第一个lua文件中,以下一行代码确保代码以addon为环境,而不是_G
-- 在addon环境中可以访问_G的任意思变量;
-- 所定义的全部全局变量会保存在addon表中,而不是_G;
setfenv(1, setmetatable(select(2, ...), {
__index = function(self, key)
local v = _G[key];
rawset(self, key, v);
return v
end
}))
function testA()
print("test case A")
end
<