annotate Degaine.lua @ 6:120f29645e34

Do not forget to change function's name in Bindings.xml
author contrebasse
date Fri, 10 Dec 2010 16:18:40 +0100
parents 66640a8f1cbd
children f8198806d261
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@6 15 -- GLOBALS: Degaine_ToggleAuto, 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 -- Timer
contrebasse@5 80 ---------------------------------------------------------------
contrebasse@5 81 -- Wait a few seconds before drawing, to be able to see the curren animation (and avoid bugs)
contrebasse@5 82 local Degaine_OnUpdate = function(self,t_elapsed)
contrebasse@0 83 if not done then
contrebasse@5 84 t_left = t_left - t_elapsed;
contrebasse@5 85 if t_left<=0 then
contrebasse@0 86 done = true;
contrebasse@0 87 ToggleSheath();
contrebasse@0 88 end
contrebasse@0 89 end
contrebasse@0 90 end
contrebasse@0 91
contrebasse@5 92
contrebasse@5 93 ---------------------------------------------------------------
contrebasse@5 94 -- Activation functions
contrebasse@5 95 ---------------------------------------------------------------
contrebasse@5 96 local activate = function()
contrebasse@5 97 if (not Degaine_isAuto) or InCombatLockdown() then return end
contrebasse@5 98
contrebasse@5 99 DegaineFrame:SetScript("OnUpdate", Degaine_OnUpdate);
contrebasse@5 100 --@debug@
contrebasse@5 101 if debug then
contrebasse@5 102 DegaineFrame:RegisterAllEvents();
contrebasse@5 103 else
contrebasse@5 104 --@end-debug@
contrebasse@5 105 for k,v in pairs(events) do DegaineFrame:RegisterEvent(k); end
contrebasse@5 106 for k,v in pairs(events1player) do DegaineFrame:RegisterEvent(k); end
contrebasse@5 107 for k,v in pairs(events2playername) do DegaineFrame:RegisterEvent(k); end
contrebasse@5 108 --@end-debug@
contrebasse@5 109 end
contrebasse@5 110 --@end-debug@
contrebasse@0 111 end
contrebasse@5 112 local desactivate = function()
contrebasse@5 113 for k,v in pairs(events) do DegaineFrame:UnregisterEvent(k); end
contrebasse@5 114 for k,v in pairs(events1player) do DegaineFrame:UnregisterEvent(k); end
contrebasse@5 115 for k,v in pairs(events2playername) do DegaineFrame:UnregisterEvent(k); end
contrebasse@0 116 DegaineFrame:SetScript("OnUpdate", nil);
contrebasse@0 117 done = true;
contrebasse@0 118 end
contrebasse@6 119 Degaine_ToggleAuto = function()
contrebasse@5 120 if Degaine_isAuto then
contrebasse@5 121 Degaine_isAuto = false
contrebasse@5 122 desactivate()
contrebasse@5 123 else
contrebasse@5 124 Degaine_isAuto = true
contrebasse@5 125 activate()
contrebasse@5 126 end
contrebasse@5 127 printState()
contrebasse@5 128 end
contrebasse@0 129
contrebasse@5 130
contrebasse@5 131 ---------------------------------------------------------------
contrebasse@5 132 -- Event/hooks functions
contrebasse@5 133 ---------------------------------------------------------------
contrebasse@5 134 local Degaine_OnEvent = function(self,event, arg1, arg2, ...)
contrebasse@5 135 --@debug@
contrebasse@0 136 if debug then
contrebasse@5 137 DEFAULT_CHAT_FRAME:AddMessage(event)
contrebasse@0 138 if arg1 then DEFAULT_CHAT_FRAME:AddMessage("arg1 = "..arg1); end
contrebasse@0 139 if arg2 then DEFAULT_CHAT_FRAME:AddMessage("arg2 = "..arg2); end
contrebasse@0 140 end
contrebasse@5 141 --@end-debug@
contrebasse@5 142
contrebasse@0 143 if ((events[event] and (type(events[event])~="function" or events[event]()))
contrebasse@0 144 or (events1player[event] and arg1=="player")
contrebasse@0 145 or (events2playername[event] and arg2==playername)) then
contrebasse@5 146 t_left = 2
contrebasse@5 147 done = false
contrebasse@5 148
contrebasse@0 149 elseif event == "PLAYER_REGEN_ENABLED" then
contrebasse@5 150 desactivate()
contrebasse@0 151 elseif event == "PLAYER_REGEN_DISABLED" then
contrebasse@5 152 activate()
contrebasse@5 153
contrebasse@0 154 elseif event == "ADDON_LOADED" and arg1==AddonName then
contrebasse@5 155 if Degaine_isAuto==nil then
contrebasse@5 156 Degaine_isAuto = true
contrebasse@0 157 end
contrebasse@5 158 if Degaine_isAuto then
contrebasse@5 159 activate()
contrebasse@0 160 else
contrebasse@5 161 desactivate()
contrebasse@0 162 end
contrebasse@5 163 printState()
contrebasse@5 164
contrebasse@5 165 -- Not needed anymore
contrebasse@5 166 DegaineFrame:UnregisterEvent("ADDON_LOADED")
contrebasse@0 167 end
contrebasse@0 168 end
contrebasse@5 169 -- Hook when standing up
contrebasse@5 170 -- (Didn't work, see http://forums.wowace.com/showthread.php?p=310547#post310547)
contrebasse@5 171 hooksecurefunc("SitStandOrDescendStart",function()
contrebasse@5 172 if Degaine_isAuto and not InCombatLockdown() then
contrebasse@5 173 t_left = 2
contrebasse@5 174 done = false
contrebasse@5 175 end
contrebasse@5 176 end)
contrebasse@0 177
contrebasse@0 178
contrebasse@6 179 ---------------------------------------------------------------
contrebasse@6 180 -- Commands
contrebasse@6 181 ---------------------------------------------------------------
contrebasse@6 182 -- Bindings
contrebasse@6 183 BINDING_HEADER_DEGAINE = "Dégainer automatiquement"
contrebasse@6 184
contrebasse@6 185 -- Slash command
contrebasse@6 186 -- GLOBALS: SLASH_DEGAINE
contrebasse@6 187 SLASH_DEGAINE = "/degaine"
contrebasse@6 188 SlashCmdList["DEGAINE"] = Degaine_ToggleAuto
contrebasse@6 189
contrebasse@5 190
contrebasse@5 191 ---------------------------------------------------------------
contrebasse@5 192 -- Initialization
contrebasse@5 193 ---------------------------------------------------------------
contrebasse@5 194 DegaineFrame:SetScript("OnEvent",Degaine_OnEvent)
contrebasse@5 195
contrebasse@5 196 -- Global events
contrebasse@5 197 DegaineFrame:RegisterEvent("PLAYER_REGEN_ENABLED")
contrebasse@5 198 DegaineFrame:RegisterEvent("PLAYER_REGEN_DISABLED")
contrebasse@5 199 DegaineFrame:RegisterEvent("ADDON_LOADED")
contrebasse@5 200 activate()