# HG changeset patch # User contrebasse # Date 1291840167 -3600 # Node ID 97422a3e11c9bcc0d23c739bacdb20c04b19dbaa Initial commit, woot ! diff -r 000000000000 -r 97422a3e11c9 .hgignore --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.hgignore Wed Dec 08 21:29:27 2010 +0100 @@ -0,0 +1,2 @@ +syntax: glob +* diff -r 000000000000 -r 97422a3e11c9 Bindings.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Bindings.xml Wed Dec 08 21:29:27 2010 +0100 @@ -0,0 +1,8 @@ + + + ToggleAutoDegaine(); + + + diff -r 000000000000 -r 97422a3e11c9 Degaine.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Degaine.lua Wed Dec 08 21:29:27 2010 +0100 @@ -0,0 +1,146 @@ +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(); diff -r 000000000000 -r 97422a3e11c9 Degaine.toc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Degaine.toc Wed Dec 08 21:29:27 2010 +0100 @@ -0,0 +1,8 @@ +## Interface: 40000 +## Title: Degaine +## DefaultState: enabled +## Author: Nodd Tisse-Airain +## Version: 3 +## SavedVariablesPerCharacter: isDegaineAuto + +Degaine.lua