contrebasse@98
|
1 local addonName, A = ...
|
contrebasse@98
|
2
|
contrebasse@98
|
3 local CAMPFIRE_ID = 818
|
contrebasse@98
|
4 local COOKING_ID = 2550
|
contrebasse@98
|
5 local btn
|
contrebasse@98
|
6 local cookingName
|
contrebasse@105
|
7 local CooldownFrame_SetTimer = CooldownFrame_SetTimer
|
contrebasse@105
|
8 local GetSpellCooldown = GetSpellCooldown
|
contrebasse@105
|
9
|
contrebasse@111
|
10 -- The cooldown info is not directly obtainable
|
contrebasse@105
|
11 local function WaitCooldown(self)
|
contrebasse@105
|
12 local start, duration, enable = GetSpellCooldown(CAMPFIRE_ID)
|
contrebasse@105
|
13 if start>0 then
|
contrebasse@105
|
14 CooldownFrame_SetTimer(btn.cooldown,GetSpellCooldown(CAMPFIRE_ID))
|
contrebasse@105
|
15 self:SetScript("OnUpdate",nil)
|
contrebasse@105
|
16 end
|
contrebasse@105
|
17 end
|
contrebasse@98
|
18
|
contrebasse@98
|
19 -- Create button
|
contrebasse@98
|
20 function A.InitialiseCampFireBtn()
|
contrebasse@103
|
21 if not GetTradeSkillLine() or InCombatLockdown() then return end
|
contrebasse@103
|
22
|
contrebasse@111
|
23 -- Create the frame
|
contrebasse@98
|
24 btn = CreateFrame("Button", nil, TradeSkillFrame, "SecureActionButtonTemplate")
|
contrebasse@98
|
25 btn:SetNormalTexture(select(3,GetSpellInfo(CAMPFIRE_ID)))
|
contrebasse@105
|
26 btn:SetHighlightTexture("Interface\\BUTTONS\\ButtonHilight-Square")
|
contrebasse@98
|
27 btn:SetSize(24,24)
|
contrebasse@98
|
28 btn:SetPoint("BOTTOMRIGHT",TradeSkillFrame,"BOTTOMRIGHT",-10,179)
|
contrebasse@98
|
29
|
contrebasse@98
|
30 -- Set the action
|
contrebasse@98
|
31 btn:SetAttribute("type", "spell")
|
contrebasse@98
|
32 btn:SetAttribute("spell", CAMPFIRE_ID)
|
contrebasse@98
|
33
|
contrebasse@98
|
34 -- Set the tooltip
|
contrebasse@98
|
35 btn:SetScript("OnEnter",function(self)
|
contrebasse@98
|
36 GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT")
|
contrebasse@98
|
37 GameTooltip:SetSpellByID(CAMPFIRE_ID)
|
contrebasse@98
|
38 GameTooltip:Show()
|
contrebasse@98
|
39 end)
|
contrebasse@98
|
40 btn:SetScript("OnLeave",function() GameTooltip:Hide(); end)
|
contrebasse@98
|
41
|
contrebasse@98
|
42 -- Add cooldown
|
contrebasse@98
|
43 btn.cooldown = CreateFrame("Cooldown",nil,btn)
|
contrebasse@98
|
44 btn.cooldown:SetAllPoints(btn)
|
contrebasse@98
|
45
|
contrebasse@105
|
46 -- Check if recipe failed due to lack of campfire
|
contrebasse@105
|
47 local campfireName = GetSpellInfo(CAMPFIRE_ID)
|
contrebasse@105
|
48 local errorMsg
|
contrebasse@105
|
49 btn:SetScript("OnEvent",function(self,event,arg1,arg2)
|
contrebasse@105
|
50 if not errorMsg or errorMsg==LOCKED_WITH_ITEM then
|
contrebasse@105
|
51 local i = GetTradeSkillSelectionIndex()
|
contrebasse@105
|
52 if i and i>01 then
|
contrebasse@105
|
53 errorMsg = LOCKED_WITH_ITEM:format(GetTradeSkillTools(GetTradeSkillSelectionIndex()))
|
contrebasse@105
|
54 end
|
contrebasse@105
|
55 end
|
contrebasse@105
|
56 if event == "UNIT_SPELLCAST_SUCCEEDED" then
|
contrebasse@105
|
57 if arg1 == "player" and arg2 == campfireName then
|
contrebasse@105
|
58 self:SetScript("OnUpdate",WaitCooldown)
|
contrebasse@105
|
59 --CooldownFrame_SetTimer(self.cooldown,GetSpellCooldown(CAMPFIRE_ID))
|
contrebasse@105
|
60 end
|
contrebasse@105
|
61 elseif arg1 == errorMsg and GetSpellCooldown(CAMPFIRE_ID)==0 then
|
contrebasse@105
|
62 -- Flash the button if the user tried to cook something without fire
|
contrebasse@105
|
63 self.cooldown:SetCooldown(0,0)
|
contrebasse@105
|
64 end
|
contrebasse@105
|
65 end)
|
contrebasse@98
|
66 end
|
contrebasse@98
|
67
|
contrebasse@98
|
68 -- Hide button
|
contrebasse@98
|
69 function A.HideCampFireBtn()
|
contrebasse@101
|
70 if btn then btn:Hide() end
|
contrebasse@111
|
71 btn:UnregisterAllEvents()
|
contrebasse@98
|
72 end
|
contrebasse@98
|
73
|
contrebasse@98
|
74 -- Show button if applicable
|
contrebasse@98
|
75 function A.ManageCampFireBtn()
|
contrebasse@98
|
76 -- Display only if the tradeskill is Cooking
|
contrebasse@103
|
77 if not cookingName then cookingName = GetSpellInfo(COOKING_ID) end
|
contrebasse@103
|
78 if GetTradeSkillLine() ~= cookingName then
|
contrebasse@105
|
79 if btn then btn:Hide(); btn:UnregisterAllEvents() end
|
contrebasse@98
|
80 else
|
contrebasse@103
|
81 -- create button if necessary
|
contrebasse@103
|
82 if not btn then
|
contrebasse@103
|
83 A.InitialiseCampFireBtn()
|
contrebasse@103
|
84 end
|
contrebasse@103
|
85 -- It may not have been created
|
contrebasse@103
|
86 if not btn then return end
|
contrebasse@98
|
87 btn:Show()
|
contrebasse@105
|
88 btn:RegisterEvent("UI_ERROR_MESSAGE")
|
contrebasse@105
|
89 btn:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED")
|
contrebasse@105
|
90 CooldownFrame_SetTimer(btn.cooldown,GetSpellCooldown(CAMPFIRE_ID))
|
contrebasse@98
|
91 end
|
contrebasse@98
|
92 end
|