THE ORB
Uruchamiam studio

Fokus NUI się zaciął — gracz nie może się ruszyć

Menu się zamknęło, ale zatrzymało kontrolę nad myszą i klawiaturą, więc gracz nie może się ruszać ani pisać.

groupsGracze utykają i nie mogą się ruszaćcodePotrzebny programista

Zrób najpierw to

Gracz może się uwolnić, wchodząc ponownie. Skrypt trzeba naprawić, żeby przestało się to dziać.

bug_reportWklej zamiast tego całą konsolę

Co to znaczy

SetNUIFocus(true, true) oddaje klawiaturę i mysz przeglądarce. Dopóki nie zostaną oddane z powrotem, gracz nie może się ruszać, pisać na czacie ani otworzyć czegokolwiek innego. Interfejs, który ukrył się wizualnie, ale nigdy nie zwolnił fokusu, zostawia grę niegrywalną, z niczym na ekranie.

Co to powoduje

Uszeregowane według tego, jak często są odpowiedzią.

  1. 1

    Ścieżka zamknięcia nie zwalnia fokusu

    Interfejs jest ukrywany CSS-em albo zmianą stanu, a SetNUIFocus(false, false) nigdy nie zostaje wywołane.

  2. 2

    Błąd przed zwolnieniem

    Handler zamknięcia wywala się w połowie, a linia zwalniająca nigdy się nie wykonuje.

  3. 3

    Dwa interfejsy otwarte naraz

    Jeden się zamyka i zwalnia, drugi wciąż jest otwarty i przejmuje fokus z powrotem — albo odwrotnie, a ten wciąż otwarty fokusu nie ma.

  4. 4

    Zasób zatrzymał się przy otwartym interfejsie

    Restart zasobu sam z siebie nie przywraca fokusu.

  5. 5

    Fokus przejęty, a strona nigdy się nie pojawiła

    Fokus ustawiono przed wczytaniem strony, a strona potem padła. W połączeniu z pustym ekranem to najgorsza wersja: niewidzialne i niereagujące.

Jak poznać, który jest twój

Czy nadal może obracać kamerą? Fokus przejęty przez SetNUIFocus(true, true) blokuje jedno i drugie. Jeśli czat otwiera się na T, fokus nie jest trzymany i chodzi o coś innego.

Gdzie szukać

Każde wywołanie SetNUIFocus i to, czy każde true ma odpowiadające false na każdej ścieżce wyjścia.

Jak to naprawić

Zwalniaj w jednym miejscu i zrób to niemożliwym do pominięcia:

local function closeUi()
    SetNUIFocus(false, false)
    SendNUIMessage({ action = 'close' })
end

RegisterNUICallback('close', function(_, cb)
    closeUi()
    cb({})
end)

-- i siatka bezpieczeństwa
AddEventHandler('onResourceStop', function(res)
    if res == GetCurrentResourceName() then SetNUIFocus(false, false) end
end)

Wciąż utknąłeś na własnym kodzie?

Ta strona mówi, co ten błąd zwykle oznacza. Wklej swoją konsolę do Server Fixera, a uszereguje wszystko, co w niej jest, i powie, co zrobić najpierw; a jeśli wolisz tego nie ruszać, ORBIE naprawi skrypt i odda ci zasób gotowy do wrzucenia.

bug_reportOtwórz Server Fixer

Dla tego rodzaju błędu Loading Screen Creator buduje NUI działające bez ręcznie pisanego HTML-a.

Błędy, które chodzą z tym w parze