|
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 return
|
|
killermonkey99@36
|
258 end
|
|
Aaron@33
|
259
|
|
killermonkey99@36
|
260 local nodeID = GatherMate.nodeIDs["RecipeProfit"][get_note_title(note, "")]
|
|
killermonkey99@36
|
261 GatherMate:InjectNode(zoneID, coords, "RecipeProfit", nodeID)
|
|
Aaron@16
|
262 end
|
|
Aaron@16
|
263
|
|
Aaron@16
|
264 function get_faction_db()
|
|
Aaron@16
|
265 local factionAlliance = db.profile.faction == "Alliance" or
|
|
Aaron@16
|
266 db.profile.faction == "default" and UnitFactionGroup("player") == "Alliance";
|
|
killermonkey99@36
|
267
|
|
Aaron@16
|
268 if(factionAlliance) then
|
|
killermonkey99@36
|
269 return true, ""
|
|
Aaron@16
|
270 else
|
|
killermonkey99@36
|
271 return false, ""
|
|
Aaron@16
|
272 end
|
|
Aaron@16
|
273 end
|
|
Aaron@16
|
274
|
|
Aaron@16
|
275 function safe_cache_vendor()
|
|
Aaron@16
|
276 if(not profile.enable_cache) then
|
|
Aaron@16
|
277 return
|
|
Aaron@16
|
278 end
|
|
Aaron@16
|
279
|
|
Aaron@16
|
280 if(not profile.location_cache[UnitName("NPC")]) then
|
|
Aaron@16
|
281 SetMapToCurrentZone()
|
|
Aaron@16
|
282 local pos = {}
|
|
Aaron@16
|
283 pos.x, pos.y = GetPlayerMapPosition("player")
|
|
Aaron@16
|
284 profile.location_cache[UnitName("NPC")] = pos
|
|
Aaron@16
|
285 end
|
|
Aaron@16
|
286 end
|
|
Aaron@15
|
287
|
|
Aaron@9
|
288 function button_update(self)
|
|
Aaron@9
|
289 local buttonName = _G[self:GetName().."Name"];
|
|
Aaron@9
|
290 local link = GetMerchantItemLink(_G[self:GetName().."ItemButton"]:GetID());
|
|
Aaron@9
|
291 if(not link) then
|
|
Aaron@9
|
292 return;
|
|
Aaron@9
|
293 end
|
|
Aaron@9
|
294
|
|
Aaron@9
|
295 local sName, sLink, iRarity, iLevel, iMinLevel, sType, sSubType, iStackCount = GetItemInfo(link)
|
|
Aaron@9
|
296
|
|
Aaron@16
|
297 if(sType == "Recipe" and safeRecipes[sName]) then
|
|
Aaron@16
|
298 safe_cache_vendor();
|
|
Aaron@9
|
299 SetItemButtonNameFrameVertexColor(self, 0, 0, 1.0);
|
|
Aaron@9
|
300 SetItemButtonSlotVertexColor(self, 0, 0, 0.5);
|
|
Aaron@9
|
301 buttonName:SetText("* " .. sName)
|
|
Aaron@28
|
302
|
|
Aaron@9
|
303 if(GetItemCount(link, true) == 0) then
|
|
Aaron@9
|
304 buttonName:SetTextColor(0,1,1);
|
|
Aaron@9
|
305 elseif(GetItemCount(link, true) < 5) then
|
|
Aaron@9
|
306 buttonName:SetTextColor(1,0,1);
|
|
Aaron@9
|
307 else
|
|
Aaron@9
|
308 buttonName:SetTextColor(1,0,0);
|
|
Aaron@9
|
309 end
|
|
Aaron@28
|
310
|
|
Aaron@9
|
311 else
|
|
Aaron@9
|
312 buttonName:SetTextColor(GameFontNormalSmall:GetTextColor());
|
|
Aaron@9
|
313 end
|
|
Aaron@9
|
314 end
|
|
Aaron@9
|
315
|
|
Aaron@16
|
316 function find_good_id(x, y)
|
|
Aaron@0
|
317 if ids[x.." "..y] then
|
|
Aaron@16
|
318 return find_good_id(x + .01, y)
|
|
Aaron@0
|
319 end
|
|
Aaron@0
|
320
|
|
Aaron@0
|
321 ids[x.." "..y] = true
|
|
Aaron@0
|
322 return x, y
|
|
Aaron@17
|
323 end
|
|
Aaron@17
|
324
|
|
Aaron@17
|
325 local lastNodeTextureId = 0;
|
|
Aaron@17
|
326
|
|
Aaron@17
|
327 function get_next_texture_id()
|
|
Aaron@17
|
328 lastNodeTextureId = lastNodeTextureId + 1;
|
|
Aaron@17
|
329 return lastNodeTextureId;
|
|
Aaron@17
|
330 end
|
|
Aaron@17
|
331
|
|
Aaron@17
|
332 function set_node_constants()
|
|
Aaron@17
|
333 GatherMate.nodeIDs["RecipeProfit"] = {}
|
|
Aaron@17
|
334 GatherMate.nodeTextures["RecipeProfit"] = {}
|
|
Aaron@17
|
335 GatherMate.nodeMinHarvest["RecipeProfit"] = {}
|
|
Aaron@17
|
336
|
|
Aaron@17
|
337 local nodes = GatherMate.nodeIDs["RecipeProfit"]
|
|
killermonkey99@36
|
338 for id, note in pairs(RECIPEPROFIT_database) do
|
|
Aaron@17
|
339 safeRecipes[note.item] = true;
|
|
Aaron@24
|
340 local id = get_next_texture_id();
|
|
killermonkey99@36
|
341
|
|
killermonkey99@36
|
342 nodes[get_note_title(note, "")] = id;
|
|
Aaron@24
|
343 nodeLookup[id] = note;
|
|
Aaron@17
|
344 end
|
|
Aaron@17
|
345
|
|
Aaron@17
|
346 for i = 1, lastNodeTextureId, 1 do
|
|
Aaron@17
|
347 GatherMate.nodeTextures["RecipeProfit"][i] = "Interface\\Icons\\INV_Scroll_05"
|
|
Aaron@17
|
348 end
|
|
Aaron@17
|
349
|
|
Aaron@17
|
350 GatherMate.reverseNodeIDs["RecipeProfit"] = GatherMate:CreateReversedTable(nodes)
|
|
Aaron@17
|
351 end
|
|
Aaron@17
|
352
|
|
Aaron@17
|
353 function inject_options()
|
|
killermonkey99@36
|
354 local acr = LibStub("AceConfigRegistry-3.0")
|
|
killermonkey99@36
|
355 acr:GetOptionsTable("GatherMate 2", "dialog", "RecipeProfit-1.0").args["showRecipeProfit"] = {
|
|
killermonkey99@36
|
356 order = 7,
|
|
Aaron@17
|
357 name = "Show RecipeProfit nodes.",
|
|
Aaron@17
|
358 desc = "Toggle showing nodes added by RecipeProfit.",
|
|
Aaron@17
|
359 type = "select",
|
|
Aaron@17
|
360 values = {
|
|
killermonkey99@36
|
361 always = "Always show",
|
|
killermonkey99@36
|
362 never = "Never show",
|
|
Aaron@17
|
363 },
|
|
Aaron@17
|
364 arg = "RecipeProfit",
|
|
Aaron@17
|
365 }
|
|
Aaron@17
|
366
|
|
killermonkey99@36
|
367 GatherMate:GetModule("Config"):SendMessage("GatherMate2ConfigChanged")
|
|
Aaron@17
|
368 end
|
|
Aaron@24
|
369
|
|
Aaron@24
|
370 function get_colored_note_name(self, nodeID)
|
|
Aaron@24
|
371 local text = self.reverseNodeIDs["RecipeProfit"][nodeID]
|
|
Aaron@24
|
372 local sName, sLink, iRarity, iLevel, iMinLevel, sType, sSubType, iStackCount = GetItemInfo(nodeLookup[nodeID].itementry)
|
|
Aaron@24
|
373
|
|
Aaron@24
|
374 if(not sLink) then
|
|
killermonkey99@36
|
375 RecipeProfit:ScheduleTimer("UpdateButtons", 3)
|
|
killermonkey99@36
|
376 return "|cFF000000(??) |cFF66DD66" .. text .. "|cFFFF0000 Please Wait (Querying Server)..."
|
|
Aaron@24
|
377 end
|
|
Aaron@24
|
378
|
|
Aaron@24
|
379 local count = GetItemCount(sLink, true)
|
|
Aaron@24
|
380 local prefix = "|cFF888888(" .. count .. ") |cFF66DD66"
|
|
Aaron@24
|
381
|
|
Aaron@24
|
382 if(count == 0) then
|
|
Aaron@24
|
383 prefix = "|cFF00FFFF(" .. count .. ") |cFF66DD66"
|
|
Aaron@24
|
384 elseif(count >= 5) then
|
|
Aaron@24
|
385 prefix = "|cFFFF0000(" .. count .. ") |cFF66DD66"
|
|
Aaron@24
|
386 end
|
|
Aaron@24
|
387
|
|
Aaron@24
|
388 return prefix .. text
|
|
Aaron@24
|
389 end
|