Wumbaloo Posted September 9, 2015 Share Posted September 9, 2015 Salut, j'ai un script assez complexe qui permet d'afficher/faire disparaitre un text sur mon HUD, tout fonctionne parfaitement, seulement, le debugscript est spammé de ".. function is already handled" Avez vous des idées pour checker si une function est déjà handled? J'ai essayé avec des variables, mais c'est assez complexe, je me perds à force et je n'y arrive pas, alors, pour me clarifier tout ça et me donner quelques pistes/soluces, j'ai besoin de vous! Petites infos: ma fonction est exportée et appellée d'une autre ressource, aucun argument n'est présent, une fonction remove l'event handler, l'autre, l'ajoute. EDIT: c'est qu'un warning qui est spammé, rien de grave mais ça peut peut-être faire laguer OU rendre illisible si une erreur au niveau script apparait. Link to comment
Moderators Citizen Posted September 9, 2015 Moderators Share Posted September 9, 2015 Oui tu as raison, mieux vaut supprimer ces warnings. Et bah malgré mon expérience, je n'avais jamais vu/entendu parlé de cette erreur, première fois que je la vois Mais j'ai bien compris que c'est lorsqu'on essaye de faire le même addEventHandler sur le même event avec la même fonction. Si les 2 fonctions sont au même endroit, tu peux te mettre une variable que tu passes à true dans la fonction qui fait le addEventHandler et à false dans la fonction qui fait le removeEventHandler. Sinon avec la fonction getEventHandlers il est possible de faire une fonction pour savoir s'il une fonction est déjà le handler d'un event via une source donnée. Et par chance, cette fonction à été faite dans l'exemple: function isEventHandlerAdded( sEventName, pElementAttachedTo, func ) if type( sEventName ) == 'string' and isElement( pElementAttachedTo ) and type( func ) == 'function' then local aAttachedFunctions = getEventHandlers( sEventName, pElementAttachedTo ) if type( aAttachedFunctions ) == 'table' and #aAttachedFunctions > 0 then for i, v in ipairs( aAttachedFunctions ) do if v == func then return true end end end end return false end Link to comment
Wumbaloo Posted September 10, 2015 Author Share Posted September 10, 2015 Oui, mais je comprends pas comment structuer le fait que la variable passe à true ou false, parce que: voici mes deux fonctions, la première affiche, la seconde l'enlève. function afficherVie() dxDrawText( ""..health.." %", x/0.628, y/9.2, x/4, y/30, tocolor( 255,255,255, 255 ), 1, "default-bold-small", "center") addEventHandler("onClientRender", root, afficherVie) end addEventHandler("onClientRender", root, afficherVie) function displayHealthNumber() removeEventHandler("onClientRender", root, afficherVie) end Mais, si je fais un système de variable, il faudrait que lorsque j'export la fonction, qu'elle s'exporte avec un argument genre, si je lui demande d'afficher le texte, alors il lance l'event handler de afficherVie mais avec un argument, et si l'argument est true, alors, il affiche, sinon, il return Je pense que c'est comme ça qu'il faut faire non? ça reste la méthode la plus simple Link to comment
Moderators Citizen Posted September 10, 2015 Moderators Share Posted September 10, 2015 Oula oui en effet, y a bien plus simple, il suffit de faire 1 fonction qui va juste se charger de faire les dxDraw et qui va être appelé en boucle via l'event "onClientRender" et 2 autres fonctions qui vont juste servir à ajouter ou retirer l'event: function renderingVie() -- j'imagine que tu get la vie du joueur au-dessus dxDrawText( health.." %", x/0.628, y/9.2, x/4, y/30, tocolor( 255,255,255, 255 ), 1, "default-bold-small", "center") end function afficherVie() addEventHandler("onClientRender", root, renderingVie) end function cacherVie() removeEventHandler("onClientRender", root, renderingVie) end Et tu exportes afficherVie et cacherVie. Link to comment
Wumbaloo Posted September 11, 2015 Author Share Posted September 11, 2015 --Suppresion de deux posts avant pour éviter de géner avec des doubles/triples posts, parce que le soucis a était résolu une dizaine de minutes après. J'ai finalement réussi par le biais d'une simple variable qui ajoute/retire 1 Aussi simple que ça! Pas besoin de fonction qui fait 10 lignes héhé, je révolutionne le monde.. Voici mon code: renderviee = 0 function renderVie() dxDrawText( ""..health.." %", x/0.628, y/9.2, x/4, y/30, tocolor( 255,255,255, 255 ), 1, "default-bold-small", "center") end function afficherVie() humain = tonumber(getElementData(getLocalPlayer(), "humain")) if humain == 0 then cancelEvent() return else renderviee = renderviee + 1 if renderviee == 1 then addEventHandler("onClientRender", root, renderVie) end end end addEventHandler("onClientRender", root, afficherVie) function displayHealthNumber() removeEventHandler("onClientRender", root, renderVie) renderviee = 0 end Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now