server.cfg ensure order: właściwa kolejność uruchamiania zasobów dla FiveM
Zasoby się nie uruchamiają z powodu kolejności? Właściwa kolejność server.cfg (oxmysql, ox_lib, framework, inventory, skrypty), foldery w nawiasach, ensure vs start i duplikaty.
Połowa Twoich skryptów wyrzuca błędy nil przy starcie, ale działają, gdy zrestartujesz je ręcznie. Ten schemat zwykle oznacza, że zasoby zaczynają się w złej kolejności. Ten przewodnik daje Ci kolejność, która działa dla ESX, QBCore i QBox, i wyjaśnia ensure vs start, foldery w nawiasach i duplikaty.
Dlaczego kolejność ma znaczenie
Zasoby zaczynają się w kolejności linii w server.cfg. Skrypt, który czyta framework, gdy się ładuje, uzyskuje nil, jeśli framework jeszcze się nie uruchomił. To samo dotyczy warstwy bazy danych i bibliotek takich jak ox_lib. Rozwiązujesz to, umieszczając warstwy bazowe na górze:
- Baza danych:
oxmysql - Biblioteka:
ox_lib - Framework:
es_extended,qb-corelubqbx_core - Inventory
- Wszystko inne
Kolejność, która działa
Dla QBCore:
ensure oxmysql
ensure ox_lib
ensure qb-core
ensure ox_inventory
ensure [qb]
ensure [standalone]
ensure [mic]Dla QBox:
ensure oxmysql
ensure ox_lib
ensure qbx_core
ensure ox_inventory
ensure [qbx]
ensure [standalone]Dla ESX:
ensure oxmysql
ensure ox_lib
ensure es_extended
ensure ox_inventory
ensure [esx]
ensure [standalone]Dostosuj nazwy kategorii do własnych folderów. Jeśli używasz qb-inventory lub innego inventory zamiast ox_inventory, umieść to w tej samej pozycji, zaraz po framework'u (lub przed nim, jeśli jego dokumentacja tak mówi).
Wskazówka: przechowuj zasoby, które zapewniasz pod nazwą (
oxmysql,ox_lib, framework, inventory) w folderach, które również nie zapewniasz jako nawiasy. W przeciwnym razie są zapewniane dwukrotnie, zobacz Duplikaty poniżej. Wiele konfiguracji umieszcza je w folderze[core], który nigdy nie jest zapewniany jako całość.
Wskazówka: Twój przepis txAdmin mógł napisać własną kolejność. Zachowaj to, co działa i tylko dodaj swoje skrypty poniżej warstw bazowych, zamiast przepisywać cały plik.
ensure vs start
start my_script
ensure my_scriptstarturuchamia zasób, jeśli jest zatrzymany.ensureuruchamia go, jeśli jest zatrzymany i restartuje go, jeśli już działa.
Przy normalnym starcie nic nie działa, więc zachowują się podobnie. Różnica pojawia się, gdy uruchamiasz je w konsoli na żywo: ensure my_script to ten, którego chcesz użyć, aby przeładować skrypt, który właśnie edytowałeś. W server.cfg używaj ensure wszędzie, abyś musiał pamiętać tylko jedno słowo. W innym kierunku stop my_script go zatrzymuje, a refresh sprawia, że serwer ponownie skanuje folder resources w poszukiwaniu nowych lub zmienionych manifestów.
Foldery w nawiasach jako kategorie
Folder, którego nazwa jest w nawiasach, nie jest zasobem. To kategoria i FiveM patrzy wewnątrz:
resources/
[core]/
ox_lib/
oxmysql/
qb-core/
[qb]/
qb-garages/
[standalone]/
my_other_script/
[mic]/
my_script/ensure [qb] uruchamia każdy zasób wewnątrz [qb]. To utrzymuje server.cfg krótko i to jak większość paczek framework'u wysyła. Dwie rzeczy do wiedzy:
- Kolejność wewnątrz folderu w nawiasach nie jest czymś na czym można polegać. Jeśli
qb-garagespotrzebujeqb-core, zapewnijqb-corena własnej linii powyżejensure [qb]lub zadeklarujdependency 'qb-core'w manifeście. Core nie powinien czekać na szczęście. - Zasób nie może być zagnieżdżony wewnątrz innego zasobu. Nawiasy służą tylko do grupowania. Jeśli umieścisz folder skryptu wewnątrz folderu innego skryptu, FiveM go nie znajdzie. Zobacz Couldn't start resource.
Zasób wewnątrz folderu w nawiasach jest nadal znajdowany przez jego własną nazwę, więc ensure ox_lib działa, nawet jeśli folder to [core]/ox_lib.
Zależności w manifeście
Linie kolejności w server.cfg to jedno narzędzie. Linia dependency w manifeście skryptu to drugie i jest bardziej niezawodne:
dependency 'ox_lib'
dependency 'oxmysql'FiveM następnie sprawdza, czy te zasoby istnieją i uruchamia je najpierw. Jeśli jeden brakuje, otrzymasz jasny komunikat zamiast błędu nil: Could not find dependency X for resource Y. Używaj obu: dobrej kolejności w pliku i zależności w manifestach, które kontrolujesz.
Duplikaty
Dwie rzeczy idą nie tak z duplikatami:
- Ten sam
ensuredwa razy. Zapewnienie zasobu dwa razy wserver.cfguruchamia go, a następnie natychmiast restartuje. Zmarnowuje czas startu i może wyzwolić duplikaty zapisów bazy danych lub zdarzeń przy starcie. Usuń drugą linię. Sprawdź, czy folder w nawiasach nie zawiera już zasobu, który również zapewniasz pod nazwą. - Dwa foldery z tą samą nazwą zasobu. Jeśli masz
resources/[old]/my_scriptiresources/[mic]/my_script, tylko jeden jest używany i które to nie jest coś, co kontrolujesz. Usuń lub zmień nazwę jednego i zawsze usuń starą wersję skryptu przed zainstalowaniem nowego.
Gdy naprawa, którą zrobiłeś, wydaje się nie mieć efektu, sprawdź, czy nie edytowałeś kopii, która nie działa.
Znajdź winowajcę, gdy kolejność jest zła
Uruchom serwer, a następnie czytaj konsolę od góry. Pierwszy zasób, który wypisuje błąd, jest przyczyną i wszystko po nim może być następstwem. Typowe przykłady:
oxmysqlwypisuje błąd bazy danych: nic, co używa SQL, nie będzie działać.ox_libsię nie powiedzie: każdy skrypt z@ox_lib/init.luasię rozpada (ox_lib fix).- Framework się nie powiedzie: każdy skrypt, który go pyta o obiekt gracza, uzyskuje nil.
Napraw pierwszy błąd i zrestartuj.
Lista kontrolna
| Objaw | Rozwiązanie |
|---|---|
| Błędy nil przy starcie, OK po ręcznym restarcie | Przenieś warstwy bazowe powyżej skryptów |
| Skrypt potrzebuje ox_lib, zawala się przy starcie | ensure ox_lib powyżej niego, dodaj dependency 'ox_lib' |
| Edytowany skrypt nie przeładowuje się | Użyj ensure my_script w konsoli na żywo |
| Nowy folder nie został znaleziony | Uruchom refresh |
| Zasoby w folderze w nawiasach startują w dziwnej kolejności | Zapewnij core na własnej linii pierwszego |
| Skrypt uruchamia stare zachowanie | Poszukaj drugiego folderu z tą samą nazwą |
| Ten sam zasób restartuje się przy starcie | Usuń duplikatu ensure |
Szybkie odpowiedzi
Jaka jest różnica między ensure i start?
start uruchamia zasób, który jest zatrzymany. ensure uruchamia go, jeśli jest zatrzymany i restartuje go, jeśli już działa. W server.cfg oba działają tak samo przy świeżym starcie, ale ensure jest zwyczajowym wyborem.
Czy kolejność linii ensure ma znaczenie?
Tak. Zasób, który zależy od innego, powinien być uruchamiany po nim. Najpierw połóż bazę danych, ox_lib, framework i inventory, potem wszystko inne.
Czy zasoby w nawiasach folder startują w ustalonej kolejności?
Nie polegaj na tym. ensure [folder] uruchamia zasoby wewnątrz, ale jeśli jeden potrzebuje drugiego, zadeklaruj zależność w jego manifeście zamiast polegać na kolejności.
Skrypty bez tego problemu
Shop CreatorZbuduj sklep w niecałą minutę — właściciele, pracownicy, sejfy i napady w zestawie.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 →