161 lines
5.1 KiB
Lua
161 lines
5.1 KiB
Lua
--[[
|
|
Auctioneer
|
|
Version: 5.9.4961 (WhackyWallaby)
|
|
Revision: $Id: CoreConst.lua 4598 2010-01-07 20:40:09Z brykrys $
|
|
URL: http://auctioneeraddon.com/
|
|
|
|
This is an addon for World of Warcraft that adds statistical history to the auction data that is collected
|
|
when the auction is scanned, so that you can easily determine what price
|
|
you will be able to sell an item for at auction or at a vendor whenever you
|
|
mouse-over an item in the game
|
|
|
|
License:
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
as published by the Free Software Foundation; either version 2
|
|
of the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program(see GPL.txt); if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
Note:
|
|
This AddOn's source code is specifically designed to work with
|
|
World of Warcraft's interpreted AddOn system.
|
|
You have an implicit license to use this AddOn with these facilities
|
|
since that is its designated purpose as per:
|
|
http://www.fsf.org/licensing/licenses/gpl-faq.html#InterpreterIncompat
|
|
--]]
|
|
|
|
--[[
|
|
Auctioneer Core Module Support
|
|
|
|
This code helps maintain internal integrity of Auctioneer. Allows a module to be created to support the Core
|
|
without hoisting variables into a public namespace.
|
|
Also creates an addon local (can only get a reference during auctioneers startup) tablespace, allowing more intermodule interaction
|
|
without hoisting the variables into the public tablespace.
|
|
--]]
|
|
|
|
|
|
if not AucAdvanced then return end
|
|
local lib = AucAdvanced
|
|
|
|
local modules = {}
|
|
local internal = {}
|
|
|
|
-- This is an initial creation function. Create and return items once. Expect the caller to store that value for use.
|
|
function lib.GetCoreModule(moduleName)
|
|
local x = {}
|
|
if (moduleName) then
|
|
if (modules[moduleName]) then return end
|
|
modules[moduleName] = x
|
|
end
|
|
return x, internal
|
|
end
|
|
|
|
--[[ CoreModule
|
|
A dummy module representing the core of Auc-Advanced
|
|
Used to catch messages and pass them on to elements of the core
|
|
--]]
|
|
local coremoduleInternal = {}
|
|
local coremodule = {
|
|
libType = "Util",
|
|
libName = "CoreModule",
|
|
GetName = function() return "CoreModule" end,
|
|
}
|
|
|
|
|
|
|
|
local function HasOnlyFunctions(tbl)
|
|
for _, elem in pairs(tbl) do
|
|
if not type(elem)=="function" then
|
|
return false
|
|
end
|
|
end
|
|
return true
|
|
end
|
|
|
|
-- called from CoreMain's private OnLoad function
|
|
function lib.CoreModuleOnLoad(addon)
|
|
local tcheck = {}
|
|
local ncheck = {}
|
|
for mdl, core in pairs(modules) do
|
|
for elem, dat in pairs(core) do
|
|
local tp = type(dat)
|
|
if (tp=="table" and HasOnlyFunctions(dat)) then tp="nestedfunction" end
|
|
if ((not tcheck[elem]) or tcheck[elem]==tp) then
|
|
if not tcheck[elem] then
|
|
tcheck[elem] = tp
|
|
ncheck[elem] = mdl
|
|
end
|
|
if (tp=="table") then
|
|
if not coremodule[elem] then coremodule[elem] = {} end
|
|
local ts = coremodule[elem]
|
|
for x, y in pairs(dat) do
|
|
ts[x] = y
|
|
end
|
|
elseif (tp=="nestedfunction") then
|
|
if not coremoduleInternal[elem] then coremoduleInternal[elem] = {} end
|
|
local fns = coremoduleInternal[elem]
|
|
for fName, fCode in pairs(dat) do
|
|
if not fns[fName] then fns[fName] = {} end
|
|
local fs = fns[fName]
|
|
if not coremodule[elem] then coremodule[elem] = {} end
|
|
if not coremodule[elem][fName] then
|
|
local f = elem
|
|
coremodule[elem][fName]=function(...)
|
|
for i=1,#fs do
|
|
local fn = fs[i]
|
|
fn(...)
|
|
end
|
|
end
|
|
end
|
|
table.insert(fs, fCode)
|
|
end
|
|
elseif (tp=="function") then
|
|
if not coremoduleInternal[elem] then coremoduleInternal[elem] = {} end
|
|
local fs = coremoduleInternal[elem]
|
|
|
|
if not coremodule[elem] then
|
|
local f = elem
|
|
coremodule[elem]=function(...)
|
|
for i=1,#fs do
|
|
local fn = fs[i]
|
|
fn(...)
|
|
end
|
|
end
|
|
end
|
|
table.insert(fs, dat)
|
|
end
|
|
else
|
|
if nLog then
|
|
nLog.AddMessage("Auctioneer", "CoreModule", N_WARNING, "CoreModule did not match expected layout",
|
|
("For %s, Baseline %s has type %s while %s has type %s"):format(
|
|
elem, ncheck[elem] or "??", tcheck[elem] or "??",
|
|
mdl, tp))
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- install as a Module
|
|
lib.Modules.Util.CoreModule = coremodule
|
|
lib.SendProcessorMessage("newmodule", "Util", "CoreModule")
|
|
|
|
-- do OnLoad
|
|
if coremodule.OnLoad then
|
|
coremodule.OnLoad(addon)
|
|
end
|
|
|
|
-- delete the initialization code as we only need it once
|
|
lib.CoreModuleOnLoad = nil
|
|
lib.GetCoreModule = nil
|
|
end
|
|
|
|
|
|
AucAdvanced.RegisterRevision("$URL: http://dev.norganna.org/auctioneer/trunk/Auc-Advanced/CoreConst.lua $", "$Rev: 4598 $")
|