El foco de la NUI se trabó: el jugador no puede moverse
Un menú se cerró pero se quedó con el control del ratón y el teclado, así que el jugador no puede moverse ni escribir.
Haz esto primero
El jugador puede volver a entrar para liberarse. Al script hay que arreglarlo para que deje de pasar.
Qué significa
SetNUIFocus(true, true) le entrega el teclado y el ratón al navegador. Hasta que se los devuelva, el jugador no puede moverse, escribir en el chat ni abrir ninguna otra cosa. Una interfaz que se escondió pero nunca soltó el foco deja el juego injugable y sin nada en pantalla.
Qué lo provoca
Ordenado por la frecuencia con la que es la respuesta.
- 1
El camino de cierre no suelta el foco
La interfaz se oculta con CSS o con un cambio de estado y nunca se llama a
SetNUIFocus(false, false). - 2
Un error antes de soltarlo
El manejador de cierre lanza un error a mitad, y la línea que suelta el foco no llega a ejecutarse.
- 3
Dos interfaces abiertas a la vez
Una se cierra y suelta el foco, la otra sigue abierta y lo vuelve a tomar; o al revés, y la que sigue abierta se queda sin foco.
- 4
El recurso se detuvo con la interfaz abierta
Reiniciar un recurso no devuelve el foco por sí solo.
- 5
Foco tomado pero la página no apareció nunca
El foco se puso antes de que la página cargara y después la página falló. Combinado con una pantalla en blanco, esta es la peor versión: invisible y sin respuesta.
Cómo saber cuál es el tuyo
¿Todavía puede girar la cámara? El foco tomado con SetNUIFocus(true, true) bloquea las dos cosas. Si el chat se abre con T, el foco no está retenido y el problema es otro.
Dónde mirar
Cada llamada a SetNUIFocus, y si cada true tiene su false en todos los caminos de salida.
Cómo arreglarlo
Soltalo en un solo sitio, y hacé que sea imposible saltárselo:
local function closeUi()
SetNUIFocus(false, false)
SendNUIMessage({ action = 'close' })
end
RegisterNUICallback('close', function(_, cb)
closeUi()
cb({})
end)
-- y una red de seguridad
AddEventHandler('onResourceStop', function(res)
if res == GetCurrentResourceName() then SetNUIFocus(false, false) end
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 Loading Screen Creator construye NUI que funciona sin escribir HTML a mano.