intento de hacer aritmética con un valor nil
Un script intentó hacer cuentas con un valor vacío, muy a menudo una cantidad de dinero o de ítems que nunca se fijó.
Haz esto primero
Revisa la fila de ese jugador en la base de datos, buscando valores vacíos en la columna que nombra el mensaje.
Qué significa
Se aplicó +, -, *, /, % o ^ a algo que no es un número. El mensaje lo nombra: attempt to perform arithmetic on a nil value (field 'amount').
Lua convierte las cadenas numéricas en la aritmética ("5" + 1 es 6), así que una cadena rara vez dispara esto. Un nil casi siempre.
Qué lo provoca
Ordenado por la frecuencia con la que es la respuesta.
- 1
Un campo de tabla que falta
Config.Prices[item] * countcuando ese ítem no tiene entrada de precio. - 2
Una columna de base de datos que es NULL
NULL vuelve como nil, no como 0. Una fila de jugador cuyo
banknunca se inicializó rompe cada cálculo de saldo que la toque. - 3
Un valor que el cliente tenía que mandar y no mandó
Un manejador de evento haciendo
amount * pricesobre una carga en la que el cliente lo omitió. - 4
Acumular sobre una variable sin inicializar
total = total + xdondetotalse declaró pero nunca recibió un valor inicial.
Cómo saber cuál es el tuyo
Imprimí el operando que nombra el mensaje. Si vino de la base de datos, mirá si la columna tiene NULL:
SELECT COUNT(*) FROM users WHERE bank IS NULL;
Dónde mirar
La línea que nombra, y después el origen de ese operando.
Cómo arreglarlo
Poné el valor por defecto al leer, no al usar:
local price = Config.Prices[item] or 0 local total = price * (count or 1)
Y en la base de datos, hacé que el problema no se pueda repetir:
ALTER TABLE users MODIFY bank INT NOT NULL DEFAULT 0;
¿Sigues atascado en tu propio código?
Esta página es lo que suele significar este error. Pega tu consola en Server Fixer y ordenará todo lo que haya en ella y te dirá qué hacer primero; y si prefieres no tocarlo, ORBIE puede reparar el script y devolverte el recurso listo para soltar.
bug_reportAbrir el Server FixerPara este tipo de error, el Script Optimizer lee el script y repara el código que hay detrás.
Errores que viajan con este
- intento de comparar dos valores incompatibles
- Columna desconocida en la lista de campos
- no se puede reanudar una corrutina muerta
- SCRIPT ERROR en citizen:/scripting/lua/scheduler.lua
- intento de indexar un número, booleano o texto
- intento de ceder a través de un límite de llamada en C
- desbordamiento de pila
- el índice de la tabla es nil