--[[ ############################################################################## _____/\\\\\\\\\\\____/\\\________/\\\__/\\\________/\\\__/\\\\\\\\\\\_ # ___/\\\/////////\\\_\/\\\_______\/\\\_\/\\\_______\/\\\_\/////\\\///__ # __\//\\\______\///__\//\\\______/\\\__\/\\\_______\/\\\_____\/\\\_____ # ___\////\\\__________\//\\\____/\\\___\/\\\_______\/\\\_____\/\\\_____ # ______\////\\\________\//\\\__/\\\____\/\\\_______\/\\\_____\/\\\_____ # _________\////\\\______\//\\\/\\\_____\/\\\_______\/\\\_____\/\\\_____ # __/\\\______\//\\\______\//\\\\\______\//\\\______/\\\______\/\\\_____ # _\///\\\\\\\\\\\/________\//\\\________\///\\\\\\\\\/____/\\\\\\\\\\\_# ___\///////////___________\///___________\/////////_____\///////////_# ############################################################################## S U P E R - V I L L A I N - U I By: Munglunch # ############################################################################## STATS:Extend EXAMPLE USAGE: MOD:Extend(newStat,eventList,onEvents,update,click,focus,blur,load) ########################################################## LOCALIZED LUA FUNCTIONS ########################################################## ]]-- --[[ GLOBALS ]]-- local _G = _G; local unpack = _G.unpack; local select = _G.select; local string = _G.string; --[[ STRING METHODS ]]-- local match, sub, join = string.match, string.sub, string.join; --[[ ########################################################## GET ADDON DATA ########################################################## ]]-- local SuperVillain, L = unpack(select(2, ...)); local MOD = SuperVillain.SVStats; --[[ ########################################################## CALL TO ARMS STATS ########################################################## ]]-- local StatEvents = {'PLAYER_ENTERING_WORLD', 'COMBAT_LOG_EVENT_UNFILTERED', "PLAYER_LEAVE_COMBAT", 'PLAYER_REGEN_DISABLED', 'UNIT_PET'}; local PlayerEvents = {SWING_DAMAGE = true, RANGE_DAMAGE = true, SPELL_DAMAGE = true, SPELL_PERIODIC_DAMAGE = true, DAMAGE_SHIELD = true, DAMAGE_SPLIT = true, SPELL_EXTRA_ATTACKS = true} local playerID, petID local DMGTotal, lastDMGAmount = 0, 0 local combatTime = 0 local timeStamp = 0 local lastSegment = 0 local lastPanel local displayString = ''; local function Reset() timeStamp = 0 combatTime = 0 DMGTotal = 0 lastDMGAmount = 0 end local function GetDPS(self) local DPS if DMGTotal == 0 or combatTime == 0 then DPS = "0.0" else DPS = (DMGTotal) / (combatTime) end self.text:SetFormattedText(displayString, L["DPS"]..': ', DPS) end local function DPS_OnClick(self) Reset() GetDPS(self) end local function DPS_OnEnter(self) MOD:Tip(self) MOD.tooltip:AddDoubleLine("Damage Total:", DMGTotal, 1, 1, 1) MOD:ShowTip() end local function DPS_OnEvent(self, event, ...) lastPanel = self if event == "PLAYER_ENTERING_WORLD" then playerID = UnitGUID('player') elseif event == 'PLAYER_REGEN_DISABLED' or event == "PLAYER_LEAVE_COMBAT" then local now = time() if now - lastSegment > 20 then --time since the last segment Reset() end lastSegment = now elseif event == 'COMBAT_LOG_EVENT_UNFILTERED' then if not PlayerEvents[select(2, ...)] then return end local id = select(4, ...) if id == playerID or id == petID then if timeStamp == 0 then timeStamp = select(1, ...) end lastSegment = timeStamp combatTime = select(1, ...) - timeStamp if select(2, ...) == "SWING_DAMAGE" then lastDMGAmount = select(12, ...) else lastDMGAmount = select(15, ...) end DMGTotal = DMGTotal + lastDMGAmount end elseif event == UNIT_PET then petID = UnitGUID("pet") end GetDPS(self) end local DPSColorUpdate = function() local hexColor = SuperVillain:HexColor("highlight"); displayString = join("", "%s", hexColor, "%.1f|r") if lastPanel ~= nil then DPS_OnEvent(lastPanel) end end SuperVillain.Registry:SetCallback(DPSColorUpdate) MOD:Extend('DPS', StatEvents, DPS_OnEvent, nil, DPS_OnClick, DPS_OnEnter)