THE ORB
Uruchamiam studio

Obiekt ESX / QBCore / Core jest nil

Skrypt nie znalazł twojego frameworka (ESX, QBCore, Qbox) — albo nie działa, albo startuje po tym skrypcie.

groupsTen skrypt nic nie robipersonMożesz to naprawić

Zrób najpierw to

W server.cfg upewnij się, że twój framework jest wymieniony POWYŻEJ skryptu, który się wysypał.

bug_reportWklej zamiast tego całą konsolę

Co to znaczy

Skrypt spróbował użyć współdzielonego obiektu frameworka, zanim go miał. Sam błąd zwykle przychodzi jako attempt to index a nil value (global 'ESX'), ale przyczyna jest na tyle konkretna, że zasługuje na własną odpowiedź.

Co to powoduje

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

  1. 1

    Stary wzorzec getSharedObject, wciąż w zasięgu pliku

    ESX = nil
    TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)

    To jest asynchroniczne. Każdy kod poniżej wykonuje się przed callbackiem. ESX Legacy usunął to zdarzenie w całości, więc na nowoczesnym serwerze nie odpala się wcale.

  2. 2

    Framework nie jest uruchomiony albo startuje po twoim zasobie

    ensure es_extended poniżej ensure moj-skrypt w server.cfg.

  3. 3

    Zły akcesor dla zainstalowanej wersji

    ESX Legacy eksportuje getSharedObject; QBCore eksportuje GetCoreObject; Qbox woli, żeby wymagać jego modułu. Użycie wywołania z innego frameworka daje nil.

  4. 4

    Użycie po niewłaściwej stronie

    Obiekt kliencki i serwerowy to co innego. Metoda tylko serwerowa wywołana na kliencie jest nil, nawet kiedy obiekt się wczytał.

Jak poznać, który jest twój

print(GetResourceState('es_extended'), ESX ~= nil)

Jeśli stan to started, a ESX jest nil, chodzi o akcesor albo o moment. Jeśli stan jest jakikolwiek inny, chodzi o server.cfg.

Gdzie szukać

Początek wadliwego pliku i kolejność ensure w server.cfg.

Jak to naprawić

ESX Legacy — bezpośrednio, synchronicznie, bez callbacku:

ESX = exports['es_extended']:getSharedObject()

QBCore:

local QBCore = exports['qb-core']:GetCoreObject()

Qbox:

local qbx = exports.qbx_core

Jeśli musisz wspierać stare ESX, przynajmniej zaczekaj na nie, zanim go użyjesz:

CreateThread(function()
    while ESX == nil do
        TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
        Wait(100)
    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 Konwerter skryptów przenosi zasób między ESX, QBCore i Qbox.

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