THE ORB
Arrancando el studio

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ó.

groupsEl dinero o los ítems se portan rarocodeNecesita un desarrollador

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.

bug_reportMejor pega tu consola entera

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. 1

    Un campo de tabla que falta

    Config.Prices[item] * count cuando ese ítem no tiene entrada de precio.

  2. 2

    Una columna de base de datos que es NULL

    NULL vuelve como nil, no como 0. Una fila de jugador cuyo bank nunca se inicializó rompe cada cálculo de saldo que la toque.

  3. 3

    Un valor que el cliente tenía que mandar y no mandó

    Un manejador de evento haciendo amount * price sobre una carga en la que el cliente lo omitió.

  4. 4

    Acumular sobre una variable sin inicializar

    total = total + x donde total se 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 Fixer

Para este tipo de error, el Script Optimizer lee el script y repara el código que hay detrás.

Errores que viajan con este