local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false) local validUnits = {"player", "target", "focus", "pet", "vehicle", "targettarget", "main hand weapon", "off hand weapon"} local buffOrDebuff = {"buff", "debuff", "charges", "spell count"} -- OVERRIDE function IceStackCounter_GetOptions(frame, opts) opts["customHeader"] = { type = 'header', name = L["Aura settings"], order = 30.1, } opts["auraTarget"] = { type = 'select', values = validUnits, name = L["Unit to track"], desc = L["Select which unit that this bar should be looking for buffs/debuffs on"], get = function(info) return IceHUD:GetSelectValue(info, frame.moduleSettings.auraTarget) end, set = function(info, v) frame.moduleSettings.auraTarget = info.option.values[v] frame.unit = info.option.values[v] frame:Redraw() IceHUD:NotifyOptionsChange() end, disabled = function() return not frame.moduleSettings.enabled or frame.moduleSettings.auraType == "charges" or frame.moduleSettings.auraType == "spell count" end, order = 30.4, } opts["auraType"] = { type = 'select', values = buffOrDebuff, name = L["Buff or debuff?"], desc = L["Whether we are tracking a buff or debuff"], get = function(info) return IceHUD:GetSelectValue(info, frame.moduleSettings.auraType) end, set = function(info, v) frame.moduleSettings.auraType = info.option.values[v] frame:Redraw() end, disabled = function() return not frame.moduleSettings.enabled or frame.unit == "main hand weapon" or frame.unit == "off hand weapon" end, order = 30.5, } opts["auraName"] = { type = 'input', name = L["Aura to track"], desc = L["Which buff/debuff this counter will be tracking. \n\nRemember to press ENTER after filling out this box with the name you want or it will not save."], get = function() return frame.moduleSettings.auraName end, set = function(info, v) frame.moduleSettings.auraName = v frame:Redraw() end, disabled = function() return not frame.moduleSettings.enabled or frame.unit == "main hand weapon" or frame.unit == "off hand weapon" end, usage = "", order = 30.6, } opts["trackOnlyMine"] = { type = 'toggle', name = L["Only track auras by me"], desc = L["Checking this means that only buffs or debuffs that the player applied will trigger this bar"], get = function() return frame.moduleSettings.onlyMine end, set = function(info, v) frame.moduleSettings.onlyMine = v frame:Redraw() end, disabled = function() return not frame.moduleSettings.enabled or frame.unit == "main hand weapon" or frame.unit == "off hand weapon" or frame.moduleSettings.auraType == "charges" or frame.moduleSettings.auraType == "spell count" end, order = 30.7, } opts["maxCount"] = { type = 'input', name = L["Maximum applications"], desc = L["How many total applications of this buff/debuff can be applied. For example, only 5 sunders can ever be on a target, so this would be set to 5 for tracking Sunder.\n\nRemember to press ENTER after filling out this box with the name you want or it will not save."], get = function() return tostring(frame.moduleSettings.maxCount) end, set = function(info, v) if not v or not tonumber(v) or tonumber(v) <= 0 then v = 5 end frame.moduleSettings.maxCount = tonumber(v) frame:Redraw() end, disabled = function() return not frame.moduleSettings.enabled or frame.moduleSettings.auraType == "charges" end, usage = "", order = 30.9, } end function IceStackCounter_GetMaxCount(frame) if frame.moduleSettings.auraType == "charges" then local _, max = GetSpellCharges(frame.moduleSettings.auraName) return max or 1 else return frame.moduleSettings.maxCount end end function IceStackCounter_GetDefaultSettings(defaults) defaults["maxCount"] = 5 defaults["auraTarget"] = "player" defaults["auraName"] = "" defaults["onlyMine"] = true defaults["auraType"] = "buff" end function IceStackCounter_Enable(frame) frame:RegisterEvent("UNIT_AURA", "UpdateCustomCount") frame:RegisterEvent("UNIT_PET", "UpdateCustomCount") frame:RegisterEvent("PLAYER_PET_CHANGED", "UpdateCustomCount") frame:RegisterEvent("PLAYER_FOCUS_CHANGED", "UpdateCustomCount") frame:RegisterEvent("PLAYER_TARGET_CHANGED", "UpdateCustomCount") frame:RegisterEvent("PLAYER_DEAD", "UpdateCustomCount") frame:RegisterEvent("SPELL_UPDATE_CHARGES", "UpdateCustomCount") frame.unit = frame.moduleSettings.auraTarget or "player" if not tonumber(frame.moduleSettings.maxCount) or tonumber(frame.moduleSettings.maxCount) <= 0 then frame.moduleSettings.maxCount = 5 frame:Redraw() end end function IceStackCounter_GetCount(frame) if not frame.moduleSettings.auraName then return end local points if IceHUD.IceCore:IsInConfigMode() then points = tonumber(frame.moduleSettings.maxCount) else if frame.moduleSettings.auraType == "charges" then points = GetSpellCharges(frame.moduleSettings.auraName) or 0 elseif frame.moduleSettings.auraType == "spell count" then points = GetSpellCount(frame.moduleSettings.auraName) or 0 else points = IceHUD:GetAuraCount(frame.moduleSettings.auraType == "buff" and "HELPFUL" or "HARMFUL", frame.unit, frame.moduleSettings.auraName, frame.moduleSettings.onlyMine, true) end end frame.lastPoints = points if (points == 0) then points = nil end return points end function IceStackCounter_UseTargetAlpha(frame) return frame.lastPoints ~= nil and frame.lastPoints > 0 end