aka Blue Posted April 27, 2016 Share Posted April 27, 2016 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
Tomas Posted April 27, 2016 Share Posted April 27, 2016 Si la tabla está ordenada numéricamente (sin saltos), puedes utilizar: #table Si no, haz un for-loop junto a una variable aditiva. Link to comment
aka Blue Posted April 27, 2016 Author Share Posted April 27, 2016 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
Arsilex Posted April 27, 2016 Share Posted April 27, 2016 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 Link to comment
aka Blue Posted April 27, 2016 Author Share Posted April 27, 2016 Gracias Asus, ¿podrías aclararme un poco cómo podría hacer para que funcione como yo quiera? Gracias nuevamente PD: Y a los rusos también que son unos máquinas jaja. Link to comment
Enargy, Posted April 27, 2016 Share Posted April 27, 2016 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. Link to comment
Arsilex Posted April 27, 2016 Share Posted April 27, 2016 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
Enargy, Posted April 27, 2016 Share Posted April 27, 2016 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 Link to comment
Enargy, Posted April 28, 2016 Share Posted April 28, 2016 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
Arsilex Posted April 28, 2016 Share Posted April 28, 2016 ._. 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
Enargy, Posted April 28, 2016 Share Posted April 28, 2016 pruebalo con esta array:local tt = {"hello", text = hello, "bb", text2 = bb} No entiendo, sigue dándome la misma cantidad. Link to comment
Arsilex Posted April 28, 2016 Share Posted April 28, 2016 pruebalo con esta array:local tt = {"hello", text = hello, "bb", text2 = bb} No entiendo, sigue dándome la misma cantidad. Ups sorry se hice mal la array: local tt = {"hello", text = "hello", "bb", text2 = "bb"} Link to comment
aka Blue Posted April 28, 2016 Author Share Posted April 28, 2016 Justo eso es lo que quería hacer @Arsilex, muchas gracias por la ayuda Link to comment
aka Blue Posted April 29, 2016 Author Share Posted April 29, 2016 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
Sasu Posted April 30, 2016 Share Posted April 30, 2016 En vez de table.insert, simplemente haces: cinturon[player] = {} cinturon[player][slot] = {arma = arma, municion = municion} Link to comment
aka Blue Posted April 30, 2016 Author Share Posted April 30, 2016 Oh, muchas gracias @Sasu, agradezco tu ayuda Link to comment
aka Blue Posted April 30, 2016 Author Share Posted April 30, 2016 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
Sasu Posted April 30, 2016 Share Posted April 30, 2016 Remplaza la linea 9: cinturon [ player ] = cinturon [ player ] or {} Link to comment
Enargy, Posted April 30, 2016 Share Posted April 30, 2016 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
Recommended Posts