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