Mercurial > wow > degaine
view Degaine.lua @ 0:97422a3e11c9
Initial commit, woot !
author | contrebasse |
---|---|
date | Wed, 08 Dec 2010 21:29:27 +0100 |
parents | |
children | 66640a8f1cbd |
line wrap: on
line source
local AddonName = ... -- Dégaine auto des armes -- BUGS connus : -- le camouflage du voleur ne rentre pas l'arme -- si on se lève en sautant ça ne sort pas l'arme (impossible de savoir si on était assis avant) -- DEBUG local debug = false; -- Fonctions globales en local -- GLOBALS: ToggleAutoDegaine, isDegaineAuto, BINDING_HEADER_DEGAINE local GossipFrame = GossipFrame; local DEFAULT_CHAT_FRAME = DEFAULT_CHAT_FRAME; local InCombatLockdown = InCombatLockdown; local ToggleSheath = ToggleSheath; local pairs = pairs; local type = type; -- Pour les raccourcis -- Cf Bindings.xml pour les raccourcis eux-mêmes BINDING_HEADER_DEGAINE = "Dégainer automatiquement"; -- Variables locales local DegaineFrame = CreateFrame("Frame"); local playername = UnitName("player"); local done = true; local t_restant = -1; -- Configuration des events à regarder local events = { -- events sans arguments à voir GOSSIP_SHOW = true, MERCHANT_SHOW = function() return GossipFrame:IsShown(); end, BANKFRAME_OPENED = true; --function() return GossipFrame:IsShown(); end, AUCTION_HOUSE_SHOW = true, }; local events1player = { -- events dont le 1er argument doit être le joueur UNIT_SPELLCAST_FAILED = true; UNIT_SPELLCAST_INTERRUPTED = true; UNIT_SPELLCAST_SUCCEEDED = true; }; local events2playername = { -- events dont le 2e argument doit être le joueur CHAT_MSG_SAY = true; CHAT_MSG_YELL = true; CHAT_MSG_TEXT_EMOTE = true; }; -- Fonctions d'activation/désactivation des events local registerEvents = function() --if debug then -- DEBUG -- DegaineFrame:RegisterAllEvents(); --else 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 end -- function local unregisterEvents = function() if not debug then 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 end end -- function -- Fonction de timer -- On attend un petit délai avant de dégainer, pour voir l'animation et éviter que ça bug local OnUpdate = function(self,t_ecoule) if not done then t_restant = t_restant - t_ecoule; if t_restant<=0 then done = true; ToggleSheath(); end end end -- Fonctions d'activation/désactivation local activer = function() if (not isDegaineAuto) or InCombatLockdown() then return end DegaineFrame:SetScript("OnUpdate", OnUpdate); registerEvents(); end local desactiver = function() -- Désactivation unregisterEvents(); DegaineFrame:SetScript("OnUpdate", nil); done = true; end -- Fonctions local printState = function() DEFAULT_CHAT_FRAME:AddMessage(isDegaineAuto and "Dégainage automatique |cFF00FF00activé|r" or "Dégainage automatique |cFFFF0000désactivé|r"); end local OnEvent = function(self,event, arg1, arg2, ...) 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 if ((events[event] and (type(events[event])~="function" or events[event]())) or (events1player[event] and arg1=="player") or (events2playername[event] and arg2==playername)) then t_restant = 2; done = false; elseif event == "PLAYER_REGEN_ENABLED" then desactiver(); elseif event == "PLAYER_REGEN_DISABLED" then activer(); elseif event == "ADDON_LOADED" and arg1==AddonName then if isDegaineAuto==nil then isDegaineAuto = true; end if isDegaineAuto then activer(); else desactiver(); end printState(); end end -- Pour mettre le dégainage auto on/off TODO ToggleAutoDegaine = function() if isDegaineAuto then isDegaineAuto = false; desactiver(); else isDegaineAuto = true; activer(); end printState(); end -- Enregistrement des events et activation DegaineFrame:RegisterEvent("PLAYER_REGEN_ENABLED"); DegaineFrame:RegisterEvent("PLAYER_REGEN_DISABLED"); DegaineFrame:RegisterEvent("ADDON_LOADED"); DegaineFrame:SetScript("OnEvent",OnEvent); -- ça ne marche pas... question posée sur http://forums.wowace.com/showthread.php?p=310547#post310547 hooksecurefunc("SitStandOrDescendStart",function() if isDegaineAuto and not InCombatLockdown() then t_restant = 2; done = false; end; end); activer();