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) |
