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