mischivin@33: local initialized = false; mischivin@14: mischivin@0: local dataobj = LibStub:GetLibrary("LibDataBroker-1.1"):NewDataObject("Spotlight", { mischivin@0: type = "data source", mischivin@3: text = "Nothing to track!", mischivin@0: icon = GetInventoryItemTexture("player", 16), mischivin@0: OnClick = function(clickedframe, button) mischivin@23: if button == "LeftButton" then mischivin@23: Spotlight.ShowPercent = not Spotlight.ShowPercent; mischivin@23: elseif button == "RightButton" then mischivin@23: Spotlight.ShowIcon = not Spotlight.ShowIcon; mischivin@23: end mischivin@0: Spotlight.Update(); mischivin@0: end, mischivin@0: }) mischivin@0: mischivin@5: SLASH_SPOTLIGHT1, SLASH_SPOTLIGHT2 = "/spotlight", "/Spotlight"; mischivin@5: mischivin@23: local ICONS = { mischivin@23: PvP = "|T1339312:12:12:0:0:512:128:416:432:42:58|t", mischivin@23: Dungeons = "|T1339312:12:12:0:0:512:128:416:432:24:40|t", mischivin@23: WorldQuests = "|T1339312:12:12:0:0:512:128:428:444:87:103|t", mischivin@23: } mischivin@23: mischivin@5: local function SlashHandler(msg) mischivin@9: print("|T" .. Spotlight.Icon .. ":0|t |cffe5cc80Spotlight|r - Artifact Hidden Skin Progress:"); mischivin@5: if Spotlight.IDs then mischivin@5: for key, value in pairs(Spotlight.IDs) do mischivin@26: if not Spotlight.Status[key].Completed then mischivin@26: print(" " .. ICONS[tostring(key)] .. " |cffe5cc80" .. key .. " - " .. Spotlight.Format(key, false) .. " (" .. Spotlight.Format(key, true) .. ")|r"); mischivin@26: else mischivin@27: print(" " .. ICONS[tostring(key)] .. " |cffe5cc80" .. key .. " - |cff00ff00Unlocked!|r"); mischivin@26: end mischivin@5: end mischivin@5: end mischivin@5: end mischivin@5: mischivin@5: function SlashCmdList.SPOTLIGHT(msg, editbox) mischivin@5: SlashHandler(msg); mischivin@5: end mischivin@5: mischivin@14: local function Initialize() mischivin@31: if not spotlight then mischivin@31: spotlight = {}; mischivin@31: end mischivin@31: Spotlight.Status = { mischivin@31: Dungeons = { mischivin@31: Completed = false, mischivin@31: Progress = 0, mischivin@31: Max = 30, mischivin@31: }, mischivin@31: WorldQuests = { mischivin@31: Completed = false, mischivin@31: Progress = 0, mischivin@31: Max = 200, mischivin@31: }, mischivin@31: PvP = { mischivin@31: Completed = false, mischivin@31: Progress = 0, mischivin@31: Max = 1000, mischivin@31: }, mischivin@31: }; mischivin@31: if Spotlight.ShowPercent == nil then mischivin@0: Spotlight.ShowPercent = true; mischivin@31: end mischivin@31: if Spotlight.ShowIcon == nil then mischivin@23: Spotlight.ShowIcon = false; mischivin@0: end mischivin@0: mischivin@0: Spotlight.IDs = { mischivin@0: Dungeons = 11152, mischivin@0: WorldQuests = 11153, mischivin@0: PvP = 11154, mischivin@0: }; mischivin@0: mischivin@0: Spotlight.Calculate = function (key) mischivin@0: local value = 0; mischivin@0: for index = 1, GetAchievementNumCriteria(Spotlight.IDs[key]) do mischivin@0: value = value + select(4, GetAchievementCriteriaInfo(Spotlight.IDs[key], index)); mischivin@0: end mischivin@0: return value; mischivin@0: end mischivin@0: mischivin@0: Spotlight.GetColor = function (value) mischivin@0: value = value * 2; mischivin@0: local r = (2 - value); mischivin@0: local g = value; mischivin@0: local b = 0; mischivin@0: mischivin@0: if r > 1 then r = 1 end mischivin@0: if g > 1 then g = 1 end mischivin@0: if b > 1 then b = 1 end mischivin@0: mischivin@0: r = string.format("%i", r * 255); mischivin@0: g = string.format("%i", g * 255); mischivin@0: b = string.format("%i", b * 255); mischivin@0: mischivin@0: return "ff" .. string.format("%02x", r) .. string.format("%02x", g) .. string.format("%02x", b); mischivin@0: end mischivin@0: mischivin@5: Spotlight.Format = function (key, showPercent) mischivin@0: local value = Spotlight.Status[key].Progress / Spotlight.Status[key].Max; mischivin@5: if showPercent then mischivin@0: value = string.format("|c" .. Spotlight.GetColor(value) .. "%.1f|cffffffff%%|r", value * 100); mischivin@0: else mischivin@0: value = "|c" .. Spotlight.GetColor(value) .. Spotlight.Status[key].Progress .. "|cffffffff/" .. Spotlight.Status[key].Max .. "|r"; mischivin@0: end mischivin@0: return value; mischivin@0: end mischivin@0: mischivin@0: Spotlight.Update = function (self) mischivin@9: Spotlight.Icon = GetInventoryItemTexture("player", 16); mischivin@9: mischivin@0: local output = ""; mischivin@0: for key, value in pairs(Spotlight.IDs) do mischivin@0: Spotlight.Status[key].Completed = select(3, GetAchievementCriteriaInfo(value,1)); mischivin@0: if not Spotlight.Status[key].Completed then mischivin@0: Spotlight.Status[key].Progress = Spotlight.Calculate(key); mischivin@26: if Spotlight.Status[key].Progress >= 0 then mischivin@26: if output == "" then mischivin@26: output = " "; mischivin@26: else mischivin@26: output = output .. " || "; mischivin@26: end mischivin@23: if Spotlight.ShowIcon then mischivin@23: output = output .. ICONS[tostring(key)] .. Spotlight.Format(key, Spotlight.ShowPercent); mischivin@23: else mischivin@23: output = output .. string.format("|cffe5cc80%.1s", key) .. ":|r " .. Spotlight.Format(key, Spotlight.ShowPercent); mischivin@23: end mischivin@3: end mischivin@0: end mischivin@0: end mischivin@23: if output == "" then mischivin@26: output = " |cff00ff00All Hidden Skins Unlocked!|r"; mischivin@23: end mischivin@9: mischivin@9: dataobj.icon = Spotlight.Icon mischivin@0: dataobj.text = output; mischivin@0: end mischivin@0: mischivin@0: Spotlight.Update(); mischivin@5: mischivin@5: return true mischivin@0: end mischivin@0: mischivin@0: function dataobj:OnTooltipShow() mischivin@5: self:AddLine("|cffe5cc80Spotlight - Hidden Artifact Skins|r|n|n"); mischivin@0: for k, v in pairs(Spotlight.IDs) do mischivin@19: if not Spotlight.Status[k].Completed then mischivin@23: self:AddDoubleLine(ICONS[tostring(k)] .. " " .. k .. ":", Spotlight.Format(k, false) .. " (" .. Spotlight.Format(k, true) .. ")"); mischivin@26: else mischivin@28: self:AddDoubleLine(ICONS[tostring(k)] .. " " .. k .. ":", "|cff00ff00Unlocked!|r"); mischivin@26: mischivin@19: end mischivin@0: end mischivin@23: self:AddLine("|nLeft Click to toggle Percentage or Fractional Display"); mischivin@23: self:AddLine("|nRight Click to toggle Icon or Text Labels") mischivin@0: end mischivin@0: mischivin@0: function dataobj:OnEnter() mischivin@0: GameTooltip:SetOwner(self, "ANCHOR_NONE"); mischivin@0: GameTooltip:SetPoint("TOP", self, "BOTTOM"); mischivin@0: GameTooltip:ClearLines(); mischivin@0: dataobj.OnTooltipShow(GameTooltip); mischivin@0: GameTooltip:Show(); mischivin@0: end mischivin@0: mischivin@0: function dataobj:OnLeave() mischivin@0: GameTooltip:Hide() mischivin@0: end mischivin@0: mischivin@0: local function EventHandler(self, event, ...) mischivin@0: if event == "VARIABLES_LOADED" then mischivin@5: if Initialize() then mischivin@14: initialized = true; mischivin@14: print("|T" .. (Spotlight.Icon or 1355359) .. ":0|t |cffe5cc80Spotlight v" .. GetAddOnMetadata("Spotlight", "Version") .. " Loaded!|r"); mischivin@5: end mischivin@0: end mischivin@14: if event == "CRITERIA_UPDATE" or "PLAYER_ENTERING_WORLD" and initialized then mischivin@0: Spotlight.Update(); mischivin@0: end mischivin@0: end mischivin@0: mischivin@0: local EventListener = CreateFrame("FRAME", "Spotlight"); mischivin@0: EventListener:RegisterEvent("VARIABLES_LOADED"); mischivin@0: EventListener:RegisterEvent("CRITERIA_UPDATE"); mischivin@3: EventListener:RegisterEvent("PLAYER_ENTERING_WORLD"); mischivin@0: EventListener:SetScript("OnEvent", EventHandler); mischivin@0: