THE ORB
Iniciando o studio

tentativa de concatenar um valor nil

Um script tentou montar uma mensagem com um valor que faltava, normalmente um nome de jogador ou uma configuração que você deixou em branco.

groupsAquela função para de funcionarpersonVocê consegue consertar

Faça isto primeiro

Confira o arquivo de configuração daquele script procurando um ajuste que nunca foi preenchido.

bug_reportMelhor colar o console inteiro

O que significa

Foi usado o operador .. com algo que não é nem string nem número. A mensagem nomeia: attempt to concatenate a nil value (local 'name').

O Lua concatena números sem problema, então isso quase sempre é um nil, e quase sempre está dentro de uma string que está sendo montada para um print, uma notificação, uma mensagem de chat ou uma consulta.

O que causa isso

Ordenado pela frequência com que é a resposta.

  1. 1

    Um campo de tabela que falta dentro de uma mensagem

    'Welcome ' .. player.name onde o objeto do jogador não tem name, ou o objeto inteiro é nil. Montar a mensagem é onde o dado que falta morde pela primeira vez.

  2. 2

    Uma função que não devolveu nada

    GetPlayerName(src) devolve nil para um jogador que já saiu, e o resultado vai direto para uma linha de log.

  3. 3

    Um valor de configuração que nunca foi definido

    Config.Webhook .. '?wait=true' com a webhook vazia numa configuração que o usuário nunca preencheu.

  4. 4

    Montar SQL por concatenação

    Que além disso é um buraco de injeção, então esse erro está fazendo um favor ao chamar a atenção para ele.

Como saber qual é o seu

Envolva o operando em tostring() temporariamente: o erro some e a mensagem imprime nil exatamente onde estava o valor que faltava, e isso diz qual é sem adivinhar nada.

Onde olhar

A linha que ele nomeia. Leia a expressão inteira: uma concatenação longa pode ter cinco operandos e só um é nil.

Como consertar

Coloque um valor padrão, ou use string.format, que tolera nil em %s:

local name = GetPlayerName(src) or 'unknown'
print(('player %s bought %s'):format(name, item or 'nothing'))

E para SQL, use marcadores de posição em vez de concatenar:

MySQL.query('SELECT * FROM users WHERE identifier = ?', { identifier })

Ainda travado no seu próprio código?

Esta página é o que esse erro costuma significar. Cole o seu console no Server Fixer e ele vai ordenar tudo o que estiver lá e te dizer o que fazer primeiro; e se você preferir não mexer, o ORBIE consegue consertar o script e te devolver o resource pronto para soltar.

bug_reportAbrir o Server Fixer

Para esse tipo de erro, o Script Optimizer lê o script e conserta o código por trás disso.

Erros que andam junto com este