--[[ ############################################################################## _____/\\\\\\\\\\\____/\\\________/\\\__/\\\________/\\\__/\\\\\\\\\\\_ # ___/\\\/////////\\\_\/\\\_______\/\\\_\/\\\_______\/\\\_\/////\\\///__ # __\//\\\______\///__\//\\\______/\\\__\/\\\_______\/\\\_____\/\\\_____ # ___\////\\\__________\//\\\____/\\\___\/\\\_______\/\\\_____\/\\\_____ # ______\////\\\________\//\\\__/\\\____\/\\\_______\/\\\_____\/\\\_____ # _________\////\\\______\//\\\/\\\_____\/\\\_______\/\\\_____\/\\\_____ # __/\\\______\//\\\______\//\\\\\______\//\\\______/\\\______\/\\\_____ # _\///\\\\\\\\\\\/________\//\\\________\///\\\\\\\\\/____/\\\\\\\\\\\_# ___\///////////___________\///___________\/////////_____\///////////_# ############################################################################## 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) ########################################################## LOCALIZED LUA FUNCTIONS ########################################################## ]]-- --[[ GLOBALS ]]-- local _G = _G; local unpack = _G.unpack; local select = _G.select; local pairs = _G.pairs; local ipairs = _G.ipairs; local type = _G.type; local error = _G.error; local pcall = _G.pcall; local assert = _G.assert; local tostring = _G.tostring; local tonumber = _G.tonumber; local tinsert = _G.tinsert; local string = _G.string; local math = _G.math; local table = _G.table; --[[ STRING METHODS ]]-- local lower, upper = string.lower, string.upper; local find, format, len, split = string.find, string.format, string.len, string.split; local match, sub, join = string.match, string.sub, string.join; local gmatch, gsub = string.gmatch, string.gsub; --[[ MATH METHODS ]]-- local abs, ceil, floor, round = math.abs, math.ceil, math.floor, math.round; -- Basic --[[ TABLE METHODS ]]-- local twipe, tsort = table.wipe, table.sort; --[[ ########################################################## 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 = {SPELL_HEAL = true, SPELL_PERIODIC_HEAL = true} local playerID, petID local healTotal, lastHealAmount = 0, 0 local combatTime = 0 local timeStamp = 0 local lastSegment = 0 local lastPanel local hexColor = "FFFFFF"; local displayString = "%s: |cff%s%.1f|r"; local join = string.join local max = math.max local function Reset() timeStamp = 0 combatTime = 0 healTotal = 0 lastHealAmount = 0 end local function GetHPS(self) local HPS if healTotal == 0 or combatTime == 0 then HPS = "0.0" else HPS = (healTotal) / (combatTime) end self.text:SetFormattedText(displayString, L["HPS"], hexColor, HPS) end local function HPS_OnClick(self) Reset() GetHPS(self) end local function HPS_OnEnter(self) MOD:Tip(self) MOD.tooltip:AddDoubleLine("Damage Total:", healTotal, 1, 1, 1) MOD:ShowTip() end local function HPS_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 local overHeal = select(16, ...) lastSegment = timeStamp combatTime = select(1, ...) - timeStamp lastHealAmount = select(15, ...) healTotal = healTotal + max(0, lastHealAmount - overHeal) end elseif event == UNIT_PET then petID = UnitGUID("pet") end GetHPS(self) end local HPSColorUpdate = function() hexColor = SuperVillain:HexColor("highlight"); if lastPanel ~= nil then HPS_OnEvent(lastPanel) end end SuperVillain.Registry:SetCallback(HPSColorUpdate) MOD:Extend('HPS', StatEvents, HPS_OnEvent, nil, HPS_OnClick, HPS_OnEnter)