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@0
|
49 button:HookScript("OnClick", function() self:ToggleMenu(button, 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 local ToggleDropDownMenu = ToggleDropDownMenu
|
contrebasse@0
|
146
|
contrebasse@0
|
147 -- Toggles the reagent's menu
|
contrebasse@0
|
148 function A:ToggleMenu(button, index)
|
contrebasse@0
|
149 -- We want no modifiers
|
contrebasse@0
|
150 if IsModifierKeyDown() then return end
|
contrebasse@0
|
151
|
contrebasse@0
|
152 local itemID = A.link2ID(GetTradeSkillReagentItemLink(GetTradeSkillSelectionIndex(), index))
|
contrebasse@0
|
153 if itemID and A.data[itemID] then
|
contrebasse@1
|
154 A.FillMenu(itemID)
|
contrebasse@1
|
155 A.menuOpen(button)
|
contrebasse@0
|
156 end -- if
|
contrebasse@0
|
157 end -- function
|
contrebasse@0
|
158 end -- do
|
contrebasse@0
|
159
|
contrebasse@0
|
160 do
|
contrebasse@0
|
161 -- Lua functions
|
contrebasse@0
|
162 local type = type
|
contrebasse@0
|
163
|
contrebasse@0
|
164 -- Wow functions
|
contrebasse@0
|
165 local GetItemInfo = GetItemInfo
|
contrebasse@0
|
166
|
contrebasse@0
|
167 -- persistent vars
|
contrebasse@0
|
168 local Minfo = {notCheckable = true, func = A.craft}
|
contrebasse@0
|
169
|
contrebasse@0
|
170 -- function to define the menu items
|
contrebasse@1
|
171 function A.FillMenu(itemID)
|
contrebasse@0
|
172 -- Title
|
contrebasse@1
|
173 --local itemName, link, quality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, texture, vendorPrice = GetItemInfo(itemID)
|
contrebasse@1
|
174 --Tinfo.text = "Make "..link.." with:"
|
contrebasse@0
|
175
|
contrebasse@1
|
176 -- Loop over the available reciepes
|
contrebasse@1
|
177 for spellID,reagents in pairs(A.data[itemID]) do
|
contrebasse@0
|
178 --name, link, quality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, texture, vendorPrice = GetItemInfo(itemID) or GetItemInfo("itemName") or GetItemInfo("itemLink")
|
contrebasse@0
|
179 -- Right now, manage only sub-recipes with only one reagent
|
contrebasse@0
|
180 if type(reagents[1]) == "number" then
|
contrebasse@0
|
181 local name, link, quality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, texture, vendorPrice = GetItemInfo(reagents[1])
|
contrebasse@0
|
182
|
contrebasse@0
|
183 if link then
|
contrebasse@1
|
184 local text = reagents[2].."x |T"..texture..":0|t "..link
|
contrebasse@1
|
185
|
contrebasse@1
|
186 if reagents.spell then
|
contrebasse@1
|
187 -- Special spell
|
contrebasse@1
|
188 -- Minfo.func = RunMacroText
|
contrebasse@1
|
189 -- Minfo.arg1 = reagents.spell..itemName
|
contrebasse@1
|
190 -- Minfo.arg2 = nil
|
contrebasse@1
|
191 A.menuAddItem(text,action,itemID)
|
contrebasse@1
|
192 else
|
contrebasse@1
|
193 -- Standard tradeskill spell
|
contrebasse@1
|
194 A.menuAddItem(text,A.craft,itemID)
|
contrebasse@0
|
195 end -- if
|
contrebasse@0
|
196 else
|
contrebasse@0
|
197 A.DEBUG("Erreur, objet inconnu :"..reagents[1])
|
contrebasse@0
|
198 end -- if
|
contrebasse@0
|
199 end -- if
|
contrebasse@0
|
200 end -- for
|
contrebasse@0
|
201 end -- function
|
contrebasse@0
|
202 end -- do
|
contrebasse@0
|
203
|
contrebasse@0
|
204
|
contrebasse@0
|
205 ---------------------------------------------------
|
contrebasse@0
|
206 -- Manage the tradeskill window state
|
contrebasse@0
|
207 ---------------------------------------------------
|
contrebasse@0
|
208 function A:SaveState()
|
contrebasse@0
|
209 end
|
contrebasse@0
|
210
|
contrebasse@0
|
211 function A:SetState(state)
|
contrebasse@0
|
212 end
|
contrebasse@0
|
213
|
contrebasse@0
|
214 function A:ExpandAll()
|
contrebasse@0
|
215 end
|