Guest Posted May 17, 2015 Posted May 17, 2015 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
MTA Team 0xCiBeR Posted May 17, 2015 MTA Team Posted May 17, 2015 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.
Enargy, Posted May 17, 2015 Posted May 17, 2015 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)
Guest Posted May 17, 2015 Posted May 17, 2015 Muchas Gracias @.:CiBeR:. y @Enargy¸ Me han resuelto esta duda
Enargy, Posted May 17, 2015 Posted May 17, 2015 Muchas Gracias @.:CiBeR:. y @Enargy¸ Me han resuelto esta duda Shupa
MTA Team 0xCiBeR Posted May 18, 2015 MTA Team Posted May 18, 2015 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)
Tomas Posted May 18, 2015 Posted May 18, 2015 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...
Guest Posted May 18, 2015 Posted May 18, 2015 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.
Calculador Posted May 19, 2015 Posted May 19, 2015 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.
UserToDelete Posted May 19, 2015 Posted May 19, 2015 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
Enargy, Posted May 19, 2015 Posted May 19, 2015 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 0xCiBeR Posted May 19, 2015 MTA Team Posted May 19, 2015 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.
Enargy, Posted May 19, 2015 Posted May 19, 2015 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
MTA Team 0xCiBeR Posted May 19, 2015 MTA Team Posted May 19, 2015 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.
Recommended Posts