annotate Degaine.lua @ 13:7b1f3a9cba48

Added tradeskills to blacklist
author contrebasse
date Fri, 10 Dec 2010 17:26:46 +0100
parents 9f8a4f3c8641
children c627cef1c6d6
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@13 12 local debug = true
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@13 76
contrebasse@13 77 -- Tradeskill spells
contrebasse@13 78 [2259] = true, -- Alchemy
contrebasse@13 79 [45357] = true, -- Inscription
contrebasse@13 80 [3908] = true, -- Tailoring
contrebasse@13 81 [7411] = true, -- Enchanting
contrebasse@13 82 [2018] = true, -- Blacksmithing
contrebasse@13 83 [4036] = true, -- Engineering
contrebasse@13 84 [25229] = true, -- Jewelcrafting
contrebasse@13 85 [2656] = true, -- Smelting
contrebasse@13 86 [2108] = true, -- Leatherworking
contrebasse@13 87 [2550] = true, -- Cooking
contrebasse@13 88 [3273] = true, -- First Aid
contrebasse@13 89 [53428] = true -- Runeforge
contrebasse@13 90 -- Archaeology ?
contrebasse@12 91 }
contrebasse@5 92 local events2playername = { -- the 2nd arg is playername
contrebasse@5 93 CHAT_MSG_SAY = true,
contrebasse@5 94 CHAT_MSG_YELL = true,
contrebasse@5 95 CHAT_MSG_TEXT_EMOTE = true,
contrebasse@5 96 }
contrebasse@0 97
contrebasse@0 98
contrebasse@5 99 ---------------------------------------------------------------
contrebasse@8 100 -- Launch drawing weapons
contrebasse@5 101 ---------------------------------------------------------------
contrebasse@5 102 -- Wait a few seconds before drawing, to be able to see the curren animation (and avoid bugs)
contrebasse@5 103 local Degaine_OnUpdate = function(self,t_elapsed)
contrebasse@10 104 t_left = t_left - t_elapsed;
contrebasse@10 105 if t_left<=0 then
contrebasse@11 106 ToggleSheath()
contrebasse@11 107 DegaineFrame:SetScript("OnUpdate", nil)
contrebasse@0 108 end
contrebasse@0 109 end
contrebasse@8 110 local start = function()
contrebasse@8 111 if Degaine_isAuto and not InCombatLockdown() then
contrebasse@8 112 t_left = delay
contrebasse@11 113 DegaineFrame:SetScript("OnUpdate", Degaine_OnUpdate)
contrebasse@8 114 end
contrebasse@8 115 end
contrebasse@5 116
contrebasse@12 117
contrebasse@5 118 ---------------------------------------------------------------
contrebasse@5 119 -- Activation functions
contrebasse@5 120 ---------------------------------------------------------------
contrebasse@5 121 local activate = function()
contrebasse@5 122 if (not Degaine_isAuto) or InCombatLockdown() then return end
contrebasse@5 123
contrebasse@9 124 --DegaineFrame:SetScript("OnUpdate", Degaine_OnUpdate);
contrebasse@5 125 --@debug@
contrebasse@5 126 if debug then
contrebasse@11 127 DegaineFrame:RegisterAllEvents()
contrebasse@5 128 else
contrebasse@5 129 --@end-debug@
contrebasse@11 130 for k,v in pairs(events) do DegaineFrame:RegisterEvent(k) end
contrebasse@11 131 for k,v in pairs(events1player) do DegaineFrame:RegisterEvent(k) end
contrebasse@11 132 for k,v in pairs(events2playername) do DegaineFrame:RegisterEvent(k) end
contrebasse@5 133 --@end-debug@
contrebasse@5 134 end
contrebasse@5 135 --@end-debug@
contrebasse@0 136 end
contrebasse@5 137 local desactivate = function()
contrebasse@11 138 for k,v in pairs(events) do DegaineFrame:UnregisterEvent(k) end
contrebasse@11 139 for k,v in pairs(events1player) do DegaineFrame:UnregisterEvent(k) end
contrebasse@11 140 for k,v in pairs(events2playername) do DegaineFrame:UnregisterEvent(k) end
contrebasse@11 141 DegaineFrame:SetScript("OnUpdate", nil)
contrebasse@0 142 end
contrebasse@6 143 Degaine_ToggleAuto = function()
contrebasse@5 144 if Degaine_isAuto then
contrebasse@5 145 Degaine_isAuto = false
contrebasse@5 146 desactivate()
contrebasse@5 147 else
contrebasse@5 148 Degaine_isAuto = true
contrebasse@5 149 activate()
contrebasse@5 150 end
contrebasse@5 151 printState()
contrebasse@5 152 end
contrebasse@0 153
contrebasse@5 154
contrebasse@5 155 ---------------------------------------------------------------
contrebasse@5 156 -- Event/hooks functions
contrebasse@5 157 ---------------------------------------------------------------
contrebasse@12 158 local Degaine_OnEvent = function(self,event, arg1, arg2, _, _, arg5, ...)
contrebasse@5 159 --@debug@
contrebasse@0 160 if debug then
contrebasse@5 161 DEFAULT_CHAT_FRAME:AddMessage(event)
contrebasse@11 162 if arg1 then DEFAULT_CHAT_FRAME:AddMessage("arg1 = "..arg1) end
contrebasse@11 163 if arg2 then DEFAULT_CHAT_FRAME:AddMessage("arg2 = "..arg2) end
contrebasse@0 164 end
contrebasse@5 165 --@end-debug@
contrebasse@5 166
contrebasse@12 167 if events[event] then
contrebasse@12 168 if type(events[event])~="function" or events[event]() then
contrebasse@12 169 start()
contrebasse@12 170 end
contrebasse@12 171 elseif events1player[event] then
contrebasse@12 172 if arg1=="player" then
contrebasse@12 173 if not SpellBlackList[arg5] then -- arg5 is SpellID
contrebasse@12 174 start()
contrebasse@12 175 end
contrebasse@12 176 end
contrebasse@12 177 elseif events2playername[event] then
contrebasse@12 178 if arg2==playername then
contrebasse@12 179 start()
contrebasse@12 180 end
contrebasse@5 181
contrebasse@0 182 elseif event == "PLAYER_REGEN_ENABLED" then
contrebasse@5 183 desactivate()
contrebasse@0 184 elseif event == "PLAYER_REGEN_DISABLED" then
contrebasse@5 185 activate()
contrebasse@5 186
contrebasse@0 187 elseif event == "ADDON_LOADED" and arg1==AddonName then
contrebasse@5 188 if Degaine_isAuto==nil then
contrebasse@5 189 Degaine_isAuto = true
contrebasse@0 190 end
contrebasse@11 191 if Degaine_isAuto then activate() else desactivate() end
contrebasse@5 192 printState()
contrebasse@5 193
contrebasse@5 194 -- Not needed anymore
contrebasse@5 195 DegaineFrame:UnregisterEvent("ADDON_LOADED")
contrebasse@0 196 end
contrebasse@0 197 end
contrebasse@5 198 -- Hook when standing up
contrebasse@5 199 -- (Didn't work, see http://forums.wowace.com/showthread.php?p=310547#post310547)
contrebasse@8 200 hooksecurefunc("SitStandOrDescendStart",start);
contrebasse@0 201
contrebasse@0 202
contrebasse@6 203 ---------------------------------------------------------------
contrebasse@6 204 -- Commands
contrebasse@6 205 ---------------------------------------------------------------
contrebasse@6 206 -- Bindings
contrebasse@6 207 BINDING_HEADER_DEGAINE = "Dégainer automatiquement"
contrebasse@6 208
contrebasse@6 209 -- Slash command
contrebasse@7 210 -- GLOBALS: SLASH_DEGAINE1
contrebasse@7 211 SLASH_DEGAINE1 = "/degaine"
contrebasse@6 212 SlashCmdList["DEGAINE"] = Degaine_ToggleAuto
contrebasse@6 213
contrebasse@5 214
contrebasse@5 215 ---------------------------------------------------------------
contrebasse@5 216 -- Initialization
contrebasse@5 217 ---------------------------------------------------------------
contrebasse@5 218 DegaineFrame:SetScript("OnEvent",Degaine_OnEvent)
contrebasse@5 219
contrebasse@5 220 -- Global events
contrebasse@5 221 DegaineFrame:RegisterEvent("PLAYER_REGEN_ENABLED")
contrebasse@5 222 DegaineFrame:RegisterEvent("PLAYER_REGEN_DISABLED")
contrebasse@5 223 DegaineFrame:RegisterEvent("ADDON_LOADED")
contrebasse@5 224 activate()
contrebasse@12 225