Mercurial > wow > degaine
changeset 0:97422a3e11c9
Initial commit, woot !
author | contrebasse |
---|---|
date | Wed, 08 Dec 2010 21:29:27 +0100 |
parents | |
children | 5d8813a622d1 |
files | .hgignore Bindings.xml Degaine.lua Degaine.toc |
diffstat | 4 files changed, 164 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /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 +*
--- /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 @@ +<Bindings> + <Binding name="Activer/désactiver" header="DEGAINE"> + ToggleAutoDegaine(); + </Binding> + <!--Binding name="Afficher les métiers"> + TweakMetiers() + </Binding--> +</Bindings>
--- /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();