Init
This commit is contained in:
commit
b08e75faa6
|
@ -0,0 +1,84 @@
|
|||
local lib = LibStub:NewLibrary("LibGUID", 1)
|
||||
if not lib then return end
|
||||
local guid_methods = guid_methods or {}
|
||||
local mixins = {'CreateGUIDObject'}
|
||||
lib.mixinTargets = lib.mixinTargets or {}
|
||||
lib.guidCache = lib.guidCache or {}
|
||||
local guidCache = lib.guidCache
|
||||
local guidTypes = {
|
||||
["Player"] = true,
|
||||
["Creature"] = true,
|
||||
["Pet"] = true,
|
||||
["GameObject"] = true,
|
||||
["Vehicle"] = true,
|
||||
["Vignette"] = true
|
||||
}
|
||||
local function isGUID(guid)
|
||||
if(guid) then
|
||||
local typ = strsplit("-", guid)
|
||||
if(typ and guidTypes[typ]) then
|
||||
return typ
|
||||
end
|
||||
end
|
||||
end
|
||||
lib.isGUID = isGUID
|
||||
function guid_methods:Touch()
|
||||
self['lastModified'] = GetTime()
|
||||
end
|
||||
function guid_methods:Refresh()
|
||||
if(self['type'] == 'Player') then
|
||||
local localizedClass, englishClass, localizedRace, englishRace, sex, name, realm = GetPlayerInfoByGUID(self[1])
|
||||
if(name and name !== self['name']) then
|
||||
self['localizedClass'] = localizedClass
|
||||
self['englishClass'] = englishClass
|
||||
self['localizedRace'] = localizedRace
|
||||
self['englishRace'] = englishRace
|
||||
self['sex'] = sex
|
||||
self['name'] = name
|
||||
self['realm'] = realm
|
||||
end
|
||||
end
|
||||
self:Touch()
|
||||
end
|
||||
function lib:CreateGUIDObject(obj)
|
||||
if(obj) then
|
||||
if(type(obj) == 'string') then
|
||||
obj = {obj}
|
||||
end
|
||||
local guid = obj[1]
|
||||
if(not guidCache[guid]) then
|
||||
local typ = isGUID(guid)
|
||||
if(typ) then
|
||||
obj['type'] = typ
|
||||
for k, v in pairs(guid_methods) do
|
||||
obj[k] = v
|
||||
end
|
||||
obj:Refresh()
|
||||
guidCache[guid] = obj
|
||||
end
|
||||
else
|
||||
return guidCache[guid]
|
||||
end
|
||||
end
|
||||
end
|
||||
function lib:PruneGUIDCache(maxAge)
|
||||
local maxAge = maxAge or 3600
|
||||
local t = GetTime()
|
||||
for guid, obj in pairs(guidCache) do
|
||||
if(obj['lastModified'] < t - maxAge) then
|
||||
guidCache[guid] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
for guid, obj in pairs(guidCache)do
|
||||
obj:Refresh()
|
||||
end
|
||||
function lib:Embed(target)
|
||||
for _,name in pairs(mixins) do
|
||||
target[name] = lib[name]
|
||||
end
|
||||
lib.mixinTargets[target] = true
|
||||
end
|
||||
for target, _ in pairs(lib.mixinTargets) do
|
||||
lib:Embed(target)
|
||||
end
|
|
@ -0,0 +1,4 @@
|
|||
## Interface: 90002
|
||||
## Name: LibGUID
|
||||
## Description: Handle GUID Info
|
||||
LibGUID.lua
|
Loading…
Reference in New Issue