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@8
|
30 -- Local vars
|
contrebasse@8
|
31 ---------------------------------------------------------------
|
contrebasse@8
|
32 -- const
|
contrebasse@8
|
33 local DegaineFrame = CreateFrame("Frame")
|
contrebasse@8
|
34 local playername = UnitName("player")
|
contrebasse@8
|
35
|
contrebasse@8
|
36 -- vars
|
contrebasse@8
|
37 local done = true
|
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@0
|
84 if not done then
|
contrebasse@5
|
85 t_left = t_left - t_elapsed;
|
contrebasse@5
|
86 if t_left<=0 then
|
contrebasse@0
|
87 done = true;
|
contrebasse@0
|
88 ToggleSheath();
|
contrebasse@8
|
89 DegaineFrame:SetScript("OnUpdate", nil);
|
contrebasse@0
|
90 end
|
contrebasse@0
|
91 end
|
contrebasse@0
|
92 end
|
contrebasse@8
|
93 local start = function()
|
contrebasse@8
|
94 if Degaine_isAuto and not InCombatLockdown() then
|
contrebasse@8
|
95 t_left = delay
|
contrebasse@8
|
96 done = false
|
contrebasse@8
|
97 DegaineFrame:SetScript("OnUpdate", Degaine_OnUpdate);
|
contrebasse@8
|
98 end
|
contrebasse@8
|
99 end
|
contrebasse@5
|
100
|
contrebasse@5
|
101 ---------------------------------------------------------------
|
contrebasse@5
|
102 -- Activation functions
|
contrebasse@5
|
103 ---------------------------------------------------------------
|
contrebasse@5
|
104 local activate = function()
|
contrebasse@5
|
105 if (not Degaine_isAuto) or InCombatLockdown() then return end
|
contrebasse@5
|
106
|
contrebasse@9
|
107 --DegaineFrame:SetScript("OnUpdate", Degaine_OnUpdate);
|
contrebasse@5
|
108 --@debug@
|
contrebasse@5
|
109 if debug then
|
contrebasse@5
|
110 DegaineFrame:RegisterAllEvents();
|
contrebasse@5
|
111 else
|
contrebasse@5
|
112 --@end-debug@
|
contrebasse@5
|
113 for k,v in pairs(events) do DegaineFrame:RegisterEvent(k); end
|
contrebasse@5
|
114 for k,v in pairs(events1player) do DegaineFrame:RegisterEvent(k); end
|
contrebasse@5
|
115 for k,v in pairs(events2playername) do DegaineFrame:RegisterEvent(k); end
|
contrebasse@5
|
116 --@end-debug@
|
contrebasse@5
|
117 end
|
contrebasse@5
|
118 --@end-debug@
|
contrebasse@0
|
119 end
|
contrebasse@5
|
120 local desactivate = function()
|
contrebasse@5
|
121 for k,v in pairs(events) do DegaineFrame:UnregisterEvent(k); end
|
contrebasse@5
|
122 for k,v in pairs(events1player) do DegaineFrame:UnregisterEvent(k); end
|
contrebasse@5
|
123 for k,v in pairs(events2playername) do DegaineFrame:UnregisterEvent(k); end
|
contrebasse@0
|
124 DegaineFrame:SetScript("OnUpdate", nil);
|
contrebasse@0
|
125 done = true;
|
contrebasse@0
|
126 end
|
contrebasse@6
|
127 Degaine_ToggleAuto = function()
|
contrebasse@5
|
128 if Degaine_isAuto then
|
contrebasse@5
|
129 Degaine_isAuto = false
|
contrebasse@5
|
130 desactivate()
|
contrebasse@5
|
131 else
|
contrebasse@5
|
132 Degaine_isAuto = true
|
contrebasse@5
|
133 activate()
|
contrebasse@5
|
134 end
|
contrebasse@5
|
135 printState()
|
contrebasse@5
|
136 end
|
contrebasse@0
|
137
|
contrebasse@5
|
138
|
contrebasse@5
|
139 ---------------------------------------------------------------
|
contrebasse@5
|
140 -- Event/hooks functions
|
contrebasse@5
|
141 ---------------------------------------------------------------
|
contrebasse@5
|
142 local Degaine_OnEvent = function(self,event, arg1, arg2, ...)
|
contrebasse@5
|
143 --@debug@
|
contrebasse@0
|
144 if debug then
|
contrebasse@5
|
145 DEFAULT_CHAT_FRAME:AddMessage(event)
|
contrebasse@0
|
146 if arg1 then DEFAULT_CHAT_FRAME:AddMessage("arg1 = "..arg1); end
|
contrebasse@0
|
147 if arg2 then DEFAULT_CHAT_FRAME:AddMessage("arg2 = "..arg2); end
|
contrebasse@0
|
148 end
|
contrebasse@5
|
149 --@end-debug@
|
contrebasse@5
|
150
|
contrebasse@0
|
151 if ((events[event] and (type(events[event])~="function" or events[event]()))
|
contrebasse@0
|
152 or (events1player[event] and arg1=="player")
|
contrebasse@0
|
153 or (events2playername[event] and arg2==playername)) then
|
contrebasse@8
|
154 start()
|
contrebasse@5
|
155
|
contrebasse@0
|
156 elseif event == "PLAYER_REGEN_ENABLED" then
|
contrebasse@5
|
157 desactivate()
|
contrebasse@0
|
158 elseif event == "PLAYER_REGEN_DISABLED" then
|
contrebasse@5
|
159 activate()
|
contrebasse@5
|
160
|
contrebasse@0
|
161 elseif event == "ADDON_LOADED" and arg1==AddonName then
|
contrebasse@5
|
162 if Degaine_isAuto==nil then
|
contrebasse@5
|
163 Degaine_isAuto = true
|
contrebasse@0
|
164 end
|
contrebasse@8
|
165 if Degaine_isAuto then activate(); else desactivate(); end
|
contrebasse@5
|
166 printState()
|
contrebasse@5
|
167
|
contrebasse@5
|
168 -- Not needed anymore
|
contrebasse@5
|
169 DegaineFrame:UnregisterEvent("ADDON_LOADED")
|
contrebasse@0
|
170 end
|
contrebasse@0
|
171 end
|
contrebasse@5
|
172 -- Hook when standing up
|
contrebasse@5
|
173 -- (Didn't work, see http://forums.wowace.com/showthread.php?p=310547#post310547)
|
contrebasse@8
|
174 hooksecurefunc("SitStandOrDescendStart",start);
|
contrebasse@0
|
175
|
contrebasse@0
|
176
|
contrebasse@6
|
177 ---------------------------------------------------------------
|
contrebasse@6
|
178 -- Commands
|
contrebasse@6
|
179 ---------------------------------------------------------------
|
contrebasse@6
|
180 -- Bindings
|
contrebasse@6
|
181 BINDING_HEADER_DEGAINE = "Dégainer automatiquement"
|
contrebasse@6
|
182
|
contrebasse@6
|
183 -- Slash command
|
contrebasse@7
|
184 -- GLOBALS: SLASH_DEGAINE1
|
contrebasse@7
|
185 SLASH_DEGAINE1 = "/degaine"
|
contrebasse@6
|
186 SlashCmdList["DEGAINE"] = Degaine_ToggleAuto
|
contrebasse@6
|
187
|
contrebasse@5
|
188
|
contrebasse@5
|
189 ---------------------------------------------------------------
|
contrebasse@5
|
190 -- Initialization
|
contrebasse@5
|
191 ---------------------------------------------------------------
|
contrebasse@5
|
192 DegaineFrame:SetScript("OnEvent",Degaine_OnEvent)
|
contrebasse@5
|
193
|
contrebasse@5
|
194 -- Global events
|
contrebasse@5
|
195 DegaineFrame:RegisterEvent("PLAYER_REGEN_ENABLED")
|
contrebasse@5
|
196 DegaineFrame:RegisterEvent("PLAYER_REGEN_DISABLED")
|
contrebasse@5
|
197 DegaineFrame:RegisterEvent("ADDON_LOADED")
|
contrebasse@5
|
198 activate()
|