THE ORB
Arrancando el studio

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.

groupsAlguna acción fallida de vez en cuandocodeNecesita un desarrollador

Haz esto primero

De vez en cuando es normal. Constantes significa que el script no comprueba que el jugador siga ahí.

bug_reportMejor pega tu consola entera

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

    El source no es el que creés

    Dentro de un callback o de una clausura anidada, source no es lo que pensás. Hay que capturarlo en la cabecera del manejador:

    local src = source
  3. 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. 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. 5

    La función de búsqueda equivocada

    GetPlayerFromId (id de servidor) y GetPlayerFromIdentifier (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 Fixer

Para este tipo de error, el Conversor de scripts traduce un recurso entre ESX, QBCore y Qbox.

Errores que viajan con este