contrebasse@0: local AddonName = ... contrebasse@5: -- Draw your weapons automagically contrebasse@0: contrebasse@5: -- Known bugs : contrebasse@0: -- si on se lève en sautant ça ne sort pas l'arme (impossible de savoir si on était assis avant) contrebasse@0: contrebasse@5: --@debug@ contrebasse@0: local debug = false; contrebasse@5: --@end-debug@ contrebasse@0: contrebasse@5: --------------------------------------------------------------- contrebasse@5: -- Globals to local contrebasse@5: --------------------------------------------------------------- contrebasse@5: -- These need to be globals contrebasse@6: -- GLOBALS: Degaine_ToggleAuto, Degaine_isAuto, BINDING_HEADER_DEGAINE contrebasse@0: contrebasse@5: -- It doesn't matter if they are globals contrebasse@5: -- GLOBALS: DEFAULT_CHAT_FRAME, GossipFrame contrebasse@5: contrebasse@5: -- Lua functions contrebasse@0: local pairs = pairs; contrebasse@0: local type = type; contrebasse@0: contrebasse@5: -- Wow functions contrebasse@5: local InCombatLockdown = InCombatLockdown contrebasse@5: local ToggleSheath = ToggleSheath contrebasse@0: contrebasse@0: contrebasse@5: --------------------------------------------------------------- contrebasse@8: -- Local vars contrebasse@8: --------------------------------------------------------------- contrebasse@8: -- const contrebasse@8: local DegaineFrame = CreateFrame("Frame") contrebasse@8: local playername = UnitName("player") contrebasse@8: contrebasse@8: -- vars contrebasse@8: local done = true contrebasse@8: local t_left = -1 contrebasse@8: local delay = 2 -- seconds contrebasse@8: contrebasse@8: --------------------------------------------------------------- contrebasse@5: -- Some stuff... contrebasse@5: --------------------------------------------------------------- contrebasse@5: -- Bindings contrebasse@5: BINDING_HEADER_DEGAINE = "Dégainer automatiquement" contrebasse@5: contrebasse@5: -- Print status contrebasse@5: local printState = function() contrebasse@5: DEFAULT_CHAT_FRAME:AddMessage(Degaine_isAuto and "Dégainage automatique |cFF00FF00activé|r" or "Dégainage automatique |cFFFF0000désactivé|r"); contrebasse@5: end contrebasse@5: contrebasse@5: contrebasse@5: --------------------------------------------------------------- contrebasse@5: -- Events config contrebasse@5: --------------------------------------------------------------- contrebasse@5: -- Events to watch contrebasse@5: local events = { -- no args to watch contrebasse@0: GOSSIP_SHOW = true, contrebasse@0: MERCHANT_SHOW = function() return GossipFrame:IsShown(); end, contrebasse@5: BANKFRAME_OPENED = true, --function() return GossipFrame:IsShown(); end, contrebasse@0: AUCTION_HOUSE_SHOW = true, contrebasse@5: } contrebasse@5: local SpellBlacklist = { contrebasse@5: [1784] = true, -- Stealth (Rogue) contrebasse@5: [58984] = true, -- Shadowmeld (Nightelf stealth) contrebasse@5: } contrebasse@5: local events1player = { -- the first arg is "player" contrebasse@5: UNIT_SPELLCAST_FAILED = true, contrebasse@5: UNIT_SPELLCAST_INTERRUPTED = true, contrebasse@5: UNIT_SPELLCAST_SUCCEEDED = true, contrebasse@5: } contrebasse@5: local events2playername = { -- the 2nd arg is playername contrebasse@5: CHAT_MSG_SAY = true, contrebasse@5: CHAT_MSG_YELL = true, contrebasse@5: CHAT_MSG_TEXT_EMOTE = true, contrebasse@5: } contrebasse@0: contrebasse@0: contrebasse@5: --------------------------------------------------------------- contrebasse@8: -- Launch drawing weapons contrebasse@5: --------------------------------------------------------------- contrebasse@5: -- Wait a few seconds before drawing, to be able to see the curren animation (and avoid bugs) contrebasse@5: local Degaine_OnUpdate = function(self,t_elapsed) contrebasse@0: if not done then contrebasse@5: t_left = t_left - t_elapsed; contrebasse@5: if t_left<=0 then contrebasse@0: done = true; contrebasse@0: ToggleSheath(); contrebasse@8: DegaineFrame:SetScript("OnUpdate", nil); contrebasse@0: end contrebasse@0: end contrebasse@0: end contrebasse@8: local start = function() contrebasse@8: if Degaine_isAuto and not InCombatLockdown() then contrebasse@8: t_left = delay contrebasse@8: done = false contrebasse@8: DegaineFrame:SetScript("OnUpdate", Degaine_OnUpdate); contrebasse@8: end contrebasse@8: end contrebasse@5: contrebasse@5: --------------------------------------------------------------- contrebasse@5: -- Activation functions contrebasse@5: --------------------------------------------------------------- contrebasse@5: local activate = function() contrebasse@5: if (not Degaine_isAuto) or InCombatLockdown() then return end contrebasse@5: contrebasse@9: --DegaineFrame:SetScript("OnUpdate", Degaine_OnUpdate); contrebasse@5: --@debug@ contrebasse@5: if debug then contrebasse@5: DegaineFrame:RegisterAllEvents(); contrebasse@5: else contrebasse@5: --@end-debug@ contrebasse@5: for k,v in pairs(events) do DegaineFrame:RegisterEvent(k); end contrebasse@5: for k,v in pairs(events1player) do DegaineFrame:RegisterEvent(k); end contrebasse@5: for k,v in pairs(events2playername) do DegaineFrame:RegisterEvent(k); end contrebasse@5: --@end-debug@ contrebasse@5: end contrebasse@5: --@end-debug@ contrebasse@0: end contrebasse@5: local desactivate = function() contrebasse@5: for k,v in pairs(events) do DegaineFrame:UnregisterEvent(k); end contrebasse@5: for k,v in pairs(events1player) do DegaineFrame:UnregisterEvent(k); end contrebasse@5: for k,v in pairs(events2playername) do DegaineFrame:UnregisterEvent(k); end contrebasse@0: DegaineFrame:SetScript("OnUpdate", nil); contrebasse@0: done = true; contrebasse@0: end contrebasse@6: Degaine_ToggleAuto = function() contrebasse@5: if Degaine_isAuto then contrebasse@5: Degaine_isAuto = false contrebasse@5: desactivate() contrebasse@5: else contrebasse@5: Degaine_isAuto = true contrebasse@5: activate() contrebasse@5: end contrebasse@5: printState() contrebasse@5: end contrebasse@0: contrebasse@5: contrebasse@5: --------------------------------------------------------------- contrebasse@5: -- Event/hooks functions contrebasse@5: --------------------------------------------------------------- contrebasse@5: local Degaine_OnEvent = function(self,event, arg1, arg2, ...) contrebasse@5: --@debug@ contrebasse@0: if debug then contrebasse@5: DEFAULT_CHAT_FRAME:AddMessage(event) contrebasse@0: if arg1 then DEFAULT_CHAT_FRAME:AddMessage("arg1 = "..arg1); end contrebasse@0: if arg2 then DEFAULT_CHAT_FRAME:AddMessage("arg2 = "..arg2); end contrebasse@0: end contrebasse@5: --@end-debug@ contrebasse@5: contrebasse@0: if ((events[event] and (type(events[event])~="function" or events[event]())) contrebasse@0: or (events1player[event] and arg1=="player") contrebasse@0: or (events2playername[event] and arg2==playername)) then contrebasse@8: start() contrebasse@5: contrebasse@0: elseif event == "PLAYER_REGEN_ENABLED" then contrebasse@5: desactivate() contrebasse@0: elseif event == "PLAYER_REGEN_DISABLED" then contrebasse@5: activate() contrebasse@5: contrebasse@0: elseif event == "ADDON_LOADED" and arg1==AddonName then contrebasse@5: if Degaine_isAuto==nil then contrebasse@5: Degaine_isAuto = true contrebasse@0: end contrebasse@8: if Degaine_isAuto then activate(); else desactivate(); end contrebasse@5: printState() contrebasse@5: contrebasse@5: -- Not needed anymore contrebasse@5: DegaineFrame:UnregisterEvent("ADDON_LOADED") contrebasse@0: end contrebasse@0: end contrebasse@5: -- Hook when standing up contrebasse@5: -- (Didn't work, see http://forums.wowace.com/showthread.php?p=310547#post310547) contrebasse@8: hooksecurefunc("SitStandOrDescendStart",start); contrebasse@0: contrebasse@0: contrebasse@6: --------------------------------------------------------------- contrebasse@6: -- Commands contrebasse@6: --------------------------------------------------------------- contrebasse@6: -- Bindings contrebasse@6: BINDING_HEADER_DEGAINE = "Dégainer automatiquement" contrebasse@6: contrebasse@6: -- Slash command contrebasse@7: -- GLOBALS: SLASH_DEGAINE1 contrebasse@7: SLASH_DEGAINE1 = "/degaine" contrebasse@6: SlashCmdList["DEGAINE"] = Degaine_ToggleAuto contrebasse@6: contrebasse@5: contrebasse@5: --------------------------------------------------------------- contrebasse@5: -- Initialization contrebasse@5: --------------------------------------------------------------- contrebasse@5: DegaineFrame:SetScript("OnEvent",Degaine_OnEvent) contrebasse@5: contrebasse@5: -- Global events contrebasse@5: DegaineFrame:RegisterEvent("PLAYER_REGEN_ENABLED") contrebasse@5: DegaineFrame:RegisterEvent("PLAYER_REGEN_DISABLED") contrebasse@5: DegaineFrame:RegisterEvent("ADDON_LOADED") contrebasse@5: activate()