Jump to content

Asignar varios clickeos a un objecto


aka Blue

Recommended Posts

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
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

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

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
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

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 :S

Link to comment
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 :S

Postea el código que estás usando para saber cuántos clicks tiene cada uno

Link to comment

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
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...