Como Debugar Scripts em Lua sem Perder a Cabeça
Blog Como Debugar Scripts em Lua sem Perder a Cabeça
Programação

Como Debugar Scripts em Lua sem Perder a Cabeça

12/08/2026

Mais cedo ou mais tarde, todo script vai dar erro. A diferença entre quem resolve rápido e quem fica horas travado geralmente não é conhecimento de Lua — é método. Aqui vai um processo prático pra debugar sem se perder.

Leia a mensagem de erro com calma

O console do servidor normalmente aponta o arquivo e a linha exata onde o erro aconteceu, além de uma descrição como attempt to index a nil value. Resistir à tentação de sair mudando código aleatoriamente e, em vez disso, ler essa linha com atenção já resolve boa parte dos casos.

O erro mais comum: valores nil

A grande maioria dos erros de Lua em OTServer vem de tentar usar algo que não existe (nil) como se existisse. Exemplo clássico:

local item = player:getSlotItem(CONST_SLOT_HEAD)
print(item:getName()) -- erro se o jogador não tiver nada equipado na cabeça

A correção é sempre checar antes de usar:

local item = player:getSlotItem(CONST_SLOT_HEAD)
if item then
    print(item:getName())
end

print() ainda é sua melhor ferramenta

Antes de assumir ferramentas complexas de debug, espalhar print() em pontos estratégicos do script pra ver que valores estão chegando em cada etapa resolve a maioria dos problemas:

print("DEBUG: quantidade recebida = " .. tostring(quantidade))

Usar tostring() evita que o próprio print quebre quando a variável for nil.

Isolando o problema

Quando o erro não é óbvio, comente partes do script até sobrar só o trecho mínimo que ainda reproduz o problema. Script pequeno e isolado é muito mais fácil de debugar do que um sistema inteiro de uma vez.

Erros silenciosos são os piores

Às vezes o script não gera erro nenhum no console, mas também não faz o que deveria. Nesses casos, geralmente a lógica condicional (if) está filtrando um caso que você não previu. Volte e confira, um por um, se cada condição está realmente recebendo o valor que você espera.

Ordem errada de parâmetros

Outro erro clássico: inverter a ordem dos argumentos numa função, como passar (item, player) quando a função espera (player, item). O Lua não acusa erro de tipo automaticamente em muitos casos — ele só vai se comportar de um jeito estranho. Conferir a assinatura da função na documentação da API evita esse tipo de bug silencioso.

Regra de ouro: nunca debugue direto no servidor em produção. Reproduza o erro num ambiente de testes, onde você pode quebrar e mexer à vontade sem afetar jogadores reais.