annotate ReagentMaker.lua @ 18:c37c2a46723c

Remove debug printing
author contrebasse
date Fri, 08 Apr 2011 19:24:22 +0200
parents 5336b3a19d4f
children f7b23db7bcc6
rev   line source
contrebasse@0 1 local addonName, A = ...
contrebasse@0 2
contrebasse@0 3 -- @todo clean the A table
contrebasse@0 4 -- @todo check local copy of globals functions
contrebasse@0 5 -- @todo show number of craftable items
contrebasse@0 6 -- @todo show owned items
contrebasse@0 7 -- @todo add support for dez ?
contrebasse@0 8 -- @todo add support for cross tradeskill, like mining + forge/ingé
contrebasse@0 9
contrebasse@0 10 ---------------------------------------------------
contrebasse@0 11 -- Variables
contrebasse@0 12 ---------------------------------------------------
contrebasse@0 13 -- Used by findglobals
contrebasse@0 14 -- GLOBALS: _G, CreateFrame, DEFAULT_CHAT_FRAME
contrebasse@0 15
contrebasse@0 16 -- Lua functions
contrebasse@0 17
contrebasse@0 18 -- Wow functions
contrebasse@0 19
contrebasse@0 20 -- constant vars
contrebasse@0 21
contrebasse@0 22 ---------------------------------------------------
contrebasse@0 23 -- Manage events
contrebasse@0 24 ---------------------------------------------------
contrebasse@0 25 A.EventsFrame = CreateFrame("Frame")
contrebasse@0 26
contrebasse@17 27 local SCAN_DELAY = 0.2
contrebasse@17 28 local t_throttle = SCAN_DELAY
contrebasse@17 29 local function throttleScan(self, t_elapsed)
contrebasse@17 30 t_throttle = t_throttle - t_elapsed
contrebasse@17 31 if t_throttle<0 then
contrebasse@17 32 self:SetScript("OnUpdate", nil)
contrebasse@18 33
contrebasse@3 34 -- Close the external window if the tradeskill changed
contrebasse@3 35 if A.currentTradeSkill ~= GetTradeSkillLine() then
contrebasse@3 36 A.MenuFrame:Hide()
contrebasse@3 37 end
contrebasse@13 38 if IsTradeSkillGuild() or IsTradeSkillLinked() then
contrebasse@13 39 A.MenuFrame:Hide()
contrebasse@13 40 return
contrebasse@13 41 end
contrebasse@13 42
contrebasse@13 43 -- Scan availabe recipes
contrebasse@13 44 A:ScanSimpleRecipes()
contrebasse@17 45 end
contrebasse@17 46 end
contrebasse@17 47 A.EventsFrame:SetScript("OnEvent", function(self, event)
contrebasse@17 48 if event == "TRADE_SKILL_UPDATE" then
contrebasse@17 49 t_throttle = SCAN_DELAY
contrebasse@17 50 self:SetScript("OnUpdate", throttleScan)
contrebasse@17 51
contrebasse@17 52 elseif event == "TRADE_SKILL_SHOW" then
contrebasse@0 53 A:Initialize()
contrebasse@13 54 A.EventsFrame:UnregisterEvent("TRADE_SKILL_SHOW")
contrebasse@0 55 end -- if
contrebasse@3 56 end) -- function
contrebasse@0 57 A.EventsFrame:RegisterEvent("TRADE_SKILL_SHOW")
contrebasse@3 58 A.EventsFrame:RegisterEvent("TRADE_SKILL_UPDATE")
contrebasse@0 59
contrebasse@0 60 ---------------------------------------------------
contrebasse@0 61 -- Initialize
contrebasse@0 62 ---------------------------------------------------
contrebasse@0 63 function A:Initialize()
contrebasse@0 64
contrebasse@3 65 -- Register clics on reagent's buttons
contrebasse@3 66 for i=1,7 do
contrebasse@3 67 local btn = _G["TradeSkillReagent"..i];
contrebasse@3 68 btn:HookScript("OnDoubleClick", A.ProcessReagent);
contrebasse@3 69 btn:HookScript("OnEnter", A.btnEntered)
contrebasse@3 70 btn:HookScript("OnLeave", A.btnLeft)
contrebasse@3 71 btn.SplitStack = A.SplitStack
contrebasse@1 72
contrebasse@3 73 local textureHighlight = btn:CreateTexture()
contrebasse@3 74 textureHighlight:Hide()
contrebasse@3 75 textureHighlight:SetTexture("Interface\\BUTTONS\\CheckButtonHilight")
contrebasse@3 76 textureHighlight:SetBlendMode("ADD")
contrebasse@3 77 --textureHighlight:SetPoint("TOPLEFT")
contrebasse@3 78 --textureHighlight:SetSize(btn:GetHeight(),btn:GetHeight())
contrebasse@3 79 textureHighlight:SetAllPoints("TradeSkillReagent"..i.."IconTexture")
contrebasse@3 80 btn.textureHighlight = textureHighlight
contrebasse@3 81
contrebasse@3 82 local label = btn:CreateFontString(nil,"ARTWORK","GameFontHighlight")
contrebasse@3 83 label:SetSize(100,20)
contrebasse@3 84 label:SetPoint("TOPLEFT",btn,"TOPLEFT",4,-4)
contrebasse@3 85 label:SetJustifyH("LEFT")
contrebasse@3 86 label:SetJustifyV("TOP")
contrebasse@3 87 label:SetFont("Fonts\\FRIZQT__.TTF", 10, "OUTLINE")
contrebasse@3 88 btn.label = label
contrebasse@3 89 end -- for
contrebasse@3 90
contrebasse@3 91 A.tooltipRecipe = CreateFrame("GameTooltip", "ReagentMaker_tooltipRecipe",UIParent, "GameTooltipTemplate")
contrebasse@3 92 A.tooltipRecipe:SetFrameStrata("TOOLTIP")
contrebasse@3 93 A.tooltipRecipe:Hide()
contrebasse@7 94 --[[
contrebasse@3 95 A.tooltipReagent = CreateFrame("GameTooltip", "ReagentMaker_tooltipReagent",UIParent, "GameTooltipTemplate")
contrebasse@3 96 A.tooltipReagent:SetFrameStrata("TOOLTIP")
contrebasse@3 97 A.tooltipReagent:Hide()
contrebasse@7 98 --]]
contrebasse@3 99 end -- function
contrebasse@3 100
contrebasse@13 101 -- Function run after selecting a item in the tradeskill window
contrebasse@13 102 function A.ProcessReagent(btn, ...)
contrebasse@13 103 -- Do not manage guild tradeskill
contrebasse@13 104 if IsTradeSkillGuild() or IsTradeSkillLinked() then return end
contrebasse@3 105
contrebasse@3 106 -- We want no modifiers, or shift to choose the number of reagent to craft
contrebasse@3 107 if IsModifierKeyDown() and not IsShiftKeyDown() then return end
contrebasse@3 108 local chooseNumberToCraft = IsShiftKeyDown()
contrebasse@3 109
contrebasse@3 110 -- Index of the reagent in the recipe, taken from the button name
contrebasse@3 111 local reagentRecipeIndex = A.buttonNumber(btn)
contrebasse@3 112
contrebasse@3 113 -- ID of the reagent we want to craft
contrebasse@3 114 local reagentID = A.link2ID(GetTradeSkillReagentItemLink(GetTradeSkillSelectionIndex(), reagentRecipeIndex))
contrebasse@3 115
contrebasse@3 116 -- Continue only if the reagent is known
contrebasse@3 117 if not reagentID or not A.data[reagentID] then return end
contrebasse@3 118
contrebasse@3 119 -- If only one recipe is known for the reagent, use it
contrebasse@3 120 if #(A.data[reagentID]) == 1 and not A.data[reagentID].spell then
contrebasse@3 121 local numMakable, reagentIndex = A.numMakable(reagentID)
contrebasse@3 122 if numMakable>0 then
contrebasse@3 123 A.craft(reagentID,reagentRecipeIndex,reagentIndex,numMakable,chooseNumberToCraft)
contrebasse@3 124 return
contrebasse@3 125 end
contrebasse@3 126 -- If we can make the item needed to make the reagent, open a window to make it
contrebasse@3 127 -- one step recursion, enables to mill to create an ink
contrebasse@3 128 if A.data[A.data[reagentID][1][1]] then
contrebasse@3 129 A.externalCraftWindow(A.data[reagentID][1][1])
contrebasse@3 130 else
contrebasse@3 131 print("Sorry, can not make reagent...")
contrebasse@3 132 end
contrebasse@3 133 else
contrebasse@3 134 A.externalCraftWindow(reagentID)
contrebasse@0 135 end -- if
contrebasse@0 136 end -- function
contrebasse@0 137
contrebasse@0 138
contrebasse@0 139 ---------------------------------------------------
contrebasse@0 140 -- Craft items
contrebasse@0 141 ---------------------------------------------------
contrebasse@3 142 -- function used after choosing the number of reagent to craft
contrebasse@3 143 function A.SplitStack(owner,split)
contrebasse@3 144 DoTradeSkill(owner.ReagentMaker_reagentIndex,tonumber(split))
contrebasse@3 145 owner.ReagentMaker_reagentIndex = nil
contrebasse@0 146 end
contrebasse@0 147
contrebasse@3 148 -- Craft the reagent of an item, given it's position in the recipe
contrebasse@3 149 function A.craft(reagentID,reagentRecipeIndex,reagentIndex,numReagentMakable,chooseNumber)
contrebasse@3 150 -- Look at how many we need to make one item for the selected recipe
contrebasse@3 151 local numToMake = 1
contrebasse@3 152 local selectedIndex = GetTradeSkillSelectionIndex()
contrebasse@3 153 local skillName, skillType, numAvailable, isExpanded, serviceType, numSkillUps = GetTradeSkillInfo(selectedIndex)
contrebasse@3 154 if numAvailable==0 then
contrebasse@3 155 local reagentName, reagentTexture, reagentCount, playerReagentCount = GetTradeSkillReagentInfo(selectedIndex, reagentRecipeIndex)
contrebasse@3 156 numToMake = math.min(reagentCount - playerReagentCount,numReagentMakable)
contrebasse@3 157 end -- if
contrebasse@0 158
contrebasse@3 159 -- Choose number or craft directly
contrebasse@3 160 if chooseNumber and numReagentMakable>1 then
contrebasse@3 161 -- the dialog window is linked to the reagent button
contrebasse@3 162 local btn = _G["TradeSkillReagent"..reagentRecipeIndex]
contrebasse@3 163
contrebasse@3 164 -- Store info to be able to run the function later
contrebasse@3 165 btn.ReagentMaker_reagentIndex = reagentIndex
contrebasse@3 166
contrebasse@3 167 -- Open dialog
contrebasse@3 168 OpenStackSplitFrame(numReagentMakable, btn, "TOP", "BOTTOM")
contrebasse@3 169
contrebasse@3 170 -- Fill in the number to make
contrebasse@3 171 numToMake = tostring(numToMake)
contrebasse@3 172 for i = 1,numToMake:len() do
contrebasse@3 173 StackSplitFrame_OnChar(StackSplitFrame,numToMake:gsub(i,i))
contrebasse@3 174 end
contrebasse@3 175 StackSplitFrame.typing = 0 -- reinit the frame so tha the entered value will be erased on text entry
contrebasse@3 176 else
contrebasse@3 177 DoTradeSkill(reagentIndex,numToMake)
contrebasse@3 178 end -- if
contrebasse@3 179 end -- function
contrebasse@3 180
contrebasse@3 181
contrebasse@3 182 -- Button hovering
contrebasse@3 183 function A.btnEntered(btn)
contrebasse@13 184 -- Do not manage guild tradeskill
contrebasse@13 185 if IsTradeSkillGuild() or IsTradeSkillLinked() then return end
contrebasse@13 186
contrebasse@3 187 -- Index of the reagent in the recipe, taken from the button name
contrebasse@3 188 local reagentRecipeIndex = A.buttonNumber(btn)
contrebasse@3 189
contrebasse@3 190 -- ID of the reagent we want to craft
contrebasse@3 191 local reagentLink = GetTradeSkillReagentItemLink(GetTradeSkillSelectionIndex(), reagentRecipeIndex)
contrebasse@3 192 local reagentID = A.link2ID(reagentLink)
contrebasse@3 193
contrebasse@3 194 -- Continue only if the reagent is known
contrebasse@3 195 if not reagentID or not A.data[reagentID] then return end
contrebasse@3 196
contrebasse@3 197 btn.textureHighlight:Show()
contrebasse@3 198
contrebasse@3 199 if #(A.data[reagentID]) == 1 and not A.data[reagentID].spell then
contrebasse@3 200 local numMakable = A.numMakable(reagentID)
contrebasse@3 201 btn.label:SetText(numMakable)
contrebasse@3 202 if numMakable==0 then
contrebasse@3 203 btn.label:SetTextColor(1, 0, 0, 1)
contrebasse@3 204 else
contrebasse@3 205 btn.label:SetTextColor(0, 5, 0, 1)
contrebasse@3 206 end
contrebasse@3 207 btn.label:Show()
contrebasse@0 208 end
contrebasse@0 209
contrebasse@5 210 -- Tooltips
contrebasse@15 211 local reagentIndex = A.findSkillIndex(reagentID)
contrebasse@15 212 if reagentIndex then
contrebasse@15 213 A.tooltipRecipe:SetOwner(btn)
contrebasse@15 214 if A.data[reagentID].spell then
contrebasse@15 215 A.tooltipRecipe:SetHyperlink(GetSpellLink(A.data[reagentID].spellID))
contrebasse@15 216 else
contrebasse@15 217 A.tooltipRecipe:SetHyperlink(GetTradeSkillRecipeLink(reagentIndex))
contrebasse@15 218 end
contrebasse@15 219 A.tooltipRecipe:Show()
contrebasse@15 220 A.tooltipRecipe:ClearAllPoints()
contrebasse@15 221 --A.tooltipRecipe:SetPoint("TOPLEFT",btn,"TOPRIGHT")
contrebasse@15 222 A.tooltipRecipe:SetPoint("BOTTOMLEFT",GameTooltip,"BOTTOMRIGHT")
contrebasse@15 223
contrebasse@15 224 --[[
contrebasse@15 225 if #(A.data[reagentID]) == 1 then
contrebasse@15 226 A.tooltipReagent:SetOwner(A.tooltipRecipe)
contrebasse@15 227 local name, link, quality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, texture, vendorPrice = GetItemInfo(A.data[reagentID][1][1])
contrebasse@15 228 A.tooltipReagent:SetHyperlink(link)
contrebasse@15 229 A.tooltipReagent:Show()
contrebasse@15 230 A.tooltipReagent:ClearAllPoints()
contrebasse@15 231 A.tooltipReagent:SetPoint("BOTTOMLEFT",A.tooltipRecipe,"BOTTOMRIGHT")
contrebasse@15 232 end
contrebasse@15 233 --]]
contrebasse@6 234 end
contrebasse@0 235 end
contrebasse@0 236
contrebasse@3 237 function A.btnLeft(btn)
contrebasse@3 238 btn.textureHighlight:Hide()
contrebasse@3 239 btn.label:Hide()
contrebasse@3 240 A.tooltipRecipe:Hide()
contrebasse@8 241 --A.tooltipReagent:Hide()
contrebasse@0 242 end