Mercurial > wow > degaine
view Degaine.lua @ 12:9f8a4f3c8641
Added a blacklist for spells with only stealth in it (for now)
author | contrebasse |
---|---|
date | Fri, 10 Dec 2010 17:18:56 +0100 |
parents | 62abf847fef9 |
children | 7b1f3a9cba48 |
line wrap: on
line source
local AddonName = ... -- Draw your weapons automagically --------------------------------------------------------------- -- Known bugs --------------------------------------------------------------- -- If you stand up by jumping or walking it won't draw your weapon -- (it's not possible to know if you were sitting or standing before) --@debug@ local debug = false --@end-debug@ --------------------------------------------------------------- -- Globals to local --------------------------------------------------------------- -- These need to be globals -- GLOBALS: Degaine_ToggleAuto, Degaine_isAuto, BINDING_HEADER_DEGAINE -- It doesn't matter if they are globals -- GLOBALS: DEFAULT_CHAT_FRAME, GossipFrame -- Lua functions local pairs = pairs; local type = type; -- Wow functions local InCombatLockdown = InCombatLockdown local ToggleSheath = ToggleSheath --------------------------------------------------------------- -- Local vars --------------------------------------------------------------- -- const local DegaineFrame = CreateFrame("Frame") local playername = UnitName("player") -- vars local t_left = -1 local delay = 2 -- seconds --------------------------------------------------------------- -- Some stuff... --------------------------------------------------------------- -- Bindings BINDING_HEADER_DEGAINE = "Dégainer automatiquement" -- Print status local printState = function() DEFAULT_CHAT_FRAME:AddMessage(Degaine_isAuto and "Dégainage automatique |cFF00FF00activé|r" or "Dégainage automatique |cFFFF0000désactivé|r") end --------------------------------------------------------------- -- Events config --------------------------------------------------------------- -- Events to watch local events = { -- no args to watch GOSSIP_SHOW = true, MERCHANT_SHOW = function() return GossipFrame:IsShown() end, BANKFRAME_OPENED = true, --function() return GossipFrame:IsShown() end, AUCTION_HOUSE_SHOW = true, } local events1player = { -- the first arg is "player" UNIT_SPELLCAST_FAILED = true, UNIT_SPELLCAST_INTERRUPTED = true, UNIT_SPELLCAST_SUCCEEDED = true, } local SpellBlackList = { -- spells that don't stealth weapons (works with events1player) [1784] = true, -- Stealth (Rogue) [58984] = true, -- Shadowmeld (Nightelf stealth) } local events2playername = { -- the 2nd arg is playername CHAT_MSG_SAY = true, CHAT_MSG_YELL = true, CHAT_MSG_TEXT_EMOTE = true, } --------------------------------------------------------------- -- Launch drawing weapons --------------------------------------------------------------- -- Wait a few seconds before drawing, to be able to see the curren animation (and avoid bugs) local Degaine_OnUpdate = function(self,t_elapsed) t_left = t_left - t_elapsed; if t_left<=0 then ToggleSheath() DegaineFrame:SetScript("OnUpdate", nil) end end local start = function() if Degaine_isAuto and not InCombatLockdown() then t_left = delay DegaineFrame:SetScript("OnUpdate", Degaine_OnUpdate) end end --------------------------------------------------------------- -- Activation functions --------------------------------------------------------------- local activate = function() if (not Degaine_isAuto) or InCombatLockdown() then return end --DegaineFrame:SetScript("OnUpdate", Degaine_OnUpdate); --@debug@ if debug then DegaineFrame:RegisterAllEvents() else --@end-debug@ for k,v in pairs(events) do DegaineFrame:RegisterEvent(k) end for k,v in pairs(events1player) do DegaineFrame:RegisterEvent(k) end for k,v in pairs(events2playername) do DegaineFrame:RegisterEvent(k) end --@end-debug@ end --@end-debug@ end local desactivate = function() for k,v in pairs(events) do DegaineFrame:UnregisterEvent(k) end for k,v in pairs(events1player) do DegaineFrame:UnregisterEvent(k) end for k,v in pairs(events2playername) do DegaineFrame:UnregisterEvent(k) end DegaineFrame:SetScript("OnUpdate", nil) end Degaine_ToggleAuto = function() if Degaine_isAuto then Degaine_isAuto = false desactivate() else Degaine_isAuto = true activate() end printState() end --------------------------------------------------------------- -- Event/hooks functions --------------------------------------------------------------- local Degaine_OnEvent = function(self,event, arg1, arg2, _, _, arg5, ...) --@debug@ if debug then DEFAULT_CHAT_FRAME:AddMessage(event) if arg1 then DEFAULT_CHAT_FRAME:AddMessage("arg1 = "..arg1) end if arg2 then DEFAULT_CHAT_FRAME:AddMessage("arg2 = "..arg2) end end --@end-debug@ if events[event] then if type(events[event])~="function" or events[event]() then start() end elseif events1player[event] then if arg1=="player" then if not SpellBlackList[arg5] then -- arg5 is SpellID start() end end elseif events2playername[event] then if arg2==playername then start() end elseif event == "PLAYER_REGEN_ENABLED" then desactivate() elseif event == "PLAYER_REGEN_DISABLED" then activate() elseif event == "ADDON_LOADED" and arg1==AddonName then if Degaine_isAuto==nil then Degaine_isAuto = true end if Degaine_isAuto then activate() else desactivate() end printState() -- Not needed anymore DegaineFrame:UnregisterEvent("ADDON_LOADED") end end -- Hook when standing up -- (Didn't work, see http://forums.wowace.com/showthread.php?p=310547#post310547) hooksecurefunc("SitStandOrDescendStart",start); --------------------------------------------------------------- -- Commands --------------------------------------------------------------- -- Bindings BINDING_HEADER_DEGAINE = "Dégainer automatiquement" -- Slash command -- GLOBALS: SLASH_DEGAINE1 SLASH_DEGAINE1 = "/degaine" SlashCmdList["DEGAINE"] = Degaine_ToggleAuto --------------------------------------------------------------- -- Initialization --------------------------------------------------------------- DegaineFrame:SetScript("OnEvent",Degaine_OnEvent) -- Global events DegaineFrame:RegisterEvent("PLAYER_REGEN_ENABLED") DegaineFrame:RegisterEvent("PLAYER_REGEN_DISABLED") DegaineFrame:RegisterEvent("ADDON_LOADED") activate()