annotate Degaine.lua @ 0:97422a3e11c9

Initial commit, woot !
author contrebasse
date Wed, 08 Dec 2010 21:29:27 +0100
parents
children 66640a8f1cbd
rev   line source
contrebasse@0 1 local AddonName = ...
contrebasse@0 2 -- Dégaine auto des armes
contrebasse@0 3
contrebasse@0 4 -- BUGS connus :
contrebasse@0 5 -- le camouflage du voleur ne rentre pas l'arme
contrebasse@0 6 -- si on se lève en sautant ça ne sort pas l'arme (impossible de savoir si on était assis avant)
contrebasse@0 7
contrebasse@0 8 -- DEBUG
contrebasse@0 9 local debug = false;
contrebasse@0 10
contrebasse@0 11 -- Fonctions globales en local
contrebasse@0 12 -- GLOBALS: ToggleAutoDegaine, isDegaineAuto, BINDING_HEADER_DEGAINE
contrebasse@0 13 local GossipFrame = GossipFrame;
contrebasse@0 14 local DEFAULT_CHAT_FRAME = DEFAULT_CHAT_FRAME;
contrebasse@0 15 local InCombatLockdown = InCombatLockdown;
contrebasse@0 16 local ToggleSheath = ToggleSheath;
contrebasse@0 17
contrebasse@0 18 local pairs = pairs;
contrebasse@0 19 local type = type;
contrebasse@0 20
contrebasse@0 21 -- Pour les raccourcis
contrebasse@0 22 -- Cf Bindings.xml pour les raccourcis eux-mêmes
contrebasse@0 23 BINDING_HEADER_DEGAINE = "Dégainer automatiquement";
contrebasse@0 24
contrebasse@0 25 -- Variables locales
contrebasse@0 26 local DegaineFrame = CreateFrame("Frame");
contrebasse@0 27 local playername = UnitName("player");
contrebasse@0 28 local done = true;
contrebasse@0 29 local t_restant = -1;
contrebasse@0 30
contrebasse@0 31 -- Configuration des events à regarder
contrebasse@0 32 local events = { -- events sans arguments à voir
contrebasse@0 33 GOSSIP_SHOW = true,
contrebasse@0 34 MERCHANT_SHOW = function() return GossipFrame:IsShown(); end,
contrebasse@0 35 BANKFRAME_OPENED = true; --function() return GossipFrame:IsShown(); end,
contrebasse@0 36 AUCTION_HOUSE_SHOW = true,
contrebasse@0 37 };
contrebasse@0 38 local events1player = { -- events dont le 1er argument doit être le joueur
contrebasse@0 39 UNIT_SPELLCAST_FAILED = true;
contrebasse@0 40 UNIT_SPELLCAST_INTERRUPTED = true;
contrebasse@0 41 UNIT_SPELLCAST_SUCCEEDED = true;
contrebasse@0 42 };
contrebasse@0 43 local events2playername = { -- events dont le 2e argument doit être le joueur
contrebasse@0 44 CHAT_MSG_SAY = true;
contrebasse@0 45 CHAT_MSG_YELL = true;
contrebasse@0 46 CHAT_MSG_TEXT_EMOTE = true;
contrebasse@0 47 };
contrebasse@0 48
contrebasse@0 49 -- Fonctions d'activation/désactivation des events
contrebasse@0 50 local registerEvents = function()
contrebasse@0 51 --if debug then
contrebasse@0 52 -- DEBUG
contrebasse@0 53 -- DegaineFrame:RegisterAllEvents();
contrebasse@0 54 --else
contrebasse@0 55 for k,v in pairs(events) do DegaineFrame:RegisterEvent(k); end
contrebasse@0 56 for k,v in pairs(events1player) do DegaineFrame:RegisterEvent(k); end
contrebasse@0 57 for k,v in pairs(events2playername) do DegaineFrame:RegisterEvent(k); end
contrebasse@0 58 --end
contrebasse@0 59 end -- function
contrebasse@0 60 local unregisterEvents = function()
contrebasse@0 61 if not debug then
contrebasse@0 62 for k,v in pairs(events) do DegaineFrame:UnregisterEvent(k); end
contrebasse@0 63 for k,v in pairs(events1player) do DegaineFrame:UnregisterEvent(k); end
contrebasse@0 64 for k,v in pairs(events2playername) do DegaineFrame:UnregisterEvent(k); end
contrebasse@0 65 end
contrebasse@0 66 end -- function
contrebasse@0 67
contrebasse@0 68 -- Fonction de timer
contrebasse@0 69 -- On attend un petit délai avant de dégainer, pour voir l'animation et éviter que ça bug
contrebasse@0 70 local OnUpdate = function(self,t_ecoule)
contrebasse@0 71 if not done then
contrebasse@0 72 t_restant = t_restant - t_ecoule;
contrebasse@0 73 if t_restant<=0 then
contrebasse@0 74 done = true;
contrebasse@0 75 ToggleSheath();
contrebasse@0 76 end
contrebasse@0 77 end
contrebasse@0 78 end
contrebasse@0 79
contrebasse@0 80 -- Fonctions d'activation/désactivation
contrebasse@0 81 local activer = function()
contrebasse@0 82 if (not isDegaineAuto) or InCombatLockdown() then return end
contrebasse@0 83
contrebasse@0 84 DegaineFrame:SetScript("OnUpdate", OnUpdate);
contrebasse@0 85 registerEvents();
contrebasse@0 86 end
contrebasse@0 87 local desactiver = function()
contrebasse@0 88 -- Désactivation
contrebasse@0 89 unregisterEvents();
contrebasse@0 90 DegaineFrame:SetScript("OnUpdate", nil);
contrebasse@0 91 done = true;
contrebasse@0 92 end
contrebasse@0 93
contrebasse@0 94 -- Fonctions
contrebasse@0 95 local printState = function()
contrebasse@0 96 DEFAULT_CHAT_FRAME:AddMessage(isDegaineAuto and "Dégainage automatique |cFF00FF00activé|r" or "Dégainage automatique |cFFFF0000désactivé|r");
contrebasse@0 97 end
contrebasse@0 98 local OnEvent = function(self,event, arg1, arg2, ...)
contrebasse@0 99 if debug then
contrebasse@0 100 DEFAULT_CHAT_FRAME:AddMessage(event);
contrebasse@0 101 if arg1 then DEFAULT_CHAT_FRAME:AddMessage("arg1 = "..arg1); end
contrebasse@0 102 if arg2 then DEFAULT_CHAT_FRAME:AddMessage("arg2 = "..arg2); end
contrebasse@0 103 end
contrebasse@0 104
contrebasse@0 105 if ((events[event] and (type(events[event])~="function" or events[event]()))
contrebasse@0 106 or (events1player[event] and arg1=="player")
contrebasse@0 107 or (events2playername[event] and arg2==playername)) then
contrebasse@0 108 t_restant = 2;
contrebasse@0 109 done = false;
contrebasse@0 110 elseif event == "PLAYER_REGEN_ENABLED" then
contrebasse@0 111 desactiver();
contrebasse@0 112 elseif event == "PLAYER_REGEN_DISABLED" then
contrebasse@0 113 activer();
contrebasse@0 114 elseif event == "ADDON_LOADED" and arg1==AddonName then
contrebasse@0 115 if isDegaineAuto==nil then
contrebasse@0 116 isDegaineAuto = true;
contrebasse@0 117 end
contrebasse@0 118 if isDegaineAuto then
contrebasse@0 119 activer();
contrebasse@0 120 else
contrebasse@0 121 desactiver();
contrebasse@0 122 end
contrebasse@0 123 printState();
contrebasse@0 124 end
contrebasse@0 125 end
contrebasse@0 126
contrebasse@0 127 -- Pour mettre le dégainage auto on/off TODO
contrebasse@0 128 ToggleAutoDegaine = function()
contrebasse@0 129 if isDegaineAuto then
contrebasse@0 130 isDegaineAuto = false;
contrebasse@0 131 desactiver();
contrebasse@0 132 else
contrebasse@0 133 isDegaineAuto = true;
contrebasse@0 134 activer();
contrebasse@0 135 end
contrebasse@0 136 printState();
contrebasse@0 137 end
contrebasse@0 138
contrebasse@0 139 -- Enregistrement des events et activation
contrebasse@0 140 DegaineFrame:RegisterEvent("PLAYER_REGEN_ENABLED");
contrebasse@0 141 DegaineFrame:RegisterEvent("PLAYER_REGEN_DISABLED");
contrebasse@0 142 DegaineFrame:RegisterEvent("ADDON_LOADED");
contrebasse@0 143 DegaineFrame:SetScript("OnEvent",OnEvent);
contrebasse@0 144 -- ça ne marche pas... question posée sur http://forums.wowace.com/showthread.php?p=310547#post310547
contrebasse@0 145 hooksecurefunc("SitStandOrDescendStart",function() if isDegaineAuto and not InCombatLockdown() then t_restant = 2; done = false; end; end);
contrebasse@0 146 activer();