O foco da NUI travou: o jogador não consegue se mover
Um menu fechou mas ficou com o controle do mouse e do teclado, então o jogador não consegue se mover nem digitar.
Faça isto primeiro
O jogador pode entrar de novo para se soltar. O script precisa de conserto para parar de acontecer.
O que significa
O SetNUIFocus(true, true) entrega o teclado e o mouse para o navegador. Até ele devolver, o jogador não consegue se mover, digitar no chat nem abrir mais nada. Uma interface que se escondeu mas nunca soltou o foco deixa o jogo injogável e sem nada na tela.
O que causa isso
Ordenado pela frequência com que é a resposta.
- 1
O caminho de fechamento não solta o foco
A interface se esconde com CSS ou uma mudança de estado e o
SetNUIFocus(false, false)nunca é chamado. - 2
Um erro antes de soltar
O handler de fechamento lança um erro no meio, e a linha que solta o foco não chega a rodar.
- 3
Duas interfaces abertas ao mesmo tempo
Uma fecha e solta o foco, a outra continua aberta e pega de novo; ou o contrário, e a que continua aberta fica sem foco.
- 4
O resource parou com a interface aberta
Reiniciar um resource não devolve o foco por si só.
- 5
Foco tomado mas a página nunca apareceu
O foco foi definido antes de a página carregar e depois a página falhou. Combinado com uma tela em branco, essa é a pior versão: invisível e sem resposta.
Como saber qual é o seu
Ele ainda consegue girar a câmera? O foco tomado com SetNUIFocus(true, true) trava as duas coisas. Se o chat abre com T, o foco não está retido e o problema é outro.
Onde olhar
Cada chamada de SetNUIFocus, e se cada true tem o false correspondente em todos os caminhos de saída.
Como consertar
Solte num lugar só, e faça com que seja impossível pular:
local function closeUi()
SetNUIFocus(false, false)
SendNUIMessage({ action = 'close' })
end
RegisterNUICallback('close', function(_, cb)
closeUi()
cb({})
end)
-- e uma rede de segurança
AddEventHandler('onResourceStop', function(res)
if res == GetCurrentResourceName() then SetNUIFocus(false, false) end
end)Ainda travado no seu próprio código?
Esta página é o que esse erro costuma significar. Cole o seu console no Server Fixer e ele vai ordenar tudo o que estiver lá e te dizer o que fazer primeiro; e se você preferir não mexer, o ORBIE consegue consertar o script e te devolver o resource pronto para soltar.
bug_reportAbrir o Server FixerPara esse tipo de erro, o Loading Screen Creator constrói NUI que funciona sem HTML escrito à mão.