Could not find dependency X for resource Y: jak to naprawić

FiveM mówi Could not find dependency ox_lib for resource Y? Co dependency w fxmanifest.lua oznacza, jak zainstalować brakujący zasób, nazewnictwo folderów i kolejność uruchamiania.

Startujesz skrypt i konsola mówi:

text
Could not find dependency ox_lib for resource my_script.
Couldn't start resource my_script.

Skrypt odmawia startu, ponieważ czegoś, co potrzebuje, tam nie ma. Ten artykuł wyjaśnia, co linia oznacza i jak naprawić trzy zwykłe przyczyny: zasób nie jest zainstalowany, folder ma złą nazwę, lub jest w złym miejscu.

Co to jest zależność

W fxmanifest.lua, skrypt może zadeklarować, że potrzebuje innych zasobów:

lua
fx_version 'cerulean'
game 'gta5'

dependency 'ox_lib'

-- or several at once
dependencies {
    'ox_lib',
    'oxmysql',
}

Gdy my_script się uruchamia, FiveM sprawdza, że każda nazwa istnieje jako zasób. Jeśli jedna brakuje, start jest anulowany, co jest lepsze niż działanie połowa zepsute i wyrzucanie błędów nil później.

Nazwa, którą FiveM szuka, to nazwa zasobu, która jest nazwą folderu. Nawiasy w folderach macierzystych, takich jak [standalone] to tylko kategorie i nie są częścią nazwy.

Krok 1: znajdź, który zasób brakuje

Tekst między dependency i for resource to nazwa brakującego zasobu. W przykładzie to ox_lib. Szukaj folderu z dokładnie tą nazwą:

bash
# from your server's resources folder
find . -maxdepth 3 -type d -name "ox_lib"

Na Windows, użyj pola wyszukiwania w Eksploratorze plików w folderze resources, lub Get-ChildItem -Recurse -Directory -Filter ox_lib w PowerShell. Jeśli nic nie wraca, zasób nie jest zainstalowany.

Krok 2: zainstaluj to

Pobierz zasób z jego oficjalnego źródła, włóż folder pod resources, i dodaj go do server.cfg przed skryptem, który go potrzebuje:

cfg
ensure oxmysql
ensure ox_lib
ensure my_script

Zwykłe zależności to ox_lib i oxmysql, plus twoja struktura (es_extended, qb-core lub qbx_core). Dla ox_lib w szczególności, jest pułapka z pobieraniem: zobacz @ox_lib/init.lua not found.

Po dodaniu folderu do działającego serwera, uruchom refresh w konsoli, potem ensure my_script.

Krok 3: napraw nazwę folderu

Zależność istnieje, ale błąd wciąż się pokazuje. Sprawdzić dokładną nazwę. Oto nazwy, które ludzie przypadkowo kończą:

Folder na dysku Musi być
ox_lib-main ox_lib
ox_lib-master ox_lib
oxmysql-main oxmysql
qb-core-main qb-core
ox_lib (1) ox_lib

Zipa źródłowe GitHub dodają -main lub -master do nazwy folderu, a przeglądarki dodają (1) do powtórzonych pobrań. Przemianuj folder i zaktualizuj server.cfg aby pasował. Na Linux, wielkość liter też liczy: Ox_Lib nie jest ox_lib.

Sprawdzić też błąd zagnieżdżonego folderu, gdzie rozpakowany folder zawiera jeden więcej folder z taką samą nazwą:

text
resources/ox_lib/ox_lib/fxmanifest.lua   (wrong)
resources/ox_lib/fxmanifest.lua          (right)

Krok 4: upewnij się, że zależność może się uruchomić

Jeśli folder jest dobry, ale błąd się utrzymuje, zależność może istnieć i wciąż się nie powieść. Szukaj w konsoli błędu zależności samej, który pojawi się ponad linią, którą wkleiłeś. Typowe przyczyny to błąd bazy danych dla oxmysql lub niezbudowany folder www dla ox_lib. Napraw to pierwszy, potem uruchom zależny skrypt. Szersza diagnoza jest w Couldn't start resource.

Kolejność startu w server.cfg

Zasoby zaczynają się w kolejności linii ensure. Włóż warstwy podstawowe pierwszą:

cfg
ensure oxmysql
ensure ox_lib
ensure es_extended        # or qb-core / qbx_core
ensure my_script

Ponieważ my_script deklaruje swoje zależności, FiveM je uruchomi dla ciebie, jeśli zapomnisz. Mimo to, napisz kolejność. Lista, która czyta z dołu do góry jest łatwiejsza do debugowania, i skrypty, które nie deklarują zależności (wiele nie robi) działają tylko, gdy kolejność jest prawidłowa. Pełny schemat jest w the right ensure order in server.cfg.

Dodanie zależności do twojego własnego skryptu

Jeśli piszesz skrypty, zadeklaruj co używasz. Jeśli my_script wołuje exports.ox_lib lub funkcje lib., dodaj:

lua
dependency 'ox_lib'

Możesz też wymagać wersji serwera lub OneSync w tej samej liście:

lua
dependencies {
    '/onesync',
    'ox_lib',
}

Deklarowanie zależności zmienia trudną do przeczytania błąd nil w jasny komunikat startu.

Wskazówka: zależność wymieniona w manifeście, którą skrypt już nie używa, będzie go blokować przed startem na serwerze bez tego zasobu. Usuń stare wpisy, gdy przerabiasz skrypt.

Lista kontrolna

Symptom Naprawa
Could not find dependency ox_lib Zainstaluj ox_lib pod resources
Folder to ox_lib-main lub ox_lib (1) Przemianuj na dokładną nazwę zasobu
Folder zagnieżdżony dwukrotnie Przenieś folder wewnętrzny w górę, aby fxmanifest.lua było bezpośrednio wewnątrz
Dodany folder, serwer wciąż nieświadomy Uruchom refresh w konsoli
Zależność istnieje, ale się nie powiedzie Przeczytaj jej błąd ponad linią i napraw go pierwszy
Kolejność niejasna oxmysql, ox_lib, struktura, potem skrypty

Szybkie odpowiedzi

Co oznacza Could not find dependency?

Plik fxmanifest.lua zasobu wymieniła inny zasób pod dependency lub dependencies, i FiveM nie może znaleźć zasobu z dokładnie tą nazwą na twoim serwerze.

Czy nazwa folderu zależności jest ważna?

Tak. FiveM pasuje do nazwy folderu, nie nazwy projektu. Folder zwany ox_lib-main nie jest ox_lib, więc musi być przemianowany.

Czy muszę zapewnić zależność przed skryptem?

To dobra praktyka i to utrzymuje rzeczy przewidywalne. FiveM też uruchamia wymienioną zależność dla ciebie, gdy zasób zależny się uruchamia, dopóki folder istnieje.

Skrypty bez tego problemu

Mic PhoneSkładany telefon, który rozkłada się w tablet i działa też na prawdziwym telefonie gracza.Zobacz skrypt →CCTV Security CamerasKamery do rozstawienia, tablet z podglądem wielu kamer na żywo i drukowane zdjęcia jako dowody.Zobacz skrypt →Item Creator V2Twórz używalne przedmioty z animacjami, propami, efektami i nie tylko — bez pisania kodu.Zobacz skrypt →

Czytaj dalej