annotate Degaine.lua @ 12:9f8a4f3c8641

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