Platin Posted February 2, 2016 Share Posted February 2, 2016 ¿Hay alguna forma de destruir un evento así? dibujos[player] = addEventHandler("onClientRender", root, function() if speakers[player] then local px, py, pz = getElementPosition(speakers[player]["object"]) local dist = (getDistanceBetweenPoints3D(px, py, pz, getElementPosition(localPlayer))) if dist < 30 then local x, y = getScreenFromWorldPosition (px, py, pz) if x and y then texto = dxDrawText("#FFFFFFCreador: #00FFFF"..getPlayerName(player), x, y, x, y, tocolor(0,0,0,230), 0.85 + ( 15 - dist ) * 0.05, "default","center",nil, false, false, false, true, false) end end else cancelEvent() end end ) Ya que el removeEventHandler necesita el nombre de la funcion, ¿pero si no lo tengo? ¿O lo puedo destruir donde puse el cancelEvent()? Link to comment
Platin Posted February 3, 2016 Author Share Posted February 3, 2016 getEventHandlers ¿De qué me sirve? ¿Cómo diferencio un clientRender del otro? Necesito ayuda porque aunque consiga una variable sería igual a: nombreDelEvento = addEventHandler("bla", root, funcion) removeEventHandler(nombreDelEvento) Me daría un error. Link to comment
Tomas Posted February 4, 2016 Share Posted February 4, 2016 getEventHandlers ¿De qué me sirve? ¿Cómo diferencio un clientRender del otro? Necesito ayuda porque aunque consiga una variable sería igual a: nombreDelEvento = addEventHandler("bla", root, funcion) removeEventHandler(nombreDelEvento) Me daría un error. Intenta con esto, agrega un cuarto argumento 'key' puede ser un numero, un string, incluso un elemento, luego en el removeEventHandler usas como tercer argumento esa key. NOTA: No está hecho para que te equivoques, así que no lo hagas ._. events = {} _addEventHandler = addEventHandler addEventHandler = function (..., key) _addEventHandler(...) events[key] = {...}[1] end _removeEventHandler = removeEventHandler removeEventHandler = function (...) args = {...} _removeEventHandler(args[1], args[2], events[args[3]]) events[key] = nil end Link to comment
Mimimiguel Posted February 5, 2016 Share Posted February 5, 2016 Otra cosa que podría funcionar (no lo tengo 100% claro) es que en vez de hacer que dibujos[player] sea como lo tienes, hagas que dibujos[player] sea la función de dentro y luego manejes los eventos 'desde fuera' haciendo addEventHandler( "onClientRender", root, dibujos[player]). No sé si me entiendes pero creo que te simplificaría bastante el trabajo. Saludos Link to comment
Platin Posted February 5, 2016 Author Share Posted February 5, 2016 Otra cosa que podría funcionar (no lo tengo 100% claro) es que en vez de hacer que dibujos[player] sea como lo tienes, hagas que dibujos[player] sea la función de dentro y luego manejes los eventos 'desde fuera' haciendo addEventHandler( "onClientRender", root, dibujos[player]). No sé si me entiendes pero creo que te simplificaría bastante el trabajo.Saludos Es que dibujos[player] es el propio addEventHandler, lo use para ver si me tiraba false o algo realmente ya no lo uso. Y de igual forma si agregara una funcion aparte (que ya lo intente) tengo que pasar datos, como quien es el jugador y sus coordenadas, cosa que no puedo hacer ya que es un evento. Link to comment
Enargy, Posted February 6, 2016 Share Posted February 6, 2016 (edited) table = {} _addEventHandler = addEventHandler function addEventHandler(arg1, arg2, arg3, arg4) if type(arg1) ~= "string" or not arg2 or type(arg3) ~= "function" or type(arg4) ~= "string" then error("@addEventHandler [Error en la sintaxis]") end table[tostring(arg4)] = type(arg4) == "string" _addEventHandler(arg1, arg2, arg3) end _removeEventHandler = removeEventHandler function removeEventHandler(arg1, arg2, arg3) if type(arg1) ~= "string" or not arg2 or type(arg3) ~= "string" then error("@removeEventHandler [Error en la sintaxis]") end for i,v in ipairs(getEventHandlers(arg1, arg2)) do if table[arg3] then _removeEventHandler(arg1, arg2, v) break end end end Lo que hice en el addEventHandler fue agregar un cuarto valor que me permite darle una id al evento. En el tercer parametro de removeEventHandler en lugar de pedir que una tal función sea eliminado por un nombre, la id que se le dió en la función anterior va a ser una key. Ejemplo: -- aquí hago que la función sea directamente la key. addEventHandler("onClientRender", root, function() outputChatBox("Output!") end, "spamming") -- "spamming" es el nombre que le doy al evento. -- y aqui elimino el evento. addCommandHandler("stopspam", function() removeEventHandler("onClientRender", root, "spamming") -- "spamming" es el supuesto nombre del evento. outputChatBox("Spam detenido.") end) Edited February 6, 2016 by Guest Link to comment
Tomas Posted February 6, 2016 Share Posted February 6, 2016 table = {} _addEventHandler = addEventHandler function addEventHandler(arg1, arg2, arg3, arg4) if type(arg1) ~= "string" and not arg2 and type(arg3) ~= "func" and type(arg4) ~= "string" then error("@addEventHandler [Error en la sintaxis]") end table[tostring(arg4)] = type(arg4) == "string" _addEventHandler(arg1, arg2, arg3) end _removeEventHandler = removeEventHandler function removeEventHandler(arg1, arg2, arg3) if type(arg1) ~= "string" and not arg2 and type(arg3) ~= "string" then error("@removeEventHandler [Error en la sintaxis]") end for i,v in ipairs(getEventHandlers(arg1, arg2)) do if table[arg3] then _removeEventHandler(arg1, arg2, v) break end end end Lo que hice en el addEventHandler fue agregar un cuarto valor que me permite darle una id al evento. En el tercer parametro de removeEventHandler en lugar de pedir que una tal función sea eliminado por un nombre, la id que se le dió en la función anterior va a ser una key. Ejemplo: -- aquí hago que la función sea directamente la key. addEventHandler("onClientRender", root, function() outputChatBox("Output!") end, "spamming") -- "spamming" es el nombre que le doy al evento. -- y aqui elimino el evento. addCommandHandler("stopspam", function() removeEventHandler("onClientRender", root, "spamming") -- "spamming" es el supuesto nombre del evento. outputChatBox("Spam detenido.") end) En la condición utiliza ors ya que ahí sólo dará error si en todos los argumentos hay algo que no es esperado. Link to comment
Tomas Posted February 6, 2016 Share Posted February 6, 2016 No entendi , como asi? Que el error sólo aparecerá si todos los argumentos están 'mal', por ejemplo aquí: arg1 = false arg3 = false print( (type(arg1) ~= "string" and not arg2 and type(arg3) ~= "string") and "y" or "n" ) --> y Hay sólo un valor correcto y de todos modos pasa la condición, la solución sería esta: if ( type(arg1) ~= "string" or not arg2 or type(arg3) ~= "string" ) then ... error ... Link to comment
Enargy, Posted February 6, 2016 Share Posted February 6, 2016 No entendi , como asi? Que el error sólo aparecerá si todos los argumentos están 'mal', por ejemplo aquí: arg1 = false arg3 = false print( (type(arg1) ~= "string" and not arg2 and type(arg3) ~= "string") and "y" or "n" ) --> y Hay sólo un valor correcto y de todos modos pasa la condición, la solución sería esta: if ( type(arg1) ~= "string" or not arg2 or type(arg3) ~= "string" ) then ... error ... Lo había puesto así pero tuve un error en el source y borre todo y lo puse así. De todos modos gracias. Editado. Link to comment
Recommended Posts