Jump to content

Funciones


Guest

Recommended Posts

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

Link to comment
  • MTA Team

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.

Link to comment

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) 

Link to comment
  • MTA Team
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) 

Link to comment
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...

Link to comment

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.

Link to comment
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.

Link to comment

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 

Link to comment
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.

Link to comment
  • MTA Team

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.

Link to comment
  • MTA Team

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.

Link to comment
  • Recently Browsing   0 members

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