contrebasse@0: local addonName, A = ... contrebasse@0: contrebasse@0: -- @todo clean the A table contrebasse@0: -- @todo check local copy of globals functions contrebasse@0: -- @todo add support for sub-recipes (like ink plus milling) contrebasse@0: -- @todo show a tooltip contrebasse@0: -- @todo show number of craftable items contrebasse@0: -- @todo show owned items contrebasse@0: -- @todo add support for dez ? contrebasse@0: -- @todo add support for cross tradeskill, like mining + forge/ingé contrebasse@0: -- @todo icon on reagent's button contrebasse@0: contrebasse@0: --------------------------------------------------- contrebasse@0: -- Variables contrebasse@0: --------------------------------------------------- contrebasse@0: -- Used by findglobals contrebasse@0: -- GLOBALS: _G, CreateFrame, DEFAULT_CHAT_FRAME contrebasse@0: contrebasse@0: -- Lua functions contrebasse@0: contrebasse@0: -- Wow functions contrebasse@0: contrebasse@0: -- constant vars contrebasse@0: contrebasse@0: --------------------------------------------------- contrebasse@0: -- Manage events contrebasse@0: --------------------------------------------------- contrebasse@0: A.EventsFrame = CreateFrame("Frame") contrebasse@0: contrebasse@0: A.EventsFrame:SetScript("OnEvent", function(self, event) contrebasse@0: if event == "TRADE_SKILL_SHOW" then contrebasse@0: A:Initialize() contrebasse@0: end -- if contrebasse@0: end); -- function contrebasse@0: A.EventsFrame:RegisterEvent("TRADE_SKILL_SHOW") contrebasse@0: contrebasse@0: contrebasse@0: --------------------------------------------------- contrebasse@0: -- Initialize contrebasse@0: --------------------------------------------------- contrebasse@0: function A:Initialize() contrebasse@0: -- This part is done the first time only contrebasse@0: if not self.MenuFrame then contrebasse@0: -- Prepare the menu contrebasse@0: self.MenuFrame = CreateFrame("Frame", "ReagentMakerDropDownMenu"); -- Needs a global name contrebasse@0: self.MenuFrame.displayMode = "MENU"; contrebasse@0: self.MenuFrame.initialize = self.FillMenu; contrebasse@0: self.MenuFrame.point = "TOPLEFT"; contrebasse@0: self.MenuFrame.relativePoint = "TOPRIGHT"; contrebasse@0: contrebasse@0: -- Register clics on reagent's buttons contrebasse@0: for i=1,7 do contrebasse@0: local button = _G["TradeSkillReagent"..i]; contrebasse@0: button:HookScript("OnClick", function() self:ToggleMenu(button, i) end); contrebasse@0: --button:HookScript("OnEnter", function() self:Entered(button, i) end) contrebasse@0: --button:HookScript("OnLeave", function() self:Left(button, i) end) contrebasse@0: end -- for contrebasse@0: end -- if contrebasse@0: contrebasse@0: -- Scan availabe recipes contrebasse@0: A:ScanSimpleRecipes() contrebasse@0: end -- function contrebasse@0: contrebasse@0: contrebasse@0: --------------------------------------------------- contrebasse@0: -- Craft items contrebasse@0: --------------------------------------------------- contrebasse@0: do contrebasse@0: -- WoW functions contrebasse@0: local GetNumTradeSkills = GetNumTradeSkills contrebasse@0: local GetTradeSkillInfo = GetTradeSkillInfo contrebasse@0: local GetTradeSkillItemLink = GetTradeSkillItemLink contrebasse@0: contrebasse@0: contrebasse@0: function A.findSkillIndex(itemID) contrebasse@0: for i = 1,GetNumTradeSkills() do contrebasse@0: local skillName, skillType, numAvailable, isExpanded, serviceType, numSkillUps = GetTradeSkillInfo(i) contrebasse@0: if skillType == "header" then contrebasse@0: else contrebasse@0: if skillName then contrebasse@0: local ID = A.link2ID(GetTradeSkillItemLink(i)) contrebasse@0: if ID and ID == itemID then contrebasse@0: return i contrebasse@0: end -- if contrebasse@0: end -- if contrebasse@0: end -- if contrebasse@0: end -- for contrebasse@0: A.DEBUG("Tradeskill not found") contrebasse@0: end -- function contrebasse@0: end -- do contrebasse@0: contrebasse@0: contrebasse@0: -- http://www.wowwiki.com/RunSlashCmd contrebasse@0: local _G = _G contrebasse@0: function RunSlashCmd(cmd) contrebasse@0: local slash, rest = cmd:match("^(%S+)%s*(.-)$") contrebasse@0: for name, func in pairs(SlashCmdList) do contrebasse@0: local i, slashCmd = 1 contrebasse@0: repeat contrebasse@0: slashCmd, i = _G["SLASH_"..name..i], i + 1 contrebasse@0: if slashCmd == slash then contrebasse@0: A.DEBUG("Spell found !") contrebasse@0: return true, func(rest) contrebasse@0: end contrebasse@0: until not slashCmd contrebasse@0: end contrebasse@0: A.DEBUG("Spell not found :(") contrebasse@0: end contrebasse@0: contrebasse@0: do contrebasse@0: -- WoW functions contrebasse@0: local DoTradeSkill = DoTradeSkill contrebasse@0: contrebasse@0: local function SplitStack(owner,split) contrebasse@0: DoTradeSkill(owner.ReagentMakerIndex,tonumber(split)) contrebasse@0: end contrebasse@0: contrebasse@0: function A.craft(self,itemID, spell) contrebasse@0: -- self is the menu entry contrebasse@0: if spell then contrebasse@0: CastSpellByName("Mouture") contrebasse@0: RunSlashCmd(spell) --CastSpellByName(spell) contrebasse@0: --RunSlashCmd("/use "..itemID) --CastSpellByName("/use "..itemID) contrebasse@0: return contrebasse@0: end contrebasse@0: local index = A.findSkillIndex(itemID) contrebasse@0: if index then contrebasse@0: local skillName, skillType, numAvailable, isExpanded, serviceType, numSkillUps = GetTradeSkillInfo(index) contrebasse@0: if IsShiftKeyDown() and numAvailable>1 and not spell then contrebasse@0: if not self.SplitStack then contrebasse@0: self.SplitStack = SplitStack contrebasse@0: end contrebasse@0: self.ReagentMakerIndex = index contrebasse@0: contrebasse@0: OpenStackSplitFrame(numAvailable, self, "TOPLEFT", "TOPRIGHT") contrebasse@0: else contrebasse@0: DoTradeSkill(index,1) contrebasse@0: end contrebasse@0: end contrebasse@0: end -- function contrebasse@0: end -- do contrebasse@0: contrebasse@0: contrebasse@0: --------------------------------------------------- contrebasse@0: -- Manage the popup menu contrebasse@0: --------------------------------------------------- contrebasse@0: do contrebasse@0: -- Lua functions contrebasse@0: local tonumber = tonumber contrebasse@0: contrebasse@0: -- WoW functions contrebasse@0: local IsModifierKeyDown = IsModifierKeyDown contrebasse@0: local GetTradeSkillReagentItemLink = GetTradeSkillReagentItemLink contrebasse@0: local GetTradeSkillSelectionIndex = GetTradeSkillSelectionIndex contrebasse@0: local ToggleDropDownMenu = ToggleDropDownMenu contrebasse@0: contrebasse@0: -- Toggles the reagent's menu contrebasse@0: function A:ToggleMenu(button, index) contrebasse@0: -- We want no modifiers contrebasse@0: if IsModifierKeyDown() then return end contrebasse@0: contrebasse@0: local itemID = A.link2ID(GetTradeSkillReagentItemLink(GetTradeSkillSelectionIndex(), index)) contrebasse@0: if itemID and A.data[itemID] then contrebasse@0: self.MenuFrame.ReagentMakerItemID = itemID contrebasse@0: ToggleDropDownMenu(1, nil, A.MenuFrame, button,-4,0) contrebasse@0: end -- if contrebasse@0: end -- function contrebasse@0: end -- do contrebasse@0: contrebasse@0: do contrebasse@0: -- Lua functions contrebasse@0: local type = type contrebasse@0: contrebasse@0: -- Wow functions contrebasse@0: local GetItemInfo = GetItemInfo contrebasse@0: local UIDropDownMenu_AddButton = UIDropDownMenu_AddButton contrebasse@0: contrebasse@0: -- persistent vars contrebasse@0: local Minfo = {notCheckable = true, func = A.craft} contrebasse@0: local Tinfo = {notCheckable = true, isTitle = true} contrebasse@0: contrebasse@0: -- function to define the menu items contrebasse@0: function A.FillMenu(self, level) contrebasse@0: -- Title contrebasse@0: local itemName, link, quality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, texture, vendorPrice = GetItemInfo(self.ReagentMakerItemID) contrebasse@0: Tinfo.text = "Make "..link.." with:" contrebasse@0: UIDropDownMenu_AddButton(Tinfo,level) contrebasse@0: contrebasse@0: -- Loop over the availible reciepes contrebasse@0: for spellID,reagents in pairs(A.data[self.ReagentMakerItemID]) do contrebasse@0: --name, link, quality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, texture, vendorPrice = GetItemInfo(itemID) or GetItemInfo("itemName") or GetItemInfo("itemLink") contrebasse@0: -- Right now, manage only sub-recipes with only one reagent contrebasse@0: if type(reagents[1]) == "number" then contrebasse@0: local name, link, quality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, texture, vendorPrice = GetItemInfo(reagents[1]) contrebasse@0: contrebasse@0: if link then contrebasse@0: Minfo.text = "|T"..texture..":0|t "..link contrebasse@0: if #reagents>1 and reagents[2] > 1 then contrebasse@0: Minfo.text = reagents[2].."x "..Minfo.text contrebasse@0: end -- if contrebasse@0: contrebasse@0: --if reagents.spell then contrebasse@0: -- Minfo.func = RunMacroText contrebasse@0: -- Minfo.arg1 = reagents.spell..itemName contrebasse@0: -- Minfo.arg2 = nil contrebasse@0: --else contrebasse@0: Minfo.func = A.craft contrebasse@0: Minfo.arg1 = self.ReagentMakerItemID contrebasse@0: Minfo.arg2 = reagents.spell contrebasse@0: --end -- if contrebasse@0: UIDropDownMenu_AddButton(Minfo,level) contrebasse@0: else contrebasse@0: A.DEBUG("Erreur, objet inconnu :"..reagents[1]) contrebasse@0: end -- if contrebasse@0: end -- if contrebasse@0: end -- for contrebasse@0: end -- function contrebasse@0: end -- do contrebasse@0: contrebasse@0: contrebasse@0: --------------------------------------------------- contrebasse@0: -- Manage the tradeskill window state contrebasse@0: --------------------------------------------------- contrebasse@0: function A:SaveState() contrebasse@0: end contrebasse@0: contrebasse@0: function A:SetState(state) contrebasse@0: end contrebasse@0: contrebasse@0: function A:ExpandAll() contrebasse@0: end