aka Blue Posted June 14, 2016 Share Posted June 14, 2016 Bueno, he tenido una duda la cual he intentado solucionar pero no encuentro modo. Lo que quiero hacer es contar los clicks hechos a un objecto mediante una tabla. Los objectos se crean mediante una tabla que les asigna una 'ID' (la key) y quiero comprobar si el jugador le ha hecho click a un objeto con una ID varias veces. Dejo un código de ejemplo para ver si se me entiende mas o menos: local objectID = 920 local clicksObjecto = { } local objetoID = { } objetos = { [1] = { 996.90002441406, 2377, 9.8000001907349, 0, 0, 90 }, [2] = { 969.5, 2302.6000976563, 9.8000001907349, 0, 0, 0 }, [3] = { 897, 2131.6000976563, 9.8000001907349, 0, 0, 90 }, } addEventHandler ( "onResourceStart", resourceRoot, function ( ) for k, v in ipairs ( objetos ) do local x, y, z, rotx, roty, rotz = v[1], v[2], v[3], v[4], v[5], v[6] local objeto = createObject ( objectID, x, y, z, rotx, roty, rotz ) objetoID [ objeto ] = k end end ) function clickCamion ( theButton, theState, player ) if theButton == "left" and theState == "down" then if objetoID [ source ] then local cliksAhora = clicksObjecto [ source ][ player ] or 0 clicksObjecto [ source ][ player ] = clicksAhora + 1 if clicksAhora == 2 then outputChatBox ( "Le has dado 2 clicks ya." ) end end end end addEventHandler( "onElementClicked", getRootElement(), clickCamion ) Link to comment
Tomas Posted June 14, 2016 Share Posted June 14, 2016 local cliksAhora = clicksObjecto[player] [objetoID[source]] or 0 clicksObjecto[player] [objetoID[source]] = clicksAhora + 1 Link to comment
aka Blue Posted June 14, 2016 Author Share Posted June 14, 2016 En lo que es la creación del objeto, ¿tengo que asignar algún index? Graicas @Tomas Link to comment
Tomas Posted June 14, 2016 Share Posted June 14, 2016 En lo que es la creación del objeto, ¿tengo que asignar algún index?Graicas @Tomas Lo que mostraste en tu código de ejemplo debería ser suficiente, de todas formas, tú quieres que se "sume" si tienen el mismo modelo, o si tienen la misma ID (key)? Link to comment
aka Blue Posted June 14, 2016 Author Share Posted June 14, 2016 Quiero que cuando se le de click a un objeto que tenga una ID, en este caso los creados. Que almacene los clicks hechos por el jugador a ese objeto con esa ID. Digamos que quiero restringir los clicks, almacenándolos y luego comprobar cuantos se han hecho, y si se han hecho x pues que ya no deje hacer mas clicks. Link to comment
aka Blue Posted June 14, 2016 Author Share Posted June 14, 2016 Me da attempt to index field '?' (a nil value) en esta línea: local cliksAhora = clicksObjecto[player] [objetoID[source]] or 0 Link to comment
Tomas Posted June 14, 2016 Share Posted June 14, 2016 Me da attempt to index field '?' (a nil value) en esta línea: local cliksAhora = clicksObjecto[player] [objetoID[source]] or 0 Agrega esto antes: if ( not clicksObjeto.player ) then clicksObjeto.player = {} end Link to comment
aka Blue Posted June 14, 2016 Author Share Posted June 14, 2016 Gracias @Tomas, ya funciona correctamente Ahora una duda, aprovechando este post. ¿Cómo podría disminuir la lentitud al crear un objeto server-side mediante un evento? Estoy haciendo que al hacer click a un objeto determinado, utilizando la función que posteé aquí, cree un objeto en la mano del jugador utilizando bone-attach. Eh aquí el código: if bolsaBasura [ player ] == nil then bolsaBasura [ player ] = createObject ( 1264, x, y, z ) exports.bone_attach:attachElementToBone ( bolsaBasura [ player ],player,12,0,0.05,0.27,0,180,0) setObjectScale ( bolsaBasura [ player ], 0.5 ) end PD: Me da un delay de unos segundos o máximo un minuto por lo que he comprobado. Algo que yo quiero que se realice al segundo de clickear. Link to comment
Tomas Posted June 14, 2016 Share Posted June 14, 2016 Gracias @Tomas, ya funciona correctamente Ahora una duda, aprovechando este post. ¿Cómo podría disminuir la lentitud al crear un objeto server-side mediante un evento? Estoy haciendo que al hacer click a un objeto determinado, utilizando la función que posteé aquí, cree un objeto en la mano del jugador utilizando bone-attach. Eh aquí el código: if bolsaBasura [ player ] == nil then bolsaBasura [ player ] = createObject ( 1264, x, y, z ) exports.bone_attach:attachElementToBone ( bolsaBasura [ player ],player,12,0,0.05,0.27,0,180,0) setObjectScale ( bolsaBasura [ player ], 0.5 ) end PD: Me da un delay de unos segundos o máximo un minuto por lo que he comprobado. Algo que yo quiero que se realice al segundo de clickear. No lo attachees al mismo momento, agrega un timer de 0.1s Link to comment
aka Blue Posted June 14, 2016 Author Share Posted June 14, 2016 Voy a probar, gracias @Tomas Link to comment
aka Blue Posted June 14, 2016 Author Share Posted June 14, 2016 De momento funciona. Aunque hay veces en las que no crea el objeto. Pero bueno, gracias igual @Tomas Link to comment
aka Blue Posted June 16, 2016 Author Share Posted June 16, 2016 Revivo para decir que el clicksObjeto.player = {} no funciona correctamente. Da igual lo que le pongas, sigue contando los clicks a todos los jugadores en el servidor. Me gustaría que un usuario tenga unos clicks definidos a un objeto y que el mismo no pueda realizar mas hasta que se asigne nuevamente nil a la tabla. Mientras, que otros puedan darle click Link to comment
Tomas Posted June 16, 2016 Share Posted June 16, 2016 Revivo para decir que el clicksObjeto.player = {} no funciona correctamente. Da igual lo que le pongas, sigue contando los clicks a todos los jugadores en el servidor. Me gustaría que un usuario tenga unos clicks definidos a un objeto y que el mismo no pueda realizar mas hasta que se asigne nuevamente nil a la tabla. Mientras, que otros puedan darle click Postea el código que estás usando para saber cuántos clicks tiene cada uno Link to comment
aka Blue Posted June 16, 2016 Author Share Posted June 16, 2016 Lo quiero hacer para el job de basurero. Aquí posteo el código: function contenedorClick ( theButton, theState, player ) if theButton == "left" and theState == "down" then if contenedoresID [ source ] then if ( not clicksContenedor.player ) then clicksContenedor.player = {} end local x, y, z = getElementPosition ( player ) local basuraActual = basuraRecogida [ player ] or 0 local cantidadRandom = math.random ( 1, 5 ) if trabajando [ player ] == true then if clicksContenedor.player[ contenedoresID [ source ] ] == nil then if bolsaBasura [ player ] == nil then bolsaBasura [ player ] = createObject ( 1264, x, y, z ) setTimer ( function ( ) exports.bone_attach:attachElementToBone ( bolsaBasura [ player ],player,12,0,0.05,0.27,0,180,0) end, 100, 1 ) setObjectScale ( bolsaBasura [ player ], 0.5 ) end exports.chat:me ( player, "empieza a recoger la basura del contenedor." ) outputChatBox ( "• Recogiendo la basura, espera...", player, 255, 255, 0 ) setTimer ( function ( ) outputChatBox ( "• Has recogido "..cantidadRandom.." de basura del contenedor.", player, 0, 255, 0 ) basuraRecogida [ player ] = basuraActual + cantidadRandom end, 4000, 1 ) clicksContenedor.player[ contenedoresID [ source ] ] = 1 else outputChatBox ( "(( Ya has recogido éste contenedor. Pasa al siguiente. ))", player, 255, 145, 0 ) end else outputChatBox ( "(( No estás trabajando. Coge un camión y empieza tu ruta para empezar a trabajar. ))", player, 255, 145, 0 ) end end end end addEventHandler( "onElementClicked", getRootElement(), contenedorClick ) Link to comment
aka Blue Posted June 16, 2016 Author Share Posted June 16, 2016 Que si por ejemplo yo le doy click al contenedor, ya le salen a todos que está recogido, y yo lo que quiero es que solo le salga al jugador que le ha dado click que ya está recogido para evitar un farmeo masivo. Link to comment
Enargy, Posted June 18, 2016 Share Posted June 18, 2016 Por qué no lo haces en el lado del cliente y así evitándote esos errores?. Link to comment
aka Blue Posted June 18, 2016 Author Share Posted June 18, 2016 Lo demás me va bien, lo único es eso, que quiero hacer que cada jugador tenga clicks definidos a un objeto con la ID creada Link to comment
aka Blue Posted June 22, 2016 Author Share Posted June 22, 2016 ¿Up? He intentado todas las formas posibles, como cambiando el index de la tabla y sigo sin hacerlo funcional :c PD: @Gaberiel, ¿te refieres a los clickeos, hacerlos lado cliente? Gracias por responder Link to comment
aka Blue Posted June 27, 2016 Author Share Posted June 27, 2016 Pueden cerrar, siento revivir. Link to comment
Recommended Posts