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.
Faça isto primeiro
Confira a linha daquele jogador no banco, procurando valores vazios na coluna que a mensagem nomeia.
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
Um campo de tabela que falta
Config.Prices[item] * countquando aquele item não tem entrada de preço. - 2
Uma coluna de banco de dados que é NULL
NULL volta como nil, não como 0. Uma linha de jogador cujo
banknunca foi inicializado quebra cada cálculo de saldo que toca nela. - 3
Um valor que o cliente deveria mandar e não mandou
Um handler de evento fazendo
amount * pricesobre uma carga em que o cliente omitiu. - 4
Acumular sobre uma variável não inicializada
total = total + xondetotalfoi 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 FixerPara 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
- tentativa de comparar dois valores incompatíveis
- Coluna desconhecida na lista de campos
- não dá para retomar uma corrotina morta
- SCRIPT ERROR em citizen:/scripting/lua/scheduler.lua
- tentativa de indexar um número, booleano ou texto
- tentativa de yield através de um limite de chamada em C
- estouro de pilha
- o índice da tabela é nil