comparison Degaine.lua @ 5:66640a8f1cbd

Started reworking code ordering in files, comments and vars are in english
author contrebasse
date Fri, 10 Dec 2010 16:04:55 +0100
parents 97422a3e11c9
children 120f29645e34
comparison
equal deleted inserted replaced
4:388b12209e6c 5:66640a8f1cbd
1 local AddonName = ... 1 local AddonName = ...
2 -- Dégaine auto des armes 2 -- Draw your weapons automagically
3 3
4 -- BUGS connus : 4 -- Known bugs :
5 -- le camouflage du voleur ne rentre pas l'arme
6 -- si on se lève en sautant ça ne sort pas l'arme (impossible de savoir si on était assis avant) 5 -- si on se lève en sautant ça ne sort pas l'arme (impossible de savoir si on était assis avant)
7 6
8 -- DEBUG 7 --@debug@
9 local debug = false; 8 local debug = false;
9 --@end-debug@
10 10
11 -- Fonctions globales en local 11 ---------------------------------------------------------------
12 -- GLOBALS: ToggleAutoDegaine, isDegaineAuto, BINDING_HEADER_DEGAINE 12 -- Globals to local
13 local GossipFrame = GossipFrame; 13 ---------------------------------------------------------------
14 local DEFAULT_CHAT_FRAME = DEFAULT_CHAT_FRAME; 14 -- These need to be globals
15 local InCombatLockdown = InCombatLockdown; 15 -- GLOBALS: ToggleAutoDegaine, Degaine_isAuto, BINDING_HEADER_DEGAINE
16 local ToggleSheath = ToggleSheath;
17 16
17 -- It doesn't matter if they are globals
18 -- GLOBALS: DEFAULT_CHAT_FRAME, GossipFrame
19
20 -- Lua functions
18 local pairs = pairs; 21 local pairs = pairs;
19 local type = type; 22 local type = type;
20 23
21 -- Pour les raccourcis 24 -- Wow functions
22 -- Cf Bindings.xml pour les raccourcis eux-mêmes 25 local InCombatLockdown = InCombatLockdown
23 BINDING_HEADER_DEGAINE = "Dégainer automatiquement"; 26 local ToggleSheath = ToggleSheath
24 27
25 -- Variables locales
26 local DegaineFrame = CreateFrame("Frame");
27 local playername = UnitName("player");
28 local done = true;
29 local t_restant = -1;
30 28
31 -- Configuration des events à regarder 29 ---------------------------------------------------------------
32 local events = { -- events sans arguments à voir 30 -- Some stuff...
31 ---------------------------------------------------------------
32 -- Bindings
33 BINDING_HEADER_DEGAINE = "Dégainer automatiquement"
34
35 -- Print status
36 local printState = function()
37 DEFAULT_CHAT_FRAME:AddMessage(Degaine_isAuto and "Dégainage automatique |cFF00FF00activé|r" or "Dégainage automatique |cFFFF0000désactivé|r");
38 end
39
40
41 ---------------------------------------------------------------
42 -- Local vars
43 ---------------------------------------------------------------
44 -- const
45 local DegaineFrame = CreateFrame("Frame")
46 local playername = UnitName("player")
47
48 -- vars
49 local done = true
50 local t_left = -1
51
52 ---------------------------------------------------------------
53 -- Events config
54 ---------------------------------------------------------------
55 -- Events to watch
56 local events = { -- no args to watch
33 GOSSIP_SHOW = true, 57 GOSSIP_SHOW = true,
34 MERCHANT_SHOW = function() return GossipFrame:IsShown(); end, 58 MERCHANT_SHOW = function() return GossipFrame:IsShown(); end,
35 BANKFRAME_OPENED = true; --function() return GossipFrame:IsShown(); end, 59 BANKFRAME_OPENED = true, --function() return GossipFrame:IsShown(); end,
36 AUCTION_HOUSE_SHOW = true, 60 AUCTION_HOUSE_SHOW = true,
37 }; 61 }
38 local events1player = { -- events dont le 1er argument doit être le joueur 62 local SpellBlacklist = {
39 UNIT_SPELLCAST_FAILED = true; 63 [1784] = true, -- Stealth (Rogue)
40 UNIT_SPELLCAST_INTERRUPTED = true; 64 [58984] = true, -- Shadowmeld (Nightelf stealth)
41 UNIT_SPELLCAST_SUCCEEDED = true; 65 }
42 }; 66 local events1player = { -- the first arg is "player"
43 local events2playername = { -- events dont le 2e argument doit être le joueur 67 UNIT_SPELLCAST_FAILED = true,
44 CHAT_MSG_SAY = true; 68 UNIT_SPELLCAST_INTERRUPTED = true,
45 CHAT_MSG_YELL = true; 69 UNIT_SPELLCAST_SUCCEEDED = true,
46 CHAT_MSG_TEXT_EMOTE = true; 70 }
47 }; 71 local events2playername = { -- the 2nd arg is playername
72 CHAT_MSG_SAY = true,
73 CHAT_MSG_YELL = true,
74 CHAT_MSG_TEXT_EMOTE = true,
75 }
48 76
49 -- Fonctions d'activation/désactivation des events
50 local registerEvents = function()
51 --if debug then
52 -- DEBUG
53 -- DegaineFrame:RegisterAllEvents();
54 --else
55 for k,v in pairs(events) do DegaineFrame:RegisterEvent(k); end
56 for k,v in pairs(events1player) do DegaineFrame:RegisterEvent(k); end
57 for k,v in pairs(events2playername) do DegaineFrame:RegisterEvent(k); end
58 --end
59 end -- function
60 local unregisterEvents = function()
61 if not debug then
62 for k,v in pairs(events) do DegaineFrame:UnregisterEvent(k); end
63 for k,v in pairs(events1player) do DegaineFrame:UnregisterEvent(k); end
64 for k,v in pairs(events2playername) do DegaineFrame:UnregisterEvent(k); end
65 end
66 end -- function
67 77
68 -- Fonction de timer 78 ---------------------------------------------------------------
69 -- On attend un petit délai avant de dégainer, pour voir l'animation et éviter que ça bug 79 -- Events registering
70 local OnUpdate = function(self,t_ecoule) 80 ---------------------------------------------------------------
81
82
83 ---------------------------------------------------------------
84 -- Timer
85 ---------------------------------------------------------------
86 -- Wait a few seconds before drawing, to be able to see the curren animation (and avoid bugs)
87 local Degaine_OnUpdate = function(self,t_elapsed)
71 if not done then 88 if not done then
72 t_restant = t_restant - t_ecoule; 89 t_left = t_left - t_elapsed;
73 if t_restant<=0 then 90 if t_left<=0 then
74 done = true; 91 done = true;
75 ToggleSheath(); 92 ToggleSheath();
76 end 93 end
77 end 94 end
78 end 95 end
79 96
80 -- Fonctions d'activation/désactivation 97
81 local activer = function() 98 ---------------------------------------------------------------
82 if (not isDegaineAuto) or InCombatLockdown() then return end 99 -- Activation functions
83 100 ---------------------------------------------------------------
84 DegaineFrame:SetScript("OnUpdate", OnUpdate); 101 local activate = function()
85 registerEvents(); 102 if (not Degaine_isAuto) or InCombatLockdown() then return end
103
104 DegaineFrame:SetScript("OnUpdate", Degaine_OnUpdate);
105 --@debug@
106 if debug then
107 DegaineFrame:RegisterAllEvents();
108 else
109 --@end-debug@
110 for k,v in pairs(events) do DegaineFrame:RegisterEvent(k); end
111 for k,v in pairs(events1player) do DegaineFrame:RegisterEvent(k); end
112 for k,v in pairs(events2playername) do DegaineFrame:RegisterEvent(k); end
113 --@end-debug@
114 end
115 --@end-debug@
86 end 116 end
87 local desactiver = function() 117 local desactivate = function()
88 -- Désactivation 118 for k,v in pairs(events) do DegaineFrame:UnregisterEvent(k); end
89 unregisterEvents(); 119 for k,v in pairs(events1player) do DegaineFrame:UnregisterEvent(k); end
120 for k,v in pairs(events2playername) do DegaineFrame:UnregisterEvent(k); end
90 DegaineFrame:SetScript("OnUpdate", nil); 121 DegaineFrame:SetScript("OnUpdate", nil);
91 done = true; 122 done = true;
92 end 123 end
124 ToggleAutoDegaine = function()
125 if Degaine_isAuto then
126 Degaine_isAuto = false
127 desactivate()
128 else
129 Degaine_isAuto = true
130 activate()
131 end
132 printState()
133 end
93 134
94 -- Fonctions 135
95 local printState = function() 136 ---------------------------------------------------------------
96 DEFAULT_CHAT_FRAME:AddMessage(isDegaineAuto and "Dégainage automatique |cFF00FF00activé|r" or "Dégainage automatique |cFFFF0000désactivé|r"); 137 -- Event/hooks functions
97 end 138 ---------------------------------------------------------------
98 local OnEvent = function(self,event, arg1, arg2, ...) 139 local Degaine_OnEvent = function(self,event, arg1, arg2, ...)
140 --@debug@
99 if debug then 141 if debug then
100 DEFAULT_CHAT_FRAME:AddMessage(event); 142 DEFAULT_CHAT_FRAME:AddMessage(event)
101 if arg1 then DEFAULT_CHAT_FRAME:AddMessage("arg1 = "..arg1); end 143 if arg1 then DEFAULT_CHAT_FRAME:AddMessage("arg1 = "..arg1); end
102 if arg2 then DEFAULT_CHAT_FRAME:AddMessage("arg2 = "..arg2); end 144 if arg2 then DEFAULT_CHAT_FRAME:AddMessage("arg2 = "..arg2); end
103 end 145 end
104 146 --@end-debug@
147
105 if ((events[event] and (type(events[event])~="function" or events[event]())) 148 if ((events[event] and (type(events[event])~="function" or events[event]()))
106 or (events1player[event] and arg1=="player") 149 or (events1player[event] and arg1=="player")
107 or (events2playername[event] and arg2==playername)) then 150 or (events2playername[event] and arg2==playername)) then
108 t_restant = 2; 151 t_left = 2
109 done = false; 152 done = false
153
110 elseif event == "PLAYER_REGEN_ENABLED" then 154 elseif event == "PLAYER_REGEN_ENABLED" then
111 desactiver(); 155 desactivate()
112 elseif event == "PLAYER_REGEN_DISABLED" then 156 elseif event == "PLAYER_REGEN_DISABLED" then
113 activer(); 157 activate()
158
114 elseif event == "ADDON_LOADED" and arg1==AddonName then 159 elseif event == "ADDON_LOADED" and arg1==AddonName then
115 if isDegaineAuto==nil then 160 if Degaine_isAuto==nil then
116 isDegaineAuto = true; 161 Degaine_isAuto = true
117 end 162 end
118 if isDegaineAuto then 163 if Degaine_isAuto then
119 activer(); 164 activate()
120 else 165 else
121 desactiver(); 166 desactivate()
122 end 167 end
123 printState(); 168 printState()
169
170 -- Not needed anymore
171 DegaineFrame:UnregisterEvent("ADDON_LOADED")
124 end 172 end
125 end 173 end
174 -- Hook when standing up
175 -- (Didn't work, see http://forums.wowace.com/showthread.php?p=310547#post310547)
176 hooksecurefunc("SitStandOrDescendStart",function()
177 if Degaine_isAuto and not InCombatLockdown() then
178 t_left = 2
179 done = false
180 end
181 end)
126 182
127 -- Pour mettre le dégainage auto on/off TODO
128 ToggleAutoDegaine = function()
129 if isDegaineAuto then
130 isDegaineAuto = false;
131 desactiver();
132 else
133 isDegaineAuto = true;
134 activer();
135 end
136 printState();
137 end
138 183
139 -- Enregistrement des events et activation 184
140 DegaineFrame:RegisterEvent("PLAYER_REGEN_ENABLED"); 185 ---------------------------------------------------------------
141 DegaineFrame:RegisterEvent("PLAYER_REGEN_DISABLED"); 186 -- Initialization
142 DegaineFrame:RegisterEvent("ADDON_LOADED"); 187 ---------------------------------------------------------------
143 DegaineFrame:SetScript("OnEvent",OnEvent); 188 DegaineFrame:SetScript("OnEvent",Degaine_OnEvent)
144 -- ça ne marche pas... question posée sur http://forums.wowace.com/showthread.php?p=310547#post310547 189
145 hooksecurefunc("SitStandOrDescendStart",function() if isDegaineAuto and not InCombatLockdown() then t_restant = 2; done = false; end; end); 190 -- Global events
146 activer(); 191 DegaineFrame:RegisterEvent("PLAYER_REGEN_ENABLED")
192 DegaineFrame:RegisterEvent("PLAYER_REGEN_DISABLED")
193 DegaineFrame:RegisterEvent("ADDON_LOADED")
194 activate()