|
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@16
|
130 --submitting cached data not yet implemented
|
|
Aaron@16
|
131 location_cache = {},
|
|
killermonkey99@51
|
132 debugvars = {},
|
|
killermonkey99@51
|
133 blacklist = {},
|
|
Aaron@0
|
134 }
|
|
Aaron@0
|
135
|
|
Aaron@0
|
136 function RecipeProfit:OnInitialize()
|
|
killermonkey99@52
|
137 RECIPEPROFIT_profile = RECIPEPROFIT_profile or {};
|
|
Aaron@7
|
138
|
|
Aaron@1
|
139 for k, v in pairs(defaults) do
|
|
killermonkey99@52
|
140 RECIPEPROFIT_profile[k] = RECIPEPROFIT_profile[k] or v;
|
|
Aaron@1
|
141 end
|
|
Aaron@1
|
142
|
|
killermonkey99@52
|
143 profile = RECIPEPROFIT_profile;
|
|
killermonkey99@52
|
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
|
|
killermonkey99@51
|
201 --Forward Functions for command listing
|
|
killermonkey99@51
|
202 local set_var,
|
|
killermonkey99@51
|
203 get_var,
|
|
killermonkey99@51
|
204 show_help,
|
|
killermonkey99@51
|
205 blacklist_add,
|
|
killermonkey99@51
|
206 blacklist_show,
|
|
killermonkey99@51
|
207 blacklist_query
|
|
killermonkey99@51
|
208
|
|
killermonkey99@51
|
209 local commandList --Forward declaration of command list
|
|
killermonkey99@51
|
210
|
|
killermonkey99@51
|
211 function RecipeProfit:ParseCommands(input, level, list)
|
|
killermonkey99@51
|
212 args = {self:GetArgs(input, level)}
|
|
killermonkey99@51
|
213 arg0 = args[#args - 1]
|
|
killermonkey99@51
|
214
|
|
killermonkey99@51
|
215 if(not list[arg0]) then
|
|
killermonkey99@51
|
216 print("Error parsing command. Type /rp help for help with this command.")
|
|
killermonkey99@51
|
217 return
|
|
killermonkey99@51
|
218 end
|
|
killermonkey99@51
|
219
|
|
killermonkey99@51
|
220 if(type(list[arg0]) == "table") then
|
|
killermonkey99@51
|
221 self:ParseCommands(input, level + 1, list[arg0])
|
|
killermonkey99@51
|
222 else
|
|
killermonkey99@51
|
223 list[arg0](input)
|
|
killermonkey99@51
|
224 end
|
|
killermonkey99@51
|
225 end
|
|
killermonkey99@51
|
226
|
|
killermonkey99@51
|
227 function RecipeProfit:ShowOptions(input)
|
|
killermonkey99@51
|
228 if (input ~= "") then
|
|
killermonkey99@51
|
229 self:ParseCommands(input, 1, commandList)
|
|
killermonkey99@51
|
230 else
|
|
killermonkey99@51
|
231 InterfaceOptionsFrame_OpenToCategory("GatherMate 2")
|
|
killermonkey99@51
|
232 LibStub("AceConfigDialog-3.0"):SelectGroup("GatherMate 2", "RecipeProfit")
|
|
killermonkey99@51
|
233 end
|
|
Aaron@12
|
234 end
|
|
Aaron@12
|
235
|
|
Aaron@16
|
236 function RecipeProfit:UpdateButtons(event, ...)
|
|
Aaron@16
|
237 --print("UpdateButtons", event)
|
|
Aaron@28
|
238 if(WorldMapFrame:IsShown()) then
|
|
Aaron@28
|
239 local continent, zone = GetCurrentMapContinent(), GetCurrentMapZone()
|
|
Aaron@28
|
240 SetMapZoom(continent)
|
|
Aaron@28
|
241 SetMapZoom(continent, zone)
|
|
Aaron@28
|
242 else
|
|
Aaron@28
|
243 SetMapZoom(-1)
|
|
Aaron@28
|
244 end
|
|
Aaron@28
|
245
|
|
Aaron@28
|
246 GatherMate:GetModule("Display"):UpdateMaps()
|
|
Aaron@28
|
247
|
|
Aaron@16
|
248 if(not MerchantFrame:IsVisible()) then
|
|
Aaron@16
|
249 --print("UpdateButtons - (Event: ", event, ") - MerchantFrame not visible.");
|
|
Aaron@16
|
250 return;
|
|
Aaron@16
|
251 end
|
|
Aaron@16
|
252
|
|
Aaron@16
|
253 for i=1, MERCHANT_ITEMS_PER_PAGE, 1 do
|
|
Aaron@16
|
254 local buttonframe = _G["MerchantItem"..i];
|
|
Aaron@16
|
255 local index = (((MerchantFrame.page - 1) * MERCHANT_ITEMS_PER_PAGE) + i);
|
|
Aaron@16
|
256 --print(index)
|
|
Aaron@16
|
257 if index <= GetMerchantNumItems() then
|
|
Aaron@16
|
258 button_update(buttonframe)
|
|
Aaron@16
|
259 end
|
|
Aaron@16
|
260 end
|
|
Aaron@17
|
261 end
|
|
Aaron@16
|
262
|
|
Aaron@16
|
263 function RecipeProfit:DoMerge()
|
|
Aaron@16
|
264 ids = {}
|
|
killermonkey99@36
|
265 local alliance = get_faction_db();
|
|
Aaron@16
|
266
|
|
Aaron@16
|
267 GatherMate:ClearDB("RecipeProfit")
|
|
killermonkey99@36
|
268 for id, note in pairs(RECIPEPROFIT_database) do
|
|
killermonkey99@51
|
269 local blacklisted = false;
|
|
killermonkey99@51
|
270
|
|
killermonkey99@51
|
271 for _, v in pairs(RECIPEPROFIT_blacklist) do
|
|
killermonkey99@51
|
272 if(note.stock == -1 and not note.item:find("Recipe:")) then
|
|
killermonkey99@51
|
273 blacklisted = true;
|
|
killermonkey99@51
|
274 end
|
|
killermonkey99@51
|
275
|
|
killermonkey99@51
|
276 if(tonumber(v) == note.entry) then
|
|
killermonkey99@51
|
277 blacklisted = true;
|
|
killermonkey99@51
|
278 end
|
|
killermonkey99@51
|
279 end
|
|
killermonkey99@51
|
280
|
|
killermonkey99@51
|
281 if(not blacklisted) then
|
|
killermonkey99@51
|
282 if((note.a and alliance) or (note.h and not alliance)) then
|
|
killermonkey99@51
|
283 x, y = find_good_id(note.x, note.y)
|
|
killermonkey99@51
|
284 add_note(x, y, note)
|
|
killermonkey99@51
|
285 end
|
|
killermonkey99@36
|
286 end
|
|
Aaron@16
|
287 end
|
|
Aaron@16
|
288
|
|
Aaron@16
|
289 GatherMate:SendMessage("GatherMateDataImport")
|
|
killermonkey99@36
|
290 GatherMate:GetModule("Config"):SendMessage("GatherMate2ConfigChanged")
|
|
Aaron@16
|
291 end
|
|
Aaron@16
|
292
|
|
Aaron@16
|
293 function get_note_title(note, factionTag)
|
|
Aaron@16
|
294 if(not factionTag) then
|
|
Aaron@16
|
295 _, factionTag = get_faction_db();
|
|
Aaron@16
|
296 end
|
|
Aaron@16
|
297
|
|
Aaron@16
|
298 return note.item.." - ("..note.vendor.." ".. factionTag ..")";
|
|
Aaron@16
|
299 end
|
|
Aaron@16
|
300
|
|
Aaron@16
|
301 function add_note(x, y, note)
|
|
killermonkey99@36
|
302 local coords = GatherMate.mapData:EncodeLoc(x/100, y/100, 0)
|
|
killermonkey99@36
|
303 local zoneID = zidmap[note.map]
|
|
killermonkey99@51
|
304
|
|
killermonkey99@51
|
305 if(note["realmap"]) then
|
|
killermonkey99@51
|
306 zoneID = note.realmap
|
|
killermonkey99@51
|
307 end
|
|
killermonkey99@51
|
308
|
|
killermonkey99@36
|
309 if(not zoneID) then
|
|
killermonkey99@36
|
310 return
|
|
killermonkey99@36
|
311 end
|
|
Aaron@33
|
312
|
|
killermonkey99@36
|
313 local nodeID = GatherMate.nodeIDs["RecipeProfit"][get_note_title(note, "")]
|
|
killermonkey99@36
|
314 GatherMate:InjectNode(zoneID, coords, "RecipeProfit", nodeID)
|
|
Aaron@16
|
315 end
|
|
Aaron@16
|
316
|
|
Aaron@16
|
317 function get_faction_db()
|
|
killermonkey99@52
|
318 local factionAlliance = UnitFactionGroup("player") == "Alliance";
|
|
killermonkey99@36
|
319
|
|
Aaron@16
|
320 if(factionAlliance) then
|
|
killermonkey99@36
|
321 return true, ""
|
|
Aaron@16
|
322 else
|
|
killermonkey99@36
|
323 return false, ""
|
|
Aaron@16
|
324 end
|
|
Aaron@16
|
325 end
|
|
Aaron@16
|
326
|
|
Aaron@16
|
327 function safe_cache_vendor()
|
|
Aaron@16
|
328 if(not profile.location_cache[UnitName("NPC")]) then
|
|
Aaron@16
|
329 SetMapToCurrentZone()
|
|
Aaron@16
|
330 local pos = {}
|
|
Aaron@16
|
331 pos.x, pos.y = GetPlayerMapPosition("player")
|
|
killermonkey99@51
|
332 pos.map = GetCurrentMapAreaID();
|
|
Aaron@16
|
333 profile.location_cache[UnitName("NPC")] = pos
|
|
Aaron@16
|
334 end
|
|
Aaron@16
|
335 end
|
|
Aaron@15
|
336
|
|
Aaron@9
|
337 function button_update(self)
|
|
Aaron@9
|
338 local buttonName = _G[self:GetName().."Name"];
|
|
Aaron@9
|
339 local link = GetMerchantItemLink(_G[self:GetName().."ItemButton"]:GetID());
|
|
Aaron@9
|
340 if(not link) then
|
|
Aaron@9
|
341 return;
|
|
Aaron@9
|
342 end
|
|
Aaron@9
|
343
|
|
Aaron@9
|
344 local sName, sLink, iRarity, iLevel, iMinLevel, sType, sSubType, iStackCount = GetItemInfo(link)
|
|
Aaron@9
|
345
|
|
Aaron@16
|
346 if(sType == "Recipe" and safeRecipes[sName]) then
|
|
Aaron@16
|
347 safe_cache_vendor();
|
|
Aaron@9
|
348 SetItemButtonNameFrameVertexColor(self, 0, 0, 1.0);
|
|
Aaron@9
|
349 SetItemButtonSlotVertexColor(self, 0, 0, 0.5);
|
|
Aaron@9
|
350 buttonName:SetText("* " .. sName)
|
|
Aaron@28
|
351
|
|
Aaron@9
|
352 if(GetItemCount(link, true) == 0) then
|
|
Aaron@9
|
353 buttonName:SetTextColor(0,1,1);
|
|
Aaron@9
|
354 elseif(GetItemCount(link, true) < 5) then
|
|
Aaron@9
|
355 buttonName:SetTextColor(1,0,1);
|
|
Aaron@9
|
356 else
|
|
Aaron@9
|
357 buttonName:SetTextColor(1,0,0);
|
|
Aaron@9
|
358 end
|
|
Aaron@28
|
359
|
|
Aaron@9
|
360 else
|
|
Aaron@9
|
361 buttonName:SetTextColor(GameFontNormalSmall:GetTextColor());
|
|
Aaron@9
|
362 end
|
|
Aaron@9
|
363 end
|
|
Aaron@9
|
364
|
|
Aaron@16
|
365 function find_good_id(x, y)
|
|
Aaron@0
|
366 if ids[x.." "..y] then
|
|
Aaron@16
|
367 return find_good_id(x + .01, y)
|
|
Aaron@0
|
368 end
|
|
Aaron@0
|
369
|
|
Aaron@0
|
370 ids[x.." "..y] = true
|
|
Aaron@0
|
371 return x, y
|
|
Aaron@17
|
372 end
|
|
Aaron@17
|
373
|
|
Aaron@17
|
374 local lastNodeTextureId = 0;
|
|
Aaron@17
|
375
|
|
Aaron@17
|
376 function get_next_texture_id()
|
|
Aaron@17
|
377 lastNodeTextureId = lastNodeTextureId + 1;
|
|
Aaron@17
|
378 return lastNodeTextureId;
|
|
Aaron@17
|
379 end
|
|
Aaron@17
|
380
|
|
Aaron@17
|
381 function set_node_constants()
|
|
Aaron@17
|
382 GatherMate.nodeIDs["RecipeProfit"] = {}
|
|
Aaron@17
|
383 GatherMate.nodeTextures["RecipeProfit"] = {}
|
|
Aaron@17
|
384 GatherMate.nodeMinHarvest["RecipeProfit"] = {}
|
|
Aaron@17
|
385
|
|
Aaron@17
|
386 local nodes = GatherMate.nodeIDs["RecipeProfit"]
|
|
killermonkey99@36
|
387 for id, note in pairs(RECIPEPROFIT_database) do
|
|
Aaron@17
|
388 safeRecipes[note.item] = true;
|
|
Aaron@24
|
389 local id = get_next_texture_id();
|
|
killermonkey99@36
|
390
|
|
killermonkey99@36
|
391 nodes[get_note_title(note, "")] = id;
|
|
Aaron@24
|
392 nodeLookup[id] = note;
|
|
Aaron@17
|
393 end
|
|
Aaron@17
|
394
|
|
Aaron@17
|
395 for i = 1, lastNodeTextureId, 1 do
|
|
Aaron@17
|
396 GatherMate.nodeTextures["RecipeProfit"][i] = "Interface\\Icons\\INV_Scroll_05"
|
|
Aaron@17
|
397 end
|
|
Aaron@17
|
398
|
|
Aaron@17
|
399 GatherMate.reverseNodeIDs["RecipeProfit"] = GatherMate:CreateReversedTable(nodes)
|
|
Aaron@17
|
400 end
|
|
Aaron@17
|
401
|
|
Aaron@17
|
402 function inject_options()
|
|
killermonkey99@36
|
403 local acr = LibStub("AceConfigRegistry-3.0")
|
|
killermonkey99@36
|
404 acr:GetOptionsTable("GatherMate 2", "dialog", "RecipeProfit-1.0").args["showRecipeProfit"] = {
|
|
killermonkey99@36
|
405 order = 7,
|
|
Aaron@17
|
406 name = "Show RecipeProfit nodes.",
|
|
Aaron@17
|
407 desc = "Toggle showing nodes added by RecipeProfit.",
|
|
Aaron@17
|
408 type = "select",
|
|
Aaron@17
|
409 values = {
|
|
killermonkey99@36
|
410 always = "Always show",
|
|
killermonkey99@36
|
411 never = "Never show",
|
|
Aaron@17
|
412 },
|
|
Aaron@17
|
413 arg = "RecipeProfit",
|
|
Aaron@17
|
414 }
|
|
Aaron@17
|
415
|
|
killermonkey99@36
|
416 GatherMate:GetModule("Config"):SendMessage("GatherMate2ConfigChanged")
|
|
Aaron@17
|
417 end
|
|
Aaron@24
|
418
|
|
Aaron@24
|
419 function get_colored_note_name(self, nodeID)
|
|
Aaron@24
|
420 local text = self.reverseNodeIDs["RecipeProfit"][nodeID]
|
|
Aaron@24
|
421 local sName, sLink, iRarity, iLevel, iMinLevel, sType, sSubType, iStackCount = GetItemInfo(nodeLookup[nodeID].itementry)
|
|
Aaron@24
|
422
|
|
Aaron@24
|
423 if(not sLink) then
|
|
killermonkey99@36
|
424 RecipeProfit:ScheduleTimer("UpdateButtons", 3)
|
|
killermonkey99@36
|
425 return "|cFF000000(??) |cFF66DD66" .. text .. "|cFFFF0000 Please Wait (Querying Server)..."
|
|
Aaron@24
|
426 end
|
|
Aaron@24
|
427
|
|
Aaron@24
|
428 local count = GetItemCount(sLink, true)
|
|
Aaron@24
|
429 local prefix = "|cFF888888(" .. count .. ") |cFF66DD66"
|
|
Aaron@24
|
430
|
|
Aaron@24
|
431 if(count == 0) then
|
|
Aaron@24
|
432 prefix = "|cFF00FFFF(" .. count .. ") |cFF66DD66"
|
|
Aaron@24
|
433 elseif(count >= 5) then
|
|
Aaron@24
|
434 prefix = "|cFFFF0000(" .. count .. ") |cFF66DD66"
|
|
Aaron@24
|
435 end
|
|
Aaron@24
|
436
|
|
Aaron@24
|
437 return prefix .. text
|
|
Aaron@24
|
438 end
|
|
killermonkey99@51
|
439
|
|
killermonkey99@51
|
440
|
|
killermonkey99@51
|
441
|
|
killermonkey99@51
|
442
|
|
killermonkey99@51
|
443
|
|
killermonkey99@51
|
444
|
|
killermonkey99@51
|
445
|
|
killermonkey99@51
|
446
|
|
killermonkey99@51
|
447
|
|
killermonkey99@51
|
448 --[[ Debug Commands ]]
|
|
killermonkey99@51
|
449 --[[
|
|
killermonkey99@51
|
450 set_var,
|
|
killermonkey99@51
|
451 get_var,
|
|
killermonkey99@51
|
452 show_help,
|
|
killermonkey99@51
|
453 blacklist_add,
|
|
killermonkey99@51
|
454 blacklist_show
|
|
killermonkey99@51
|
455 --]]
|
|
killermonkey99@51
|
456
|
|
killermonkey99@51
|
457 function set_var(input)
|
|
killermonkey99@51
|
458 print("set_var")
|
|
killermonkey99@51
|
459 end
|
|
killermonkey99@51
|
460
|
|
killermonkey99@51
|
461 function get_var(input)
|
|
killermonkey99@51
|
462 print("get_var")
|
|
killermonkey99@51
|
463 end
|
|
killermonkey99@51
|
464
|
|
killermonkey99@51
|
465 function show_help(input)
|
|
killermonkey99@51
|
466 print("show_help")
|
|
killermonkey99@51
|
467 end
|
|
killermonkey99@51
|
468
|
|
killermonkey99@51
|
469 function blacklist_add(input)
|
|
killermonkey99@51
|
470 if(not profile["blacklist"]) then
|
|
killermonkey99@51
|
471 profile["blacklist"] = {}
|
|
killermonkey99@51
|
472 end
|
|
killermonkey99@51
|
473 _, _, val = RecipeProfit:GetArgs(input,3)
|
|
killermonkey99@51
|
474 table.insert(profile.blacklist, val)
|
|
killermonkey99@51
|
475 print("Added npc id \""..val.."\"to NPC blacklist.");
|
|
killermonkey99@51
|
476 end
|
|
killermonkey99@51
|
477
|
|
killermonkey99@51
|
478 function blacklist_show(input)
|
|
killermonkey99@51
|
479 if(not profile["blacklist"]) then
|
|
killermonkey99@51
|
480 profile["blacklist"] = {}
|
|
killermonkey99@51
|
481 end
|
|
killermonkey99@51
|
482
|
|
killermonkey99@51
|
483 for k,v in ipairs(profile.blacklist) do
|
|
killermonkey99@51
|
484 print(k..": "..v)
|
|
killermonkey99@51
|
485 end
|
|
killermonkey99@51
|
486 end
|
|
killermonkey99@51
|
487
|
|
killermonkey99@51
|
488 function blacklist_query(input)
|
|
killermonkey99@51
|
489 _, _, val = RecipeProfit:GetArgs(input,3)
|
|
killermonkey99@51
|
490 if(not val) then
|
|
killermonkey99@51
|
491 print("oops")
|
|
killermonkey99@51
|
492 return
|
|
killermonkey99@51
|
493 end
|
|
killermonkey99@51
|
494
|
|
killermonkey99@51
|
495 entries = {};
|
|
killermonkey99@51
|
496 for _,note in pairs(RECIPEPROFIT_database) do
|
|
killermonkey99@51
|
497 if(note.vendor:lower():find(val:lower()) and not entries[note.entry]) then
|
|
killermonkey99@51
|
498 entries[note.entry] = true;
|
|
killermonkey99@51
|
499 print(note.vendor.." (ID "..note.entry.."): "..note.x..", "..note.y)
|
|
killermonkey99@51
|
500 end
|
|
killermonkey99@51
|
501 end
|
|
killermonkey99@51
|
502 end
|
|
killermonkey99@51
|
503
|
|
killermonkey99@51
|
504 commandList = {
|
|
killermonkey99@51
|
505 set = set_var,
|
|
killermonkey99@51
|
506 get = get_var,
|
|
killermonkey99@51
|
507 help = show_help,
|
|
killermonkey99@51
|
508 blacklist = {
|
|
killermonkey99@51
|
509 query = blacklist_query,
|
|
killermonkey99@51
|
510 add = blacklist_add,
|
|
killermonkey99@51
|
511 show = blacklist_show
|
|
killermonkey99@51
|
512 }
|
|
killermonkey99@51
|
513 }
|
|
killermonkey99@51
|
514
|