vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
local inittime, initmem, initgc = GetTime(), gcinfo()

Warmup = {
--      gcalerts = true,

        myname = "!!Warmup",

        inittime = inittime,
        initmem = initmem,
        initgc = initgc,

        lasttime = inittime,
        lastmem = initmem,
        lastgc = initgc,

        longesttime = 0,
        biggestmem = 0,
        totalmem = 0,

        timethresh = 1.0,
        timethresh2 = 0.5,
        timethresh3 = 0.1,

        memthresh = 1000,
        memthresh2 = 500,
        memthresh3 = 100,

        green = "|cff80ff80",
        yellow = "|cffffff80",
        orange = "|cffff8000",
        red = "|cffff0000",
}
inittime, initmem, initgc = nil, nil, nil


function Warmup:PutOut(txt, color, time, mem)
        local outstr = ((not time) and string.format("%s%s (%d KiB)", color, txt, mem))
                or (not mem and string.format("%.3f sec | %s%s", time, color, txt))
                or string.format("%.3f sec | %s%s (%d KiB)", time, color, txt, mem)

        self.frame:AddMessage(outstr)
        self.myframe:AddMessage(outstr)
end


function Warmup:PutOutAO(ao)
        local gc = (ao.gc and " |cffff80ff-GC-") or ""
        local tc = (ao.time >= Warmup.timethresh and self.red) or (ao.time >= Warmup.timethresh2 and self.orange) or (ao.time >= Warmup.timethresh3 and self.yellow) or self.green
        local mc = (ao.mem >= Warmup.memthresh and self.red) or (ao.mem >= Warmup.memthresh2 and self.orange) or (ao.mem >= Warmup.memthresh3 and self.yellow) or self.green
        local outstr = string.format("%s%.3f sec|r | %s (%s%d KiB|r)%s", tc, ao.time, ao.name, mc, ao.mem, gc)

        self.myframe:AddMessage(outstr)
end


function Warmup:OnLoad()
        tinsert(UISpecialFrames,"WarmupOutputFrame")

        this:RegisterEvent("VARIABLES_LOADED")
        this:RegisterEvent("ADDON_LOADED")

        self.WoW_ReloadUI = ReloadUI
        ReloadUI = function ()
                Warmup.reloading = true
                Warmup.WoW_ReloadUI()
        end

        self.WoW_LoadAddOn = LoadAddOn
        LoadAddOn = function (addon)
                Warmup.lasttime = GetTime()
                Warmup.lastmem, Warmup.lastgc = gcinfo()
                return Warmup.WoW_LoadAddOn(addon)
        end

        self:SetEventTable()
        for i,ev in pairs(self.events) do this:RegisterEvent(ev) end

        self.eventvals = {}
end


function Warmup:Init()
        if not WarmupSV then WarmupSV = {} end
        self.sv = WarmupSV
        self.sv.addoninfo = {}

        self.myframe = getglobal("WarmupChatFrame")
        self.frame = getglobal("ChatFrame2")
        for i=1,GetNumAddOns() do
                if IsAddOnLoaded(i) then
                        if GetAddOnInfo(i) ~= self.myname then
                                self.frame:AddMessage("Addon loaded before Warmup: ".. GetAddOnInfo(i))
                                self.myframe:AddMessage("Addon loaded before Warmup: ".. GetAddOnInfo(i))
                        end
                end
        end

        self.myframe:SetScript("OnMouseWheel", function ()
                if arg1 > 0 then this:ScrollUp()
                elseif arg1 < 0 then
                        if IsShiftKeyDown() then this:ScrollToBottom()
                        else this:ScrollDown() end
                end
        end)
        self.myframe:EnableMouseWheel(1)

end


function Warmup:OnUpdate()
        if self.gcalerts then
                local mem, gc = gcinfo()

                if (Warmup.gc and gc ~= Warmup.gc) then
                        local outstr = string.format("GC fired | mem %d --> %d | threshold %d --> %d", Warmup.mem, mem, Warmup.gc, gc)
                        Warmup.frame:AddMessage(outstr)
                        self.myframe:AddMessage(outstr)
                end

                self.mem, self.gc = mem, gc
        end
end


function Warmup:DumpEvents()
        local sortt = {}
        for ev,val in pairs(self.eventvals) do table.insert(sortt, ev) end

        table.sort(sortt, function (a,b) return a<b end)

        for i,ev in pairs(sortt) do
                self.myframe:AddMessage(string.format(self.red.."%d|r | %s%s|r", Warmup.eventvals[ev], self.green, ev))
        end
end


function Warmup:OnEvent()
        if self.eventvals then self.eventvals[event] = (self.eventvals[event] or 0) + 1 end

        if (event == "ADDON_LOADED") then self:ADDON_LOADED()
        elseif (event == "VARIABLES_LOADED") then self:VARIABLES_LOADED()
        elseif (event == "PLAYER_LOGIN") then self:PLAYER_LOGIN()
        elseif (event == "PLAYER_ENTERING_WORLD") then self:PLAYER_ENTERING_WORLD()
        elseif (event == "PLAYER_LEAVING_WORLD") then self:PLAYER_LEAVING_WORLD()
        elseif (event == "PLAYER_LOGOUT") then self:PLAYER_LOGOUT() end
end


function Warmup:ADDON_LOADED()
        local addontime, addonmem, addongc = GetTime(), gcinfo()
        local diff = addonmem - self.lastmem
        local hadgc

        if not self.myframe then self:Init() end

        local aoinfo = {
                name = arg1,
                time = addontime - self.lasttime,
                mem = addonmem - self.lastmem,
        }

        -- When LUA performs a GC it sets the new threshold to the new memory use * 1.25
        -- so we can figure out how much memory was freed!

        if addongc ~= self.lastgc then
                diff = addonmem - (addongc/1.25) + self.lastgc - self.lastmem
                hadgc = true
                aoinfo.mem = addonmem - (addongc/1.25) + self.lastgc - self.lastmem;
                aoinfo.gc = true
        end

        self:PutOutAO(aoinfo)
        table.insert(self.sv.addoninfo, aoinfo)

        if (addontime - self.lasttime) > self.longesttime then
                self.longesttime = addontime - Warmup.lasttime
                self.longestaddon = arg1
        end
        if (diff) > self.biggestmem then
                self.biggestmem = diff
                self.biggestaddon = arg1
        end
        self.totalmem = Warmup.totalmem + diff
        self.lasttime, self.lastmem, self.lastgc = addontime, addonmem, addongc
end


function Warmup:VARIABLES_LOADED()
        self.varsloadtime = GetTime()
        if self.sv.time then
                self:PutOut("ReloadUI", self.green, self.inittime - self.sv.time)
        end
        self:PutOut("Addon Loadup", self.green, self.varsloadtime - self.inittime, self.lastmem - self.initmem)

        self:PutOut("Longest addon: ".. self.longestaddon, self.yellow, self.longesttime)
        self:PutOut("Biggest addon: ".. self.biggestaddon, self.yellow, nil, self.biggestmem)

        this:RegisterEvent("PLAYER_LOGIN")
        this:UnregisterEvent("VARIABLES_LOADED")

        SlashCmdList["RELOADTIME"] = function() ReloadUI() end
        SLASH_RELOADTIME1 = "/rlt"

        SlashCmdList["WARMUP"] = function (msg) Warmup:Slash(msg) end
        SLASH_WARMUP1 = "/wu"
        SLASH_WARMUP2 = "/warmup"
end


function Warmup:PLAYER_LOGIN()
        self.logging = true
        this:RegisterEvent("PLAYER_ENTERING_WORLD")
end


function Warmup:PLAYER_ENTERING_WORLD()
        if self.inittime and self.logging then
                local entrytime = GetTime()

                self:PutOut("World entry", self.green, entrytime - self.varsloadtime)

                if self.sv.time then self:PutOut("Total time", self.green, entrytime - self.sv.time)
                else self:PutOut("Total time", self.green, entrytime - Warmup.inittime) end

                self.sv.time = nil
                self.varsloadtime = nil
        elseif self.sv.time then
                self:PutOut("Zoning", self.green, GetTime() - self.sv.time)
                self.sv.time = nil
        end
        self.logging = nil
        this:UnregisterEvent("PLAYER_LOGIN")
        this:UnregisterEvent("PLAYER_LOGOUT")
        this:UnregisterEvent("PLAYER_ENTERING_WORLD")
        this:RegisterEvent("PLAYER_LEAVING_WORLD")

        for i,ev in pairs(Warmup.events) do this:UnregisterEvent(ev) end

        self:DumpEvents()
        self.events = nil
        self.eventvals = nil
end


function Warmup:PLAYER_LEAVING_WORLD()
        self.sv.time = GetTime()
        this:RegisterEvent("PLAYER_ENTERING_WORLD")
        this:RegisterEvent("PLAYER_LOGOUT")
        this:UnregisterEvent("PLAYER_LEAVING_WORLD")

        self:SetEventTable()

        for i,ev in pairs(Warmup.events) do this:RegisterEvent(ev) end

        self.eventvals = {}
end


function Warmup:PLAYER_LOGOUT()
        if not self.reloading then self.sv.time = nil end
end




function Warmup:Slash(msg)
        if (WarmupOutputFrame:IsVisible()) then WarmupOutputFrame:Hide()
        else WarmupOutputFrame:Show() end
end


function Warmup:SetEventTable()
        self.events = {
                "ACTIONBAR_HIDEGRID",
                "ACTIONBAR_PAGE_CHANGED",
                "ACTIONBAR_SHOWGRID",
                "ACTIONBAR_SLOT_CHANGED",
                "ACTIONBAR_UPDATE_COOLDOWN",
                "ACTIONBAR_UPDATE_STATE",
                "ACTIONBAR_UPDATE_USABLE",
                "AREA_SPIRIT_HEALER_IN_RANGE",
                "AREA_SPIRIT_HEALER_OUT_OF_RANGE",
                "AUCTION_BIDDER_LIST_UPDATE",
                "AUCTION_HOUSE_CLOSED",
                "AUCTION_HOUSE_SHOW",
                "AUCTION_ITEM_LIST_UPDATE",
                "AUCTION_OWNED_LIST_UPDATE",
                "AUTOEQUIP_BIND_CONFIRM",
                "AUTOFOLLOW_BEGIN",
                "AUTOFOLLOW_END",
                "BAG_CLOSED",
                "BAG_OPEN",
                "BAG_UPDATE",
                "BAG_UPDATE_COOLDOWN",
                "BANKFRAME_CLOSED",
                "BANKFRAME_OPENED",
                "BATTLEFIELDS_CLOSED",
                "BATTLEFIELDS_SHOW",
                "BILLING_NAG_DIALOG",
                "BIND_ENCHANT",
                "CANCEL_LOOT_ROLL",
                "CHARACTER_LIST_UPDATE",
                "CHARACTER_POINTS_CHANGED",
                "CHAT_MSG",
                "CHAT_MSG_AFK",
                "CHAT_MSG_BG_SYSTEM_ALLIANCE",
                "CHAT_MSG_BG_SYSTEM_HORDE",
                "CHAT_MSG_BG_SYSTEM_NEUTRAL",
                "CHAT_MSG_CHANNEL",
                "CHAT_MSG_CHANNEL_JOIN",
                "CHAT_MSG_CHANNEL_LEAVE",
                "CHAT_MSG_CHANNEL_LIST",
                "CHAT_MSG_CHANNEL_NOTICE",
                "CHAT_MSG_CHANNEL_NOTICE_USER",
                "CHAT_MSG_COMBAT_CREATURE_VS_CREATURE_HITS",
                "CHAT_MSG_COMBAT_CREATURE_VS_CREATURE_MISSES",
                "CHAT_MSG_COMBAT_CREATURE_VS_PARTY_HITS",
                "CHAT_MSG_COMBAT_CREATURE_VS_PARTY_MISSES",
                "CHAT_MSG_COMBAT_CREATURE_VS_SELF_HITS",
                "CHAT_MSG_COMBAT_CREATURE_VS_SELF_MISSES",
                "CHAT_MSG_COMBAT_ERROR",
                "CHAT_MSG_COMBAT_FRIENDLYPLAYER_HITS",
                "CHAT_MSG_COMBAT_FRIENDLYPLAYER_MISSES",
                "CHAT_MSG_COMBAT_FRIENDLY_DEATH",
                "CHAT_MSG_COMBAT_HONOR_GAIN",
                "CHAT_MSG_COMBAT_HOSTILEPLAYER_HITS",
                "CHAT_MSG_COMBAT_HOSTILEPLAYER_MISSES",
                "CHAT_MSG_COMBAT_HOSTILE_DEATH",
                "CHAT_MSG_COMBAT_MISC_INFO",
                "CHAT_MSG_COMBAT_PARTY_HITS",
                "CHAT_MSG_COMBAT_PARTY_MISSES",
                "CHAT_MSG_COMBAT_PET_HITS",
                "CHAT_MSG_COMBAT_PET_MISSES",
                "CHAT_MSG_COMBAT_SELF_HITS",
                "CHAT_MSG_COMBAT_SELF_MISSES",
                "CHAT_MSG_COMBAT_XP_GAIN",
                "CHAT_MSG_DND",
                "CHAT_MSG_EMOTE",
                "CHAT_MSG_GUILD",
                "CHAT_MSG_IGNORED",
                "CHAT_MSG_LOOT",
                "CHAT_MSG_MONSTER_EMOTE",
                "CHAT_MSG_MONSTER_SAY",
                "CHAT_MSG_MONSTER_WHISPER",
                "CHAT_MSG_MONSTER_YELL",
                "CHAT_MSG_OFFICER",
                "CHAT_MSG_PARTY",
                "CHAT_MSG_RAID",
                "CHAT_MSG_SAY",
                "CHAT_MSG_SKILL",
                "CHAT_MSG_SPELL_AURA_GONE_OTHER",
                "CHAT_MSG_SPELL_AURA_GONE_SELF",
                "CHAT_MSG_SPELL_BREAK_AURA",
                "CHAT_MSG_SPELL_CREATURE_VS_CREATURE_BUFF",
                "CHAT_MSG_SPELL_CREATURE_VS_CREATURE_DAMAGE",
                "CHAT_MSG_SPELL_CREATURE_VS_PARTY_BUFF",
                "CHAT_MSG_SPELL_CREATURE_VS_PARTY_DAMAGE",
                "CHAT_MSG_SPELL_CREATURE_VS_SELF_BUFF",
                "CHAT_MSG_SPELL_CREATURE_VS_SELF_DAMAGE",
                "CHAT_MSG_SPELL_DAMAGESHIELDS_ON_OTHERS",
                "CHAT_MSG_SPELL_DAMAGESHIELDS_ON_SELF",
                "CHAT_MSG_SPELL_FAILED_LOCALPLAYER",
                "CHAT_MSG_SPELL_FRIENDLYPLAYER_BUFF",
                "CHAT_MSG_SPELL_FRIENDLYPLAYER_DAMAGE",
                "CHAT_MSG_SPELL_HOSTILEPLAYER_BUFF",
                "CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE",
                "CHAT_MSG_SPELL_ITEM_ENCHANTMENTS",
                "CHAT_MSG_SPELL_PARTY_BUFF",
                "CHAT_MSG_SPELL_PARTY_DAMAGE",
                "CHAT_MSG_SPELL_PERIODIC_CREATURE_BUFFS",
                "CHAT_MSG_SPELL_PERIODIC_CREATURE_DAMAGE",
                "CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_BUFFS",
                "CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_DAMAGE",
                "CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_BUFFS",
                "CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_DAMAGE",
                "CHAT_MSG_SPELL_PERIODIC_PARTY_BUFFS",
                "CHAT_MSG_SPELL_PERIODIC_PARTY_DAMAGE",
                "CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS",
                "CHAT_MSG_SPELL_PERIODIC_SELF_DAMAGE",
                "CHAT_MSG_SPELL_PET_BUFF",
                "CHAT_MSG_SPELL_PET_DAMAGE",
                "CHAT_MSG_SPELL_SELF_BUFF",
                "CHAT_MSG_SPELL_SELF_DAMAGE",
                "CHAT_MSG_SPELL_TRADESKILLS",
                "CHAT_MSG_SYSTEM",
                "CHAT_MSG_TEXT_EMOTE",
                "CHAT_MSG_WHISPER",
                "CHAT_MSG_WHISPER_INFORM",
                "CHAT_MSG_YELL",
                "CINEMATIC_START",
                "CINEMATIC_STOP",
                "CLEAR_TOOLTIP",
                "CLOSE_INBOX_ITEM",
                "CLOSE_TABARD_FRAME",
                "CLOSE_WORLD_MAP",
                "CONFIRM_BINDER",
                "CONFIRM_LOOT_ROLL",
                "CONFIRM_PET_UNLEARN",
                "CONFIRM_SUMMON",
                "CONFIRM_TALENT_WIPE",
                "CONFIRM_XP_LOSS",
                "CORPSE_IN_INSTANCE",
                "CORPSE_IN_RANGE",
                "CORPSE_OUT_OF_RANGE",
                "CRAFT_CLOSE",
                "CRAFT_SHOW",
                "CRAFT_UPDATE",
                "CURRENT_SPELL_CAST_CHANGED",
                "CURSOR_UPDATE",
                "CVAR_UPDATE",
                "DELETE_ITEM_CONFIRM",
                "DISPLAY_SIZE_CHANGED",
                "DUEL_FINISHED",
                "DUEL_INBOUNDS",
                "DUEL_OUTOFBOUNDS",
                "DUEL_REQUESTED",
                "EQUIP_BIND_CONFIRM",
                "EXECUTE_CHAT_LINE",
                "FRIENDLIST_SHOW",
                "FRIENDLIST_UPDATE",
                "GOSSIP_CLOSED",
                "GOSSIP_ENTER_CODE",
                "GOSSIP_SHOW",
                "GUILD_INVITE_CANCEL",
                "GUILD_INVITE_REQUEST",
                "GUILD_MOTD",
                "GUILD_REGISTRAR_CLOSED",
                "GUILD_REGISTRAR_SHOW",
                "GUILD_ROSTER_SHOW",
                "GUILD_ROSTER_UPDATE",
                "IGNORELIST_UPDATE",
                "IGR_BILLING_NAG_DIALOG",
                "INSTANCE_BOOT_START",
                "INSTANCE_BOOT_STOP",
                "ITEM_LOCK_CHANGED",
                "ITEM_PUSH",
                "ITEM_TEXT_BEGIN",
                "ITEM_TEXT_CLOSED",
                "ITEM_TEXT_READY",
                "ITEM_TEXT_TRANSLATION",
                "LANGUAGE_LIST_CHANGED",
                "LEARNED_SPELL_IN_TAB",
                "LOCALPLAYER_PET_RENAMED",
                "LOGOUT_CANCEL",
                "LOOT_BIND_CONFIRM",
                "LOOT_CLOSED",
                "LOOT_OPENED",
                "LOOT_SLOT_CLEARED",
                "MAIL_CLOSED",
                "MAIL_FAILED",
                "MAIL_INBOX_UPDATE",
                "MAIL_SEND_INFO_UPDATE",
                "MAIL_SEND_SUCCESS",
                "MAIL_SHOW",
                "MEETINGSTONE_CHANGED",
                "MEMORY_EXHAUSTED",
                "MEMORY_RECOVERED",
                "MERCHANT_CLOSED",
                "MERCHANT_SHOW",
                "MERCHANT_UPDATE",
                "MINIMAP_PING",
                "MINIMAP_UPDATE_ZOOM",
                "MINIMAP_ZONE_CHANGED",
                "MIRROR_TIMER_PAUSE",
                "MIRROR_TIMER_START",
                "MIRROR_TIMER_STOP",
                "NEW_AUCTION_UPDATE",
                "OPEN_MASTER_LOOT_LIST",
                "OPEN_TABARD_FRAME",
                "PARTY_INVITE_CANCEL",
                "PARTY_INVITE_REQUEST",
                "PARTY_LEADER_CHANGED",
                "PARTY_LOOT_METHOD_CHANGED",
                "PARTY_MEMBERS_CHANGED",
                "PARTY_MEMBER_DISABLE",
                "PARTY_MEMBER_ENABLE",
                "PETITION_CLOSED",
                "PETITION_SHOW",
                "PET_ATTACK_START",
                "PET_ATTACK_STOP",
                "PET_BAR_HIDEGRID",
                "PET_BAR_SHOWGRID",
                "PET_BAR_UPDATE",
                "PET_BAR_UPDATE_COOLDOWN",
                "PET_STABLE_CLOSED",
                "PET_STABLE_SHOW",
                "PET_STABLE_UPDATE",
                "PET_STABLE_UPDATE_PAPERDOLL",
                "PET_UI_CLOSE",
                "PET_UI_UPDATE",
                "PLAYERBANKBAGSLOTS_CHANGED",
                "PLAYERBANKSLOTS_CHANGED",
                "PLAYER_ALIVE",
                "PLAYER_AURAS_CHANGED",
                "PLAYER_CAMPING",
                "PLAYER_COMBO_POINTS",
                "PLAYER_CONTROL_GAINED",
                "PLAYER_CONTROL_LOST",
                "PLAYER_DAMAGE_DONE_MODS",
                "PLAYER_DEAD",
                "PLAYER_FARSIGHT_FOCUS_CHANGED",
                "PLAYER_ENTER_COMBAT",
                "PLAYER_FLAGS_CHANGED",
                "PLAYER_GUILD_UPDATE",
                "PLAYER_LEAVE_COMBAT",
                "PLAYER_LEVEL_UP",
                "PLAYER_LOGIN",
                "PLAYER_LOGOUT",
                "PLAYER_MONEY",
                "PLAYER_PET_CHANGED",
                "PLAYER_PVP_KILLS_CHANGED",
                "PLAYER_PVP_RANK_CHANGED",
                "PLAYER_PVPLEVEL_CHANGED",
                "PLAYER_QUITING",
                "PLAYER_REGEN_DISABLED",
                "PLAYER_REGEN_ENABLED",
                "PLAYER_SKINNED",
                "PLAYER_TARGET_CHANGED",
                "PLAYER_TRADE_MONEY",
                "PLAYER_UNGHOST",
                "PLAYER_UPDATE_RESTING",
                "PLAYER_XP_UPDATE",
                "PLAYTIME_CHANGED",
                "QUEST_ACCEPT_CONFIRM",
                "QUEST_COMPLETE",
                "QUEST_DETAIL",
                "QUEST_FINISHED",
                "QUEST_GREETING",
                "QUEST_ITEM_UPDATE",
                "QUEST_LOG_UPDATE",
                "QUEST_PROGRESS",
                "RAID_ROSTER_UPDATE",
                "REPLACE_ENCHANT",
                "RESURRECT_REQUEST",
                "SCREENSHOT_FAILED",
                "SCREENSHOT_SUCCEEDED",
                "SELECT_FIRST_CHARACTER",
                "SELECT_LAST_CHARACTER",
                "SEND_MAIL_COD_CHANGED",
                "SEND_MAIL_MONEY_CHANGED",
                "SHOW_COMPARE_TOOLTIP",
                "SKILL_LINES_CHANGED",
                "SPELLCAST_CHANNEL_START",
                "SPELLCAST_CHANNEL_UPDATE",
                "SPELLCAST_DELAYED",
                "SPELLCAST_FAILED",
                "SPELLCAST_INTERRUPTED",
                "SPELLCAST_START",
                "SPELLCAST_STOP",
                "SPELLS_CHANGED",
                "SPELL_UPDATE_COOLDOWN",
                "SPELL_UPDATE_USABLE",
                "START_AUTOREPEAT_SPELL",
                "START_LOOT_ROLL",
                "STOP_AUTOREPEAT_SPELL",
                "SUGGEST_REALM",
                "SYSMSG",
                "TABARD_CANSAVE_CHANGED",
                "TABARD_SAVE_PENDING",
                "TAXIMAP_CLOSED",
                "TAXIMAP_OPENED",
                "TIME_PLAYED_MSG",
                "TOOLTIP_ADD_MONEY",
                "TOOLTIP_ANCHOR_DEFAULT",
                "TRADE_ACCEPT_UPDATE",
                "TRADE_CLOSED",
                "TRADE_MONEY_CHANGED",
                "TRADE_PLAYER_ITEM_CHANGED",
                "TRADE_REPLACE_ENCHANT",
                "TRADE_REQUEST",
                "TRADE_REQUEST_CANCEL",
                "TRADE_SHOW",
                "TRADE_SKILL_CLOSE",
                "TRADE_SKILL_SHOW",
                "TRADE_SKILL_UPDATE",
                "TRADE_TARGET_ITEM_CHANGED",
                "TRADE_UPDATE",
                "TRAINER_CLOSED",
                "TRAINER_SHOW",
                "TRAINER_UPDATE",
                "TUTORIAL_TRIGGER",
                "UI_ERROR_MESSAGE",
                "UI_INFO_MESSAGE",
                "UNIT_ATTACK",
                "UNIT_ATTACK_POWER",
                "UNIT_ATTACK_SPEED",
                "UNIT_AURA",
                "UNIT_AURASTATE",
                "UNIT_CLASSIFICATION_CHANGED",
                "UNIT_COMBAT",
                "UNIT_COMBO_POINTS",
                "UNIT_DAMAGE",
                "UNIT_DEFENSE",
                "UNIT_DISPLAYPOWER",
                "UNIT_DYNAMIC_FLAGS",
                "UNIT_ENERGY",
                "UNIT_FACTION",
                "UNIT_FLAGS",
                "UNIT_FOCUS",
                "UNIT_HAPPINESS",
                "UNIT_HEALTH",
                "UNIT_INVENTORY_CHANGED",
                "UNIT_LEVEL",
                "UNIT_LOYALTY",
                "UNIT_MANA",
                "UNIT_MAXENERGY",
                "UNIT_MAXFOCUS",
                "UNIT_MAXHAPPINESS",
                "UNIT_MAXHEALTH",
                "UNIT_MAXMANA",
                "UNIT_MAXRAGE",
                "UNIT_MODEL_CHANGED",
                "UNIT_NAME_UPDATE",
                "UNIT_PET",
                "UNIT_PET_EXPERIENCE",
                "UNIT_PET_TRAINING_POINTS",
                "UNIT_PORTRAIT_UPDATE",
                "UNIT_PVP_UPDATE",
                "UNIT_QUEST_LOG_CHANGED",
                "UNIT_RAGE",
                "UNIT_RANGEDDAMAGE",
                "UNIT_RANGED_ATTACK_POWER",
                "UNIT_RESISTANCES",
                "UNIT_SPELLMISS",
                "UNIT_STATS",
                "UPDATE_BATTLEFIELD_SCORE",
                "UPDATE_BATTLEFIELD_STATUS",
                "UPDATE_BINDINGS",
                "UPDATE_BONUS_ACTIONBAR",
                "UPDATE_CHAT_COLOR",
                "UPDATE_CHAT_WINDOWS",
                "UPDATE_EXHAUSTION",
                "UPDATE_FACTION",
                "UPDATE_GM_STATUS",
                "UPDATE_INVENTORY_ALERTS",
                "UPDATE_MACROS",
                "UPDATE_MASTER_LOOT_LIST",
                "UPDATE_MOUSEOVER_UNIT",
                "UPDATE_PENDING_MAIL",
                "UPDATE_SELECTED_CHARACTER",
                "UPDATE_SHAPESHIFT_FORMS",
                "UPDATE_TICKET",
                "UPDATE_TRADESKILL_RECAST",
                "UPDATE_WORLD_STATES",
                "USE_BIND_CONFIRM",
                "VARIABLES_LOADED",
                "WHO_LIST_UPDATE",
                "WORLD_MAP_NAME_UPDATE",
                "WORLD_MAP_UPDATE",
                "ZONE_CHANGED",
                "ZONE_CHANGED_INDOORS",
                "ZONE_CHANGED_NEW_AREA",
                "ZONE_UNDER_ATTACK",
        }
end