Compare with Previous | Blame | View Log
addon, ns = ... local util = ns.util local pinfo = { class = string.upper(select(2, UnitClass('player'))), level = UnitLevel("player") } local __, _, _, tocversion = GetBuildInfo() -- color definitions local defaults = { ["SHAMAN"] = { colors = { 0, 0, 1 }, blips = 5, }, ["PALADIN"] = { colors = { 0.81, 0.04, 0.97 }, blips = 3, }, ["DRUID"] = { colors = { 1, 1, 0 }, blips = 5, }, ["ROGUE"] = { colors = { 1, 1, 0 }, blips = 5, }, ["WARLOCK"] = { colors = { 0.81, 0.04, 0.97 }, blips = 3, }, ["PRIEST"] = { colors = { 0.8, 0.4, 0.8 }, blips = 3, }, } -- if we don't have a color definition we don't need to carry on if util.tmisses(defaults, pinfo.class) then return end local backdrop = { bgFile = [[Interface\ChatFrame\ChatFrameBackground]], edgeFile = [[Interface/Tooltips/UI-Tooltip-Border]], tile = true, tileSize = 4, edgeSize = 4, insets = { left = 1, right = 1, top = 1, bottom = 1 } } if rPwrConf == nil then rPwrConf = { ato = "CENTER", x = 0, y = 0, scale = 1, enabled = true, mycolors = nil, } end local max_blip, red, green, blue, catStance local cfg_size = 19 rCPFrame = CreateFrame("Frame", "rCPFrame") rCPFrame:RegisterEvent("VARIABLES_LOADED") rCPFrame:SetScript("OnEvent", function(self, event, ...) if event == "VARIABLES_LOADED" then self:UnregisterEvent("VARIABLES_LOADED") self:Init() end end) function rCPFrame:Init() max_blip, red, green, blue = initClass() if pinfo.class == "DRUID" or pinfo.class == "ROGUE" then makeFrames(max_blip, red, green, blue, false) util.updateVisuals(max_blip, util.currCP(), red, green, blue) rCPFrame:RegisterEvent("UNIT_COMBO_POINTS") rCPFrame:RegisterEvent("PLAYER_TARGET_CHANGED") if pinfo.class == "DRUID" then -- turn display off when not in kitty druidShowHide() rCPFrame:RegisterEvent("UPDATE_SHAPESHIFT_FORM") end if pinfo.class == "ROGUE" then if rPwrConf.dpstack == true then -- envenom counter rCPFrame:RegisterEvent("UNIT_AURA") end end rCPFrame:SetScript("OnEvent", function(self, event, unit) if pinfo.class == "DRUID" and event == "UPDATE_SHAPESHIFT_FORM" then druidShowHide() end if pinfo.class == "ROGUE" and event == "UNIT_AURA" then if rPwrConf.dpstack == true and unit == "target" then local count = util.currDP() util.updateBorder(5, count, 0, 0, 0, 0, 1, 0) end end util.updateVisuals(max_blip, util.currCP(), red, green, blue) if pinfo.class == "ROGUE" then local count = util.currDP() util.updateBorder(5, count, 0, 0, 0, 0, 1, 0) end if pinfo.class == "DRUID" then druidShowHide() end end) end if pinfo.class == "PALADIN" then max_blip, red, green, blue = initClass() makeFrames(max_blip, red, green, blue, false) util.updateVisuals(max_blip, util.currHolyPower(), red, green, blue) rCPFrame:RegisterEvent("UNIT_POWER") rCPFrame:SetScript("OnEvent", function(self, event, unit, power) if unit ~= "player" or power ~= "HOLY_POWER" then return end util.updateVisuals(max_blip, util.currHolyPower(), red, green, blue) end) end if pinfo.class == "WARLOCK" then max_blip, red, green, blue = initClass() makeFrames(max_blip, red, green, blue, false) util.updateVisuals(max_blip, util.currShards(), red, green, blue) rCPFrame:RegisterEvent("UNIT_POWER") rCPFrame:RegisterEvent("PLAYER_ALIVE") rCPFrame:SetScript("OnEvent", function(self, event, unit, power) if event == "PLAYER_ALIVE" then util.updateVisuals(max_blip, util.currShards(), red, green, blue) end if unit ~= "player" or power ~= "SOUL_SHARDS" then return end util.updateVisuals(max_blip, util.currShards(), red, green, blue) end) end if pinfo.class == "SHAMAN" then rCPFrame.spec = GetPrimaryTalentTree() max_blip, red, green, blue = initClass() if rCPFrame.spec == 2 then cFunc = util.currMaelstrom rCPFrame:RegisterEvent("UNIT_AURA") elseif rCPFrame.spec == 1 then rCPFrame:RegisterEvent("UNIT_AURA") cFunc = util.currLB max_blip = 6 end rCPFrame:RegisterEvent("ACTIVE_TALENT_GROUP_CHANGED") shamanShowHide(rCPFrame.spec) if rCPFrame.spec ~= 3 then util.updateVisuals(max_blip, cFunc(), red, green, blue) end rCPFrame:SetScript("OnEvent", function(self, event, unit) if event == "ACTIVE_TALENT_GROUP_CHANGED" then rCPFrame.spec = GetPrimaryTalentTree() if rCPFrame.spec == 2 then rCPFrame:RegisterEvent("UNIT_AURA") cFunc = util.currMaelstrom max_blip = 5 shamanShowHide(rCPFrame.spec) util.updateVisuals(max_blip, cFunc(), red, green, blue) elseif rCPFrame.spec == 1 then rCPFrame:RegisterEvent("UNIT_AURA") cFunc = util.currLB max_blip = 6 shamanShowHide(rCPFrame.spec) util.updateVisuals(max_blip, cFunc(), red, green, blue) else rCPFrame:UnregisterEvent("UNIT_AURA") for i = 1, max_blip do _G['powerframe'..i]:Hide() end end else if unit ~= "player" then return end util.updateVisuals(max_blip, cFunc(), red, green, blue) end end) end if pinfo.class == "PRIEST" and GetPrimaryTalentTree() == 3 then if pinfo.level < 80 then print("Priest in Shadow spec detected but not 80, yet. Disabling to preserve pristine power in perpetuum. Reload UI after hitting 80.") return false end max_blip, red, green, blue = initClass() makeFrames(max_blip, red, green, blue, false) util.updateVisuals(max_blip, util.currOrbs(), red, green, blue) rCPFrame:RegisterEvent("UNIT_AURA") rCPFrame:RegisterEvent("ACTIVE_TALENT_GROUP_CHANGED") rCPFrame:SetScript("OnEvent", function(self, event, unit) if event == "UNIT_AURA" then if unit ~= "player" then return end util.updateVisuals(max_blip, util.currOrbs(), red, green, blue) elseif event == "ACTIVE_TALENT_GROUP_CHANGED" then if GetPrimaryTalentTree() == 3 then rCPFrame:RegisterEvent("UNIT_AURA") priestShowHide(true) util.updateVisuals(max_blip, util.currOrbs(), red, gree, blue) else rCPFrame:UnregisterEvent("UNIT_AURA") priestShowHide(false) end end end) end end genFrame = function(red, green, blue, height, width) local f = CreateFrame("Frame") f:SetWidth(width * (rPwrConf.ratio or 1)) f:SetHeight(height) f:SetBackdrop(backdrop) f:SetBackdropColor(red,green,blue,0.5) f:SetBackdropBorderColor(0,0,0,1) f:Show() return f end function makeFrames(num, red, green, blue, stretch) local mult = 1 if stretch then mult = 5 / num end for i = 1, num do _G['powerframe'..i] = genFrame(red, green, blue, cfg_size, cfg_size * mult) if i == 1 then local gb = _G['powerframe1'] gb:SetPoint(rPwrConf.ato, UIParent, rPwrConf.ato, rPwrConf.x, rPwrConf.y) gb:SetMovable(true) gb:EnableMouse(true) gb:RegisterForDrag("LeftButton") gb:SetScript("OnDragStart", function(self) if IsAltKeyDown() and IsShiftKeyDown() then self:StartMoving() end end) gb:SetScript("OnDragStop", function(self) self:StopMovingOrSizing() _,_, rPwrConf.ato, rPwrConf.x, rPwrConf.y = self:GetPoint(1) end) gb:SetScale(rPwrConf.scale) else _G['powerframe'..i]:SetPoint("TOPLEFT", _G['powerframe'..i-1], "TOPRIGHT", 1, 0) _G['powerframe'..i]:SetScale(rPwrConf.scale) end end end function initClass() local red, green, blue if rPwrConf.mycolors then red, green, blue = unpack(rPwrConf.mycolors) else red, green, blue = unpack(defaults[pinfo.class]["colors"]) end local blips = defaults[pinfo.class]["blips"] return blips, red, green, blue end local function kittyStance() local sid = 0 local cat = GetSpellInfo(768) for i=1, GetNumShapeshiftForms() do local _, name, _, _ = GetShapeshiftFormInfo(i) if name == cat then sid = i end end return sid end function druidShowHide() if GetShapeshiftForm() ~= kittyStance() and util.currCP() == 0 then for i = 1, 5 do rCPFrame:UnregisterEvent("UNIT_AURA") _G['powerframe'..i]:Hide() end else for i = 1, 5 do rCPFrame:RegisterEvent("UNIT_AURA") _G['powerframe'..i]:Show() end end end function priestShowHide(show) if show then for i = 1, 3 do _G['powerframe'..i]:Show() end else for i = 1, 3 do _G['powerframe'..i]:Hide() end end end function shamanShowHide(spec) if spec == 1 then for i = 1,6 do _G['powerframe'..i]:SetWidth(cfg_size * (5/6)) end _G['powerframe6']:Show() else for i = 1,5 do _G['powerframe'..i]:SetWidth(cfg_size) end _G['powerframe6']:Hide() end end function ShowColorPicker(r, g, b, cback) ColorPickerFrame:SetColorRGB(r,g,b); ColorPickerFrame.previousValues = {r,g,b}; ColorPickerFrame.func, ColorPickerFrame.opacityFunc, ColorPickerFrame.cancelFunc = cback, cback, cback; ColorPickerFrame:Hide(); ColorPickerFrame:Show(); end function colorCallback(bail) local nr, ng, nb if bail then red, green, blue = unpack(bail) else red, green, blue = ColorPickerFrame:GetColorRGB(); end util.updateVisuals(max_blip, max_blip, red, green, blue) rPwrConf.mycolors = { red, green, blue } end SLASH_RP1 = "/rp" SlashCmdList["RP"] = function(str) local switch, message = str:match("^(%S*)%s*(.-)$"); local cmd = string.lower(switch) local msg = string.lower(message) if cmd == "scale" then msg = tonumber(msg) or 1 if not(msg <= 5) then msg = 1 end for i=1, max_blip do rPwrConf.scale = msg _G['powerframe'..i]:SetScale(msg) end elseif cmd == "dpstack" then if rPwrConf.dpstack == nil or rPwrConf.dpstack == false then rPwrConf.dpstack = true rCPFrame:RegisterEvent("UNIT_AURA") else rPwrConf.dpstack = false for i = 1, 5 do _G["powerframe"..i]:SetBackdropBorderColor(0,0,0,1) -- black end rCPFrame:UnregisterEvent("UNIT_AURA") end elseif cmd == "color" then if msg == "set" then ShowColorPicker(red, green, blue, colorCallback) elseif msg == "reset" then red, green, blue = unpack(defaults[pinfo.class]["colors"]) ShowColorPicker(red, green, blue, colorCallback) end elseif cmd == "ratio" then ra = tonumber(msg) if ra < 0.2 or ra > 10 then ra = 1 end rPwrConf.ratio = ra for i = 1,max_blip do local p = _G['powerframe'..i] p:SetWidth(rPwrConf.ratio * floor(p:GetHeight())) end else print("|cFF006699ristretto|r Power") print("by Hoern, Nesingwary <hoern@d8c.us>") print("Usage:") print("/rp scale x||dpstack||color (set||reset)") print("dpstack: turn deadly poison stacks on/off") print("scale 0-5: grow/shrink blips") print("color set: pick a color, any color") print("color reset: ugh, that pink is hideous") end end