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
|