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