changeset 0:97422a3e11c9

Initial commit, woot !
author contrebasse
date Wed, 08 Dec 2010 21:29:27 +0100
parents
children 5d8813a622d1
files .hgignore Bindings.xml Degaine.lua Degaine.toc
diffstat 4 files changed, 164 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.hgignore	Wed Dec 08 21:29:27 2010 +0100
@@ -0,0 +1,2 @@
+syntax: glob
+*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Bindings.xml	Wed Dec 08 21:29:27 2010 +0100
@@ -0,0 +1,8 @@
+<Bindings>
+	<Binding name="Activer/désactiver" header="DEGAINE">
+		ToggleAutoDegaine();
+	</Binding>
+	<!--Binding name="Afficher les métiers">
+		TweakMetiers()
+	</Binding-->
+</Bindings>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Degaine.lua	Wed Dec 08 21:29:27 2010 +0100
@@ -0,0 +1,146 @@
+local AddonName = ...
+-- Dégaine auto des armes
+
+-- BUGS connus :
+-- le camouflage du voleur ne rentre pas l'arme 
+-- si on se lève en sautant ça ne sort pas l'arme (impossible de savoir si on était assis avant)
+
+-- DEBUG
+local debug = false;
+
+-- Fonctions globales en local
+-- GLOBALS: ToggleAutoDegaine, isDegaineAuto, BINDING_HEADER_DEGAINE
+local GossipFrame = GossipFrame;
+local DEFAULT_CHAT_FRAME = DEFAULT_CHAT_FRAME;
+local InCombatLockdown = InCombatLockdown;
+local ToggleSheath = ToggleSheath;
+
+local pairs = pairs;
+local type = type;
+
+-- Pour les raccourcis
+-- Cf Bindings.xml pour les raccourcis eux-mêmes
+BINDING_HEADER_DEGAINE = "Dégainer automatiquement";
+
+-- Variables locales
+local DegaineFrame = CreateFrame("Frame");
+local playername = UnitName("player");
+local done = true;
+local t_restant = -1;
+
+-- Configuration des events à regarder
+local events = { -- events sans arguments à voir
+	GOSSIP_SHOW = true,
+	MERCHANT_SHOW = function() return GossipFrame:IsShown(); end,
+	BANKFRAME_OPENED = true; --function() return GossipFrame:IsShown(); end,
+	AUCTION_HOUSE_SHOW = true,
+};
+local events1player = { -- events dont le 1er argument doit être le joueur
+	UNIT_SPELLCAST_FAILED = true;
+	UNIT_SPELLCAST_INTERRUPTED = true;
+	UNIT_SPELLCAST_SUCCEEDED = true;
+};
+local events2playername = { -- events dont le 2e argument doit être le joueur
+	CHAT_MSG_SAY = true;
+	CHAT_MSG_YELL = true;
+	CHAT_MSG_TEXT_EMOTE = true;
+};
+
+-- Fonctions d'activation/désactivation des events
+local registerEvents = function()
+	--if debug then
+		-- DEBUG
+	--	DegaineFrame:RegisterAllEvents();
+	--else
+		for k,v in pairs(events) do DegaineFrame:RegisterEvent(k); end
+		for k,v in pairs(events1player) do DegaineFrame:RegisterEvent(k); end
+		for k,v in pairs(events2playername) do DegaineFrame:RegisterEvent(k); end
+	--end
+end -- function
+local unregisterEvents = function()
+	if not debug then
+		for k,v in pairs(events) do DegaineFrame:UnregisterEvent(k); end
+		for k,v in pairs(events1player) do DegaineFrame:UnregisterEvent(k); end
+		for k,v in pairs(events2playername) do DegaineFrame:UnregisterEvent(k); end
+	end
+end -- function
+
+-- Fonction de timer
+-- On attend un petit délai avant de dégainer, pour voir l'animation et éviter que ça bug
+local OnUpdate = function(self,t_ecoule)
+	if not done then
+		t_restant = t_restant - t_ecoule;
+		if t_restant<=0 then
+			done = true;
+			ToggleSheath();
+		end
+	end
+end
+
+-- Fonctions d'activation/désactivation
+local activer = function()
+	if (not isDegaineAuto) or InCombatLockdown() then return end
+	
+	DegaineFrame:SetScript("OnUpdate", OnUpdate);
+	registerEvents();
+end
+local desactiver = function()
+	-- Désactivation
+	unregisterEvents();
+	DegaineFrame:SetScript("OnUpdate", nil);
+	done = true;
+end
+
+-- Fonctions
+local printState = function()
+	DEFAULT_CHAT_FRAME:AddMessage(isDegaineAuto and "Dégainage automatique |cFF00FF00activé|r" or "Dégainage automatique |cFFFF0000désactivé|r");
+end
+local OnEvent = function(self,event, arg1, arg2, ...)	
+	if debug then
+		DEFAULT_CHAT_FRAME:AddMessage(event);
+		if arg1 then DEFAULT_CHAT_FRAME:AddMessage("arg1 = "..arg1); end
+		if arg2 then DEFAULT_CHAT_FRAME:AddMessage("arg2 = "..arg2); end
+	end
+	
+	if ((events[event] and (type(events[event])~="function" or events[event]()))
+			or (events1player[event] and arg1=="player")
+			or (events2playername[event] and arg2==playername)) then
+		t_restant = 2;
+		done = false;
+	elseif event == "PLAYER_REGEN_ENABLED" then
+		desactiver();
+	elseif event == "PLAYER_REGEN_DISABLED" then
+		activer();
+	elseif event == "ADDON_LOADED" and arg1==AddonName then
+		if isDegaineAuto==nil then
+			isDegaineAuto = true;
+		end
+		if isDegaineAuto then
+			activer();
+		else
+			desactiver();
+		end
+		printState();
+	end
+end
+
+-- Pour mettre le dégainage auto on/off TODO
+ToggleAutoDegaine = function()
+	if isDegaineAuto then
+		isDegaineAuto = false;
+		desactiver();
+	else
+		isDegaineAuto = true;
+		activer();
+	end
+	printState();
+end
+
+-- Enregistrement des events et activation
+DegaineFrame:RegisterEvent("PLAYER_REGEN_ENABLED");
+DegaineFrame:RegisterEvent("PLAYER_REGEN_DISABLED");
+DegaineFrame:RegisterEvent("ADDON_LOADED");
+DegaineFrame:SetScript("OnEvent",OnEvent);
+-- ça ne marche pas... question posée sur http://forums.wowace.com/showthread.php?p=310547#post310547
+hooksecurefunc("SitStandOrDescendStart",function() if isDegaineAuto and not InCombatLockdown() then t_restant = 2; done = false; end; end);
+activer();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Degaine.toc	Wed Dec 08 21:29:27 2010 +0100
@@ -0,0 +1,8 @@
+## Interface: 40000
+## Title: Degaine
+## DefaultState: enabled
+## Author: Nodd Tisse-Airain
+## Version: 3
+## SavedVariablesPerCharacter: isDegaineAuto
+
+Degaine.lua