THE ORB
Uruchamiam studio

GetPlayer(source) zwróciło nil na serwerze

Serwer szukał gracza i go nie znalazł — zwykle rozłączył się w trakcie akcji.

groupsSporadycznie nieudana akcjacodePotrzebny programista

Zrób najpierw to

Sporadyczne są normalne. Ciągłe znaczą, że skrypt nie sprawdza, czy gracz wciąż tam jest.

bug_reportWklej zamiast tego całą konsolę

Co to znaczy

Handler serwerowy poprosił framework o obiekt gracza i nic nie dostał. Każdy dostęp do pola po tym pada.

Co to powoduje

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

  1. 1

    Gracz rozłączył się w trakcie operacji

    Między odpaleniem zdarzenia a wykonaniem handlera wyszedł. Częste przy każdej operacji opóźnionej albo oczekującej.

  2. 2

    source jest zły

    Wewnątrz callbacku albo zagnieżdżonego domknięcia source to nie to, co myślisz. Trzeba go przechwycić na początku handlera:

    local src = source
  3. 3

    Gracz jest połączony, ale niewczytany

    Podczas playerConnecting i przez chwilę po dołączeniu nie ma jeszcze obiektu gracza — postać nie została wybrana.

  4. 4

    source przyszedł od klienta

    Klient, który wysyła własne id, może wysłać cudze. To dziura bezpieczeństwa, nie tylko nil.

  5. 5

    Zła funkcja wyszukująca

    GetPlayerFromId (id serwerowe) a GetPlayerFromIdentifier (licencja), używane przez pomyłkę zamiennie.

Jak poznać, który jest twój

local src = source
print('src', src, GetPlayerName(src))

Jeśli GetPlayerName też jest nil, gracza nie ma albo nigdy w pełni nie dołączył. Jeśli nazwa się rozwiązuje, a obiekt frameworka nie, gracz jest połączony, ale niewczytany.

Gdzie szukać

Początek handlera zdarzenia i każde miejsce, w którym source jest czytane po oczekiwaniu.

Jak to naprawić

RegisterNetEvent('shop:buy', function(item, count)
    local src = source                       -- najpierw przechwyć, zawsze
    local xPlayer = ESX.GetPlayerFromId(src)
    if not xPlayer then return end           -- wyszedł albo nigdy się nie wczytał
    -- nigdy nie ufaj id podanemu przez klienta: src jest rozstrzygające
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 Konwerter skryptów przenosi zasób między ESX, QBCore i Qbox.

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