Nenue@0
|
1 --- ${PACKAGE_NAME}
|
Nenue@0
|
2 -- @file-author@
|
Nenue@0
|
3 -- @project-revision@ @project-hash@
|
Nenue@0
|
4 -- @file-revision@ @file-hash@
|
Nenue@0
|
5 -- Created: 3/29/2016 7:07 PM
|
Nenue@0
|
6 local B = select(2,...).frame
|
Nenue@0
|
7 local mod = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
|
Nenue@0
|
8 local print = B.print('Objectives')
|
Nenue@0
|
9 local Tracker, AutoQuest, Quest, Cheevs = mod.Tracker, mod.AutoQuest, mod.Quest, mod.Cheevs
|
Nenue@6
|
10 local itemButtonSize, itemButtonSpacing = 36, 1
|
Nenue@0
|
11
|
Nenue@0
|
12 --------------------------------------------------------------------
|
Nenue@3
|
13 --- Tracker-specific widgets and their handlers
|
Nenue@0
|
14 --------------------------------------------------------------------
|
Nenue@0
|
15
|
Nenue@0
|
16 Tracker.Select = function(self) end
|
Nenue@0
|
17 Tracker.Open = function(self) end
|
Nenue@0
|
18 Tracker.Remove = function(self) end
|
Nenue@0
|
19 Tracker.Report = function(self)
|
Nenue@0
|
20 print('Stats:', self.numWatched,'items tracked,', self.numBlocks,'blocks assigned.')
|
Nenue@0
|
21 end
|
Nenue@0
|
22
|
Nenue@0
|
23 Tracker.OnMouseUp = function(self, button)
|
Nenue@1
|
24
|
Nenue@1
|
25 if self.initialButton == 'LeftButton' then
|
Nenue@0
|
26 self:Select()
|
Nenue@0
|
27 mod.UpdateWrapper()
|
Nenue@1
|
28 if self.modShift then
|
Nenue@1
|
29 self:Remove()
|
Nenue@1
|
30 end
|
Nenue@0
|
31 elseif button == 'RightButton' then
|
Nenue@0
|
32 self:Open()
|
Nenue@0
|
33 end
|
Nenue@1
|
34 self.initialButton = nil
|
Nenue@1
|
35 self.modShift = nil
|
Nenue@0
|
36 print('|cFFFF8800'..tostring(self:GetName())..':MouseUp()|r ->',self.info.trackingID)
|
Nenue@0
|
37 end
|
Nenue@0
|
38
|
Nenue@0
|
39 Tracker.OnMouseDown = function(self, button)
|
Nenue@1
|
40 self.initialButton = button
|
Nenue@1
|
41 self.modShift = IsShiftKeyDown()
|
Nenue@0
|
42 if button == 'LeftButton' then
|
Nenue@0
|
43 self:SetStyle('Active')
|
Nenue@0
|
44 end
|
Nenue@0
|
45 print(self.info.title)
|
Nenue@0
|
46 end
|
Nenue@0
|
47
|
Nenue@0
|
48 -----------------------------
|
Nenue@0
|
49 --- AUTO_QUEST
|
Nenue@0
|
50 AutoQuest.name = "Remote Quests"
|
Nenue@0
|
51 AutoQuest.GetNumWatched = GetNumAutoQuestPopUps
|
Nenue@0
|
52
|
Nenue@0
|
53 -----------------------------
|
Nenue@0
|
54 --- QUEST
|
Nenue@0
|
55 Quest.name = "Quests"
|
Nenue@0
|
56 Quest.Select = function(self)
|
Nenue@0
|
57 SetSuperTrackedQuestID(self.info.questID)
|
Nenue@0
|
58 end
|
Nenue@0
|
59 Quest.Open = function(self)
|
Nenue@1
|
60 QuestMapFrame_OpenToQuestDetails(self.info.questID)
|
Nenue@1
|
61 end
|
Nenue@1
|
62
|
Nenue@1
|
63 Quest.Remove = function(self)
|
Nenue@5
|
64 print('removing', self.info.questLogIndex, 'from watcher')
|
Nenue@5
|
65 RemoveQuestWatch(self.info.questLogIndex)
|
Nenue@5
|
66
|
Nenue@5
|
67 mod.Quest.LogBlock[self.info.questLogIndex] = nil
|
Nenue@5
|
68 mod.Quest.QuestBlock[self.info.questID] = nil
|
Nenue@1
|
69 QuestPOIUpdateIcons()
|
Nenue@5
|
70 mod.UpdateWrapper()
|
Nenue@0
|
71 end
|
Nenue@0
|
72
|
Nenue@0
|
73
|
Nenue@0
|
74 -----------------------------
|
Nenue@0
|
75 --- CHEEVS
|
Nenue@0
|
76 Cheevs.Select = function(self)
|
Nenue@0
|
77 end
|
Nenue@0
|
78
|
Nenue@0
|
79 Cheevs.Open = function(self)
|
Nenue@3
|
80 if ( not AchievementFrame ) then
|
Nenue@3
|
81 AchievementFrame_LoadUI();
|
Nenue@3
|
82 end
|
Nenue@3
|
83 if ( not AchievementFrame:IsShown() ) then
|
Nenue@3
|
84 AchievementFrame_ToggleAchievementFrame();
|
Nenue@3
|
85 end
|
Nenue@3
|
86 AchievementFrame_SelectAchievement(self.info.cheevID);
|
Nenue@0
|
87 end
|
Nenue@0
|
88
|
Nenue@1
|
89 ----------------------------------------------------------------------------------------
|
Nenue@1
|
90 --- frame template and scripts lifted from "QuestKing 2" by Barjack
|
Nenue@1
|
91 --- url: http://mods.curse.com/addons/wow/questking
|
Nenue@1
|
92 ----------------------------------------------------------------------------------------
|
Nenue@1
|
93 local usedButtons = mod.Quest.itemButtons
|
Nenue@1
|
94 local freeButtons = mod.Quest.freeButtons
|
Nenue@1
|
95 mod.SetItemButton = function(block, info)
|
Nenue@1
|
96 local itemInfo = info.specialItem
|
Nenue@1
|
97 if not itemInfo then
|
Nenue@1
|
98 return
|
Nenue@1
|
99 end
|
Nenue@1
|
100 --- .specialItem :: {link = link, charges = charges, icon = icon, start = start, duration = duration, enable = enable}
|
Nenue@1
|
101
|
Nenue@1
|
102
|
Nenue@1
|
103 local itemButton
|
Nenue@1
|
104 if not info.itemButton then
|
Nenue@1
|
105 if #freeButtons >= 1 then
|
Nenue@2
|
106 print(' |cFF00FFFFfound a free button')
|
Nenue@1
|
107 itemButton = freeButtons[#freeButtons]
|
Nenue@1
|
108 freeButtons[#freeButtons] = nil
|
Nenue@2
|
109 if itemButton.block then
|
Nenue@2
|
110 itemButton.block.itemButton = nil
|
Nenue@2
|
111 itemButton.block = nil
|
Nenue@2
|
112 end
|
Nenue@1
|
113 else
|
Nenue@1
|
114 local buttonIndex = mod.Quest.numButtons + #freeButtons + 1
|
Nenue@1
|
115 itemButton = CreateFrame('Button', 'VeneerQuestItemButton' .. buttonIndex, UIParent, 'VeneerItemButtonTemplate')
|
Nenue@1
|
116 itemButton.buttonIndex = buttonIndex
|
Nenue@6
|
117 itemButton:SetSize(itemButtonSize, itemButtonSize)
|
Nenue@6
|
118 itemButton:GetNormalTexture():SetSize(itemButtonSize * (5/3), itemButtonSize * (5/3))
|
Nenue@5
|
119 print(' |cFFFF4400starting new button', itemButton:GetName())
|
Nenue@1
|
120 end
|
Nenue@1
|
121 mod.Quest.numButtons = mod.Quest.numButtons + 1
|
Nenue@1
|
122 else
|
Nenue@1
|
123 itemButton = info.itemButton
|
Nenue@5
|
124 print(' |cFF00FF00found assigned button', itemButton:GetName())
|
Nenue@2
|
125
|
Nenue@1
|
126 end
|
Nenue@1
|
127 -- set values
|
Nenue@2
|
128
|
Nenue@5
|
129 info.itemButton = itemButton
|
Nenue@5
|
130 usedButtons[info.questID] = itemButton
|
Nenue@5
|
131 print(' |cFF8800FFassigning|r', itemButton:GetName(), 'to quest|cFF00FF00', info.questID, '|rat|cFFFFFF00', block:GetName(),'|r')
|
Nenue@2
|
132
|
Nenue@5
|
133 for k,v in pairs(usedButtons) do
|
Nenue@5
|
134 print('|cFFFF44DD'..k..'|r', v:GetName())
|
Nenue@5
|
135 end
|
Nenue@1
|
136
|
Nenue@1
|
137 itemButton:SetAttribute("type", "item")
|
Nenue@1
|
138 itemButton:SetAttribute("item", itemInfo.link)
|
Nenue@1
|
139
|
Nenue@2
|
140 itemButton.questID = info.questID
|
Nenue@1
|
141 itemButton.questLogIndex = info.questLogIndex
|
Nenue@1
|
142 itemButton.charges = itemInfo.charges
|
Nenue@1
|
143 itemButton.rangeTimer = -1
|
Nenue@1
|
144 itemButton.block = block
|
Nenue@1
|
145
|
Nenue@1
|
146 SetItemButtonTexture(itemButton, itemInfo.icon)
|
Nenue@1
|
147 SetItemButtonCount(itemButton, itemInfo.charges)
|
Nenue@1
|
148 Veneer_QuestObjectiveItem_UpdateCooldown(itemButton);
|
Nenue@1
|
149
|
Nenue@1
|
150 return itemButton
|
Nenue@1
|
151 end
|
Nenue@1
|
152 --- Clear an itemButton from the given block
|
Nenue@2
|
153 mod.FreeItemButtons = function(block)
|
Nenue@2
|
154
|
Nenue@2
|
155 if block.itemButton then
|
Nenue@2
|
156 local itemButton = block.itemButton
|
Nenue@5
|
157 if itemButton.questID ~= block.info.questID then
|
Nenue@5
|
158 block.itemButton = nil
|
Nenue@5
|
159 itemButton.block = mod.Quest.InfoBlock[itemButton.questID]
|
Nenue@5
|
160 else
|
Nenue@5
|
161 itemButton.block = nil
|
Nenue@5
|
162 itemButton:Hide()
|
Nenue@2
|
163
|
Nenue@5
|
164 usedButtons[itemButton.questID] = nil
|
Nenue@5
|
165 freeButtons[#freeButtons + 1] = itemButton
|
Nenue@5
|
166 mod.Quest.numButtons = mod.Quest.numButtons - 1
|
Nenue@5
|
167 print('|cFFFF0088released', itemButton:GetName(),'and', block:GetName())
|
Nenue@5
|
168 end
|
Nenue@1
|
169 end
|
Nenue@1
|
170 end
|
Nenue@1
|
171
|
Nenue@1
|
172 function Veneer_QuestObjectiveItem_OnUpdate (self, elapsed)
|
Nenue@1
|
173 -- Handle range indicator
|
Nenue@1
|
174 local rangeTimer = self.rangeTimer
|
Nenue@1
|
175 if (rangeTimer) then
|
Nenue@1
|
176 rangeTimer = rangeTimer - elapsed
|
Nenue@1
|
177 if (rangeTimer <= 0) then
|
Nenue@1
|
178 local link, item, charges, showItemWhenComplete = GetQuestLogSpecialItemInfo(self.questLogIndex)
|
Nenue@1
|
179 if ((not charges) or (charges ~= self.charges)) then
|
Nenue@2
|
180 mod.UpdateWrapper()
|
Nenue@1
|
181 return
|
Nenue@1
|
182 end
|
Nenue@1
|
183
|
Nenue@1
|
184 local count = self.HotKey
|
Nenue@1
|
185 local valid = IsQuestLogSpecialItemInRange(self.questLogIndex)
|
Nenue@1
|
186 if (valid == 0) then
|
Nenue@1
|
187 count:Show()
|
Nenue@1
|
188 count:SetVertexColor(1.0, 0.1, 0.1)
|
Nenue@1
|
189 elseif (valid == 1) then
|
Nenue@1
|
190 count:Show()
|
Nenue@1
|
191 count:SetVertexColor(0.6, 0.6, 0.6)
|
Nenue@1
|
192 else
|
Nenue@1
|
193 count:Hide()
|
Nenue@1
|
194 end
|
Nenue@1
|
195 rangeTimer = TOOLTIP_UPDATE_TIME
|
Nenue@1
|
196 end
|
Nenue@1
|
197
|
Nenue@1
|
198 self.rangeTimer = rangeTimer
|
Nenue@1
|
199 end
|
Nenue@1
|
200 end
|
Nenue@1
|
201
|
Nenue@1
|
202 function Veneer_QuestObjectiveItem_UpdateCooldown (itemButton)
|
Nenue@1
|
203 local start, duration, enable = GetQuestLogSpecialItemCooldown(itemButton.questLogIndex)
|
Nenue@1
|
204 if (start) then
|
Nenue@1
|
205 CooldownFrame_SetTimer(itemButton.Cooldown, start, duration, enable)
|
Nenue@1
|
206 if (duration > 0 and enable == 0) then
|
Nenue@1
|
207 SetItemButtonTextureVertexColor(itemButton, 0.4, 0.4, 0.4)
|
Nenue@1
|
208 else
|
Nenue@1
|
209 SetItemButtonTextureVertexColor(itemButton, 1, 1, 1)
|
Nenue@1
|
210 end
|
Nenue@1
|
211 end
|
Nenue@3
|
212 end
|
Nenue@3
|
213
|
Nenue@3
|
214 -----------------------------------------
|
Nenue@3
|
215 -- Progress slider for achievements, and area objecitves
|
Nenue@3
|
216 -- Stored by criteria ID to account for multiple bars in one cheev
|
Nenue@3
|
217 Tracker.SetProgress = function(criteria, info)
|
Nenue@3
|
218 end
|
Nenue@3
|
219
|
Nenue@3
|
220 mod.WidgetRegistry = {}
|
Nenue@3
|
221 local wr = mod.WidgetRegistry
|
Nenue@3
|
222 mod.SetWidget = function(criteria, info)
|
Nenue@3
|
223 local widget
|
Nenue@3
|
224 if not wr[criteria.type] then
|
Nenue@3
|
225 print('|cFFFF4400[[WidgetTemplate]]|r', criteria.type)
|
Nenue@3
|
226 wr[criteria.type] = { free = {}, used = {}, }
|
Nenue@3
|
227 end
|
Nenue@3
|
228 if #wr[criteria.type].free == 0 then
|
Nenue@3
|
229
|
Nenue@3
|
230 local frameID = #wr[criteria.type].free + #wr[criteria.type].used
|
Nenue@3
|
231 widget = CreateFrame('Frame', 'VeneerCriteria' .. criteria.type .. frameID, VeneerObjectiveWrapper, 'VeneerObjectiveCriteria' .. criteria.type)
|
Nenue@3
|
232 end
|
Nenue@3
|
233 end
|
Nenue@3
|
234 mod.RegisterWidget = function(frame)
|
Nenue@3
|
235 tinsert(wr[frame.widgetType].free, frame)
|
Nenue@3
|
236 end
|
Nenue@3
|
237 mod.InitializeWidget = function(frame)
|
Nenue@3
|
238
|
Nenue@3
|
239 end
|
Nenue@3
|
240 mod.ReleaseWidget = function(frame)
|
Nenue@3
|
241
|
Nenue@3
|
242 if tContains(wr[frame.widgetType], frame) then
|
Nenue@3
|
243 end
|
Nenue@1
|
244 end |