contrebasse@0: local AddonName = ... contrebasse@0: -- Dégaine auto des armes contrebasse@0: contrebasse@0: -- BUGS connus : contrebasse@0: -- le camouflage du voleur ne rentre pas l'arme 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@0: -- DEBUG contrebasse@0: local debug = false; contrebasse@0: contrebasse@0: -- Fonctions globales en local contrebasse@0: -- GLOBALS: ToggleAutoDegaine, isDegaineAuto, BINDING_HEADER_DEGAINE contrebasse@0: local GossipFrame = GossipFrame; contrebasse@0: local DEFAULT_CHAT_FRAME = DEFAULT_CHAT_FRAME; contrebasse@0: local InCombatLockdown = InCombatLockdown; contrebasse@0: local ToggleSheath = ToggleSheath; contrebasse@0: contrebasse@0: local pairs = pairs; contrebasse@0: local type = type; contrebasse@0: contrebasse@0: -- Pour les raccourcis contrebasse@0: -- Cf Bindings.xml pour les raccourcis eux-mêmes contrebasse@0: BINDING_HEADER_DEGAINE = "Dégainer automatiquement"; contrebasse@0: contrebasse@0: -- Variables locales contrebasse@0: local DegaineFrame = CreateFrame("Frame"); contrebasse@0: local playername = UnitName("player"); contrebasse@0: local done = true; contrebasse@0: local t_restant = -1; contrebasse@0: contrebasse@0: -- Configuration des events à regarder contrebasse@0: local events = { -- events sans arguments à voir contrebasse@0: GOSSIP_SHOW = true, contrebasse@0: MERCHANT_SHOW = function() return GossipFrame:IsShown(); end, contrebasse@0: BANKFRAME_OPENED = true; --function() return GossipFrame:IsShown(); end, contrebasse@0: AUCTION_HOUSE_SHOW = true, contrebasse@0: }; contrebasse@0: local events1player = { -- events dont le 1er argument doit être le joueur contrebasse@0: UNIT_SPELLCAST_FAILED = true; contrebasse@0: UNIT_SPELLCAST_INTERRUPTED = true; contrebasse@0: UNIT_SPELLCAST_SUCCEEDED = true; contrebasse@0: }; contrebasse@0: local events2playername = { -- events dont le 2e argument doit être le joueur contrebasse@0: CHAT_MSG_SAY = true; contrebasse@0: CHAT_MSG_YELL = true; contrebasse@0: CHAT_MSG_TEXT_EMOTE = true; contrebasse@0: }; contrebasse@0: contrebasse@0: -- Fonctions d'activation/désactivation des events contrebasse@0: local registerEvents = function() contrebasse@0: --if debug then contrebasse@0: -- DEBUG contrebasse@0: -- DegaineFrame:RegisterAllEvents(); contrebasse@0: --else contrebasse@0: for k,v in pairs(events) do DegaineFrame:RegisterEvent(k); end contrebasse@0: for k,v in pairs(events1player) do DegaineFrame:RegisterEvent(k); end contrebasse@0: for k,v in pairs(events2playername) do DegaineFrame:RegisterEvent(k); end contrebasse@0: --end contrebasse@0: end -- function contrebasse@0: local unregisterEvents = function() contrebasse@0: if not debug then contrebasse@0: for k,v in pairs(events) do DegaineFrame:UnregisterEvent(k); end contrebasse@0: for k,v in pairs(events1player) do DegaineFrame:UnregisterEvent(k); end contrebasse@0: for k,v in pairs(events2playername) do DegaineFrame:UnregisterEvent(k); end contrebasse@0: end contrebasse@0: end -- function contrebasse@0: contrebasse@0: -- Fonction de timer contrebasse@0: -- On attend un petit délai avant de dégainer, pour voir l'animation et éviter que ça bug contrebasse@0: local OnUpdate = function(self,t_ecoule) contrebasse@0: if not done then contrebasse@0: t_restant = t_restant - t_ecoule; contrebasse@0: if t_restant<=0 then contrebasse@0: done = true; contrebasse@0: ToggleSheath(); contrebasse@0: end contrebasse@0: end contrebasse@0: end contrebasse@0: contrebasse@0: -- Fonctions d'activation/désactivation contrebasse@0: local activer = function() contrebasse@0: if (not isDegaineAuto) or InCombatLockdown() then return end contrebasse@0: contrebasse@0: DegaineFrame:SetScript("OnUpdate", OnUpdate); contrebasse@0: registerEvents(); contrebasse@0: end contrebasse@0: local desactiver = function() contrebasse@0: -- Désactivation contrebasse@0: unregisterEvents(); contrebasse@0: DegaineFrame:SetScript("OnUpdate", nil); contrebasse@0: done = true; contrebasse@0: end contrebasse@0: contrebasse@0: -- Fonctions contrebasse@0: local printState = function() contrebasse@0: DEFAULT_CHAT_FRAME:AddMessage(isDegaineAuto and "Dégainage automatique |cFF00FF00activé|r" or "Dégainage automatique |cFFFF0000désactivé|r"); contrebasse@0: end contrebasse@0: local OnEvent = function(self,event, arg1, arg2, ...) contrebasse@0: if debug then contrebasse@0: 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@0: 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@0: t_restant = 2; contrebasse@0: done = false; contrebasse@0: elseif event == "PLAYER_REGEN_ENABLED" then contrebasse@0: desactiver(); contrebasse@0: elseif event == "PLAYER_REGEN_DISABLED" then contrebasse@0: activer(); contrebasse@0: elseif event == "ADDON_LOADED" and arg1==AddonName then contrebasse@0: if isDegaineAuto==nil then contrebasse@0: isDegaineAuto = true; contrebasse@0: end contrebasse@0: if isDegaineAuto then contrebasse@0: activer(); contrebasse@0: else contrebasse@0: desactiver(); contrebasse@0: end contrebasse@0: printState(); contrebasse@0: end contrebasse@0: end contrebasse@0: contrebasse@0: -- Pour mettre le dégainage auto on/off TODO contrebasse@0: ToggleAutoDegaine = function() contrebasse@0: if isDegaineAuto then contrebasse@0: isDegaineAuto = false; contrebasse@0: desactiver(); contrebasse@0: else contrebasse@0: isDegaineAuto = true; contrebasse@0: activer(); contrebasse@0: end contrebasse@0: printState(); contrebasse@0: end contrebasse@0: contrebasse@0: -- Enregistrement des events et activation contrebasse@0: DegaineFrame:RegisterEvent("PLAYER_REGEN_ENABLED"); contrebasse@0: DegaineFrame:RegisterEvent("PLAYER_REGEN_DISABLED"); contrebasse@0: DegaineFrame:RegisterEvent("ADDON_LOADED"); contrebasse@0: DegaineFrame:SetScript("OnEvent",OnEvent); contrebasse@0: -- ça ne marche pas... question posée sur http://forums.wowace.com/showthread.php?p=310547#post310547 contrebasse@0: hooksecurefunc("SitStandOrDescendStart",function() if isDegaineAuto and not InCombatLockdown() then t_restant = 2; done = false; end; end); contrebasse@0: activer();