--[[ * Copyright (c) 2011 by Adam Hellberg. * * This file is part of Command. * * Command 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 3 of the License, or * (at your option) any later version. * * Command 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 Command. If not, see <http://www.gnu.org/licenses/>. --]] --- Table containing all Command methods. -- This is referenced "C" in Command.lua -- @name Command -- @class table -- @field Name AddOn name. -- @field Version AddOn version. -- @field VarVersion SavedVariables version. -- @field Enabled Enabled state. -- @field Global Contains the saved variables. -- @field Settings Contains settings specific to Command. -- @field Events Contains all registered event handlers. -- Command = { Name = "Command", Version = GetAddOnMetadata("Command", "Version"), VersionNum = 7, -- Increment on every release VersionChecked = false, -- Prevent spam of "New Version" notice Loaded = false, VarVersion = 2, Global = {}, Settings = {}, Events = {}, Data = {} } local C = Command local Cmd local CM local PM local RM local AC local log --- Initialize Command. -- function C:Init() if self.Version == "@" .. "project-version" .. "@" then self.Version = "Dev" end Cmd = self.CommandManager CM = self.ChatManager PM = self.PlayerManager RM = self.RollManager AC = self.AddonComm log = self.Logger self:LoadSavedVars() log:Normal("AddOn loaded! Use /cmd help or !help for help. !!NYI!!") self.Loaded = true end --- Load the saved variables. -- Also call Init() on modules that need it. -- function C:LoadSavedVars() if type(_G["COMMAND"]) ~= "table" then _G["COMMAND"] = {} elseif type(_G["COMMAND"]["VERSION"]) == "number" then if _G["COMMAND"]["VERSION"] < self.VarVersion then log:Normal("Saved Variables out of date, resetting...") wipe(_G["COMMAND"]) _G["COMMAND"] = {} end end self.Global = _G["COMMAND"] if type(self.Global.SETTINGS) ~= "table" then self.Global.SETTINGS = {} end self.Settings = self.Global.SETTINGS if type(self.Settings.DEBUG) ~= "boolean" then self.Settings.DEBUG = false end if type(self.Settings.ENABLED) ~= "bolean" then self.Settings.ENABLED = true end if type(self.Settings.GROUP_INVITE_ANNOUNCE) ~= "boolean" then self.Settings.GROUP_INVITE_ANNOUNCE = false end if type(self.Settings.GROUP_INVITE_ANNOUNCE_DELAY) ~= "number" then self.Settings.GROUP_INVITE_ANNOUNCE_DELAY = 0 end CM:Init() PM:Init() RM:Init() AC:Init() Cmd:Init() log:SetDebug(self.Settings.DEBUG) self.Global.VERSION = self.VarVersion end function C:CheckVersion(ver) if self.VersionChecked then return end ver = ver or 0 if ver > self.VersionNum then log:Normal("\124cffFF0000A new version of \124cff00FFFF" .. self.Name .. "\124cffFF0000 is available! \124cffFFFF00Check the site you downloaded from for the updated version.") self.VersionChecked = true end end --- Control AddOn state. -- @param enabled Boolean indicating enabled or disabled state. -- function C:SetEnabled(enabled) self.Settings.ENABLED = enabled if self.Settings.ENABLED then return "AddOn \124cff00FF00enabled\124r." end return "AddOn \124cffFF0000disabled\124r." end --- Enable AddOn. -- function C:Enable() return self:SetEnabled(true) end --- Disable AddOn. -- function C:Disable() return self:SetEnabled(false) end --- Toggle AddOn on and off. -- function C:Toggle() return self:SetEnabled(not self.Settings.ENABLED) end --- Control debugging state. -- @param enabled Boolean indicating enabled or disabled state. -- function C:SetDebug(enabled) self.Settings.DEBUG = enabled log:SetDebug(enabled) if self.Settings.DEBUG then return "Debugging \124cff00FF00enabled\124r." end return "Debugging \124cffFF0000disabled\124r." end --- Enable debugging. -- function C:EnableDebug() return self:SetDebug(true) end --- Disable debugging. -- function C:DisableDebug() return self:SetDebug(false) end --- Toggle debugging. -- function C:ToggleDebug() return self:SetDebug(not self.Settings.DEBUG) end function C:SetGroupInvite(enabled) self.Settings.GROUP_INVITE_ANNOUNCE = enabled if self.Settings.GROUP_INVITE_ANNOUNCE then return "Group Invite (Announce) enabled." end return "Group Invite (Announce) disabled." end function C:EnableGroupInvite() return self:SetGroupInvite(true) end function C:DisableGroupInvite() return self:SetGroupInvite(false) end function C:ToggleGroupInvite() return self:SetGroupInvite(not self.Settings.GROUP_INVITE_ANNOUNCE) end function C:SetGroupInviteDelay(time) if type(time) ~= "number" then return false, "Delay has to be a number." end time = math.ceil(time) if time > 50 then return false, "Delay cannot be greater than 50 seconds." end self.Settings.GROUP_INVITE_ANNOUNCE_DELAY = time if self.Settings.GROUP_INVITE_ANNOUNCE_DELAY > 0 then return "Group Invite (Announce) delay set to " .. self.Settings.GROUP_INVITE_ANNOUNCE_DELAY .. " seconds." end return "Group Invite (Announce) delay disabled." end function C:DisableGroupInviteDelay() return self:SetGroupInviteDelay(0) end