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.

text
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/3
Test

Lees: "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.

Rellena los huecos

El saldo puede venir vacío de la BD. Completa el guard que evita el 'arithmetic on a nil value'.

1local saldo = MySQL.scalar.await('SELECT money FROM users WHERE id = ?', { id })
2if not then return end
3local nuevo = saldo + cantidad
Pista

Comprueba la MISMA variable que el error señala como nil antes de usarla.

Corrige el error

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:

1local xPlayer = ESX.GetPlayerFromId(src)
2local 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:

¿Qué tal esta lección?