vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--[[
Plugin = {
        metaInformations = {
                name = "GuildAdsPlayerTracker",
                guildadsCompatible = 100,
        }

        getCommands = function()
                return {
                        [GUILDADSPLAYERTRACKER_CMD_LOC] = {
                                [1] = { ["key"]="continent", 
                                                ["fout"]=GuildAdsPlugin.serializeInteger,
                                                ["fin"]=GuildAdsPlugin.unserializeInteger }
                                        } ...
                        }
                        };
        end;

        getAdTypes = function()
        end
        
        -- others functions that can be defined
        -- those functions will be called when the event occured
        onChannelJoin();
        onChannelLeave();
        onShowAd(tooltip, adtype, ad)
        onShowContextMenu(adtype, ad)
        onOnline(playerName, status)
        onUpdateInventory(owner, slot)
        onAddGlobal(owner, adtype, ad)
        onRemoveGlobal(owner, adtype, id)
        onAddMy(adtype, ad)
        onRemoveMy(adtype, id)
        onShowAd(tooltip, adtype, ad)
        onShowContextMenu(adtype, ad)
}
]]

local pluginsToRegister = {};

GuildAdsPlugin = {

        debugOn = false;

        PluginsList = {};
        
        addMenuEnabled = false;

        EVENT_ONLINE = GAS_EVENT_ONLINE;
        EVENT_UPDATEINVENTORY = GAS_EVENT_UPDATEINVENTORY;
        EVENT_ADDGLOBAL = GAS_EVENT_ADDGLOBAL;
        EVENT_REMOVEGLOBAL = GAS_EVENT_REMOVEGLOBAL;
        EVENT_ADDMY = GAS_EVENT_ADDMY;
        EVENT_REMOVEMY = GAS_EVENT_REMOVEMY;
        
        EVENT_ONSHOWAD = "ShowAd";
        EVENT_ONSHOWCONTEXTMENU = "ShowContextMenu";
        
        -- currentTime()
        currentTime = currentTime;
        
        -- timeToString(time)
        timeToString = timeToString;
        
        -- isOnline(playername)
        isOnline = GAS_IsOnline;
        
        -- getAccountId()
        getAccountId = GAS_GetAccountId;
        
        -- getInventory(owner)
        getInventory = GAS_ProfileGetInventory;
        
        -- getProfile(owner)
        getProfile = GAS_ProfileGet;
        
        -- getUpdatedDate(owner)
        getUpdatedDate = GAS_ProfileGetUpdatedDate;
        
        -- getPlayersByAccount(accountid)
        getPlayersByAccount = GAS_PlayersByAccount;
        
        -- getMyAds()
        getMyAds = GAS_GetMyAds;
        
        -- getGlobalAds()
        getGlobalAds = GAS_GetAds;
        
        -- addMyAd(adtype, text, color, ref, name, texture, count)
        addMyAd = GAS_AddMyAd;
        
        -- editMyAd(adtype, id, text, color, ref, name, texture, count)
        editMyAd = GAS_EditMyAd;
        
        -- removeMyAd(adtype, id)
        removeMyAd = GAS_RemoveMyAd;
        
        -- enableMyAd(adtype, id)
        enableMyAd = GAS_EnableMyAd;
        
        -- GAS_DisableMyAd
        disableMyAd = GAS_DisableMyAd;
        
        -- GAS_AddAd
        addGlobalAd = GAS_AddAd;
        
        -- removeGlobalAdByOwnerAndId(owner, adtype, id)
        removeGlobalAdByOwnerAndId = GAS_RemoveByOwnerAndId;
        
        -- removeGlobalAdByOwner(owner, adtype)
        removeGlobalAdByOwner = GAS_RemoveByOwner;
        
        -- getSkillText(SkillId)
        getSkillText = GAS_GetSkillText;

        -- getClassText(ClassId)
        getClassText = GAS_GetClassText;
        
        -- getRaceText(RaceId)
        getRaceText = GAS_GetRaceText;
        
        -- getItemInfo
        getItemInfo = GAS_GetItemInfo;
        
        -- SerializeObj
        serializeObj = GAC_SerializeObj;
        unserializeObj = GAC_UnserializeObj;
        
        -- SerializeString
        serializeString = GAC_SerializeString;
        unserializeString = GAC_UnserializeString;
        
        -- SerializeInteger
        serializeInteger = GAC_SerializeInteger;
        unserializeInteger = GAC_UnserializeInteger;
        
        -- SerializeColor
        serializeColor = GAC_SerializeColor;
        unserializeColor = GAC_UnserializeColor;
        
        isPluginValid  = function(plugin)
        -- Every plugin needs to be a table
        if type(plugin) ~= "table" then
            return false, "Plugin type check failed.";
        end

        -- Check metainformations
        if type(plugin.metaInformations) == "table" then
                        local metainfo = plugin.metaInformations;
                        -- check name
                        if type(metainfo.name)~="string" then
                                return false, "Plugin name check failed.";
                        end
                        -- check version
                        if type(metainfo.guildadsCompatible)~="number" or metainfo.guildadsCompatible>GUILDADS_VERSION then
                                return false, "Plugin incompatible with this version of GuildAds";
                        end
                else
            return false, "Plugin Metainformations check failed.";
        end

        return true;
        end;
        
        _register = function(plugin)
                local valid, errorMessage = GuildAdsPlugin.isPluginValid (plugin);
                if valid then
                        -- register commands
                        if type(plugin.getCommands)=="function" then
                                local commands = plugin.getCommands();
                                for command, spec in commands do
                                        local status, errorMessage = GuildAdsPlugin.registerCommand(command, spec[1], spec[2]);
                                        if not status then
                                                return false, errorMessage;
                                        end
                                end
                        end
                        
                        -- register adtypes
                        if type(plugin.getAdTypes)=="function" then
                                local adtypes = plugin.getAdTypes();
                                for adtype, spec in adtypes do
                                        local status, errorMessage = GAC_RegisterAdtype(adtype, spec[1], spec[2]);
                                        if not status then
                                                return false, errorMessage;
                                        end
                                end
                        end
                        
                        local pluginName = plugin.metaInformations.name;
                        
                        -- add plugin to GuildAdsPlugin.PluginsList
                        GuildAdsPlugin.PluginsList[pluginName] = plugin;
                        
                        -- set debug function
                        plugin.debug = function(message)
                                GuildAdsPlugin.debug(pluginName..":"..message);
                        end
                        
                        -- call onChannelJoin() ??
                        
                        return true;
                else
                        return false, errorMessage;
                end
        end;
        
        register = function(plugin)
                if pluginsToRegister then
                        tinsert(pluginsToRegister, plugin)
                        return true;
                else
                        return GuildAdsPlugin._register(plugin);
                end
        end;
        
        UIregister = function(plugin)
                status, errorMessage = GuildAdsPlugin.register(plugin);
                if not status then
                        if errorMessage then
                                error(errorMessage,2);
                        else
                                error("error", 2);
                        end
                end
        end;
        
        deregister = function(plugin)
                local valid, errorMessage = GuildAdsPlugin.isPluginValid (plugin);
                if valid then
                        GuildAdsPlugin.PluginsList[plugin.metaInformations.name] = nil;
                        -- call onChannelLeave()
                        return true;
                else
                        return false, errorMessage;
                end
        end;
        
        registerCommand = function(command, serializeInfo, onMessage)
                return GAC_RegisterCommand(command, serializeInfo, onMessage);
        end;

        deregisterCommand = function(command)
                return GAC_UnregisterCommand(command);
        end;

        registerAdtype = function(adtype, serializeInfo, onMessage)
                return GAC_RegisterAdtype(adtype, serializeInfo, onMessage);
        end;

        deregisterAdtype = function(adtype)
                return GAC_UnregisterAdtype(adtype);
        end;
        
        addContextMenu = function(menu)
                if GuildAdsPlugin.addMenuEnabled and menu and menu.text then
                        UIDropDownMenu_AddButton(menu, 1);
                        return true;
                else
                        return false;
                end     
        end;
        
        -- send(who, obj, delay)
        send = function(who, obj, delay)
                if obj.command and GAC_IsRegisteredCommand(obj.command) then
                        SimpleComm_SendMessage(who, obj, delay);
                        return true;
                else
                        return false;
                end
        end;
        
        -- sendRaw
        sendRaw = function(who, message, delay)
                if type(message) == "string" then
                        SimpleComm_SendRawMessage(who, message, delay);
                        return true;
                else
                        return false;
                end
        end;
        
        -- setDebug
        setDebug = function(status)
                if status then
                        GuildAdsPlugin.debugOn = true;
                else
                        GuildAdsPlugin.debugOn = false;
                end
        end;
        
        -- debug
        debug = function(message, raw)
                if GuildAdsPlugin.debugOn then
                        if raw then
                                ChatFrame1:AddMessage(message, 1.0, 0.25, 0.75);
                        else
                                ChatFrame1:AddMessage("GuildAdsPlugin:"..message, 1.0, 0.25, 0.75);
                        end
                end
        end
};

local EventIdToMethod = {
        [GuildAdsPlugin.EVENT_ONLINE] = "onOnline";
        [GuildAdsPlugin.EVENT_UPDATEINVENTORY] = "onUpdateInventory";
        [GuildAdsPlugin.EVENT_ADDGLOBAL] = "onAddGlobal";
        [GuildAdsPlugin.EVENT_REMOVEGLOBAL] = "onRemoveGlobal";
        [GuildAdsPlugin.EVENT_ADDMY] = "onAddMy";
        [GuildAdsPlugin.EVENT_REMOVEMY] = "onRemoveMy";
        [GuildAdsPlugin.EVENT_ONSHOWAD] = "onShowAd";
        [GuildAdsPlugin.EVENT_ONSHOWCONTEXTMENU] = "onShowContextMenu";
}

local function pluginToRealCommand(command)
        return "P"..command;
end

local function realToPluginCommand(command)
        local iStart, iEnd, realCommand = string.find(command, "P(.*)");
        if (iStart) then
                return realCommand;
        else
                return false;
        end
end

local function methodToEventId(method)
        for ltype, lmethod in EventIdToMethod do
                if method == lmethod then
                        return ltype;
                end
        end
        return nil;
end

function GuildAdsPlugin_RegisterPlugins()
        -- register plugins
        for _, plugin in ipairs(pluginsToRegister) do
                local status, errorMessage = GuildAdsPlugin._register(plugin);
                if not status then
                        local pluginName;
                        if plugin.metaInformations and plugin.metaInformations.name then
                                pluginName = plugin.metaInformations.name..": ";
                        else
                                pluginName = "GuildAds(unknown plugin):";
                        end
                        if errorMessage then
                                message(pluginName..errorMessage);
                        else
                                message(pluginName.."error");
                        end
                end
        end
        
        -- GuildAdsPlugin.register : register immediatly
        pluginsToRegister = nil;
end

function GuildAdsPlugin_OnInit()
        -- call onInit
        for pluginName, plugin in GuildAdsPlugin.PluginsList do
                if type(plugin.onInit) == "function" then
                        plugin.onInit();
                end
        end
end

function GuildAdsPlugin_OnChannelJoin()
        for pluginName, plugin in GuildAdsPlugin.PluginsList do
                if type(plugin.onChannelJoin) == "function" then
                        plugin.onChannelJoin();
                end
        end
end

function GuildAdsPlugin_OnChannelLeave()
        for pluginName, plugin in GuildAdsPlugin.PluginsList do
                if type(plugin.onChannelJoin) == "function" then
                        plugin.onChannelLeave();
                end
        end
end

function GuildAdsPlugin_OnShowAd(tooltip, adtype, ad)
        for pluginName, plugin in GuildAdsPlugin.PluginsList do
                if type(plugin.onShowAd) == "function" then
                        plugin.onShowAd(tooltip, adtype, ad);
                end
        end
end

function GuildAdsPlugin_OnShowContextMenu(adtype, ad)
        for listenerName, plugin in GuildAdsPlugin.PluginsList do
                if type(plugin.onShowContextMenu) == "function" then
                        --[[
                        info = { };
                        info.text = listenerName;
                        UIDropDownMenu_AddButton(menu, 1);
                        ]]
                        GuildAdsPlugin.addMenuEnabled = true;
                        plugin.onShowContextMenu(adtype, ad);
                        GuildAdsPlugin.addMenuEnabled = nil;
                end
        end     
end

function GuildAdsPlugin_OnEvent(ltype, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)
        local method = EventIdToMethod[ltype];
        for pluginName, plugin in GuildAdsPlugin.PluginsList do
                if type(plugin[method]) == "function" then
                        plugin[method](arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
                end
        end
end

Generated by GNU Enscript 1.6.5.90.