mischivin@0
|
1 local dataobj = LibStub:GetLibrary("LibDataBroker-1.1"):NewDataObject("Spotlight", {
|
mischivin@0
|
2 type = "data source",
|
mischivin@3
|
3 text = "Nothing to track!",
|
mischivin@0
|
4 icon = GetInventoryItemTexture("player", 16),
|
mischivin@0
|
5 OnClick = function(clickedframe, button)
|
mischivin@0
|
6 Spotlight.ShowPercent = not Spotlight.ShowPercent;
|
mischivin@0
|
7 Spotlight.Update();
|
mischivin@0
|
8 end,
|
mischivin@0
|
9 })
|
mischivin@0
|
10
|
mischivin@5
|
11 SLASH_SPOTLIGHT1, SLASH_SPOTLIGHT2 = "/spotlight", "/Spotlight";
|
mischivin@5
|
12
|
mischivin@5
|
13 local function SlashHandler(msg)
|
mischivin@5
|
14 print("|T" .. dataobj.icon .. ":0|t |cffe5cc80Spotlight|r - Artifact Hidden Skin Progress:");
|
mischivin@5
|
15 if Spotlight.IDs then
|
mischivin@5
|
16 for key, value in pairs(Spotlight.IDs) do
|
mischivin@5
|
17 print(" |cffe5cc80" .. key .. " - " .. Spotlight.Format(key, false) .. " (" .. Spotlight.Format(key, true) .. ")|r");
|
mischivin@5
|
18 end
|
mischivin@5
|
19 end
|
mischivin@5
|
20 end
|
mischivin@5
|
21
|
mischivin@5
|
22 function SlashCmdList.SPOTLIGHT(msg, editbox)
|
mischivin@5
|
23 SlashHandler(msg);
|
mischivin@5
|
24 end
|
mischivin@5
|
25
|
mischivin@0
|
26 local function Initialize ()
|
mischivin@0
|
27 if not Spotlight.Status then
|
mischivin@0
|
28 Spotlight.Status = {
|
mischivin@0
|
29 Dungeons = {
|
mischivin@0
|
30 Completed = false,
|
mischivin@0
|
31 Progress = 0,
|
mischivin@0
|
32 Max = 100,
|
mischivin@0
|
33 },
|
mischivin@0
|
34 WorldQuests = {
|
mischivin@0
|
35 Completed = false,
|
mischivin@0
|
36 Progress = 0,
|
mischivin@0
|
37 Max = 200,
|
mischivin@0
|
38 },
|
mischivin@0
|
39 PvP = {
|
mischivin@0
|
40 Completed = false,
|
mischivin@0
|
41 Progress = 0,
|
mischivin@0
|
42 Max = 1000,
|
mischivin@0
|
43 },
|
mischivin@0
|
44 };
|
mischivin@0
|
45 Spotlight.ShowPercent = true;
|
mischivin@0
|
46 end
|
mischivin@0
|
47
|
mischivin@0
|
48 Spotlight.IDs = {
|
mischivin@0
|
49 Dungeons = 11152,
|
mischivin@0
|
50 WorldQuests = 11153,
|
mischivin@0
|
51 PvP = 11154,
|
mischivin@0
|
52 };
|
mischivin@0
|
53
|
mischivin@0
|
54 Spotlight.Calculate = function (key)
|
mischivin@0
|
55 local value = 0;
|
mischivin@0
|
56 for index = 1, GetAchievementNumCriteria(Spotlight.IDs[key]) do
|
mischivin@0
|
57 value = value + select(4, GetAchievementCriteriaInfo(Spotlight.IDs[key], index));
|
mischivin@0
|
58 end
|
mischivin@0
|
59 return value;
|
mischivin@0
|
60 end
|
mischivin@0
|
61
|
mischivin@0
|
62 Spotlight.GetColor = function (value)
|
mischivin@0
|
63 value = value * 2;
|
mischivin@0
|
64 local r = (2 - value);
|
mischivin@0
|
65 local g = value;
|
mischivin@0
|
66 local b = 0;
|
mischivin@0
|
67
|
mischivin@0
|
68 if r > 1 then r = 1 end
|
mischivin@0
|
69 if g > 1 then g = 1 end
|
mischivin@0
|
70 if b > 1 then b = 1 end
|
mischivin@0
|
71
|
mischivin@0
|
72 r = string.format("%i", r * 255);
|
mischivin@0
|
73 g = string.format("%i", g * 255);
|
mischivin@0
|
74 b = string.format("%i", b * 255);
|
mischivin@0
|
75
|
mischivin@0
|
76 return "ff" .. string.format("%02x", r) .. string.format("%02x", g) .. string.format("%02x", b);
|
mischivin@0
|
77 end
|
mischivin@0
|
78
|
mischivin@5
|
79 Spotlight.Format = function (key, showPercent)
|
mischivin@0
|
80 local value = Spotlight.Status[key].Progress / Spotlight.Status[key].Max;
|
mischivin@5
|
81 if showPercent then
|
mischivin@0
|
82 value = string.format("|c" .. Spotlight.GetColor(value) .. "%.1f|cffffffff%%|r", value * 100);
|
mischivin@0
|
83 else
|
mischivin@0
|
84 value = "|c" .. Spotlight.GetColor(value) .. Spotlight.Status[key].Progress .. "|cffffffff/" .. Spotlight.Status[key].Max .. "|r";
|
mischivin@0
|
85 end
|
mischivin@0
|
86 return value;
|
mischivin@0
|
87 end
|
mischivin@0
|
88
|
mischivin@0
|
89 Spotlight.Update = function (self)
|
mischivin@0
|
90 local output = "";
|
mischivin@0
|
91 for key, value in pairs(Spotlight.IDs) do
|
mischivin@0
|
92 Spotlight.Status[key].Completed = select(3, GetAchievementCriteriaInfo(value,1));
|
mischivin@0
|
93 if not Spotlight.Status[key].Completed then
|
mischivin@0
|
94 Spotlight.Status[key].Progress = Spotlight.Calculate(key);
|
mischivin@5
|
95 if output == "" then
|
mischivin@5
|
96 else
|
mischivin@5
|
97 output = output .. " ||";
|
mischivin@5
|
98 end
|
mischivin@3
|
99 if Spotlight.Status[key].Progress > 0 then
|
mischivin@5
|
100 output = output .. string.format("|cffe5cc80 %.1s", key) .. ":|r " .. Spotlight.Format(key, Spotlight.ShowPercent);
|
mischivin@3
|
101 end
|
mischivin@0
|
102 end
|
mischivin@0
|
103 end
|
mischivin@0
|
104 dataobj.icon = GetInventoryItemTexture("player", 16);
|
mischivin@0
|
105 dataobj.text = output;
|
mischivin@0
|
106 end
|
mischivin@0
|
107
|
mischivin@0
|
108 Spotlight.Update();
|
mischivin@5
|
109
|
mischivin@5
|
110 return true
|
mischivin@0
|
111 end
|
mischivin@0
|
112
|
mischivin@0
|
113 function dataobj:OnTooltipShow()
|
mischivin@5
|
114 self:AddLine("|cffe5cc80Spotlight - Hidden Artifact Skins|r|n|n");
|
mischivin@0
|
115 for k, v in pairs(Spotlight.IDs) do
|
mischivin@5
|
116 self:AddDoubleLine(k .. ":", Spotlight.Format(k, false) .. " (" .. Spotlight.Format(k, true) .. ")");
|
mischivin@0
|
117 end
|
mischivin@0
|
118 self:AddLine("|nClick to toggle display method");
|
mischivin@0
|
119 end
|
mischivin@0
|
120
|
mischivin@0
|
121 function dataobj:OnEnter()
|
mischivin@0
|
122 GameTooltip:SetOwner(self, "ANCHOR_NONE");
|
mischivin@0
|
123 GameTooltip:SetPoint("TOP", self, "BOTTOM");
|
mischivin@0
|
124 GameTooltip:ClearLines();
|
mischivin@0
|
125 dataobj.OnTooltipShow(GameTooltip);
|
mischivin@0
|
126 GameTooltip:Show();
|
mischivin@0
|
127 end
|
mischivin@0
|
128
|
mischivin@0
|
129 function dataobj:OnLeave()
|
mischivin@0
|
130 GameTooltip:Hide()
|
mischivin@0
|
131 end
|
mischivin@0
|
132
|
mischivin@0
|
133 local function EventHandler(self, event, ...)
|
mischivin@0
|
134 if event == "VARIABLES_LOADED" then
|
mischivin@5
|
135 if Initialize() then
|
mischivin@8
|
136 print("|T" .. GetInventoryItemTexture("player", 16) .. ":0|t |cffe5cc80Spotlight v" .. GetAddOnMetadata("Spotlight", "Version") .. " Loaded!|r")
|
mischivin@5
|
137 end
|
mischivin@0
|
138 end
|
mischivin@3
|
139 if event == "CRITERIA_UPDATE" or "PLAYER_ENTERING_WORLD" then
|
mischivin@0
|
140 Spotlight.Update();
|
mischivin@0
|
141 end
|
mischivin@0
|
142 end
|
mischivin@0
|
143
|
mischivin@0
|
144 local EventListener = CreateFrame("FRAME", "Spotlight");
|
mischivin@0
|
145 EventListener:RegisterEvent("VARIABLES_LOADED");
|
mischivin@0
|
146 EventListener:RegisterEvent("CRITERIA_UPDATE");
|
mischivin@3
|
147 EventListener:RegisterEvent("PLAYER_ENTERING_WORLD");
|
mischivin@0
|
148 EventListener:SetScript("OnEvent", EventHandler);
|
mischivin@0
|
149
|