THE ORB
Uruchamiam studio

attempt to call a nil value

Skrypt próbował użyć funkcji, która nie istnieje — zwykle dlatego, że został napisany pod inną wersję twojego frameworka.

groupsTa funkcja przestaje działaćcodePotrzebny programista

Zrób najpierw to

Sprawdź, czy skrypt powstał pod twój framework i pod twoją jego wersję.

bug_reportWklej zamiast tego całą konsolę

Co to znaczy

Skrypt spróbował wywołać coś, co nie jest funkcją. Nazwa w nawiasie mówi co: (global 'ESX'), (field 'GetPlayerData'), (method 'getJob').

method 'x' warto przeczytać uważnie: znaczy, że wywołanie użyło dwukropka (obj:x()), a tablica nie ma x. To prawie zawsze różnica wersji frameworka, w której metodę przemianowano albo przeniesiono.

Co to powoduje

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

  1. 1

    Funkcja natywna, której po tej stronie nie ma

    Natywne klienckie wołane na serwerze albo odwrotnie. Większość natywnych od rysowania, wejścia i kamery jest tylko po stronie klienta, więc na serwerze ta globalna jest po prostu nil, a wywołanie jej to wywołanie nila.

  2. 2

    Metoda frameworka przemianowana między wersjami

    xPlayer.getJob() a xPlayer.job, QBCore.Functions.GetPlayerData a PlayerData, ESX Legacy a ESX 1.1. Skrypty pisane pod jedną wersję wołają metody, których druga nie ma.

  3. 3

    Eksport, który rozwiązał się na nil

    exports['res']:method(), gdzie zasób jest zatrzymany, źle nazwany albo nie eksportuje takiej nazwy. FiveM zwraca nil zamiast rzucać błąd, więc awaria ląduje tutaj.

  4. 4

    Funkcja jest zdefiniowana niżej w pliku

    Lua przypisuje local function f, kiedy ta linia się wykonuje, a nie przy parsowaniu. Wywołanie f() powyżej jej definicji woła nila.

  5. 5

    Literówka

    TriggerServerEvnet albo GetPlayerPedId, kiedy prawdziwa natywna to PlayerPedId.

Jak poznać, który jest twój

print(type(theThing))

nad wywołaniem. nil przy funkcji natywnej znaczy, że jesteś po złej stronie — sprawdź referencję natywnych, która dla każdego wpisu podaje klient/serwer. table znaczy, że wołasz tablicę, co zwykle znaczy, że użyto . tam, gdzie trzeba :.

Gdzie szukać

Wskazany plik i linia. Jeśli nazwa to globalna funkcja natywna, przeszukaj referencję natywnych, zanim założysz, że zły jest twój kod.

Jak to naprawić

-- eksporty: sprawdź, czy zasób stoi, zanim mu zaufasz
if GetResourceState('ox_inventory') ~= 'started' then return end
local count = exports.ox_inventory:Search(src, 'count', 'water')

-- metody frameworka: czytaj API tej wersji, nie zgaduj
local job = xPlayer.job          -- ESX Legacy
-- local job = xPlayer.getJob()  -- starsze ESX

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 Script Optimizer czyta skrypt i naprawia kod stojący za tym.

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