THE ORB
Iniciando o studio

tentativa de fazer aritmética com um valor nil

Um script tentou fazer conta com um valor vazio, muitas vezes uma quantia de dinheiro ou de itens que nunca foi definida.

groupsO dinheiro ou os itens se comportam estranhocodePrecisa de um desenvolvedor

Faça isto primeiro

Confira a linha daquele jogador no banco, procurando valores vazios na coluna que a mensagem nomeia.

bug_reportMelhor colar o console inteiro

O que significa

Foi aplicado +, -, *, /, % ou ^ a algo que não é um número. A mensagem nomeia: attempt to perform arithmetic on a nil value (field 'amount').

O Lua converte strings numéricas na aritmética ("5" + 1 é 6), então uma string raramente dispara isso. Um nil quase sempre.

O que causa isso

Ordenado pela frequência com que é a resposta.

  1. 1

    Um campo de tabela que falta

    Config.Prices[item] * count quando aquele item não tem entrada de preço.

  2. 2

    Uma coluna de banco de dados que é NULL

    NULL volta como nil, não como 0. Uma linha de jogador cujo bank nunca foi inicializado quebra cada cálculo de saldo que toca nela.

  3. 3

    Um valor que o cliente deveria mandar e não mandou

    Um handler de evento fazendo amount * price sobre uma carga em que o cliente omitiu.

  4. 4

    Acumular sobre uma variável não inicializada

    total = total + x onde total foi declarado mas nunca recebeu um valor inicial.

Como saber qual é o seu

Imprima o operando que a mensagem nomeia. Se veio do banco de dados, veja se a coluna tem NULL:

SELECT COUNT(*) FROM users WHERE bank IS NULL;

Onde olhar

A linha que ele nomeia, e depois a origem daquele operando.

Como consertar

Coloque o valor padrão na leitura, não no uso:

local price = Config.Prices[item] or 0
local total = price * (count or 1)

E no banco de dados, faça o problema não poder se repetir:

ALTER TABLE users MODIFY bank INT NOT NULL DEFAULT 0;

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