annotate Degaine.lua @ 10:37ac0d31cf0e

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