Rose Posted December 30, 2016 Share Posted December 30, 2016 ¿Cómo podría hacer para que me salga así en una gridlist? Columna 1: Nombres. Columna 2: ID del objeto. La cosa es que para no crear una tabla para cada cosa que necesito, quisiera hacerlo así: local table = { ['mascaras'] = { ['name'] = "Jack", ['id'] = 1310 } } Pues quiero saber cómo puedo hacer para que me aparezca como ya dije arriba en la gridlist. Nombre. ID Jack. 1310 Link to comment
#Dv^ Posted December 30, 2016 Share Posted December 30, 2016 Quizás esto te pueda servir como para guiarte, no sé si es lo que buscabas gridlist = guiCreateGridList(9, 26, 420, 254, false) guiGridListAddColumn(gridlist, "Name", 0.5) guiGridListAddColumn(gridlist, "Item", 0.5) local table = { --{Nombre, Item} {"Name_1", "Item_1"}, {"Name_2", "Item_2"}, {"Name_3", "Item_3"}, {"Name_4", "Item_4"} } for i, v in pairs(table) do local r = guiGridListAddRow ( gridlist ) guiGridListSetItemText(gridlist, r, 1, tostring ( v[1] ), false, false) guiGridListSetItemText(gridlist, r, 2, tostring ( v[2] ), false, false) end Link to comment
Rose Posted December 30, 2016 Author Share Posted December 30, 2016 1 hour ago, #Dv^ said: Quizás esto te pueda servir como para guiarte, no sé si es lo que buscabas gridlist = guiCreateGridList(9, 26, 420, 254, false) guiGridListAddColumn(gridlist, "Name", 0.5) guiGridListAddColumn(gridlist, "Item", 0.5) local table = { --{Nombre, Item} {"Name_1", "Item_1"}, {"Name_2", "Item_2"}, {"Name_3", "Item_3"}, {"Name_4", "Item_4"} } for i, v in pairs(table) do local r = guiGridListAddRow ( gridlist ) guiGridListSetItemText(gridlist, r, 1, tostring ( v[1] ), false, false) guiGridListSetItemText(gridlist, r, 2, tostring ( v[2] ), false, false) end De esa forma lo tengo, pero resulta que tengo un venta de objetos, y antes de comprar estos objetos tienes que elegir una categoria(mascaras, anillos, lentes), eso ya lo tengo hecho, cuando eliges una categoría se crea una gui y te marca los objetos que hay. Mi pregunta es, si tengo que crear una tabla para cada categoría o puedo hacer una tabla y asignar un nombre de la forma que puse arriba. No sé si me estoy explicando bien... Tengo que hacer esto: mascaras = { } lentes = { } (crearlas por separado) O puedo hacer algo como esto: Tipos = { ['mascaras'] = 1310,1550, ['lentes']= 842 } (lo que quisiera hacer, pero no sé cómo hacer para sacar los datos de máscaras solamente) PD: tampoco sé si la estructura de la tabla sea correcta, pero creo que entienden más o menos lo que quiero Link to comment
#Dv^ Posted December 30, 2016 Share Posted December 30, 2016 (edited) 3 hours ago, Hit+ said: De esa forma lo tengo, pero resulta que tengo un venta de objetos, y antes de comprar estos objetos tienes que elegir una categoria(mascaras, anillos, lentes), eso ya lo tengo hecho, cuando eliges una categoría se crea una gui y te marca los objetos que hay. Mi pregunta es, si tengo que crear una tabla para cada categoría o puedo hacer una tabla y asignar un nombre de la forma que puse arriba. No sé si me estoy explicando bien... Tengo que hacer esto: mascaras = { } lentes = { } (crearlas por separado) O puedo hacer algo como esto: Tipos = { ['mascaras'] = 1310,1550, ['lentes']= 842 } (lo que quisiera hacer, pero no sé cómo hacer para sacar los datos de máscaras solamente) PD: tampoco sé si la estructura de la tabla sea correcta, pero creo que entienden más o menos lo que quiero Quizás algo como esto te referís gridlist = guiCreateGridList(9, 26, 420, 254, false) guiGridListAddColumn(gridlist, "Name", 0.5) local table_category = { --[Categoría] = { { "Nombre", "ID" } }, [ "Category_1" ] = { {"Name_1", 1},{"Name_2", 2},{"Name_3", 3}}, [ "Category_2" ] = { {"Name_3", 1},{"Name_4", 2},{"Name_5", 3}} } for i, v in pairs ( table_category ) do local r = guiGridListAddRow ( gridlist ) guiGridListSetItemText ( gridlist, r, 1, tostring ( i ), false, false ) end addEventHandler("onClientGUIDoubleClick", guiRoot, function() if ( source == gridlist ) then local row, col = guiGridListGetSelectedItem ( source ) if ( row and col and row ~= -1 and col ~= -1 ) then local category = guiGridListGetItemText ( source, row, 1 ) guiGridListClear ( gridlist ) guiGridListAddColumn(gridlist, "ID", 0.5) if ( table_category [ category ] ) then for _, id in ipairs ( table_category [ category ] ) do local row = guiGridListAddRow ( gridlist ) guiGridListSetItemText ( gridlist, row, 1, tostring ( id[1] ), false, false ) guiGridListSetItemText ( gridlist, row, 2, tostring ( id[2] ), false, false ) end end end end end ) Edited December 30, 2016 by #Dv^ Link to comment
Rose Posted December 31, 2016 Author Share Posted December 31, 2016 12 hours ago, #Dv^ said: Quizás algo como esto te referís gridlist = guiCreateGridList(9, 26, 420, 254, false) guiGridListAddColumn(gridlist, "Name", 0.5) local table_category = { --[Categoría] = { { "Nombre", "ID" } }, [ "Category_1" ] = { {"Name_1", 1},{"Name_2", 2},{"Name_3", 3}}, [ "Category_2" ] = { {"Name_3", 1},{"Name_4", 2},{"Name_5", 3}} } for i, v in pairs ( table_category ) do local r = guiGridListAddRow ( gridlist ) guiGridListSetItemText ( gridlist, r, 1, tostring ( i ), false, false ) end addEventHandler("onClientGUIDoubleClick", guiRoot, function() if ( source == gridlist ) then local row, col = guiGridListGetSelectedItem ( source ) if ( row and col and row ~= -1 and col ~= -1 ) then local category = guiGridListGetItemText ( source, row, 1 ) guiGridListClear ( gridlist ) guiGridListAddColumn(gridlist, "ID", 0.5) if ( table_category [ category ] ) then for _, id in ipairs ( table_category [ category ] ) do local row = guiGridListAddRow ( gridlist ) guiGridListSetItemText ( gridlist, row, 1, tostring ( id[1] ), false, false ) guiGridListSetItemText ( gridlist, row, 2, tostring ( id[2] ), false, false ) end end end end end ) Muchas gracias, eso era lo que quería, me ahorra bastantes lineas ya que son varios objetos para cada categoría. Pero tengo una pregunta, las categorías en la gridlist aparecen aleatoriamente, quizás por el 'pairs', pero cuando se lo cambió a ipairs no aparece nada en la gridlist. local table_category = { --[Categoría] = { { "Nombre", "ID" } }, [ "Gorros" ] = { {"Sombrero", 1},{"Name_2", 2},{"Name_3", 3}}, [ "Gorras" ] = { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}, [ "Lentes" ] = { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}, [ "Relojes" ] = { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}, [ "Mochilas" ] = { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}, [ "Mascaras" ] = { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}, [ "Armas de mentira" ] = { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}, [ "Otros" ] = { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}} } -- Quiero que esta tabla aparezca asi: --[[ Gorros Gorras Lentes ..etc ]] -- Pero me aparece así: --[[ Lentes Otros Mascaras Mochilas etc... ]] Y así lo tengo: -- // De esta forma me funciona, pero aparecen en la grid de forma random, por obvias razones... for i, v in pairs ( table_category ) do local r = guiGridListAddRow ( GRIDs ) guiGridListSetItemText ( GRIDs, r, 1, tostring ( i ), false, false ) end -- // Pero si cambio el pairs por ipairs no me aparece nada en la gridlist for i, v in ipairs ( table_category ) do local r = guiGridListAddRow ( GRIDs ) guiGridListSetItemText ( GRIDs, r, 1, tostring ( i ), false, false ) end Link to comment
#Dv^ Posted December 31, 2016 Share Posted December 31, 2016 Entonces úsalo de esta manera gridlist = guiCreateGridList(9, 26, 420, 254, false) guiGridListAddColumn(gridlist, "Name", 0.5) local table_category = { --{ "Categoría, { { Nombre, ID } } }, { "Category_1", { {"Name_1", 1},{"Name_2", 2},{"Name_3", 3}}}, { "Category_2", { {"Name_3", 1},{"Name_4", 2},{"Name_5", 3}}} } for i, v in ipairs ( table_category ) do local r = guiGridListAddRow ( gridlist ) guiGridListSetItemText ( gridlist, r, 1, tostring ( v[1] ), false, false ) end Link to comment
Rose Posted January 1, 2017 Author Share Posted January 1, 2017 @#Dv^ gracias. Otra cosa, cuando le doy click a las categorías no me salen lo que tiene que ser (los nombres y la ID que están en la tabla), no me aparece nada. if ( table_category [ category ] ) then for _, id in pairs ( table_category [ category ]) do local row = guiGridListAddRow ( GRIDs ) guiGridListSetItemText ( GRIDs, row, 1, id[1], false, false ) end end Link to comment
Tomas Posted January 1, 2017 Share Posted January 1, 2017 1 hour ago, Hit+ said: @#Dv^ gracias. Otra cosa, cuando le doy click a las categorías no me salen lo que tiene que ser (los nombres y la ID que están en la tabla), no me aparece nada. if ( table_category [ category ] ) then for _, id in pairs ( table_category [ category ]) do local row = guiGridListAddRow ( GRIDs ) guiGridListSetItemText ( GRIDs, row, 1, id[1], false, false ) end end El formato de la tabla cambió, por eso, eso ya no te sirve. function getIndexFromCategory (category) for k, v in ipairs(table_category) do if ( v == category ) then return k end end return false end local index = getIndexFromCategory(category) if ( index ) then for _, id in ipairs ( table_category[index][2] ) then local row = guiGridListAddRow ( GRIDs ) guiGridListSetItemText ( GRIDs, row, 1, id[1], false, false ) end end 1 Link to comment
Rose Posted January 2, 2017 Author Share Posted January 2, 2017 (edited) 21 hours ago, Tomas said: El formato de la tabla cambió, por eso, eso ya no te sirve. function getIndexFromCategory (category) for k, v in ipairs(table_category) do if ( v == category ) then return k end end return false end local index = getIndexFromCategory(category) if ( index ) then for _, id in ipairs ( table_category[index][2] ) then local row = guiGridListAddRow ( GRIDs ) guiGridListSetItemText ( GRIDs, row, 1, id[1], false, false ) end end No me funciona... local table_category = { --[Categoría] = { { "Nombre", "ID" } }, { "Gorros", { {"Sombrero", 1},{"Name_2", 2},{"Name_3", 3}}}, { "Gorras" , { {"Jockey", 1550},{"Name_4", 2},{"Name_5", 3}}}, { "Lentes" , { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}}, { "Relojes" , { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}}, { "Mochilas", { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}}, { "Mascaras", { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}}, { "Armas de mentira", { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}}, { "Otros", { { "Jockey", 1},{"Name_4", 2},{"Name_5", 3}}} } function getIndexFromCategory (category) for k, v in ipairs(table_category) do if ( v == category ) then return k end end return false end -- Desde aquí lo tengo en la función donde se da click en 'GRIDs' local category = guiGridListGetItemText ( source, row, 1 ) local index = getIndexFromCategory(category) if ( index ) then for _, id in ipairs ( table_category[index][2] ) do local row = guiGridListAddRow ( GRIDs ) guiGridListSetItemText ( GRIDs, row, 1, id[1], false, false ) end end Edited January 2, 2017 by Hit+ Link to comment
Simple0x47 Posted January 2, 2017 Share Posted January 2, 2017 Haces que la key quede como columna y listo :v Link to comment
Rose Posted January 2, 2017 Author Share Posted January 2, 2017 Pues no he logrado que funcione como quiero y lo de @Simple01 no lo entiendo... Link to comment
#Dv^ Posted January 3, 2017 Share Posted January 3, 2017 (edited) gridlist = guiCreateGridList(500, 26, 420, 254, false) guiGridListAddColumn(gridlist, "Name", 0.5) showCursor(true) local table_category = { --[Categoría] = { { "Nombre", "ID" } }, { "Gorros", { {"Gorros", 1},{"Name_2", 2},{"Name_3", 3}}}, { "Gorras" , { {"Gorras", 1550},{"Name_4", 2},{"Name_5", 3}}}, { "Lentes" , { {"Lentes", 1},{"Name_4", 2},{"Name_5", 3}}}, { "Relojes" , { {"Relojes", 1},{"Name_4", 2},{"Name_5", 3}}}, { "Mochilas", { {"Mochilas", 1},{"Name_4", 2},{"Name_5", 3}}}, { "Mascaras", { {"Mascaras", 1},{"Name_4", 2},{"Name_5", 3}}}, { "Armas de mentira", { {"Armas de mentira", 1},{"Name_4", 2},{"Name_5", 3}}}, { "Otros", { { "Otros", 1},{"Name_4", 2},{"Name_5", 3}}} } for i, v in ipairs ( table_category ) do local r = guiGridListAddRow ( gridlist ) guiGridListSetItemText ( gridlist, r, 1, tostring ( v[1] ), false, false ) end addEventHandler("onClientGUIDoubleClick", guiRoot, function() if ( source == gridlist ) then local row, col = guiGridListGetSelectedItem ( source ) --outputChatBox(row) if ( row and col and row ~= -1 and col ~= -1 ) then guiGridListClear ( gridlist ) guiGridListAddColumn(gridlist, "ID", 0.5) for _, v in ipairs ( table_category[row+1][2]) do local row = guiGridListAddRow ( gridlist ) guiGridListSetItemText ( gridlist, row, 1, v[1], false, false ) guiGridListSetItemText ( gridlist, row, 2, v[2], false, false ) end end end end ) Espero te sirva como para guiarte, Saludos Edited January 3, 2017 by #Dv^ 1 Link to comment
Rose Posted January 3, 2017 Author Share Posted January 3, 2017 Gracias a todos, ya funciona. Link to comment
Recommended Posts