|
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()
|
|
Aaron@17
|
195 end
|
|
Aaron@17
|
196
|
|
Aaron@12
|
197 function RecipeProfit:ShowOptions()
|
|
killermonkey99@36
|
198 InterfaceOptionsFrame_OpenToCategory("GatherMate 2")
|
|
killermonkey99@36
|
199 LibStub("AceConfigDialog-3.0"):SelectGroup("GatherMate 2", "RecipeProfit")
|
|
Aaron@12
|
200 end
|
|
Aaron@12
|
201
|
|
Aaron@16
|
202 function RecipeProfit:UpdateButtons(event, ...)
|
|
Aaron@16
|
203 --print("UpdateButtons", event)
|
|
Aaron@28
|
204 if(WorldMapFrame:IsShown()) then
|
|
Aaron@28
|
205 local continent, zone = GetCurrentMapContinent(), GetCurrentMapZone()
|
|
Aaron@28
|
206 SetMapZoom(continent)
|
|
Aaron@28
|
207 SetMapZoom(continent, zone)
|
|
Aaron@28
|
208 else
|
|
Aaron@28
|
209 SetMapZoom(-1)
|
|
Aaron@28
|
210 end
|
|
Aaron@28
|
211
|
|
Aaron@28
|
212 GatherMate:GetModule("Display"):UpdateMaps()
|
|
Aaron@28
|
213
|
|
Aaron@16
|
214 if(not MerchantFrame:IsVisible()) then
|
|
Aaron@16
|
215 --print("UpdateButtons - (Event: ", event, ") - MerchantFrame not visible.");
|
|
Aaron@16
|
216 return;
|
|
Aaron@16
|
217 end
|
|
Aaron@16
|
218
|
|
Aaron@16
|
219 for i=1, MERCHANT_ITEMS_PER_PAGE, 1 do
|
|
Aaron@16
|
220 local buttonframe = _G["MerchantItem"..i];
|
|
Aaron@16
|
221 local index = (((MerchantFrame.page - 1) * MERCHANT_ITEMS_PER_PAGE) + i);
|
|
Aaron@16
|
222 --print(index)
|
|
Aaron@16
|
223 if index <= GetMerchantNumItems() then
|
|
Aaron@16
|
224 button_update(buttonframe)
|
|
Aaron@16
|
225 end
|
|
Aaron@16
|
226 end
|
|
Aaron@17
|
227 end
|
|
Aaron@16
|
228
|
|
Aaron@16
|
229 function RecipeProfit:DoMerge()
|
|
Aaron@16
|
230 ids = {}
|
|
killermonkey99@36
|
231 local alliance = get_faction_db();
|
|
Aaron@16
|
232
|
|
Aaron@16
|
233 GatherMate:ClearDB("RecipeProfit")
|
|
killermonkey99@36
|
234 for id, note in pairs(RECIPEPROFIT_database) do
|
|
killermonkey99@36
|
235 if((note.a and alliance) or (note.h and not alliance)) then
|
|
killermonkey99@36
|
236 x, y = find_good_id(note.x, note.y)
|
|
killermonkey99@36
|
237 add_note(x, y, note)
|
|
killermonkey99@36
|
238 end
|
|
Aaron@16
|
239 end
|
|
Aaron@16
|
240
|
|
Aaron@16
|
241 GatherMate:SendMessage("GatherMateDataImport")
|
|
killermonkey99@36
|
242 GatherMate:GetModule("Config"):SendMessage("GatherMate2ConfigChanged")
|
|
Aaron@16
|
243 end
|
|
Aaron@16
|
244
|
|
Aaron@16
|
245 function get_note_title(note, factionTag)
|
|
Aaron@16
|
246 if(not factionTag) then
|
|
Aaron@16
|
247 _, factionTag = get_faction_db();
|
|
Aaron@16
|
248 end
|
|
Aaron@16
|
249
|
|
Aaron@16
|
250 return note.item.." - ("..note.vendor.." ".. factionTag ..")";
|
|
Aaron@16
|
251 end
|
|
Aaron@16
|
252
|
|
Aaron@16
|
253 function add_note(x, y, note)
|
|
killermonkey99@36
|
254 local coords = GatherMate.mapData:EncodeLoc(x/100, y/100, 0)
|
|
killermonkey99@36
|
255 local zoneID = zidmap[note.map]
|
|
killermonkey99@36
|
256 if(not zoneID) then
|
|
killermonkey99@36
|
257 print("OMFG "..note.map)
|
|
killermonkey99@36
|
258 return
|
|
killermonkey99@36
|
259 end
|
|
Aaron@33
|
260
|
|
killermonkey99@36
|
261 local nodeID = GatherMate.nodeIDs["RecipeProfit"][get_note_title(note, "")]
|
|
killermonkey99@36
|
262 print(nodeID)
|
|
killermonkey99@36
|
263 GatherMate:InjectNode(zoneID, coords, "RecipeProfit", nodeID)
|
|
Aaron@16
|
264 end
|
|
Aaron@16
|
265
|
|
Aaron@16
|
266 function get_faction_db()
|
|
Aaron@16
|
267 local factionAlliance = db.profile.faction == "Alliance" or
|
|
Aaron@16
|
268 db.profile.faction == "default" and UnitFactionGroup("player") == "Alliance";
|
|
killermonkey99@36
|
269
|
|
Aaron@16
|
270 if(factionAlliance) then
|
|
killermonkey99@36
|
271 return true, ""
|
|
Aaron@16
|
272 else
|
|
killermonkey99@36
|
273 return false, ""
|
|
Aaron@16
|
274 end
|
|
Aaron@16
|
275 end
|
|
Aaron@16
|
276
|
|
Aaron@16
|
277 function safe_cache_vendor()
|
|
Aaron@16
|
278 if(not profile.enable_cache) then
|
|
Aaron@16
|
279 return
|
|
Aaron@16
|
280 end
|
|
Aaron@16
|
281
|
|
Aaron@16
|
282 if(not profile.location_cache[UnitName("NPC")]) then
|
|
Aaron@16
|
283 SetMapToCurrentZone()
|
|
Aaron@16
|
284 local pos = {}
|
|
Aaron@16
|
285 pos.x, pos.y = GetPlayerMapPosition("player")
|
|
Aaron@16
|
286 profile.location_cache[UnitName("NPC")] = pos
|
|
Aaron@16
|
287 end
|
|
Aaron@16
|
288 end
|
|
Aaron@15
|
289
|
|
Aaron@9
|
290 function button_update(self)
|
|
Aaron@9
|
291 local buttonName = _G[self:GetName().."Name"];
|
|
Aaron@9
|
292 local link = GetMerchantItemLink(_G[self:GetName().."ItemButton"]:GetID());
|
|
Aaron@9
|
293 if(not link) then
|
|
Aaron@9
|
294 return;
|
|
Aaron@9
|
295 end
|
|
Aaron@9
|
296
|
|
Aaron@9
|
297 local sName, sLink, iRarity, iLevel, iMinLevel, sType, sSubType, iStackCount = GetItemInfo(link)
|
|
Aaron@9
|
298
|
|
Aaron@16
|
299 if(sType == "Recipe" and safeRecipes[sName]) then
|
|
Aaron@16
|
300 safe_cache_vendor();
|
|
Aaron@9
|
301 SetItemButtonNameFrameVertexColor(self, 0, 0, 1.0);
|
|
Aaron@9
|
302 SetItemButtonSlotVertexColor(self, 0, 0, 0.5);
|
|
Aaron@9
|
303 buttonName:SetText("* " .. sName)
|
|
Aaron@28
|
304
|
|
Aaron@9
|
305 if(GetItemCount(link, true) == 0) then
|
|
Aaron@9
|
306 buttonName:SetTextColor(0,1,1);
|
|
Aaron@9
|
307 elseif(GetItemCount(link, true) < 5) then
|
|
Aaron@9
|
308 buttonName:SetTextColor(1,0,1);
|
|
Aaron@9
|
309 else
|
|
Aaron@9
|
310 buttonName:SetTextColor(1,0,0);
|
|
Aaron@9
|
311 end
|
|
Aaron@28
|
312
|
|
Aaron@9
|
313 else
|
|
Aaron@9
|
314 buttonName:SetTextColor(GameFontNormalSmall:GetTextColor());
|
|
Aaron@9
|
315 end
|
|
Aaron@9
|
316 end
|
|
Aaron@9
|
317
|
|
Aaron@16
|
318 function find_good_id(x, y)
|
|
Aaron@0
|
319 if ids[x.." "..y] then
|
|
Aaron@16
|
320 return find_good_id(x + .01, y)
|
|
Aaron@0
|
321 end
|
|
Aaron@0
|
322
|
|
Aaron@0
|
323 ids[x.." "..y] = true
|
|
Aaron@0
|
324 return x, y
|
|
Aaron@17
|
325 end
|
|
Aaron@17
|
326
|
|
Aaron@17
|
327 local lastNodeTextureId = 0;
|
|
Aaron@17
|
328
|
|
Aaron@17
|
329 function get_next_texture_id()
|
|
Aaron@17
|
330 lastNodeTextureId = lastNodeTextureId + 1;
|
|
Aaron@17
|
331 return lastNodeTextureId;
|
|
Aaron@17
|
332 end
|
|
Aaron@17
|
333
|
|
Aaron@17
|
334 function set_node_constants()
|
|
Aaron@17
|
335 GatherMate.nodeIDs["RecipeProfit"] = {}
|
|
Aaron@17
|
336 GatherMate.nodeTextures["RecipeProfit"] = {}
|
|
Aaron@17
|
337 GatherMate.nodeMinHarvest["RecipeProfit"] = {}
|
|
Aaron@17
|
338
|
|
Aaron@17
|
339 local nodes = GatherMate.nodeIDs["RecipeProfit"]
|
|
killermonkey99@36
|
340 for id, note in pairs(RECIPEPROFIT_database) do
|
|
Aaron@17
|
341 safeRecipes[note.item] = true;
|
|
Aaron@24
|
342 local id = get_next_texture_id();
|
|
killermonkey99@36
|
343
|
|
killermonkey99@36
|
344 nodes[get_note_title(note, "")] = id;
|
|
Aaron@24
|
345 nodeLookup[id] = note;
|
|
Aaron@17
|
346 end
|
|
Aaron@17
|
347
|
|
Aaron@17
|
348 for i = 1, lastNodeTextureId, 1 do
|
|
Aaron@17
|
349 GatherMate.nodeTextures["RecipeProfit"][i] = "Interface\\Icons\\INV_Scroll_05"
|
|
Aaron@17
|
350 end
|
|
Aaron@17
|
351
|
|
Aaron@17
|
352 GatherMate.reverseNodeIDs["RecipeProfit"] = GatherMate:CreateReversedTable(nodes)
|
|
Aaron@17
|
353 end
|
|
Aaron@17
|
354
|
|
Aaron@17
|
355 function inject_options()
|
|
killermonkey99@36
|
356 local acr = LibStub("AceConfigRegistry-3.0")
|
|
killermonkey99@36
|
357 acr:GetOptionsTable("GatherMate 2", "dialog", "RecipeProfit-1.0").args["showRecipeProfit"] = {
|
|
killermonkey99@36
|
358 order = 7,
|
|
Aaron@17
|
359 name = "Show RecipeProfit nodes.",
|
|
Aaron@17
|
360 desc = "Toggle showing nodes added by RecipeProfit.",
|
|
Aaron@17
|
361 type = "select",
|
|
Aaron@17
|
362 values = {
|
|
killermonkey99@36
|
363 always = "Always show",
|
|
killermonkey99@36
|
364 never = "Never show",
|
|
Aaron@17
|
365 },
|
|
Aaron@17
|
366 arg = "RecipeProfit",
|
|
Aaron@17
|
367 }
|
|
Aaron@17
|
368
|
|
killermonkey99@36
|
369 GatherMate:GetModule("Config"):SendMessage("GatherMate2ConfigChanged")
|
|
Aaron@17
|
370 end
|
|
Aaron@24
|
371
|
|
Aaron@24
|
372 function get_colored_note_name(self, nodeID)
|
|
Aaron@24
|
373 local text = self.reverseNodeIDs["RecipeProfit"][nodeID]
|
|
Aaron@24
|
374 local sName, sLink, iRarity, iLevel, iMinLevel, sType, sSubType, iStackCount = GetItemInfo(nodeLookup[nodeID].itementry)
|
|
Aaron@24
|
375
|
|
Aaron@24
|
376 if(not sLink) then
|
|
killermonkey99@36
|
377 RecipeProfit:ScheduleTimer("UpdateButtons", 3)
|
|
killermonkey99@36
|
378 return "|cFF000000(??) |cFF66DD66" .. text .. "|cFFFF0000 Please Wait (Querying Server)..."
|
|
Aaron@24
|
379 end
|
|
Aaron@24
|
380
|
|
Aaron@24
|
381 local count = GetItemCount(sLink, true)
|
|
Aaron@24
|
382 local prefix = "|cFF888888(" .. count .. ") |cFF66DD66"
|
|
Aaron@24
|
383
|
|
Aaron@24
|
384 if(count == 0) then
|
|
Aaron@24
|
385 prefix = "|cFF00FFFF(" .. count .. ") |cFF66DD66"
|
|
Aaron@24
|
386 elseif(count >= 5) then
|
|
Aaron@24
|
387 prefix = "|cFFFF0000(" .. count .. ") |cFF66DD66"
|
|
Aaron@24
|
388 end
|
|
Aaron@24
|
389
|
|
Aaron@24
|
390 return prefix .. text
|
|
Aaron@24
|
391 end
|