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 add support for sub-recipes (like ink plus milling)
|
contrebasse@0
|
6 -- @todo show a tooltip
|
contrebasse@0
|
7 -- @todo show number of craftable items
|
contrebasse@0
|
8 -- @todo show owned items
|
contrebasse@0
|
9 -- @todo add support for dez ?
|
contrebasse@0
|
10 -- @todo add support for cross tradeskill, like mining + forge/ingé
|
contrebasse@0
|
11 -- @todo icon on reagent's button
|
contrebasse@0
|
12
|
contrebasse@0
|
13 ---------------------------------------------------
|
contrebasse@0
|
14 -- Variables
|
contrebasse@0
|
15 ---------------------------------------------------
|
contrebasse@0
|
16 -- Used by findglobals
|
contrebasse@0
|
17 -- GLOBALS: _G, CreateFrame, DEFAULT_CHAT_FRAME
|
contrebasse@0
|
18
|
contrebasse@0
|
19 -- Lua functions
|
contrebasse@0
|
20
|
contrebasse@0
|
21 -- Wow functions
|
contrebasse@0
|
22
|
contrebasse@0
|
23 -- constant vars
|
contrebasse@0
|
24
|
contrebasse@0
|
25 ---------------------------------------------------
|
contrebasse@0
|
26 -- Manage events
|
contrebasse@0
|
27 ---------------------------------------------------
|
contrebasse@0
|
28 A.EventsFrame = CreateFrame("Frame")
|
contrebasse@0
|
29
|
contrebasse@0
|
30 A.EventsFrame:SetScript("OnEvent", function(self, event)
|
contrebasse@0
|
31 if event == "TRADE_SKILL_SHOW" then
|
contrebasse@0
|
32 A:Initialize()
|
contrebasse@0
|
33 end -- if
|
contrebasse@0
|
34 end); -- function
|
contrebasse@0
|
35 A.EventsFrame:RegisterEvent("TRADE_SKILL_SHOW")
|
contrebasse@0
|
36
|
contrebasse@0
|
37
|
contrebasse@0
|
38 ---------------------------------------------------
|
contrebasse@0
|
39 -- Initialize
|
contrebasse@0
|
40 ---------------------------------------------------
|
contrebasse@1
|
41 local toInitialize = true
|
contrebasse@0
|
42 function A:Initialize()
|
contrebasse@0
|
43 -- This part is done the first time only
|
contrebasse@1
|
44 if toInitialize then
|
contrebasse@0
|
45
|
contrebasse@0
|
46 -- Register clics on reagent's buttons
|
contrebasse@0
|
47 for i=1,7 do
|
contrebasse@0
|
48 local button = _G["TradeSkillReagent"..i];
|
contrebasse@2
|
49 button:HookScript("OnClick", function(btn) A.ToggleMenu(btn, i) end);
|
contrebasse@0
|
50 --button:HookScript("OnEnter", function() self:Entered(button, i) end)
|
contrebasse@0
|
51 --button:HookScript("OnLeave", function() self:Left(button, i) end)
|
contrebasse@0
|
52 end -- for
|
contrebasse@1
|
53
|
contrebasse@1
|
54 toInitialize = nil
|
contrebasse@0
|
55 end -- if
|
contrebasse@0
|
56
|
contrebasse@0
|
57 -- Scan availabe recipes
|
contrebasse@0
|
58 A:ScanSimpleRecipes()
|
contrebasse@0
|
59 end -- function
|
contrebasse@0
|
60
|
contrebasse@0
|
61
|
contrebasse@0
|
62 ---------------------------------------------------
|
contrebasse@0
|
63 -- Craft items
|
contrebasse@0
|
64 ---------------------------------------------------
|
contrebasse@0
|
65 do
|
contrebasse@0
|
66 -- WoW functions
|
contrebasse@0
|
67 local GetNumTradeSkills = GetNumTradeSkills
|
contrebasse@0
|
68 local GetTradeSkillInfo = GetTradeSkillInfo
|
contrebasse@0
|
69 local GetTradeSkillItemLink = GetTradeSkillItemLink
|
contrebasse@0
|
70
|
contrebasse@0
|
71
|
contrebasse@0
|
72 function A.findSkillIndex(itemID)
|
contrebasse@0
|
73 for i = 1,GetNumTradeSkills() do
|
contrebasse@0
|
74 local skillName, skillType, numAvailable, isExpanded, serviceType, numSkillUps = GetTradeSkillInfo(i)
|
contrebasse@0
|
75 if skillType == "header" then
|
contrebasse@0
|
76 else
|
contrebasse@0
|
77 if skillName then
|
contrebasse@0
|
78 local ID = A.link2ID(GetTradeSkillItemLink(i))
|
contrebasse@0
|
79 if ID and ID == itemID then
|
contrebasse@0
|
80 return i
|
contrebasse@0
|
81 end -- if
|
contrebasse@0
|
82 end -- if
|
contrebasse@0
|
83 end -- if
|
contrebasse@0
|
84 end -- for
|
contrebasse@0
|
85 A.DEBUG("Tradeskill not found")
|
contrebasse@0
|
86 end -- function
|
contrebasse@0
|
87 end -- do
|
contrebasse@0
|
88
|
contrebasse@0
|
89
|
contrebasse@0
|
90 -- http://www.wowwiki.com/RunSlashCmd
|
contrebasse@0
|
91 local _G = _G
|
contrebasse@0
|
92 function RunSlashCmd(cmd)
|
contrebasse@0
|
93 local slash, rest = cmd:match("^(%S+)%s*(.-)$")
|
contrebasse@0
|
94 for name, func in pairs(SlashCmdList) do
|
contrebasse@0
|
95 local i, slashCmd = 1
|
contrebasse@0
|
96 repeat
|
contrebasse@0
|
97 slashCmd, i = _G["SLASH_"..name..i], i + 1
|
contrebasse@0
|
98 if slashCmd == slash then
|
contrebasse@0
|
99 A.DEBUG("Spell found !")
|
contrebasse@0
|
100 return true, func(rest)
|
contrebasse@0
|
101 end
|
contrebasse@0
|
102 until not slashCmd
|
contrebasse@0
|
103 end
|
contrebasse@0
|
104 A.DEBUG("Spell not found :(")
|
contrebasse@0
|
105 end
|
contrebasse@0
|
106
|
contrebasse@0
|
107 do
|
contrebasse@0
|
108 -- WoW functions
|
contrebasse@0
|
109 local DoTradeSkill = DoTradeSkill
|
contrebasse@0
|
110
|
contrebasse@0
|
111 local function SplitStack(owner,split)
|
contrebasse@0
|
112 DoTradeSkill(owner.ReagentMakerIndex,tonumber(split))
|
contrebasse@0
|
113 end
|
contrebasse@0
|
114
|
contrebasse@1
|
115 function A.craft(btn,...)
|
contrebasse@1
|
116 local index = A.findSkillIndex(btn:GetAttribute(target-item))
|
contrebasse@0
|
117 if index then
|
contrebasse@0
|
118 local skillName, skillType, numAvailable, isExpanded, serviceType, numSkillUps = GetTradeSkillInfo(index)
|
contrebasse@0
|
119 if IsShiftKeyDown() and numAvailable>1 and not spell then
|
contrebasse@1
|
120 if not btn.SplitStack then
|
contrebasse@1
|
121 btn.SplitStack = SplitStack
|
contrebasse@0
|
122 end
|
contrebasse@1
|
123 btn.ReagentMakerIndex = index
|
contrebasse@0
|
124
|
contrebasse@1
|
125 OpenStackSplitFrame(numAvailable, btn, "TOPLEFT", "TOPRIGHT")
|
contrebasse@0
|
126 else
|
contrebasse@0
|
127 DoTradeSkill(index,1)
|
contrebasse@0
|
128 end
|
contrebasse@0
|
129 end
|
contrebasse@0
|
130 end -- function
|
contrebasse@0
|
131 end -- do
|
contrebasse@0
|
132
|
contrebasse@0
|
133
|
contrebasse@0
|
134 ---------------------------------------------------
|
contrebasse@0
|
135 -- Manage the popup menu
|
contrebasse@0
|
136 ---------------------------------------------------
|
contrebasse@0
|
137 do
|
contrebasse@0
|
138 -- Lua functions
|
contrebasse@0
|
139 local tonumber = tonumber
|
contrebasse@0
|
140
|
contrebasse@0
|
141 -- WoW functions
|
contrebasse@0
|
142 local IsModifierKeyDown = IsModifierKeyDown
|
contrebasse@0
|
143 local GetTradeSkillReagentItemLink = GetTradeSkillReagentItemLink
|
contrebasse@0
|
144 local GetTradeSkillSelectionIndex = GetTradeSkillSelectionIndex
|
contrebasse@0
|
145
|
contrebasse@0
|
146 -- Toggles the reagent's menu
|
contrebasse@2
|
147 function A.ToggleMenu(button, index)
|
contrebasse@0
|
148 -- We want no modifiers
|
contrebasse@0
|
149 if IsModifierKeyDown() then return end
|
contrebasse@0
|
150
|
contrebasse@2
|
151 if A.menuIsOpen(button) then
|
contrebasse@2
|
152 A.menuClose()
|
contrebasse@2
|
153 else
|
contrebasse@2
|
154 local itemID = A.link2ID(GetTradeSkillReagentItemLink(GetTradeSkillSelectionIndex(), index))
|
contrebasse@2
|
155 if itemID and A.data[itemID] then
|
contrebasse@2
|
156 A.FillMenu(itemID)
|
contrebasse@2
|
157 A.menuOpen(button)
|
contrebasse@2
|
158 else
|
contrebasse@2
|
159 if A.menuIsOpen() then
|
contrebasse@2
|
160 A.menuClose()
|
contrebasse@2
|
161 end
|
contrebasse@2
|
162 end -- if
|
contrebasse@0
|
163 end -- if
|
contrebasse@0
|
164 end -- function
|
contrebasse@0
|
165 end -- do
|
contrebasse@0
|
166
|
contrebasse@0
|
167 do
|
contrebasse@0
|
168 -- Lua functions
|
contrebasse@0
|
169 local type = type
|
contrebasse@0
|
170
|
contrebasse@0
|
171 -- Wow functions
|
contrebasse@0
|
172 local GetItemInfo = GetItemInfo
|
contrebasse@0
|
173
|
contrebasse@0
|
174 -- persistent vars
|
contrebasse@0
|
175 local Minfo = {notCheckable = true, func = A.craft}
|
contrebasse@0
|
176
|
contrebasse@0
|
177 -- function to define the menu items
|
contrebasse@1
|
178 function A.FillMenu(itemID)
|
contrebasse@0
|
179 -- Title
|
contrebasse@1
|
180 --local itemName, link, quality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, texture, vendorPrice = GetItemInfo(itemID)
|
contrebasse@1
|
181 --Tinfo.text = "Make "..link.." with:"
|
contrebasse@0
|
182
|
contrebasse@1
|
183 -- Loop over the available reciepes
|
contrebasse@1
|
184 for spellID,reagents in pairs(A.data[itemID]) do
|
contrebasse@0
|
185 --name, link, quality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, texture, vendorPrice = GetItemInfo(itemID) or GetItemInfo("itemName") or GetItemInfo("itemLink")
|
contrebasse@0
|
186 -- Right now, manage only sub-recipes with only one reagent
|
contrebasse@0
|
187 if type(reagents[1]) == "number" then
|
contrebasse@0
|
188 local name, link, quality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, texture, vendorPrice = GetItemInfo(reagents[1])
|
contrebasse@0
|
189
|
contrebasse@0
|
190 if link then
|
contrebasse@1
|
191 local text = reagents[2].."x |T"..texture..":0|t "..link
|
contrebasse@1
|
192
|
contrebasse@1
|
193 if reagents.spell then
|
contrebasse@1
|
194 -- Special spell
|
contrebasse@1
|
195 -- Minfo.func = RunMacroText
|
contrebasse@1
|
196 -- Minfo.arg1 = reagents.spell..itemName
|
contrebasse@1
|
197 -- Minfo.arg2 = nil
|
contrebasse@1
|
198 A.menuAddItem(text,action,itemID)
|
contrebasse@1
|
199 else
|
contrebasse@1
|
200 -- Standard tradeskill spell
|
contrebasse@1
|
201 A.menuAddItem(text,A.craft,itemID)
|
contrebasse@0
|
202 end -- if
|
contrebasse@0
|
203 else
|
contrebasse@0
|
204 A.DEBUG("Erreur, objet inconnu :"..reagents[1])
|
contrebasse@0
|
205 end -- if
|
contrebasse@0
|
206 end -- if
|
contrebasse@0
|
207 end -- for
|
contrebasse@0
|
208 end -- function
|
contrebasse@0
|
209 end -- do
|
contrebasse@0
|
210
|
contrebasse@0
|
211
|
contrebasse@0
|
212 ---------------------------------------------------
|
contrebasse@0
|
213 -- Manage the tradeskill window state
|
contrebasse@0
|
214 ---------------------------------------------------
|
contrebasse@0
|
215 function A:SaveState()
|
contrebasse@0
|
216 end
|
contrebasse@0
|
217
|
contrebasse@0
|
218 function A:SetState(state)
|
contrebasse@0
|
219 end
|
contrebasse@0
|
220
|
contrebasse@0
|
221 function A:ExpandAll()
|
contrebasse@0
|
222 end
|