intento de llamar a un valor nil
Un script intentó usar una función que no existe, normalmente porque fue escrito para otra versión de tu framework.
Haz esto primero
Comprueba que el script sea para tu framework y para tu versión de él.
Qué significa
El script intentó invocar algo que no es una función. El nombre entre paréntesis dice qué: (global 'ESX'), (field 'GetPlayerData'), (method 'getJob').
method 'x' vale la pena leerlo con atención: significa que la llamada usó dos puntos (obj:x()) y la tabla no tiene ningún x. Eso casi siempre es una diferencia de versión del framework, donde el método se renombró o se movió.
Qué lo provoca
Ordenado por la frecuencia con la que es la respuesta.
- 1
Un nativo que no existe de este lado
Nativos de cliente llamados en el servidor, o al revés. Casi todos los nativos de dibujo, de entrada y de cámara son sólo de cliente, así que en el servidor ese global es sencillamente nil y llamarlo es llamar a nil.
- 2
Un método del framework renombrado entre versiones
xPlayer.getJob()contraxPlayer.job,QBCore.Functions.GetPlayerDatacontraPlayerData, ESX Legacy contra ESX 1.1. Los scripts escritos para una versión llaman a métodos que la otra no tiene. - 3
Un export que resolvió a nil
exports['res']:method()donde el recurso está detenido, mal nombrado, o no exporta ese nombre. FiveM devuelve nil en vez de lanzar un error, así que el fallo aterriza acá. - 4
La función está definida más abajo en el archivo
Lua asigna
local function fcuando esa línea se ejecuta, no al analizar. Llamar af()por encima de su definición es llamar a nil. - 5
Una errata
TriggerServerEvnet, oGetPlayerPedIdcuando el nativo de verdad esPlayerPedId.
Cómo saber cuál es el tuyo
print(type(laCosa))
encima de la llamada. nil para un nativo significa que estás del lado equivocado: mirá la referencia de nativos, que dice cliente o servidor en cada entrada. table significa que estás llamando a una tabla, y eso normalmente significa que se usó . donde hacía falta :.
Dónde mirar
El archivo y la línea que nombra. Si el nombre es un nativo global, buscá en la referencia de nativos antes de dar por sentado que tu código está mal.
Cómo arreglarlo
-- exports: comprobá que el recurso esté arriba antes de confiar en él
if GetResourceState('ox_inventory') ~= 'started' then return end
local count = exports.ox_inventory:Search(src, 'count', 'water')
-- métodos del framework: leé la API de esa versión, no adivines
local job = xPlayer.job -- ESX Legacy
-- local job = xPlayer.getJob() -- ESX más viejo¿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 indexar un valor nil
- No existe ese export
- El objeto del framework es nil (ESX / QBCore)
- 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