contrebasse@0
|
1 local AddonName = ...
|
contrebasse@0
|
2 -- Dégaine auto des armes
|
contrebasse@0
|
3
|
contrebasse@0
|
4 -- BUGS connus :
|
contrebasse@0
|
5 -- le camouflage du voleur ne rentre pas l'arme
|
contrebasse@0
|
6 -- si on se lève en sautant ça ne sort pas l'arme (impossible de savoir si on était assis avant)
|
contrebasse@0
|
7
|
contrebasse@0
|
8 -- DEBUG
|
contrebasse@0
|
9 local debug = false;
|
contrebasse@0
|
10
|
contrebasse@0
|
11 -- Fonctions globales en local
|
contrebasse@0
|
12 -- GLOBALS: ToggleAutoDegaine, isDegaineAuto, BINDING_HEADER_DEGAINE
|
contrebasse@0
|
13 local GossipFrame = GossipFrame;
|
contrebasse@0
|
14 local DEFAULT_CHAT_FRAME = DEFAULT_CHAT_FRAME;
|
contrebasse@0
|
15 local InCombatLockdown = InCombatLockdown;
|
contrebasse@0
|
16 local ToggleSheath = ToggleSheath;
|
contrebasse@0
|
17
|
contrebasse@0
|
18 local pairs = pairs;
|
contrebasse@0
|
19 local type = type;
|
contrebasse@0
|
20
|
contrebasse@0
|
21 -- Pour les raccourcis
|
contrebasse@0
|
22 -- Cf Bindings.xml pour les raccourcis eux-mêmes
|
contrebasse@0
|
23 BINDING_HEADER_DEGAINE = "Dégainer automatiquement";
|
contrebasse@0
|
24
|
contrebasse@0
|
25 -- Variables locales
|
contrebasse@0
|
26 local DegaineFrame = CreateFrame("Frame");
|
contrebasse@0
|
27 local playername = UnitName("player");
|
contrebasse@0
|
28 local done = true;
|
contrebasse@0
|
29 local t_restant = -1;
|
contrebasse@0
|
30
|
contrebasse@0
|
31 -- Configuration des events à regarder
|
contrebasse@0
|
32 local events = { -- events sans arguments à voir
|
contrebasse@0
|
33 GOSSIP_SHOW = true,
|
contrebasse@0
|
34 MERCHANT_SHOW = function() return GossipFrame:IsShown(); end,
|
contrebasse@0
|
35 BANKFRAME_OPENED = true; --function() return GossipFrame:IsShown(); end,
|
contrebasse@0
|
36 AUCTION_HOUSE_SHOW = true,
|
contrebasse@0
|
37 };
|
contrebasse@0
|
38 local events1player = { -- events dont le 1er argument doit être le joueur
|
contrebasse@0
|
39 UNIT_SPELLCAST_FAILED = true;
|
contrebasse@0
|
40 UNIT_SPELLCAST_INTERRUPTED = true;
|
contrebasse@0
|
41 UNIT_SPELLCAST_SUCCEEDED = true;
|
contrebasse@0
|
42 };
|
contrebasse@0
|
43 local events2playername = { -- events dont le 2e argument doit être le joueur
|
contrebasse@0
|
44 CHAT_MSG_SAY = true;
|
contrebasse@0
|
45 CHAT_MSG_YELL = true;
|
contrebasse@0
|
46 CHAT_MSG_TEXT_EMOTE = true;
|
contrebasse@0
|
47 };
|
contrebasse@0
|
48
|
contrebasse@0
|
49 -- Fonctions d'activation/désactivation des events
|
contrebasse@0
|
50 local registerEvents = function()
|
contrebasse@0
|
51 --if debug then
|
contrebasse@0
|
52 -- DEBUG
|
contrebasse@0
|
53 -- DegaineFrame:RegisterAllEvents();
|
contrebasse@0
|
54 --else
|
contrebasse@0
|
55 for k,v in pairs(events) do DegaineFrame:RegisterEvent(k); end
|
contrebasse@0
|
56 for k,v in pairs(events1player) do DegaineFrame:RegisterEvent(k); end
|
contrebasse@0
|
57 for k,v in pairs(events2playername) do DegaineFrame:RegisterEvent(k); end
|
contrebasse@0
|
58 --end
|
contrebasse@0
|
59 end -- function
|
contrebasse@0
|
60 local unregisterEvents = function()
|
contrebasse@0
|
61 if not debug then
|
contrebasse@0
|
62 for k,v in pairs(events) do DegaineFrame:UnregisterEvent(k); end
|
contrebasse@0
|
63 for k,v in pairs(events1player) do DegaineFrame:UnregisterEvent(k); end
|
contrebasse@0
|
64 for k,v in pairs(events2playername) do DegaineFrame:UnregisterEvent(k); end
|
contrebasse@0
|
65 end
|
contrebasse@0
|
66 end -- function
|
contrebasse@0
|
67
|
contrebasse@0
|
68 -- Fonction de timer
|
contrebasse@0
|
69 -- On attend un petit délai avant de dégainer, pour voir l'animation et éviter que ça bug
|
contrebasse@0
|
70 local OnUpdate = function(self,t_ecoule)
|
contrebasse@0
|
71 if not done then
|
contrebasse@0
|
72 t_restant = t_restant - t_ecoule;
|
contrebasse@0
|
73 if t_restant<=0 then
|
contrebasse@0
|
74 done = true;
|
contrebasse@0
|
75 ToggleSheath();
|
contrebasse@0
|
76 end
|
contrebasse@0
|
77 end
|
contrebasse@0
|
78 end
|
contrebasse@0
|
79
|
contrebasse@0
|
80 -- Fonctions d'activation/désactivation
|
contrebasse@0
|
81 local activer = function()
|
contrebasse@0
|
82 if (not isDegaineAuto) or InCombatLockdown() then return end
|
contrebasse@0
|
83
|
contrebasse@0
|
84 DegaineFrame:SetScript("OnUpdate", OnUpdate);
|
contrebasse@0
|
85 registerEvents();
|
contrebasse@0
|
86 end
|
contrebasse@0
|
87 local desactiver = function()
|
contrebasse@0
|
88 -- Désactivation
|
contrebasse@0
|
89 unregisterEvents();
|
contrebasse@0
|
90 DegaineFrame:SetScript("OnUpdate", nil);
|
contrebasse@0
|
91 done = true;
|
contrebasse@0
|
92 end
|
contrebasse@0
|
93
|
contrebasse@0
|
94 -- Fonctions
|
contrebasse@0
|
95 local printState = function()
|
contrebasse@0
|
96 DEFAULT_CHAT_FRAME:AddMessage(isDegaineAuto and "Dégainage automatique |cFF00FF00activé|r" or "Dégainage automatique |cFFFF0000désactivé|r");
|
contrebasse@0
|
97 end
|
contrebasse@0
|
98 local OnEvent = function(self,event, arg1, arg2, ...)
|
contrebasse@0
|
99 if debug then
|
contrebasse@0
|
100 DEFAULT_CHAT_FRAME:AddMessage(event);
|
contrebasse@0
|
101 if arg1 then DEFAULT_CHAT_FRAME:AddMessage("arg1 = "..arg1); end
|
contrebasse@0
|
102 if arg2 then DEFAULT_CHAT_FRAME:AddMessage("arg2 = "..arg2); end
|
contrebasse@0
|
103 end
|
contrebasse@0
|
104
|
contrebasse@0
|
105 if ((events[event] and (type(events[event])~="function" or events[event]()))
|
contrebasse@0
|
106 or (events1player[event] and arg1=="player")
|
contrebasse@0
|
107 or (events2playername[event] and arg2==playername)) then
|
contrebasse@0
|
108 t_restant = 2;
|
contrebasse@0
|
109 done = false;
|
contrebasse@0
|
110 elseif event == "PLAYER_REGEN_ENABLED" then
|
contrebasse@0
|
111 desactiver();
|
contrebasse@0
|
112 elseif event == "PLAYER_REGEN_DISABLED" then
|
contrebasse@0
|
113 activer();
|
contrebasse@0
|
114 elseif event == "ADDON_LOADED" and arg1==AddonName then
|
contrebasse@0
|
115 if isDegaineAuto==nil then
|
contrebasse@0
|
116 isDegaineAuto = true;
|
contrebasse@0
|
117 end
|
contrebasse@0
|
118 if isDegaineAuto then
|
contrebasse@0
|
119 activer();
|
contrebasse@0
|
120 else
|
contrebasse@0
|
121 desactiver();
|
contrebasse@0
|
122 end
|
contrebasse@0
|
123 printState();
|
contrebasse@0
|
124 end
|
contrebasse@0
|
125 end
|
contrebasse@0
|
126
|
contrebasse@0
|
127 -- Pour mettre le dégainage auto on/off TODO
|
contrebasse@0
|
128 ToggleAutoDegaine = function()
|
contrebasse@0
|
129 if isDegaineAuto then
|
contrebasse@0
|
130 isDegaineAuto = false;
|
contrebasse@0
|
131 desactiver();
|
contrebasse@0
|
132 else
|
contrebasse@0
|
133 isDegaineAuto = true;
|
contrebasse@0
|
134 activer();
|
contrebasse@0
|
135 end
|
contrebasse@0
|
136 printState();
|
contrebasse@0
|
137 end
|
contrebasse@0
|
138
|
contrebasse@0
|
139 -- Enregistrement des events et activation
|
contrebasse@0
|
140 DegaineFrame:RegisterEvent("PLAYER_REGEN_ENABLED");
|
contrebasse@0
|
141 DegaineFrame:RegisterEvent("PLAYER_REGEN_DISABLED");
|
contrebasse@0
|
142 DegaineFrame:RegisterEvent("ADDON_LOADED");
|
contrebasse@0
|
143 DegaineFrame:SetScript("OnEvent",OnEvent);
|
contrebasse@0
|
144 -- ça ne marche pas... question posée sur http://forums.wowace.com/showthread.php?p=310547#post310547
|
contrebasse@0
|
145 hooksecurefunc("SitStandOrDescendStart",function() if isDegaineAuto and not InCombatLockdown() then t_restant = 2; done = false; end; end);
|
contrebasse@0
|
146 activer();
|