annotate 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
rev   line source
contrebasse@0 1 local AddonName = ...
contrebasse@5 2 -- Draw your weapons automagically
contrebasse@0 3
contrebasse@5 4 -- Known bugs :
contrebasse@0 5 -- si on se lève en sautant ça ne sort pas l'arme (impossible de savoir si on était assis avant)
contrebasse@0 6
contrebasse@5 7 --@debug@
contrebasse@0 8 local debug = false;
contrebasse@5 9 --@end-debug@
contrebasse@0 10
contrebasse@5 11 ---------------------------------------------------------------
contrebasse@5 12 -- Globals to local
contrebasse@5 13 ---------------------------------------------------------------
contrebasse@5 14 -- These need to be globals
contrebasse@5 15 -- GLOBALS: ToggleAutoDegaine, Degaine_isAuto, BINDING_HEADER_DEGAINE
contrebasse@0 16
contrebasse@5 17 -- It doesn't matter if they are globals
contrebasse@5 18 -- GLOBALS: DEFAULT_CHAT_FRAME, GossipFrame
contrebasse@5 19
contrebasse@5 20 -- Lua functions
contrebasse@0 21 local pairs = pairs;
contrebasse@0 22 local type = type;
contrebasse@0 23
contrebasse@5 24 -- Wow functions
contrebasse@5 25 local InCombatLockdown = InCombatLockdown
contrebasse@5 26 local ToggleSheath = ToggleSheath
contrebasse@0 27
contrebasse@0 28
contrebasse@5 29 ---------------------------------------------------------------
contrebasse@5 30 -- Some stuff...
contrebasse@5 31 ---------------------------------------------------------------
contrebasse@5 32 -- Bindings
contrebasse@5 33 BINDING_HEADER_DEGAINE = "Dégainer automatiquement"
contrebasse@5 34
contrebasse@5 35 -- Print status
contrebasse@5 36 local printState = function()
contrebasse@5 37 DEFAULT_CHAT_FRAME:AddMessage(Degaine_isAuto and "Dégainage automatique |cFF00FF00activé|r" or "Dégainage automatique |cFFFF0000désactivé|r");
contrebasse@5 38 end
contrebasse@5 39
contrebasse@5 40
contrebasse@5 41 ---------------------------------------------------------------
contrebasse@5 42 -- Local vars
contrebasse@5 43 ---------------------------------------------------------------
contrebasse@5 44 -- const
contrebasse@5 45 local DegaineFrame = CreateFrame("Frame")
contrebasse@5 46 local playername = UnitName("player")
contrebasse@5 47
contrebasse@5 48 -- vars
contrebasse@5 49 local done = true
contrebasse@5 50 local t_left = -1
contrebasse@5 51
contrebasse@5 52 ---------------------------------------------------------------
contrebasse@5 53 -- Events config
contrebasse@5 54 ---------------------------------------------------------------
contrebasse@5 55 -- Events to watch
contrebasse@5 56 local events = { -- no args to watch
contrebasse@0 57 GOSSIP_SHOW = true,
contrebasse@0 58 MERCHANT_SHOW = function() return GossipFrame:IsShown(); end,
contrebasse@5 59 BANKFRAME_OPENED = true, --function() return GossipFrame:IsShown(); end,
contrebasse@0 60 AUCTION_HOUSE_SHOW = true,
contrebasse@5 61 }
contrebasse@5 62 local SpellBlacklist = {
contrebasse@5 63 [1784] = true, -- Stealth (Rogue)
contrebasse@5 64 [58984] = true, -- Shadowmeld (Nightelf stealth)
contrebasse@5 65 }
contrebasse@5 66 local events1player = { -- the first arg is "player"
contrebasse@5 67 UNIT_SPELLCAST_FAILED = true,
contrebasse@5 68 UNIT_SPELLCAST_INTERRUPTED = true,
contrebasse@5 69 UNIT_SPELLCAST_SUCCEEDED = true,
contrebasse@5 70 }
contrebasse@5 71 local events2playername = { -- the 2nd arg is playername
contrebasse@5 72 CHAT_MSG_SAY = true,
contrebasse@5 73 CHAT_MSG_YELL = true,
contrebasse@5 74 CHAT_MSG_TEXT_EMOTE = true,
contrebasse@5 75 }
contrebasse@0 76
contrebasse@0 77
contrebasse@5 78 ---------------------------------------------------------------
contrebasse@5 79 -- Events registering
contrebasse@5 80 ---------------------------------------------------------------
contrebasse@5 81
contrebasse@5 82
contrebasse@5 83 ---------------------------------------------------------------
contrebasse@5 84 -- Timer
contrebasse@5 85 ---------------------------------------------------------------
contrebasse@5 86 -- Wait a few seconds before drawing, to be able to see the curren animation (and avoid bugs)
contrebasse@5 87 local Degaine_OnUpdate = function(self,t_elapsed)
contrebasse@0 88 if not done then
contrebasse@5 89 t_left = t_left - t_elapsed;
contrebasse@5 90 if t_left<=0 then
contrebasse@0 91 done = true;
contrebasse@0 92 ToggleSheath();
contrebasse@0 93 end
contrebasse@0 94 end
contrebasse@0 95 end
contrebasse@0 96
contrebasse@5 97
contrebasse@5 98 ---------------------------------------------------------------
contrebasse@5 99 -- Activation functions
contrebasse@5 100 ---------------------------------------------------------------
contrebasse@5 101 local activate = function()
contrebasse@5 102 if (not Degaine_isAuto) or InCombatLockdown() then return end
contrebasse@5 103
contrebasse@5 104 DegaineFrame:SetScript("OnUpdate", Degaine_OnUpdate);
contrebasse@5 105 --@debug@
contrebasse@5 106 if debug then
contrebasse@5 107 DegaineFrame:RegisterAllEvents();
contrebasse@5 108 else
contrebasse@5 109 --@end-debug@
contrebasse@5 110 for k,v in pairs(events) do DegaineFrame:RegisterEvent(k); end
contrebasse@5 111 for k,v in pairs(events1player) do DegaineFrame:RegisterEvent(k); end
contrebasse@5 112 for k,v in pairs(events2playername) do DegaineFrame:RegisterEvent(k); end
contrebasse@5 113 --@end-debug@
contrebasse@5 114 end
contrebasse@5 115 --@end-debug@
contrebasse@0 116 end
contrebasse@5 117 local desactivate = function()
contrebasse@5 118 for k,v in pairs(events) do DegaineFrame:UnregisterEvent(k); end
contrebasse@5 119 for k,v in pairs(events1player) do DegaineFrame:UnregisterEvent(k); end
contrebasse@5 120 for k,v in pairs(events2playername) do DegaineFrame:UnregisterEvent(k); end
contrebasse@0 121 DegaineFrame:SetScript("OnUpdate", nil);
contrebasse@0 122 done = true;
contrebasse@0 123 end
contrebasse@5 124 ToggleAutoDegaine = function()
contrebasse@5 125 if Degaine_isAuto then
contrebasse@5 126 Degaine_isAuto = false
contrebasse@5 127 desactivate()
contrebasse@5 128 else
contrebasse@5 129 Degaine_isAuto = true
contrebasse@5 130 activate()
contrebasse@5 131 end
contrebasse@5 132 printState()
contrebasse@5 133 end
contrebasse@0 134
contrebasse@5 135
contrebasse@5 136 ---------------------------------------------------------------
contrebasse@5 137 -- Event/hooks functions
contrebasse@5 138 ---------------------------------------------------------------
contrebasse@5 139 local Degaine_OnEvent = function(self,event, arg1, arg2, ...)
contrebasse@5 140 --@debug@
contrebasse@0 141 if debug then
contrebasse@5 142 DEFAULT_CHAT_FRAME:AddMessage(event)
contrebasse@0 143 if arg1 then DEFAULT_CHAT_FRAME:AddMessage("arg1 = "..arg1); end
contrebasse@0 144 if arg2 then DEFAULT_CHAT_FRAME:AddMessage("arg2 = "..arg2); end
contrebasse@0 145 end
contrebasse@5 146 --@end-debug@
contrebasse@5 147
contrebasse@0 148 if ((events[event] and (type(events[event])~="function" or events[event]()))
contrebasse@0 149 or (events1player[event] and arg1=="player")
contrebasse@0 150 or (events2playername[event] and arg2==playername)) then
contrebasse@5 151 t_left = 2
contrebasse@5 152 done = false
contrebasse@5 153
contrebasse@0 154 elseif event == "PLAYER_REGEN_ENABLED" then
contrebasse@5 155 desactivate()
contrebasse@0 156 elseif event == "PLAYER_REGEN_DISABLED" then
contrebasse@5 157 activate()
contrebasse@5 158
contrebasse@0 159 elseif event == "ADDON_LOADED" and arg1==AddonName then
contrebasse@5 160 if Degaine_isAuto==nil then
contrebasse@5 161 Degaine_isAuto = true
contrebasse@0 162 end
contrebasse@5 163 if Degaine_isAuto then
contrebasse@5 164 activate()
contrebasse@0 165 else
contrebasse@5 166 desactivate()
contrebasse@0 167 end
contrebasse@5 168 printState()
contrebasse@5 169
contrebasse@5 170 -- Not needed anymore
contrebasse@5 171 DegaineFrame:UnregisterEvent("ADDON_LOADED")
contrebasse@0 172 end
contrebasse@0 173 end
contrebasse@5 174 -- Hook when standing up
contrebasse@5 175 -- (Didn't work, see http://forums.wowace.com/showthread.php?p=310547#post310547)
contrebasse@5 176 hooksecurefunc("SitStandOrDescendStart",function()
contrebasse@5 177 if Degaine_isAuto and not InCombatLockdown() then
contrebasse@5 178 t_left = 2
contrebasse@5 179 done = false
contrebasse@5 180 end
contrebasse@5 181 end)
contrebasse@0 182
contrebasse@0 183
contrebasse@5 184
contrebasse@5 185 ---------------------------------------------------------------
contrebasse@5 186 -- Initialization
contrebasse@5 187 ---------------------------------------------------------------
contrebasse@5 188 DegaineFrame:SetScript("OnEvent",Degaine_OnEvent)
contrebasse@5 189
contrebasse@5 190 -- Global events
contrebasse@5 191 DegaineFrame:RegisterEvent("PLAYER_REGEN_ENABLED")
contrebasse@5 192 DegaineFrame:RegisterEvent("PLAYER_REGEN_DISABLED")
contrebasse@5 193 DegaineFrame:RegisterEvent("ADDON_LOADED")
contrebasse@5 194 activate()