aka Blue Posted August 8, 2016 Share Posted August 8, 2016 Básicamente, lo que dice la pregunta. Quiero pasar unos elementData a tablas, pero scripts clientes que tengo los usan. Mi duda es si puedo usar una función que retorne los datos de la tabla para establecerlo en el script server-side. Algo así: function getEstado( player ) if isPedDead( player ) then return 0 else return 1 end end -- Client-side local estado = exports.script_vida:getEstado( player ) if estado == 0 then print( "está muerto el pavo" ) else print( "está vivo el pavo" ) end Link to comment
Tomas Posted August 8, 2016 Share Posted August 8, 2016 Puedes utilizar toJSON y fromJSON Link to comment
Tomas Posted August 8, 2016 Share Posted August 8, 2016 No entiendo. setElementData(root, key, toJSON(tabla)) tabla = fromJSON(getElementData(root, key)) Link to comment
aka Blue Posted August 8, 2016 Author Share Posted August 8, 2016 A lo que me refería era si podía usar, en vez de elementData, tablas para ello. Link to comment
Tomas Posted August 9, 2016 Share Posted August 9, 2016 A lo que me refería era si podía usar, en vez de elementData, tablas para ello. Oh, en ese caso podrías crear un elemento accesible desde ambos lados y guardar la tabla como una data en él, y así mantenerlo sincronizado, aunque probablemente sea peor que los element data, deberías probar Link to comment
-Rex- Posted August 9, 2016 Share Posted August 9, 2016 Te comparto algo que hice sobre los elementData pero con tablas de forma compartida, que creo es lo que quieres hacer. --Shared tablaAlmacenamiento = { } function setData( element, dataName, value ) if not tablaAlmacenamiento[element] then tablaAlmacenamiento[element] = { } end if not tablaAlmacenamiento[element][dataName] then tablaAlmacenamiento[element][dataName] = value return true else tablaAlmacenamiento[element][dataName] = value return true end return false end function getData( element, dataName ) if tablaAlmacenamiento[element] and tablaAlmacenamiento[element][dataName] then return tablaAlmacenamiento[element][dataName] end return false end function clearTheElementData( element ) if tablaAlmacenamiento[element] then tablaAlmacenamiento[element] = false tablaAlmacenamiento[element] = { } end end Server local elements = { "player", "ped", "water", "sound", "vehicle", "object", "pickup", "marker", "colshape", "blip", "radararea", "team", "spawnpoint", "projectile", "effect", "light", "searchlight", "shader", "texture", } function onStop( resource ) for _, element in ipairs( elements ) do for _, object in ipairs( getElementsByType ( element, getResourceRootElement( resource ) ) ) do clearTheElementData ( object ) end end end addEventHandler( "onResourceStop", getRootElement( ), onStop ) Funcion de prueba function dsa( source ) setData( source, "pruebas", 0 ) setData( source, "pruebas", ( getData ( source, "pruebas" ) or 0 ) + 1 ) outputChatBox( tostring( getData ( source, "pruebas" ) ) ) end addCommandHandler( "lze", dsa ) Ojala te sirva de algo Link to comment
aka Blue Posted August 10, 2016 Author Share Posted August 10, 2016 Ya está solucionado. Gracias Rex, de todos modos. Para no crear otro post y demás. ¿El evento onVehicleStartEnter, funciona correctamente? He hecho que limpie una tabla al empezar a entrar al vehiculo y no funciona correctamente... Link to comment
EstrategiaGTA Posted August 10, 2016 Share Posted August 10, 2016 Ya está solucionado. Gracias Rex, de todos modos. Para no crear otro post y demás. ¿El evento onVehicleStartEnter, funciona correctamente? He hecho que limpie una tabla al empezar a entrar al vehiculo y no funciona correctamente... Que yo sepa sí Link to comment
aka Blue Posted August 14, 2016 Author Share Posted August 14, 2016 Bueno, estaba intentándolo en otro script y nada, me da nil value... local armas = { } function getArma( player, slot ) local slot = tonumber( slot ) if armas[ player ][ slot ] then local arma = armas[ player ][ slot ].arma return arma -- Retorna la ID del arma end return false end -- Meta xml function="getArma" type="shared"/> -- Client addEventHandler( "onClientRender", root, function( ) local arma = getArma( player ) dxDrawText( getWeaponNameFromID( arma ), x, y, w, h ) end ) Link to comment
Enargy, Posted August 15, 2016 Share Posted August 15, 2016 Bueno, estaba intentándolo en otro script y nada, me da nil value... local armas = { } function getArma( player, slot ) local slot = tonumber( slot ) if armas[ player ][ slot ] then local arma = armas[ player ][ slot ].arma return arma -- Retorna la ID del arma end return false end -- Meta xml function="getArma" type="shared"/> -- Client addEventHandler( "onClientRender", root, function( ) local arma = getArma( player ) dxDrawText( getWeaponNameFromID( arma ), x, y, w, h ) end ) local arma = getArma(localPlayer) Link to comment
aka Blue Posted August 15, 2016 Author Share Posted August 15, 2016 Si, usé eso también pero no me devuelve. Me da error en el debug, nil value. Link to comment
Enargy, Posted August 15, 2016 Share Posted August 15, 2016 Si, usé eso también pero no me devuelve. Me da error en el debug, nil value. Podrías postear la función donde asignas el dato a la tabla? Link to comment
-Rex- Posted August 15, 2016 Share Posted August 15, 2016 ¿La función la estas poniendo en un script aparte tipo shared? Link to comment
aka Blue Posted August 15, 2016 Author Share Posted August 15, 2016 Si, usé eso también pero no me devuelve. Me da error en el debug, nil value. Podrías postear la función donde asignas el dato a la tabla? Es un comando y básicamente lo que hace es ésto: armas[ player ][ tonumber( slot ) ].arma = getPedWeapon( player ) Link to comment
Recommended Posts