THE ORB
Arrancando el studio

Un callback de la NUI no se dispara nunca

Un botón del menú de un script no hace nada al pulsarlo, y normalmente tampoco aparece nada en la consola.

groupsLos botones no hacen nadacodeNecesita un desarrollador

Haz esto primero

Repórtaselo al vendedor. No hay nada en tu instalación que cause esto.

bug_reportMejor pega tu consola entera

Qué significa

El lado del navegador le mandó algo al cliente y no pasó nada. Normalmente no hay ningún error en ninguno de los dos lados, y eso es lo que lo vuelve frustrante: el botón sencillamente no hace nada.

Qué lo provoca

Ordenado por la frecuencia con la que es la respuesta.

  1. 1

    La URL no coincide con el nombre del recurso

    fetch('https://my-script/buy') tiene que usar el nombre EXACTO del recurso. Un guion contra un guion bajo falla en silencio.

  2. 2

    El nombre del callback no coincide

    RegisterNUICallback('buy', ...) contesta a .../buy, no a .../Buy.

  3. 3

    Nunca se llama a cb

    El lado de Lua tiene que llamar a cb(...). Sin eso la promesa del navegador no se resuelve nunca, así que la interfaz se cuelga aunque el manejador se haya ejecutado.

  4. 4

    El fetch no lleva cuerpo POST

    La NUI de FiveM espera un POST. Un GET, o un POST sin cuerpo, puede no enrutarse.

  5. 5

    La interfaz no tiene el foco

    Los callbacks funcionan sin foco, pero el CLIC que tendría que disparar uno no llega a la página. SetNUIFocus(true, true) es lo que deja que el cursor interactúe.

Cómo saber cuál es el tuyo

Abrí las herramientas de desarrollo de la NUI y mirá la pestaña de red: ¿la petición sale siquiera? Si no, es la página o el foco. Si sale y se queda colgada, el manejador no está llamando a cb. Si da 404, el nombre está mal.

Dónde mirar

La URL del fetch en la página, y el nombre de RegisterNUICallback en el script del cliente. Tienen que coincidir exactamente.

Cómo arreglarlo

-- cliente
RegisterNUICallback('buy', function(data, cb)
    -- hacer la cosa
    cb({ ok = true })          -- contestá SIEMPRE, aunque falle
end)

// página
await fetch(`https://${GetParentResourceName()}/buy`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ item: 'water' }),
})

¿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 Loading Screen Creator construye NUI que funciona sin escribir HTML a mano.

Errores que viajan con este