Jump to content
  • Announcements

    • Majesty

      Seja bem vindo a seção Downloads!   04/25/2019

      Seja bem vindo a seção Downloads! 
      Aqui, você pode encontrar diversos downloads sobre OTServ. Se tiver dúvidas e/ou problemas sobre algum conteúdo, primeiro, você deve utilizar a ferramenta de busca e explorar o fórum. Se você não encontrou o que precisa, considere criar um tópico na seção de Suporte:
      https://forums.otserv.com.br/index.php?/forums/forum/402-suporte-dúvidas-bugs-erros/ Considere também ler o grande guia do usuário com dúvidas, que possui várias recomendações e dicas de como tirar dúvidas.

      Obrigado e boa sorte!
Sign in to follow this  
Killua

function printTable(table)

Recommended Posts

Killua

@Edit Agora está com recursividade, ou seja, ela mostra tables dentro de tables etc

 

Se você já leu o manual de referência já deve ter visto uma função parecida com essa.

 

O que ela faz?

Ela printa uma tabela completa, por exemplo:

 

Executando ela em seu OT:

 

O chamado printTable{1,3,4,[5] = 5, [6] = 1} mostra  2gx1mih.png

Instalação

Crie printTable.lua em data/lib e cole:


function printTable(table, includeIndices,prnt) -- By Killua
    if includeIndices == nil then includeIndices = true end
    if prnt == nil then prnt = true end
    if type(table) ~= "table" then
        error("Argument must be a table")
        return
    end
    local str, c = "{", ""
    for v, b in pairs(table) do
        if type( == "table" then
            str = includeIndices and str..c.."["..v.."]".." = "..printTable(b,true,false) or str..c..printTable(b,false,false)
        else
            str = includeIndices and str..c.."["..v.."]".." = "..b or str..c..b
        end
        c = ", "
    end
    str = str.."}"
    if prnt then print(str) end
    return str
 end

Utilização

 

Basta chamar ela colocoando sua tabela como primeiro argumento, exemplo:

printTable({1,2,3,4})

O segundo parâmetro (includeIndices) define se os indices vão ou não ser mostrados no print. Como padrão, ele tem valor true. Por exemplo:

printTable({1,2,3,4}) ou printTable({1,2,3,4}, true)

Vai printar: {[1] = 1, [2] = 2, [3] = 3, [4] = 4}

 

E

printTable({1,2,3,4}, false)

Vai printar: {1, 2, 3 ,4}

 

 

Além de printar sua tabela, a função ainda retorna ela como string. Sendo assim, você pode usar essa string para oque precisar. Por exemplo:

doPlayerSendTextMessage(cid, 25, printTable{1,2,3,4})

Vai enviar para o player a mensagem: "{[1] = 1, [2] = 2, [3] = 3, [4] = 4}"

 

 

Obrigado, espero que sjea útil.

Edited by Killua

Share this post


Link to post
Guest Avuenja

Olá Killua, eu gostei cara... Mas como sou meio leigo nisso de script, apesar dos exemplos de uso, para o que ele me serviria realmente... Tipo passar coordenadas, ou eu conseguiria passar dados dentro dessa tabela?

 

Exemplo:

{['player_id'] = 25, ['player'] = 'Killua'}

Tipo algo do gênero?

Share this post


Link to post
Killua

Ele serve somente para visualizar uma tabela.

 

Em lua é muito comum criarmos uma tabela vazia no início do código e, ao decorrer do código, ela ir sendo preenchida "sozinha" de acordo com várias condições. Entao no fim do código vc pode pedir pra printar essa tabela pra ver como ela está.

 

Além disso, várias funções nos retornam tabelas e muitas vezes não sabemos o que elas contém.

 

Exemplos úteis com funções do TFS são:

printTable(getThingFromPos(pos))
printTable(getPlayerSlotItem(cid,slot))
Além de muitos outros. Edited by Killua

Share this post


Link to post
Guest Avuenja

Obrigado pela ótima explicação Killua! >.<

Share this post


Link to post
dalvorsn

é interessante para debug e etc, da pra reduzir um pouco, mas está bom assim;

a unica coisa que acho que tu poderia fazer é dar recursividade quando os valores dentro da tabela forem outras tabelas, pois se usar dessa forma ai, só vai aparecer o endereço da tabela

 

bom script, parabéns e obrigado pela contribuição

Share this post


Link to post
Killua

Valeu Avu

 

Obrigado dalvo, n tinha pensado nisso mesmo... Vou editar o script e editar o tópico

Share this post


Link to post
Lordfire

Legal cara, printa no mesmo formato que se escreve mesmo :P muito bom!

 

Só uma coisinha:

 

str = includeIndices and str..c.."["..v.."]".." = "..printTable(b,true,false) or str..c..printTable(b,false,false)

 

Tu deveria só passar o includeIndices adiante:

 

str = str..c.."["..v.."]".." = "..printTable(b,includeIndices,false)

Share this post


Link to post
Killua

 

Legal cara, printa no mesmo formato que se escreve mesmo :P muito bom!

 

Só uma coisinha:

str = includeIndices and str..c.."["..v.."]".." = "..printTable(b,true,false) or str..c..printTable(b,false,false)

Tu deveria só passar o includeIndices adiante:

str = str..c.."["..v.."]".." = "..printTable(b,includeIndices,false)

 

Valeu lord :)

 

Mas na verdade se eu fizesse assim, ele ia sempre mostrar os índices cujo elemento é uma tabela

Edited by Killua

Share this post


Link to post
Lordfire

Hmmmm bem notado, falha minha :P ficou impecável

Share this post


Link to post
Guest
This topic is now closed to further replies.
Sign in to follow this  
  • Recently Browsing   0 members

    No registered users viewing this page.

×