Depurar errores como un pro · Lección 1/3 · 8 min
Leer el error a fondo
El error de FiveM te dice el recurso, el archivo y la línea exactos. Aprende a leerlo de un vistazo.
La mayoría de la gente ve un error rojo y entra en pánico. Un pro lo lee: te está diciendo casi siempre exactamente dónde mirar.
SCRIPT ERROR: @mi_banco/server/main.lua:42: attempt to perform arithmetic on a nil value (local 'saldo')
> handler (@mi_banco/server/main.lua:42)Un error real
- @mi_banco → el recurso que falla.
- server/main.lua:42 → archivo y LÍNEA exacta. Ve directo ahí.
- attempt to perform arithmetic on a nil value → intentaste operar (+, -, *) con un nil.
- (local 'saldo') → la variable culpable es 'saldo': valía nil cuando hiciste la cuenta.
Traducción: en la línea 42, 'saldo' era nil al hacer una operación matemática. Causa típica: la consulta a la BD no devolvió nada y no lo comprobaste. Vas a la línea 42, miras de dónde sale 'saldo' y añades un guard.
Consola del cliente: F8. Consola del servidor: la ventana de txAdmin o el txAdmin → Live Console. Ahí salen estos errores en tiempo real.
Practica lo aprendido
0/3Lees: "attempt to perform arithmetic on a nil value (local 'saldo')". ¿Qué significa?
Pista
'nil value (local saldo)' te da hasta el nombre de la variable culpable.
El saldo puede venir vacío de la BD. Completa el guard que evita el 'arithmetic on a nil value'.
local saldo = MySQL.scalar.await('SELECT money FROM users WHERE id = ?', { id })if not then return endlocal nuevo = saldo + cantidadPista
Comprueba la MISMA variable que el error señala como nil antes de usarla.
Peta con "attempt to index a nil value (local 'xPlayer')" porque el jugador no existía. Añade un guard antes de usar xPlayer.
Este código tiene un fallo:
local xPlayer = ESX.GetPlayerFromId(src)local cash = xPlayer.getMoney()Reescríbelo corregido:
Pista
ESX.GetPlayerFromId puede devolver nil; comprueba xPlayer antes de hacer xPlayer.algo.
Reto: prográmalo tú
Te dan: '@tienda/client.lua:18: attempt to call a nil value (field GetMoney)'. Di qué significa y dónde mirar.
Escríbelo tú en tu editor (VS Code) y pruébalo en tu servidor. Aquí se aprende haciéndolo, no copiando.
Ver pista
Una función/método llamado 'GetMoney' no existe (¿typo? ¿export mal?). Mira la línea 18 de client.lua.
Escribe aquí tu solución:
