Jump to content

¿Es posible pasar valores server-side a client-side?


aka Blue

Recommended Posts

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
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 :P

Link to comment

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

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
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
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
  • Recently Browsing   0 members

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