Jump to content

Funciones


Guest

Recommended Posts

Posted

Hola, antes que nada, he venido aquí por unas cuantas dudas sobre algunas cosas

Siempre me ha llegado a mi mente preguntar esto y espero que me puedan responder

¿Existe algún beneficio usar la función 'removeElementData'?

¿Cómo me podría ayudar 'onElementDataChange'?

Muchas gracias a los que me puedan responder :D

  • MTA Team
Posted

Con respecto a tu primera pregunta, no sabría decirte. Yo en mis resources, no utilizo removeElementData

En relación a tu segunda pregunta, onElementDataChange se ejecuta cada vez que un elementData es cambiado. Te sirve al momento de ahorrar recursos y evitar el uso de timers o eventos como onClientRender que se ejecutan muchas veces en poco tiempo para comprobar algo que debería ser re-comprobado solamente cuando es cambiado.

Posted

removeElementData puede servir para remover elemetData que no quieras usar, en lugar de que lo asignas a 0 solo usas eso.

e.g.

-- seleccionar un monto en especifico al player. 
addCommandHandler("setvalue",  
function(executer, _, amount) 
    if not amount then return end 
    setElementData( executer, "numeros", tonumber(amount)); 
end) 
  
-- verificar el monto del player. regresa a false si no hay. 
addCommandHandler("getvalue",  
function(executer) 
    if getElementData( executer, "numeros") then 
        outputChatBox(getElementData( executer, "numeros"), executer); 
        else return false; 
    end 
end) 
  
-- onElementDataChange hace que cuando algun elementData, en este caso 'numeros', si es mayor de 2 será false/nil 
addEventHandler("onElementDataChange", root, 
function(data) 
    if ( data == "numeros" ) then 
        if( getElementData( source, data) > 2 ) then 
            removeElementData( source, data);        
            outputChatBox("ElementData: '"..data.."' fue asignado a false/nil", source); 
        end 
    end 
end) 

Posted

Muchas Gracias @.:CiBeR:. y @Enargy¸

Me han resuelto esta duda :D

  • MTA Team
Posted
removeElementData puede servir para remover elemetData que no quieras usar, en lugar de que lo asignas a 0 solo usas eso.

e.g.

-- seleccionar un monto en especifico al player. 
addCommandHandler("setvalue",  
function(executer, _, amount) 
    if not amount then return end 
    setElementData( executer, "numeros", tonumber(amount)); 
end) 
  
-- verificar el monto del player. regresa a false si no hay. 
addCommandHandler("getvalue",  
function(executer) 
    if getElementData( executer, "numeros") then 
        outputChatBox(getElementData( executer, "numeros"), executer); 
        else return false; 
    end 
end) 
  
-- onElementDataChange hace que cuando algun elementData, en este caso 'numeros', si es mayor de 2 será false/nil 
addEventHandler("onElementDataChange", root, 
function(data) 
    if ( data == "numeros" ) then 
        if( getElementData( source, data) > 2 ) then 
            removeElementData( source, data);        
            outputChatBox("ElementData: '"..data.."' fue asignado a false/nil", source); 
        end 
    end 
end) 

En realidad usar removeElementData es lo mismo que usar setElementData en false.

removeElementData(element,"llave") 
setElementData(element,"llave",false) 

Posted
removeElementData puede servir para remover elemetData que no quieras usar, en lugar de que lo asignas a 0 solo usas eso.

e.g.

-- seleccionar un monto en especifico al player. 
addCommandHandler("setvalue",  
function(executer, _, amount) 
    if not amount then return end 
    setElementData( executer, "numeros", tonumber(amount)); 
end) 
  
-- verificar el monto del player. regresa a false si no hay. 
addCommandHandler("getvalue",  
function(executer) 
    if getElementData( executer, "numeros") then 
        outputChatBox(getElementData( executer, "numeros"), executer); 
        else return false; 
    end 
end) 
  
-- onElementDataChange hace que cuando algun elementData, en este caso 'numeros', si es mayor de 2 será false/nil 
addEventHandler("onElementDataChange", root, 
function(data) 
    if ( data == "numeros" ) then 
        if( getElementData( source, data) > 2 ) then 
            removeElementData( source, data);        
            outputChatBox("ElementData: '"..data.."' fue asignado a false/nil", source); 
        end 
    end 
end) 

En realidad usar removeElementData es lo mismo que usar setElementData en false.

removeElementData(element,"llave") 
setElementData(element,"llave",false) 

No creo que los Devs de MTA hayan creado una función sin sentido, quizás sirve para eliminarlo de la memoria física, es decir, no es false, no es true, no es nada, no existe...

Posted

Es por eso que surgió mi duda, quería saber si usar 'removeElementData' eliminaba el dato por completo y no dejaba rastro del mismo mencionado.

Posted
Es por eso que surgió mi duda, quería saber si usar 'removeElementData' eliminaba el dato por completo y no dejaba rastro del mismo mencionado.

Creo que así es, y concuerdo con Tomás, 'removeElementData' eliminará el elementData por completo hasta que lo vuelvas a tirar.

Posted

removeElementData sirve para ELIMINAR el elementData, no lo pone en false, ni nada, es un elemento que no existe, por lo tanto, a la hora de getElementData, daria nil.

setElementData(source, "llave", false) 
--return: false 

Ejemplo desde mi gang system

function gang_memberUpdate () 
local t = sql("select * from miembros", true) 
    for pk, pv in ipairs(getElementsByType("player")) do 
    enc = 0 
        for mk, mv in ipairs(t) do 
            local ID = getElementData(pv, "ID") 
            if mv['ID'] == ID then 
            setElementData(pv, "gang", tostring(mv['gang'])) 
            setElementData(pv, "gang_rango", tostring(mv['rango'])) 
            enc = 1 
            end 
        end 
        if enc == 0 then 
        removeElementData(pv, "gang") 
        removeElementData(pv, "gang_rango") 
        end 
    end 
end 

Posted
removeElementData sirve para ELIMINAR el elementData, no lo pone en false, ni nada, es un elemento que no existe, por lo tanto, a la hora de getElementData, daria nil.
setElementData(source, "llave", false) 
--return: false 

Ejemplo desde mi gang system

function gang_memberUpdate () 
local t = sql("select * from miembros", true) 
    for pk, pv in ipairs(getElementsByType("player")) do 
    enc = 0 
        for mk, mv in ipairs(t) do 
            local ID = getElementData(pv, "ID") 
            if mv['ID'] == ID then 
            setElementData(pv, "gang", tostring(mv['gang'])) 
            setElementData(pv, "gang_rango", tostring(mv['rango'])) 
            enc = 1 
            end 
        end 
        if enc == 0 then 
        removeElementData(pv, "gang") 
        removeElementData(pv, "gang_rango") 
        end 
    end 
end 

Es lo mismo, usar removeElementData que usar setElementData con boolean false.

  • MTA Team
Posted

Es exactamente lo mismo. No se la razón de su creación, supongo que evita que tengas que escribir todos los argumentos de setElementData, resumiendolo en una sola función con dos argumentos, fácil de recordar.

void CElement::DeleteCustomData ( const char* szName ) 
{ 
    // Grab the old variable 
    SCustomData * pData = m_pCustomData->Get ( szName ); 
    if ( pData ) 
    { 
        CLuaArgument oldVariable; 
        oldVariable = pData->Variable; 
  
        // Delete the custom data 
        m_pCustomData->Delete ( szName ); 
  
        // Trigger the onElementDataChange event on us 
        CLuaArguments Arguments; 
        Arguments.PushString ( szName ); 
        Arguments.PushArgument ( oldVariable ); 
        Arguments.PushArgument ( CLuaArgument() );  // Use nil as the new value to indicate the data has been removed 
        CallEvent ( "onElementDataChange", Arguments ); 
    } 
} 

El elementData es seteado a nil, por tanto existe del mismo modo en la memoria como un booleano en false.

Si seteas un valor, luego lo quitas con removeElementData, luego compruebas con getElementData, devuelve false.

Posted

Es un sí pero un no, es decir, que si usar el elementData a regresar a false aun seguiria existiendo pero con removeElementData lo borra por completo. Esa es mi teoria.

@CiBeR mejor lock topic :lol:

  • MTA Team
Posted

Arguments.PushArgument ( CLuaArgument() );  // Use nil as the new value to indicate the data has been removed 

Esta pusheando un nil, por tanto existe el elementData y representa un valor false.

  • Recently Browsing   0 members

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