GetPlayer(source) devolvió nil en el servidor
El servidor buscó un jugador y no lo encontró: normalmente se desconectó a mitad de la acción.
Haz esto primero
De vez en cuando es normal. Constantes significa que el script no comprueba que el jugador siga ahí.
Qué significa
Un manejador del servidor le pidió al framework un objeto de jugador y no recibió nada. Todo acceso a campos que venga después falla.
Qué lo provoca
Ordenado por la frecuencia con la que es la respuesta.
- 1
El jugador se desconectó a mitad de la operación
Entre que el evento se dispara y el manejador se ejecuta, se fue. Común con cualquier operación demorada o con espera.
- 2
El source no es el que creés
Dentro de un callback o de una clausura anidada,
sourceno es lo que pensás. Hay que capturarlo en la cabecera del manejador:local src = source
- 3
El jugador está conectado pero no cargado
Durante
playerConnecting, y un momento después de entrar, todavía no hay objeto de jugador: no se eligió el personaje. - 4
El source vino del cliente
Un cliente que manda su propio id puede mandar el de cualquiera. Esto es un agujero de seguridad además de un nil.
- 5
La función de búsqueda equivocada
GetPlayerFromId(id de servidor) yGetPlayerFromIdentifier(licencia), usadas una por otra por error.
Cómo saber cuál es el tuyo
local src = source
print('src', src, GetPlayerName(src))Si GetPlayerName también es nil, se fue o nunca entró del todo. Si el nombre resuelve pero el objeto del framework no, está conectado pero no cargado.
Dónde mirar
La cabecera del manejador del evento, y cada sitio donde se lee source después de una espera.
Cómo arreglarlo
RegisterNetEvent('shop:buy', function(item, count)
local src = source -- capturalo primero, siempre
local xPlayer = ESX.GetPlayerFromId(src)
if not xPlayer then return end -- se fue, o nunca cargó
-- no confíes nunca en un id que mande el cliente: src es la autoridad
end)¿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 Conversor de scripts traduce un recurso entre ESX, QBCore y Qbox.