|
Aaron@4
|
1 --[[--))--))--))--))--))--))--))--))--))--))--))--))--))--))--))--))--))--))--))
|
|
Aaron@4
|
2
|
|
Aaron@4
|
3 RecipeProfit by -[@project-author@]-
|
|
Aaron@4
|
4
|
|
Aaron@4
|
5 Rev: @project-revision@
|
|
Aaron@4
|
6 Updated: @file-date-iso@
|
|
Aaron@4
|
7
|
|
Aaron@4
|
8 --))--))--))--))--))--))--))--))--))--))--))--))--))--))--))--))--))--))--))--))
|
|
Aaron@4
|
9
|
|
Aaron@22
|
10 URL:
|
|
Aaron@22
|
11 http://www.wrathguides.com/
|
|
Aaron@22
|
12
|
|
Aaron@22
|
13 License:
|
|
Aaron@22
|
14 This file is a part of "RecipeProfit for GatherMate."
|
|
Aaron@22
|
15
|
|
Aaron@22
|
16 This program is free software; you can redistribute it and/or
|
|
Aaron@22
|
17 modify it under the terms of the GNU General Public License
|
|
Aaron@22
|
18 as published by the Free Software Foundation, either version 3
|
|
Aaron@22
|
19 of the License, or (at your option) any later version.
|
|
Aaron@22
|
20
|
|
Aaron@22
|
21 This program is distributed in the hope that it will be useful,
|
|
Aaron@22
|
22 but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Aaron@22
|
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
Aaron@22
|
24 GNU General Public License for more details.
|
|
Aaron@22
|
25
|
|
Aaron@22
|
26 You should have received a copy of the GNU General Public License
|
|
killermonkey99@36
|
27 along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
Aaron@22
|
28
|
|
Aaron@22
|
29 Note:
|
|
Aaron@22
|
30 This program's source code is specifically designed to work with
|
|
Aaron@22
|
31 World of Warcraft's interpreted AddOn system.
|
|
Aaron@22
|
32
|
|
Aaron@22
|
33 You have an implicit license to use this program with these facilities
|
|
Aaron@22
|
34 since that is it's designated purpose as per:
|
|
Aaron@22
|
35 http://www.fsf.org/licensing/licenses/gpl-faq.html#InterpreterIncompat
|
|
Aaron@4
|
36
|
|
Aaron@4
|
37 --]]--))--))--))--))--))--))--))--))--))--))--))--))--))--))--))--))--))--))--))
|
|
Aaron@4
|
38
|
|
Aaron@22
|
39
|
|
killermonkey99@36
|
40 local RecipeProfit = LibStub("AceAddon-3.0"):NewAddon("RecipeProfit", "AceEvent-3.0", "AceConsole-3.0", "AceTimer-3.0")
|
|
killermonkey99@36
|
41
|
|
killermonkey99@36
|
42 local GatherMate = LibStub("AceAddon-3.0"):GetAddon("GatherMate2")
|
|
killermonkey99@36
|
43
|
|
Aaron@0
|
44 local tabletest = {}
|
|
Aaron@16
|
45 local db = {}
|
|
Aaron@1
|
46 local safeRecipes = {}
|
|
Aaron@16
|
47 local ids = {}
|
|
Aaron@24
|
48 local nodeLookup = {}
|
|
Aaron@16
|
49
|
|
Aaron@17
|
50 local profile
|
|
Aaron@17
|
51
|
|
Aaron@0
|
52 RecipeProfit.db = db;
|
|
Aaron@0
|
53
|
|
Aaron@17
|
54 --[[ Forward Definitions (for local functions) ]]
|
|
Aaron@16
|
55 local get_faction_db,
|
|
Aaron@16
|
56 add_note,
|
|
Aaron@16
|
57 button_update,
|
|
Aaron@16
|
58 find_good_id,
|
|
Aaron@16
|
59 safe_cache_vendor,
|
|
Aaron@17
|
60 get_note_title,
|
|
Aaron@17
|
61 get_next_texture_id,
|
|
Aaron@17
|
62 set_node_constants,
|
|
Aaron@24
|
63 get_colored_note_name,
|
|
Aaron@17
|
64 inject_options;
|
|
Aaron@16
|
65
|
|
Aaron@17
|
66 --[[ Deep table inspection for debugging ]]
|
|
Aaron@0
|
67 function debugprint(val, indent)
|
|
Aaron@0
|
68 indent = indent or "";
|
|
Aaron@0
|
69 if not(type(val) == "table") then
|
|
Aaron@0
|
70 print("Not table: " .. val)
|
|
Aaron@0
|
71 return
|
|
Aaron@0
|
72 end
|
|
Aaron@0
|
73
|
|
Aaron@0
|
74 for k,v in pairs(val) do
|
|
Aaron@0
|
75 if(type(k) == "table" and type(v) == "table") then
|
|
Aaron@0
|
76 print(indent .. "table key: {")
|
|
Aaron@0
|
77 debugprint(k, indent .. " ")
|
|
Aaron@0
|
78 print(indent .. "} = {")
|
|
Aaron@0
|
79 debugprint(v, indent .. " ")
|
|
Aaron@0
|
80 print(indent .. "}")
|
|
Aaron@12
|
81 elseif(type(v) == "table") then
|
|
Aaron@0
|
82 print(indent .. k .. " = {")
|
|
Aaron@0
|
83 debugprint(v, indent .. " ")
|
|
Aaron@0
|
84 print(indent .. "}")
|
|
Aaron@0
|
85 else
|
|
Aaron@12
|
86 if(type(v) ~= "boolean") then
|
|
Aaron@12
|
87 print(indent .. k .. " = " .. v)
|
|
Aaron@12
|
88 else
|
|
Aaron@12
|
89 print(indent .. k .. " = " .. (v and "true" or "false"))
|
|
Aaron@12
|
90 end
|
|
Aaron@0
|
91 end
|
|
Aaron@0
|
92 end
|
|
Aaron@0
|
93 end
|
|
Aaron@8
|
94
|
|
Aaron@0
|
95 local options = {
|
|
Aaron@0
|
96 type = "group",
|
|
Aaron@0
|
97 name = "RecipeProfit", -- addon name to import from, don't localize
|
|
Aaron@0
|
98 handler = {},
|
|
Aaron@0
|
99 disabled = false,
|
|
Aaron@0
|
100 args = {
|
|
killermonkey99@36
|
101 heading = {
|
|
killermonkey99@36
|
102 order = 0,
|
|
killermonkey99@36
|
103 type = "description",
|
|
killermonkey99@36
|
104 name = "Thank you for using RecipeProfit for GatherMate!\n\n"..
|
|
killermonkey99@36
|
105 "RecipeProfit was recently updated to work with patch 4.0.x and GatherMate 2. If you find any bugs you can report them on curse.com or curseforge.com by contacting the author 'Yuffles'. "..
|
|
killermonkey99@36
|
106 "You can also email the author at killermonkey99".. --[[anti-spambot]] "@".."gmail.com (please try to put \"RecipeProfit\" in the subject!)\n\n"..
|
|
killermonkey99@36
|
107 "You can toggle the display of RecipeProfit nodes on the map and minimap by changing the options in the general GatherMate 2 menu.",
|
|
killermonkey99@36
|
108 width = "full",
|
|
killermonkey99@36
|
109 },
|
|
Aaron@0
|
110 }
|
|
Aaron@0
|
111 }
|
|
Aaron@0
|
112
|
|
killermonkey99@36
|
113 --maps wowhead IDs to localization independant map ids O_O
|
|
killermonkey99@36
|
114 local zidmap={[1]=27,[3]=17,[4]=19,[8]=38,[10]=34,[11]=40,[12]=30,[14]=4,
|
|
killermonkey99@36
|
115 [15]=141,[16]=181,[17]=11,[28]=22,[33]=37,[38]=35,[40]=39,[41]=32,[44]=36,
|
|
killermonkey99@36
|
116 [45]=16,[46]=29,[47]=26,[51]=28,[65]=488,[66]=496,[67]=495,[85]=20,
|
|
killermonkey99@36
|
117 [130]=21,[139]=23,[141]=41,[148]=42,[210]=492,[215]=9,[267]=24,[331]=43,
|
|
killermonkey99@36
|
118 [357]=121,[361]=182,[394]=490,[400]=61,[405]=101,[406]=81,[440]=161,
|
|
killermonkey99@36
|
119 [490]=201,[493]=241,[495]=491,[616]=606,[618]=281,[1377]=261,[1497]=382,
|
|
killermonkey99@36
|
120 [1519]=301,[1537]=341,[1637]=321,[1638]=362,[1657]=381,[3430]=462,
|
|
killermonkey99@36
|
121 [3433]=463,[3483]=465,[3487]=480,[3518]=477,[3519]=478,[3520]=473,
|
|
killermonkey99@36
|
122 [3521]=467,[3522]=475,[3523]=479,[3524]=464,[3525]=476,[3537]=486,
|
|
killermonkey99@36
|
123 [3557]=471,[3703]=481,[3711]=493,[4080]=499,[4197]=501,[4395]=504,
|
|
killermonkey99@36
|
124 [4709]=607,[4714]=545,[4720]=544,[4737]=605,[4755]=611,[4815]=610,
|
|
killermonkey99@36
|
125 [4922]=700,[5034]=720,[5042]=640,[5095]=708,[5144]=615,[5145]=614,
|
|
killermonkey99@36
|
126 [5146]=613,[5287]=673,[5339]=689,[5416]=737,[5630]=737,[5695]=772
|
|
killermonkey99@36
|
127 }
|
|
killermonkey99@36
|
128
|
|
Aaron@0
|
129 local defaults = {
|
|
Aaron@1
|
130 faction = "default",
|
|
Aaron@1
|
131 safebuy = "on",
|
|
Aaron@16
|
132
|
|
Aaron@16
|
133 --submitting cached data not yet implemented
|
|
Aaron@16
|
134 enable_cache = false,
|
|
Aaron@16
|
135 location_cache = {},
|
|
Aaron@0
|
136 }
|
|
Aaron@0
|
137
|
|
Aaron@0
|
138 function RecipeProfit:OnInitialize()
|
|
Aaron@17
|
139 profile = RECIPEPROFIT_profile or defaults
|
|
Aaron@7
|
140
|
|
Aaron@1
|
141 for k, v in pairs(defaults) do
|
|
Aaron@1
|
142 profile[k] = profile[k] or v;
|
|
Aaron@1
|
143 end
|
|
Aaron@1
|
144
|
|
Aaron@12
|
145 self:RegisterChatCommand("recipeprofit", "ShowOptions")
|
|
Aaron@12
|
146 self:RegisterChatCommand("rp", "ShowOptions")
|
|
Aaron@12
|
147 self:RegisterChatCommand("profit", "ShowOptions")
|
|
Aaron@12
|
148
|
|
Aaron@0
|
149 db.profile = profile
|
|
Aaron@0
|
150 db.storage = {}
|
|
Aaron@0
|
151
|
|
Aaron@0
|
152 GatherMate:GetModule("Config"):RegisterModule("RecipeProfit", options)
|
|
Aaron@0
|
153 GatherMate:RegisterDBType("RecipeProfit", db.storage)
|
|
Aaron@8
|
154 GatherMate.db.profile.show["RecipeProfit"] = GatherMate.db.profile.show["RecipeProfit"] or "always"
|
|
Aaron@0
|
155
|
|
Aaron@17
|
156 set_node_constants()
|
|
Aaron@17
|
157 inject_options()
|
|
Aaron@8
|
158
|
|
Aaron@0
|
159 GatherMate:GetModule("Config"):UpdateConfig()
|
|
killermonkey99@36
|
160 GatherMate:GetModule("Config"):SendMessage("GatherMate2ConfigChanged")
|
|
Aaron@24
|
161
|
|
Aaron@24
|
162 --[[ hook GetNameForNode for custom highlighting ]]
|
|
Aaron@24
|
163 local oldFunction = GatherMate.GetNameForNode
|
|
Aaron@24
|
164
|
|
Aaron@24
|
165 GatherMate.GetNameForNode = function(lself, type, nodeID)
|
|
Aaron@24
|
166 if(type == "RecipeProfit") then
|
|
Aaron@24
|
167 return get_colored_note_name(lself, nodeID)
|
|
Aaron@24
|
168 else
|
|
Aaron@24
|
169 return oldFunction(lself, type, nodeID)
|
|
Aaron@24
|
170 end
|
|
Aaron@24
|
171 end
|
|
Aaron@24
|
172
|
|
killermonkey99@36
|
173 --[[hook OnProfileChanged to fix cleanup database ]]
|
|
Aaron@26
|
174 local oldFunction2 = GatherMate.OnProfileChanged
|
|
Aaron@26
|
175
|
|
Aaron@26
|
176 GatherMate.OnProfileChanged = function(lself, ...)
|
|
Aaron@26
|
177 lself.db.profile.cleanupRange["RecipeProfit"] = lself.db.profile.cleanupRange["RecipeProfit"] or 15
|
|
killermonkey99@36
|
178 lself.db.profile.show["RecipeProfit"] = lself.db.profile.show["RecipeProfit"] == "never" and "never" or "always";
|
|
Aaron@26
|
179 oldFunction2(lself, ...)
|
|
Aaron@26
|
180 end
|
|
Aaron@26
|
181
|
|
Aaron@0
|
182 end
|
|
Aaron@0
|
183
|
|
Aaron@17
|
184
|
|
Aaron@17
|
185 function RecipeProfit:OnEnable()
|
|
Aaron@17
|
186
|
|
Aaron@17
|
187 _G["MerchantPrevPageButton"]:HookScript("OnClick", self.UpdateButtons)
|
|
Aaron@17
|
188 _G["MerchantNextPageButton"]:HookScript("OnClick", self.UpdateButtons)
|
|
Aaron@17
|
189
|
|
Aaron@17
|
190 self:RegisterEvent("MERCHANT_SHOW", "UpdateButtons")
|
|
Aaron@17
|
191 self:RegisterEvent("MERCHANT_UPDATE", "UpdateButtons")
|
|
Aaron@17
|
192 self:RegisterEvent("BAG_UPDATE", "UpdateButtons")
|
|
Aaron@28
|
193
|
|
Aaron@17
|
194 RecipeProfit:DoMerge()
|
|
killermonkey99@45
|
195 if(GatherMate.db.profile.show["RecipeProfit"] ~= "always" and GatherMate.db.profile.show["RecipeProfit"] ~= "never") then
|
|
killermonkey99@45
|
196 GatherMate.db.profile.show["RecipeProfit"] = "always"
|
|
killermonkey99@45
|
197 GatherMate:GetModule("Config"):SendMessage("GatherMate2ConfigChanged")
|
|
killermonkey99@45
|
198 end
|
|
Aaron@17
|
199 end
|
|
Aaron@17
|
200
|
|
Aaron@12
|
201 function RecipeProfit:ShowOptions()
|
|
killermonkey99@36
|
202 InterfaceOptionsFrame_OpenToCategory("GatherMate 2")
|
|
killermonkey99@36
|
203 LibStub("AceConfigDialog-3.0"):SelectGroup("GatherMate 2", "RecipeProfit")
|
|
Aaron@12
|
204 end
|
|
Aaron@12
|
205
|
|
Aaron@16
|
206 function RecipeProfit:UpdateButtons(event, ...)
|
|
Aaron@16
|
207 --print("UpdateButtons", event)
|
|
Aaron@28
|
208 if(WorldMapFrame:IsShown()) then
|
|
Aaron@28
|
209 local continent, zone = GetCurrentMapContinent(), GetCurrentMapZone()
|
|
Aaron@28
|
210 SetMapZoom(continent)
|
|
Aaron@28
|
211 SetMapZoom(continent, zone)
|
|
Aaron@28
|
212 else
|
|
Aaron@28
|
213 SetMapZoom(-1)
|
|
Aaron@28
|
214 end
|
|
Aaron@28
|
215
|
|
Aaron@28
|
216 GatherMate:GetModule("Display"):UpdateMaps()
|
|
Aaron@28
|
217
|
|
Aaron@16
|
218 if(not MerchantFrame:IsVisible()) then
|
|
Aaron@16
|
219 --print("UpdateButtons - (Event: ", event, ") - MerchantFrame not visible.");
|
|
Aaron@16
|
220 return;
|
|
Aaron@16
|
221 end
|
|
Aaron@16
|
222
|
|
Aaron@16
|
223 for i=1, MERCHANT_ITEMS_PER_PAGE, 1 do
|
|
Aaron@16
|
224 local buttonframe = _G["MerchantItem"..i];
|
|
Aaron@16
|
225 local index = (((MerchantFrame.page - 1) * MERCHANT_ITEMS_PER_PAGE) + i);
|
|
Aaron@16
|
226 --print(index)
|
|
Aaron@16
|
227 if index <= GetMerchantNumItems() then
|
|
Aaron@16
|
228 button_update(buttonframe)
|
|
Aaron@16
|
229 end
|
|
Aaron@16
|
230 end
|
|
Aaron@17
|
231 end
|
|
Aaron@16
|
232
|
|
Aaron@16
|
233 function RecipeProfit:DoMerge()
|
|
Aaron@16
|
234 ids = {}
|
|
killermonkey99@36
|
235 local alliance = get_faction_db();
|
|
Aaron@16
|
236
|
|
Aaron@16
|
237 GatherMate:ClearDB("RecipeProfit")
|
|
killermonkey99@36
|
238 for id, note in pairs(RECIPEPROFIT_database) do
|
|
killermonkey99@36
|
239 if((note.a and alliance) or (note.h and not alliance)) then
|
|
killermonkey99@36
|
240 x, y = find_good_id(note.x, note.y)
|
|
killermonkey99@36
|
241 add_note(x, y, note)
|
|
killermonkey99@36
|
242 end
|
|
Aaron@16
|
243 end
|
|
Aaron@16
|
244
|
|
Aaron@16
|
245 GatherMate:SendMessage("GatherMateDataImport")
|
|
killermonkey99@36
|
246 GatherMate:GetModule("Config"):SendMessage("GatherMate2ConfigChanged")
|
|
Aaron@16
|
247 end
|
|
Aaron@16
|
248
|
|
Aaron@16
|
249 function get_note_title(note, factionTag)
|
|
Aaron@16
|
250 if(not factionTag) then
|
|
Aaron@16
|
251 _, factionTag = get_faction_db();
|
|
Aaron@16
|
252 end
|
|
Aaron@16
|
253
|
|
Aaron@16
|
254 return note.item.." - ("..note.vendor.." ".. factionTag ..")";
|
|
Aaron@16
|
255 end
|
|
Aaron@16
|
256
|
|
Aaron@16
|
257 function add_note(x, y, note)
|
|
killermonkey99@36
|
258 local coords = GatherMate.mapData:EncodeLoc(x/100, y/100, 0)
|
|
killermonkey99@36
|
259 local zoneID = zidmap[note.map]
|
|
killermonkey99@36
|
260 if(not zoneID) then
|
|
killermonkey99@36
|
261 return
|
|
killermonkey99@36
|
262 end
|
|
Aaron@33
|
263
|
|
killermonkey99@36
|
264 local nodeID = GatherMate.nodeIDs["RecipeProfit"][get_note_title(note, "")]
|
|
killermonkey99@36
|
265 GatherMate:InjectNode(zoneID, coords, "RecipeProfit", nodeID)
|
|
Aaron@16
|
266 end
|
|
Aaron@16
|
267
|
|
Aaron@16
|
268 function get_faction_db()
|
|
Aaron@16
|
269 local factionAlliance = db.profile.faction == "Alliance" or
|
|
Aaron@16
|
270 db.profile.faction == "default" and UnitFactionGroup("player") == "Alliance";
|
|
killermonkey99@36
|
271
|
|
Aaron@16
|
272 if(factionAlliance) then
|
|
killermonkey99@36
|
273 return true, ""
|
|
Aaron@16
|
274 else
|
|
killermonkey99@36
|
275 return false, ""
|
|
Aaron@16
|
276 end
|
|
Aaron@16
|
277 end
|
|
Aaron@16
|
278
|
|
Aaron@16
|
279 function safe_cache_vendor()
|
|
Aaron@16
|
280 if(not profile.enable_cache) then
|
|
Aaron@16
|
281 return
|
|
Aaron@16
|
282 end
|
|
Aaron@16
|
283
|
|
Aaron@16
|
284 if(not profile.location_cache[UnitName("NPC")]) then
|
|
Aaron@16
|
285 SetMapToCurrentZone()
|
|
Aaron@16
|
286 local pos = {}
|
|
Aaron@16
|
287 pos.x, pos.y = GetPlayerMapPosition("player")
|
|
Aaron@16
|
288 profile.location_cache[UnitName("NPC")] = pos
|
|
Aaron@16
|
289 end
|
|
Aaron@16
|
290 end
|
|
Aaron@15
|
291
|
|
Aaron@9
|
292 function button_update(self)
|
|
Aaron@9
|
293 local buttonName = _G[self:GetName().."Name"];
|
|
Aaron@9
|
294 local link = GetMerchantItemLink(_G[self:GetName().."ItemButton"]:GetID());
|
|
Aaron@9
|
295 if(not link) then
|
|
Aaron@9
|
296 return;
|
|
Aaron@9
|
297 end
|
|
Aaron@9
|
298
|
|
Aaron@9
|
299 local sName, sLink, iRarity, iLevel, iMinLevel, sType, sSubType, iStackCount = GetItemInfo(link)
|
|
Aaron@9
|
300
|
|
Aaron@16
|
301 if(sType == "Recipe" and safeRecipes[sName]) then
|
|
Aaron@16
|
302 safe_cache_vendor();
|
|
Aaron@9
|
303 SetItemButtonNameFrameVertexColor(self, 0, 0, 1.0);
|
|
Aaron@9
|
304 SetItemButtonSlotVertexColor(self, 0, 0, 0.5);
|
|
Aaron@9
|
305 buttonName:SetText("* " .. sName)
|
|
Aaron@28
|
306
|
|
Aaron@9
|
307 if(GetItemCount(link, true) == 0) then
|
|
Aaron@9
|
308 buttonName:SetTextColor(0,1,1);
|
|
Aaron@9
|
309 elseif(GetItemCount(link, true) < 5) then
|
|
Aaron@9
|
310 buttonName:SetTextColor(1,0,1);
|
|
Aaron@9
|
311 else
|
|
Aaron@9
|
312 buttonName:SetTextColor(1,0,0);
|
|
Aaron@9
|
313 end
|
|
Aaron@28
|
314
|
|
Aaron@9
|
315 else
|
|
Aaron@9
|
316 buttonName:SetTextColor(GameFontNormalSmall:GetTextColor());
|
|
Aaron@9
|
317 end
|
|
Aaron@9
|
318 end
|
|
Aaron@9
|
319
|
|
Aaron@16
|
320 function find_good_id(x, y)
|
|
Aaron@0
|
321 if ids[x.." "..y] then
|
|
Aaron@16
|
322 return find_good_id(x + .01, y)
|
|
Aaron@0
|
323 end
|
|
Aaron@0
|
324
|
|
Aaron@0
|
325 ids[x.." "..y] = true
|
|
Aaron@0
|
326 return x, y
|
|
Aaron@17
|
327 end
|
|
Aaron@17
|
328
|
|
Aaron@17
|
329 local lastNodeTextureId = 0;
|
|
Aaron@17
|
330
|
|
Aaron@17
|
331 function get_next_texture_id()
|
|
Aaron@17
|
332 lastNodeTextureId = lastNodeTextureId + 1;
|
|
Aaron@17
|
333 return lastNodeTextureId;
|
|
Aaron@17
|
334 end
|
|
Aaron@17
|
335
|
|
Aaron@17
|
336 function set_node_constants()
|
|
Aaron@17
|
337 GatherMate.nodeIDs["RecipeProfit"] = {}
|
|
Aaron@17
|
338 GatherMate.nodeTextures["RecipeProfit"] = {}
|
|
Aaron@17
|
339 GatherMate.nodeMinHarvest["RecipeProfit"] = {}
|
|
Aaron@17
|
340
|
|
Aaron@17
|
341 local nodes = GatherMate.nodeIDs["RecipeProfit"]
|
|
killermonkey99@36
|
342 for id, note in pairs(RECIPEPROFIT_database) do
|
|
Aaron@17
|
343 safeRecipes[note.item] = true;
|
|
Aaron@24
|
344 local id = get_next_texture_id();
|
|
killermonkey99@36
|
345
|
|
killermonkey99@36
|
346 nodes[get_note_title(note, "")] = id;
|
|
Aaron@24
|
347 nodeLookup[id] = note;
|
|
Aaron@17
|
348 end
|
|
Aaron@17
|
349
|
|
Aaron@17
|
350 for i = 1, lastNodeTextureId, 1 do
|
|
Aaron@17
|
351 GatherMate.nodeTextures["RecipeProfit"][i] = "Interface\\Icons\\INV_Scroll_05"
|
|
Aaron@17
|
352 end
|
|
Aaron@17
|
353
|
|
Aaron@17
|
354 GatherMate.reverseNodeIDs["RecipeProfit"] = GatherMate:CreateReversedTable(nodes)
|
|
Aaron@17
|
355 end
|
|
Aaron@17
|
356
|
|
Aaron@17
|
357 function inject_options()
|
|
killermonkey99@36
|
358 local acr = LibStub("AceConfigRegistry-3.0")
|
|
killermonkey99@36
|
359 acr:GetOptionsTable("GatherMate 2", "dialog", "RecipeProfit-1.0").args["showRecipeProfit"] = {
|
|
killermonkey99@36
|
360 order = 7,
|
|
Aaron@17
|
361 name = "Show RecipeProfit nodes.",
|
|
Aaron@17
|
362 desc = "Toggle showing nodes added by RecipeProfit.",
|
|
Aaron@17
|
363 type = "select",
|
|
Aaron@17
|
364 values = {
|
|
killermonkey99@36
|
365 always = "Always show",
|
|
killermonkey99@36
|
366 never = "Never show",
|
|
Aaron@17
|
367 },
|
|
Aaron@17
|
368 arg = "RecipeProfit",
|
|
Aaron@17
|
369 }
|
|
Aaron@17
|
370
|
|
killermonkey99@36
|
371 GatherMate:GetModule("Config"):SendMessage("GatherMate2ConfigChanged")
|
|
Aaron@17
|
372 end
|
|
Aaron@24
|
373
|
|
Aaron@24
|
374 function get_colored_note_name(self, nodeID)
|
|
Aaron@24
|
375 local text = self.reverseNodeIDs["RecipeProfit"][nodeID]
|
|
Aaron@24
|
376 local sName, sLink, iRarity, iLevel, iMinLevel, sType, sSubType, iStackCount = GetItemInfo(nodeLookup[nodeID].itementry)
|
|
Aaron@24
|
377
|
|
Aaron@24
|
378 if(not sLink) then
|
|
killermonkey99@36
|
379 RecipeProfit:ScheduleTimer("UpdateButtons", 3)
|
|
killermonkey99@36
|
380 return "|cFF000000(??) |cFF66DD66" .. text .. "|cFFFF0000 Please Wait (Querying Server)..."
|
|
Aaron@24
|
381 end
|
|
Aaron@24
|
382
|
|
Aaron@24
|
383 local count = GetItemCount(sLink, true)
|
|
Aaron@24
|
384 local prefix = "|cFF888888(" .. count .. ") |cFF66DD66"
|
|
Aaron@24
|
385
|
|
Aaron@24
|
386 if(count == 0) then
|
|
Aaron@24
|
387 prefix = "|cFF00FFFF(" .. count .. ") |cFF66DD66"
|
|
Aaron@24
|
388 elseif(count >= 5) then
|
|
Aaron@24
|
389 prefix = "|cFFFF0000(" .. count .. ") |cFF66DD66"
|
|
Aaron@24
|
390 end
|
|
Aaron@24
|
391
|
|
Aaron@24
|
392 return prefix .. text
|
|
Aaron@24
|
393 end
|