Mercurial > wow > reagentmaker
comparison SecureMenu.lua @ 111:af23986010ef v1.1beta0
Rewrote the main part to clarify things, should have removed some hidden nasty bugs.
author | contrebasse |
---|---|
date | Thu, 02 Jun 2011 23:07:23 +0200 |
parents | d60d6b4cab0c |
children | 5a3fb8fea026 |
comparison
equal
deleted
inserted
replaced
110:d60d6b4cab0c | 111:af23986010ef |
---|---|
1 local addonName, A = ... | 1 local addonName, A = ... |
2 | |
3 -- Lua functions | |
4 local ipairs = ipairs | |
5 local type = type | |
6 | |
7 -- Wow variables | |
2 | 8 |
3 -- Create the menu frame | 9 -- Create the menu frame |
4 local MenuFrame = CreateFrame("Frame","ReagentMaker_ExternalFrame",UIParent) | 10 local MenuFrame = CreateFrame("Frame","ReagentMaker_ExternalFrame",UIParent) |
5 MenuFrame:Hide() | 11 MenuFrame:Hide() |
6 MenuFrame:SetSize(192,256) | 12 MenuFrame:SetSize(192,256) |
54 end) | 60 end) |
55 | 61 |
56 -- Hide frame when selecting a recipe which doesn't need this reagent | 62 -- Hide frame when selecting a recipe which doesn't need this reagent |
57 hooksecurefunc("SelectTradeSkill",function() | 63 hooksecurefunc("SelectTradeSkill",function() |
58 local selectedIndex = GetTradeSkillSelectionIndex() | 64 local selectedIndex = GetTradeSkillSelectionIndex() |
59 for reagentRecipeIndex = 1,GetTradeSkillNumReagents(selectedIndex) do | 65 for reagentIndexInRecipe = 1,GetTradeSkillNumReagents(selectedIndex) do |
60 local reagentID = A.link2ID(GetTradeSkillReagentItemLink(selectedIndex, reagentRecipeIndex)) | 66 local reagentID = A.link2ID(GetTradeSkillReagentItemLink(selectedIndex, reagentIndexInRecipe)) |
61 if reagentID == MenuFrame.itemID or (MenuFrame.superItemID and reagentID == MenuFrame.superItemID) then | 67 if reagentID == MenuFrame.itemID or (MenuFrame.superItemID and reagentID == MenuFrame.superItemID) then |
62 return | 68 return |
63 end | 69 end |
64 end | 70 end |
65 MenuFrame:Hide() | 71 MenuFrame:Hide() |
202 A.Error(A.L["You do not have enough [%s] to craft [%s]"]:format(btn.itemNameString,TitleText:GetText())) | 208 A.Error(A.L["You do not have enough [%s] to craft [%s]"]:format(btn.itemNameString,TitleText:GetText())) |
203 end | 209 end |
204 end | 210 end |
205 | 211 |
206 local function CraftFromExternal(btn) | 212 local function CraftFromExternal(btn) |
207 local chooseNumber = IsShiftKeyDown() | 213 local chooseNumberToCraft = IsShiftKeyDown() |
208 local numReagentMakable = A.numRecipeMakable(btn.reagentID,btn.reagentsForOneRecipe) | 214 |
209 local reagentIndex = A.findExactSkillIndex(btn.itemID,btn.itemNameString) | 215 A.CraftItemWithRecipe( GetTradeSkillSelectionIndex(), |
210 | 216 btn.itemID, |
211 -- to define | 217 btn.reagent, |
212 local numToMake = 1 | 218 MenuFrame.reagentIndexInRecipe, |
213 | 219 IsShiftKeyDown(), |
214 -- Choose number or craft directly | 220 btn) |
215 if chooseNumber then | |
216 -- Store info to be able to run the function later | |
217 btn.ReagentMaker_reagentIndex = reagentIndex | |
218 | |
219 -- Open dialog | |
220 OpenStackSplitFrame(numReagentMakable, btn, "BOTTOMRIGHT", "TOP") | |
221 | |
222 -- Fill in the number to make | |
223 numToMake = tostring(numToMake) | |
224 for i = 1,numToMake:len() do | |
225 StackSplitFrame_OnChar(StackSplitFrame,numToMake:gsub(i,i)) | |
226 end | |
227 StackSplitFrame.typing = 0 -- reinit the frame so that the entered value will be erased on text entry | |
228 else | |
229 DoTradeSkill(reagentIndex,numToMake) | |
230 end -- if | |
231 end | 221 end |
232 | 222 |
233 -- Update counts and button actions | 223 -- Update counts and button actions |
234 function MenuFrame.updateCounts() | 224 function MenuFrame.updateCounts() |
235 local anyMakable | 225 local anyMakable |
344 end | 334 end |
345 end | 335 end |
346 | 336 |
347 -- Save params | 337 -- Save params |
348 btn.itemID = itemID | 338 btn.itemID = itemID |
339 btn.reagent = reagent | |
349 btn.reagentID = reagent[1] | 340 btn.reagentID = reagent[1] |
350 btn.reagentLink = link | 341 btn.reagentLink = link |
351 btn.reagentsForOneRecipe = reagent[2] | 342 btn.reagentsForOneRecipe = reagent[2] |
352 btn.spellLink = reagent.spellLink | 343 btn.spellLink = reagent.spellLink |
353 btn.action = action | 344 btn.action = action |
366 local function reopen() | 357 local function reopen() |
367 -- Release OnUpdate frame (could conflict with BAG_UPDATE) | 358 -- Release OnUpdate frame (could conflict with BAG_UPDATE) |
368 MenuFrame:SetScript("OnUpdate",nil) | 359 MenuFrame:SetScript("OnUpdate",nil) |
369 | 360 |
370 -- reopen | 361 -- reopen |
371 A.externalCraftWindow(MenuFrame.itemID,MenuFrame.superItemID) | 362 A.externalCraftWindow(MenuFrame.itemID,MenuFrame.reagentIndexInRecipe,MenuFrame.superItemID) |
372 end | 363 end |
373 | 364 |
374 -- Fill the window and open it | 365 -- Fill the window and open it |
375 function A.externalCraftWindow(itemID,superItemID) | 366 function A.externalCraftWindow(itemID,reagentIndexInRecipe,superItemID) |
376 -- Do not open during combat | 367 -- Do not open during combat |
377 if InCombatLockdown() then | 368 if InCombatLockdown() then |
378 A.Error(SPELL_FAILED_AFFECTING_COMBAT) | 369 A.Error(SPELL_FAILED_AFFECTING_COMBAT) |
379 return | 370 return |
380 end | 371 end |
398 | 389 |
399 -- Save vars to show the tooltip later | 390 -- Save vars to show the tooltip later |
400 MenuFrame.reagentLink = link | 391 MenuFrame.reagentLink = link |
401 MenuFrame.spellLink = A.isRecipeUnique(A.data[itemID]) and A.data[itemID][1].spellLink | 392 MenuFrame.spellLink = A.isRecipeUnique(A.data[itemID]) and A.data[itemID][1].spellLink |
402 MenuFrame.itemID = itemID | 393 MenuFrame.itemID = itemID |
394 MenuFrame.reagentIndexInRecipe = reagentIndexInRecipe | |
403 MenuFrame.superItemID = superItemID -- optional, will be nil if not set | 395 MenuFrame.superItemID = superItemID -- optional, will be nil if not set |
404 | 396 |
405 -- Loop over the available recipes | 397 -- Loop over the available recipes |
406 local noSkipped = true -- check if we have to reload the external frame to get all the data | 398 local noSkipped = true -- check if we have to reload the external frame to get all the data |
407 local existsValidEntries -- check if the menu contains at least one item (cross-tradeskill problem) | 399 local existsValidEntries -- check if the menu contains at least one item (cross-tradeskill problem) |