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