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@3
|
30 A.EventsFrame:SetScript("OnEvent", function(self, event, ...)
|
contrebasse@3
|
31 if event == "TRADE_SKILL_UPDATE" then
|
contrebasse@3
|
32 -- Scan availabe recipes
|
contrebasse@3
|
33 A:ScanSimpleRecipes()
|
contrebasse@3
|
34
|
contrebasse@3
|
35 -- Close the external window if the tradeskill changed
|
contrebasse@3
|
36 if A.currentTradeSkill ~= GetTradeSkillLine() then
|
contrebasse@3
|
37 A.MenuFrame:Hide()
|
contrebasse@3
|
38 end
|
contrebasse@3
|
39 elseif event == "TRADE_SKILL_SHOW" then
|
contrebasse@0
|
40 A:Initialize()
|
contrebasse@0
|
41 end -- if
|
contrebasse@3
|
42 end) -- function
|
contrebasse@0
|
43 A.EventsFrame:RegisterEvent("TRADE_SKILL_SHOW")
|
contrebasse@3
|
44 A.EventsFrame:RegisterEvent("TRADE_SKILL_UPDATE")
|
contrebasse@0
|
45
|
contrebasse@0
|
46 ---------------------------------------------------
|
contrebasse@0
|
47 -- Initialize
|
contrebasse@0
|
48 ---------------------------------------------------
|
contrebasse@1
|
49 local toInitialize = true
|
contrebasse@0
|
50 function A:Initialize()
|
contrebasse@3
|
51 A.EventsFrame:UnregisterEvent("TRADE_SKILL_SHOW")
|
contrebasse@0
|
52
|
contrebasse@3
|
53 -- Register clics on reagent's buttons
|
contrebasse@3
|
54 for i=1,7 do
|
contrebasse@3
|
55 local btn = _G["TradeSkillReagent"..i];
|
contrebasse@3
|
56 btn:HookScript("OnDoubleClick", A.ProcessReagent);
|
contrebasse@3
|
57 btn:HookScript("OnEnter", A.btnEntered)
|
contrebasse@3
|
58 btn:HookScript("OnLeave", A.btnLeft)
|
contrebasse@3
|
59 btn.SplitStack = A.SplitStack
|
contrebasse@1
|
60
|
contrebasse@3
|
61 local textureHighlight = btn:CreateTexture()
|
contrebasse@3
|
62 textureHighlight:Hide()
|
contrebasse@3
|
63 textureHighlight:SetTexture("Interface\\BUTTONS\\CheckButtonHilight")
|
contrebasse@3
|
64 textureHighlight:SetBlendMode("ADD")
|
contrebasse@3
|
65 --textureHighlight:SetPoint("TOPLEFT")
|
contrebasse@3
|
66 --textureHighlight:SetSize(btn:GetHeight(),btn:GetHeight())
|
contrebasse@3
|
67 textureHighlight:SetAllPoints("TradeSkillReagent"..i.."IconTexture")
|
contrebasse@3
|
68 btn.textureHighlight = textureHighlight
|
contrebasse@3
|
69
|
contrebasse@3
|
70 local label = btn:CreateFontString(nil,"ARTWORK","GameFontHighlight")
|
contrebasse@3
|
71 label:SetSize(100,20)
|
contrebasse@3
|
72 label:SetPoint("TOPLEFT",btn,"TOPLEFT",4,-4)
|
contrebasse@3
|
73 label:SetJustifyH("LEFT")
|
contrebasse@3
|
74 label:SetJustifyV("TOP")
|
contrebasse@3
|
75 label:SetFont("Fonts\\FRIZQT__.TTF", 10, "OUTLINE")
|
contrebasse@3
|
76 btn.label = label
|
contrebasse@3
|
77 end -- for
|
contrebasse@3
|
78
|
contrebasse@3
|
79 --[[
|
contrebasse@3
|
80 A.tooltipRecipe = CreateFrame("GameTooltip", "ReagentMaker_tooltipRecipe",UIParent, "GameTooltipTemplate")
|
contrebasse@3
|
81 A.tooltipRecipe:SetFrameStrata("TOOLTIP")
|
contrebasse@3
|
82 A.tooltipRecipe:Hide()
|
contrebasse@3
|
83 A.tooltipReagent = CreateFrame("GameTooltip", "ReagentMaker_tooltipReagent",UIParent, "GameTooltipTemplate")
|
contrebasse@3
|
84 A.tooltipReagent:SetFrameStrata("TOOLTIP")
|
contrebasse@3
|
85 A.tooltipReagent:Hide()
|
contrebasse@3
|
86 --]]
|
contrebasse@3
|
87 end -- function
|
contrebasse@3
|
88
|
contrebasse@3
|
89
|
contrebasse@3
|
90 -- Function run avter selecting a item in the tradeskill window
|
contrebasse@3
|
91 function A.ProcessReagent(btn, ...)
|
contrebasse@3
|
92 -- We want no modifiers, or shift to choose the number of reagent to craft
|
contrebasse@3
|
93 if IsModifierKeyDown() and not IsShiftKeyDown() then return end
|
contrebasse@3
|
94 local chooseNumberToCraft = IsShiftKeyDown()
|
contrebasse@3
|
95
|
contrebasse@3
|
96 -- Index of the reagent in the recipe, taken from the button name
|
contrebasse@3
|
97 local reagentRecipeIndex = A.buttonNumber(btn)
|
contrebasse@3
|
98
|
contrebasse@3
|
99 -- ID of the reagent we want to craft
|
contrebasse@3
|
100 local reagentID = A.link2ID(GetTradeSkillReagentItemLink(GetTradeSkillSelectionIndex(), reagentRecipeIndex))
|
contrebasse@3
|
101
|
contrebasse@3
|
102 -- Continue only if the reagent is known
|
contrebasse@3
|
103 if not reagentID or not A.data[reagentID] then return end
|
contrebasse@3
|
104
|
contrebasse@3
|
105 -- If only one recipe is known for the reagent, use it
|
contrebasse@3
|
106 if #(A.data[reagentID]) == 1 and not A.data[reagentID].spell then
|
contrebasse@3
|
107 local numMakable, reagentIndex = A.numMakable(reagentID)
|
contrebasse@3
|
108 if numMakable>0 then
|
contrebasse@3
|
109 A.craft(reagentID,reagentRecipeIndex,reagentIndex,numMakable,chooseNumberToCraft)
|
contrebasse@3
|
110 return
|
contrebasse@3
|
111 end
|
contrebasse@3
|
112 -- If we can make the item needed to make the reagent, open a window to make it
|
contrebasse@3
|
113 -- one step recursion, enables to mill to create an ink
|
contrebasse@3
|
114 if A.data[A.data[reagentID][1][1]] then
|
contrebasse@3
|
115 A.externalCraftWindow(A.data[reagentID][1][1])
|
contrebasse@3
|
116 else
|
contrebasse@3
|
117 print("Sorry, can not make reagent...")
|
contrebasse@3
|
118 end
|
contrebasse@3
|
119 else
|
contrebasse@3
|
120 A.externalCraftWindow(reagentID)
|
contrebasse@0
|
121 end -- if
|
contrebasse@0
|
122 end -- function
|
contrebasse@0
|
123
|
contrebasse@0
|
124
|
contrebasse@0
|
125 ---------------------------------------------------
|
contrebasse@0
|
126 -- Craft items
|
contrebasse@0
|
127 ---------------------------------------------------
|
contrebasse@3
|
128 -- function used after choosing the number of reagent to craft
|
contrebasse@3
|
129 function A.SplitStack(owner,split)
|
contrebasse@3
|
130 DoTradeSkill(owner.ReagentMaker_reagentIndex,tonumber(split))
|
contrebasse@3
|
131 owner.ReagentMaker_reagentIndex = nil
|
contrebasse@0
|
132 end
|
contrebasse@0
|
133
|
contrebasse@3
|
134 -- Craft the reagent of an item, given it's position in the recipe
|
contrebasse@3
|
135 function A.craft(reagentID,reagentRecipeIndex,reagentIndex,numReagentMakable,chooseNumber)
|
contrebasse@3
|
136 -- Look at how many we need to make one item for the selected recipe
|
contrebasse@3
|
137 local numToMake = 1
|
contrebasse@3
|
138 local selectedIndex = GetTradeSkillSelectionIndex()
|
contrebasse@3
|
139 local skillName, skillType, numAvailable, isExpanded, serviceType, numSkillUps = GetTradeSkillInfo(selectedIndex)
|
contrebasse@3
|
140 if numAvailable==0 then
|
contrebasse@3
|
141 local reagentName, reagentTexture, reagentCount, playerReagentCount = GetTradeSkillReagentInfo(selectedIndex, reagentRecipeIndex)
|
contrebasse@3
|
142 numToMake = math.min(reagentCount - playerReagentCount,numReagentMakable)
|
contrebasse@3
|
143 end -- if
|
contrebasse@0
|
144
|
contrebasse@3
|
145 -- Choose number or craft directly
|
contrebasse@3
|
146 if chooseNumber and numReagentMakable>1 then
|
contrebasse@3
|
147 -- the dialog window is linked to the reagent button
|
contrebasse@3
|
148 local btn = _G["TradeSkillReagent"..reagentRecipeIndex]
|
contrebasse@3
|
149
|
contrebasse@3
|
150 -- Store info to be able to run the function later
|
contrebasse@3
|
151 btn.ReagentMaker_reagentIndex = reagentIndex
|
contrebasse@3
|
152
|
contrebasse@3
|
153 -- Open dialog
|
contrebasse@3
|
154 OpenStackSplitFrame(numReagentMakable, btn, "TOP", "BOTTOM")
|
contrebasse@3
|
155
|
contrebasse@3
|
156 -- Fill in the number to make
|
contrebasse@3
|
157 numToMake = tostring(numToMake)
|
contrebasse@3
|
158 for i = 1,numToMake:len() do
|
contrebasse@3
|
159 StackSplitFrame_OnChar(StackSplitFrame,numToMake:gsub(i,i))
|
contrebasse@3
|
160 end
|
contrebasse@3
|
161 StackSplitFrame.typing = 0 -- reinit the frame so tha the entered value will be erased on text entry
|
contrebasse@3
|
162 else
|
contrebasse@3
|
163 DoTradeSkill(reagentIndex,numToMake)
|
contrebasse@3
|
164 end -- if
|
contrebasse@3
|
165 end -- function
|
contrebasse@3
|
166
|
contrebasse@3
|
167
|
contrebasse@3
|
168 -- Button hovering
|
contrebasse@3
|
169 function A.btnEntered(btn)
|
contrebasse@3
|
170 -- Index of the reagent in the recipe, taken from the button name
|
contrebasse@3
|
171 local reagentRecipeIndex = A.buttonNumber(btn)
|
contrebasse@3
|
172
|
contrebasse@3
|
173 -- ID of the reagent we want to craft
|
contrebasse@3
|
174 local reagentLink = GetTradeSkillReagentItemLink(GetTradeSkillSelectionIndex(), reagentRecipeIndex)
|
contrebasse@3
|
175 local reagentID = A.link2ID(reagentLink)
|
contrebasse@3
|
176
|
contrebasse@3
|
177 -- Continue only if the reagent is known
|
contrebasse@3
|
178 if not reagentID or not A.data[reagentID] then return end
|
contrebasse@3
|
179
|
contrebasse@3
|
180 btn.textureHighlight:Show()
|
contrebasse@3
|
181
|
contrebasse@3
|
182 if #(A.data[reagentID]) == 1 and not A.data[reagentID].spell then
|
contrebasse@3
|
183 local numMakable = A.numMakable(reagentID)
|
contrebasse@3
|
184 btn.label:SetText(numMakable)
|
contrebasse@3
|
185 if numMakable==0 then
|
contrebasse@3
|
186 btn.label:SetTextColor(1, 0, 0, 1)
|
contrebasse@3
|
187 else
|
contrebasse@3
|
188 btn.label:SetTextColor(0, 5, 0, 1)
|
contrebasse@3
|
189 end
|
contrebasse@3
|
190 btn.label:Show()
|
contrebasse@0
|
191 end
|
contrebasse@0
|
192
|
contrebasse@3
|
193 --[[
|
contrebasse@3
|
194 A.tooltipRecipe:SetOwner(btn)
|
contrebasse@3
|
195 A.tooltipRecipe:SetHyperlink(GetTradeSkillRecipeLink(A.findSkillIndex(reagentID)))
|
contrebasse@3
|
196 A.tooltipRecipe:SetHyperlink(reagentLink)
|
contrebasse@3
|
197 A.tooltipRecipe:ClearAllPoints()
|
contrebasse@3
|
198 A.tooltipRecipe:SetPoint("TOPLEFT",btn,"TOPRIGHT")
|
contrebasse@3
|
199 --A.tooltipRecipe:SetSize(100,100)
|
contrebasse@3
|
200 A.tooltipRecipe:Show()
|
contrebasse@3
|
201 A.tooltipReagent:SetOwner(btn)
|
contrebasse@3
|
202 A.tooltipReagent:SetHyperlink(reagentLink)
|
contrebasse@3
|
203 A.tooltipReagent:ClearAllPoints()
|
contrebasse@3
|
204 A.tooltipReagent:SetPoint("TOPLEFT",A.tooltipRecipe,"TOPRIGHT")
|
contrebasse@3
|
205 A.tooltipReagent:Show()
|
contrebasse@3
|
206 --]]
|
contrebasse@0
|
207 end
|
contrebasse@0
|
208
|
contrebasse@3
|
209 function A.btnLeft(btn)
|
contrebasse@3
|
210 btn.textureHighlight:Hide()
|
contrebasse@3
|
211 btn.label:Hide()
|
contrebasse@3
|
212 --[[
|
contrebasse@3
|
213 A.tooltipRecipe:Hide()
|
contrebasse@3
|
214 A.tooltipReagent:Hide()
|
contrebasse@3
|
215 --]]
|
contrebasse@0
|
216 end
|