Jump to content

Contar los índices que hay en una tabla


aka Blue

Recommended Posts

Bueno, principalmente lo que quiero hacer es comprobar la de tablas que hay en una tabla (si, suena muy tonto pero abajo dejaré un código más o menos explicativo de lo que quiero llegar a saber). Básicamente para colocar un límite (es decir, si una tabla que quiero guardar toJSON tiene 3 índices, quiero poner que haya máximo 6, que serían dos valores).

Podríamos decir que son algo como slots limitados pero con datos.

local miTabla = { } 
  
addCommandHandler ( "llenarPrimerContenido", 
    function ( player, commandName ) 
        local tabla = miTabla [ player ] 
        if tabla then 
            miTabla [ player ] = { valor1 = 0, valor2 = 0, valor3 = 0 } 
        end 
    end 
)   
  
addCommandHandler ( "llenarSegundoContenido", 
    function ( player, commandName ) 
        local tabla = miTabla [ player ] 
        if tabla then 
            if tabla.valor1 == 0 and tabla.valor2 == 0 and tabla.valor3 == 0 then 
                miTabla [ player ] = { valor1 = 0, valor2 = 0, valor3 = 0, { valor1 = 1, valor2 = 1, valor3 = 1 } } 
            end 
        end 
    end 
) 

Gracias.

Link to comment

Lo que quiero utilizar es table.insert para insertar más valores en formato

{ dato1 = 0, dato2 = 0, dato3 = 0 } 

Tal como tengo en un sistema actualmente integrado en el servidor. Pero hacer que ese table.insert tenga un límite y que al tener unas tres o dos tabla como la anteriormente mencionada en la base:

{ dato1 = 0, dato2 = 0, dato3 = 0 } 

Pues que ya no deje insertar más.

Espero haberme explicado correctamente y gracias por comentar, Tomas :)

Link to comment
  
function table.size( t ) 
    if type( t ) ~= 'table' then 
        return false 
    end 
    local n = 0 
    for _ in pairs( t ) do 
        n = n + 1 
    end 
    return n 
end 
  

Creditos al sub-foro russo: https://forum.multitheftauto.com/viewtopic.php?f=141&t=33091

Pero eso sería lo mismo que hacer #table.

Si estas tan seguro de ello, haz un test por ti mismo :)

No se puede usar table.insert para hacer data1 data2 así que no entiendo lo que necesitas exactamente.

Link to comment
  
function table.size( t ) 
    if type( t ) ~= 'table' then 
        return false 
    end 
    local n = 0 
    for _ in pairs( t ) do 
        n = n + 1 
    end 
    return n 
end 
  

Creditos al sub-foro russo: https://forum.multitheftauto.com/viewtopic.php?f=141&t=33091

Pero eso sería lo mismo que hacer #table.

Si estas tan seguro de ello, haz un test por ti mismo .

._.

tt = {{"a"},{"b"},{"c"},{"d"},{"e"},{"f"}} 
  
function table.size( t ) 
    if type( t ) ~= 'table' then 
        return false 
    end 
    local n = 0 
    for _ in pairs( t ) do 
        n = n + 1 
    end 
    return n 
end 
  
outputChatBox("metodo 1: "..table.size( tt ), 255, 255, 0) 
outputChatBox("metodo 2: "..#tt, 255, 0, 0) 

es que a simple vista se ve como se va contando 'n' estando dentro del ciclo y retornas al valor final de n. así que no entiendo :D

Link to comment
Lo que quiero utilizar es table.insert para insertar más valores en formato
{ dato1 = 0, dato2 = 0, dato3 = 0 } 

Tal como tengo en un sistema actualmente integrado en el servidor. Pero hacer que ese table.insert tenga un límite y que al tener unas tres o dos tabla como la anteriormente mencionada en la base:

{ dato1 = 0, dato2 = 0, dato3 = 0 } 

Pues que ya no deje insertar más.

Espero haberme explicado correctamente y gracias por comentar, Tomas :)

Quieres hacer que al insertar un dato en la tabla, chequee si ya hay un dato con el mismo valor?

Link to comment

._.

tt = {{"a"},{"b"},{"c"},{"d"},{"e"},{"f"}} 
  
function table.size( t ) 
    if type( t ) ~= 'table' then 
        return false 
    end 
    local n = 0 
    for _ in pairs( t ) do 
        n = n + 1 
    end 
    return n 
end 
  
outputChatBox("metodo 1: "..table.size( tt ), 255, 255, 0) 
outputChatBox("metodo 2: "..#tt, 255, 0, 0) 

es que a simple vista se ve como se va contando 'n' estando dentro del ciclo y retornas al valor final de n. así que no entiendo

pruebalo con esta array:

local tt = {"hello", text = hello, "bb", text2 = bb} 

Link to comment

Revivo éste tema para preguntar una duda. Esto no es muy normal pero... ¿se puede hacer un índex dentro de un índex? Básicamente lo que quiero hacer es un cinturón con slots mediante tablas. Con éste código creo que lo dejo claro:

local cinturon = { } 
  
addCommandHandler ( "guardar", 
    function ( player, commandName, slot ) 
        local slot = tonumber ( slot ) 
        if slot <= 3 then 
            if cinturon [ player ] == nil then 
                local arma = getPedWeapon ( player ) 
                if arma then 
                    local ammo = getPedTotalAmmo ( player ) 
                    table.insert ( cinturon, [slot] = { arma = arma, municion = municion } ) 
                else 
                    outputChatBox ( "Debes tener un arma en la mano para poder guardarla.", player, 255, 0, 0 ) 
                end 
            else 
                if cinturon [ player ][ slot ] then 
                    local arma = cinturon [ player ][ slot ].arma 
                    local municion = cinturon [ player ][ slot ].municion 
                     
                    outputChatBox ( "En ese slot llevas el arma "..arma.." con "..municion.." de municion.", player, 255, 255, 0 ) 
                end 
            end 
        else 
            outputChatBox ( "El cinturón sólo tiene 3 slots. Usa /"..commandName.." [slot (1,2 o 3)]", player, 255, 255, 255 ) 
        end 
    end 
) 

Link to comment

Tengo un problema. Al guardar un arma por ejemplo en el Slot 2, se guarda, pero después al meter otra en el slot 1, se guarda solo la del slot 1 y la del slot 2 se remueve.

addCommandHandler ( "guardar", 
    function ( player, commandName, slot ) 
        local slot = tonumber ( slot ) 
        if slot then 
            if cinturon [ player ] == nil or cinturon [ player ][ slot ] == nil then 
                local arma = getPedWeapon ( player ) 
                if arma and arma > 0 then 
                    local ammo = getPedTotalAmmo ( player ) 
                    cinturon [ player ] = { } 
                    cinturon [ player ][ slot ] = { arma = arma, ammo = ammo } 
                    takeWeapon ( player, arma ) 
                    exports.chat:me ( player, "guarda un "..getWeaponNameFromID ( arma ).." en su cinturón." ) 
                else 
                    outputChatBox ( "Debes tener un arma en la mano para poder guardarla.", player, 255, 0, 0 ) 
                end 
            elseif cinturon [ player ][ slot ] then 
                local arma = cinturon [ player ][ slot ].arma 
                local municion = cinturon [ player ][ slot ].ammo 
                     
                outputChatBox ( "En ese slot llevas el arma "..getWeaponNameFromID ( arma ) .." con "..municion.." de municion.", player, 255, 255, 0 ) 
            end 
        else 
            outputChatBox ( "El cinturón sólo tiene 3 slots. Usa /"..commandName.." [slot (1,2 o 3)]", player, 255, 255, 255 ) 
        end 
    end 
) 

Link to comment
cinturon = { } 
  
addCommandHandler ( "guardar", 
    function ( player, commandName, slot ) 
        local slot = tonumber ( slot ) 
        if slot then 
            local arma = getPedWeapon ( player ) 
            if arma == 0 then 
                outputChatBox ( "Debes tener un arma en la mano para poder guardarla.", player, 255, 0, 0 ) 
                return 
            end 
             
            if not cinturon [ player ] then 
                cinturon[player] = {} 
            end      
                     
            if not cinturon [ player ][slot] then 
                local ammo = getPedTotalAmmo ( player ) 
                cinturon [ player ][ slot ] = { arma = arma, ammo = ammo } 
                takeWeapon ( player, arma ) 
                exports.chat:me(player, "guarda un "..getWeaponNameFromID ( arma ).." en su cinturón.")     
            else 
                local arma = cinturon [ player ][ slot ].arma 
                local municion = cinturon [ player ][ slot ].ammo 
                    
                outputChatBox ( "En ese slot llevas el arma "..getWeaponNameFromID ( arma ) .." con "..municion.." de municion.", player, 255, 255, 0 ) 
                return 
            end 
        else 
            outputChatBox ( "El cinturón sólo tiene 3 slots. Usa /"..commandName.." [slot (1,2 o 3)]", player, 255, 255, 255 ) 
            return 
        end 
    end 
) 

Te lo organicé un poco mejor y funciona perfectamente ahora.

cinturon [ player ] = { } 
cinturon [ player ][ slot ] = { arma = arma, ammo = ammo } 

El problema era que estabas suscribiendo la tabla.

Link to comment
  • Recently Browsing   0 members

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