Klucze pojazdu w FiveM: nie możesz prowadzić własnego samochodu lub go zablokować? Napraw to
Jak działają systemy kluczy pojazdu FiveM: listy tablic, przydzielanie kluczy po spawnie lub zakupie, blokowanie za pomocą SetVehicleDoorsLocked i dlaczego tracisz dostęp do własnego samochodu.
Typowe objawy:
You get in your own car: "Vehicle is locked", the engine will not start,
or the key script says you do not have the keys.Samochód, który pracował wczoraj i teraz jest zablokowany dla jego właściciela, to prawie zawsze problem z listą kluczy, a nie błąd gry. Ten artykuł wyjaśnia, jak działają systemy kluczy, jak przydzielać klucze po spawnie lub zakupie i co sprawdzić, gdy nie możesz prowadzić swojego pojazdu.
Jak działa system kluczy
Sama gra nie ma kluczy. Ma tylko stan blokady na każdym pojeździe. Zasób kluczy dodaje resztę na górze:
- Przechowuje, które tablice każdy gracz ma klucz. Tablica jest tożsamością samochodu, ponieważ uchwyt encji zmienia się za każdym razem, gdy samochód jest spawniętny.
- Blokuje lub odblokowuje pojazd za pomocą natives.
- Blokuje silnik, lub drzwi, dla graczy, którzy nie są na liście.
Native blokady jest po stronie klienta:
-- 1 = unlocked, 2 = locked
SetVehicleDoorsLocked(vehicle, 2)
local status = GetVehicleDoorLockStatus(vehicle)
print(status)SetVehicleDoorsLocked ustawia stan a GetVehicleDoorLockStatus czyta go z powrotem. Poza 1 i 2 są inne stany, takie jak jeden, który blokuje samochód tylko dla gracza. Dla prostej blokady i odblokowania potrzebujesz tylko tych dwóch.
Porada: zablokowanie samochodu nie uniemożliwia graczowi rozbicia okna lub wyciągnięcia kierowcy z odblokowanego samochodu NPC. Wszystko poza stanem blokady zależy od skryptu kluczy.
Kto jest właścicielem listy
Gdzie lista żyje decyduje, co się psuje po restarcie:
- Tylko pamięć. Lista jest przebudowywana, gdy gracz się dołącza, z samochodów, które posiadają w bazie danych. Jeśli skrypt się restartuje, podczas gdy grasz, lista jest pusta, aż się ponownie połączysz.
- Baza danych lub oparta na elementach. Klucze to elementy w ekwipunku, z tablicą w metadanych elementu. Klucz przetrwa restart, ale zmiana tablicy go łamie.
- Sprawdzenie właściciela. Skrypt porównuje identyfikator gracza z właścicielem tablicy w
owned_vehicles(ESX) lubplayer_vehicles(QBCore i QBox). Nie istnieje oddzielna lista.
Dowiedz się, którego używa twój zasób, zanim zaczniesz debugowanie. Artykuł dotyczący zapisywania posiadanych pojazdów w bazie danych obejmuje tabele, które czytają większość skryptów kluczy.
Przydziel klucze po spawnie lub zakupie
Za każdym razem, gdy twój własny skrypt tworzy pojazd dla gracza, zasób kluczy o tym nie wie. Musisz mu powiedzieć, w tej kolejności:
- Utwórz pojazd.
- Ustaw tablicę za pomocą
SetVehicleNumberPlateText. - Wołaj eksport lub zdarzenie zasobu kluczy z tą tablicą.
local vehicle = CreateVehicle(model, coords.x, coords.y, coords.z, heading, true, false)
SetVehicleNumberPlateText(vehicle, plate)
-- the name of this call depends on your key resource: check its documentation
exports['your_key_resource']:GiveKeys(plate)your_key_resource i GiveKeys to symbole zastępcze. Prawdziwa nazwa jest w dokumentacji zasobu, którego używasz. Jeśli to zdarzenie, ta sama reguła ma zastosowanie: przekaż tablicę, nie uchwyt encji.
Przy zakupie tablica musi być przechowywana z nowym wierszem w bazie danych, a klucze przydzielane w tym samym momencie, lub kupujący wyjeżdża z salonu samochodowego samochodem, który już nie pasuje do niczego. Przeczytaj spawniowanie pojazdów, aby uzyskać obsługę tablicy.
Wybijanie zamka i gorące druciki
To są cechy skryptu kluczy, a nie gry. Zwykła logika to:
- Gracz, który nie jest na liście kluczy, próbuje wejść do zablokowanego samochodu. Skrypt uruchamia sprawdzenie umiejętności lub pasek postępu.
- Po powodzeniu odblokowuje samochód za pomocą
SetVehicleDoorsLocked(vehicle, 1). Dla gorących drucików pozwala również silnikowi uruchomić się dla tej sesji, zwykle poprzez zapamiętanie tablicy na tymczasowej liście. - Po awarii może alertować policję lub zepsuć narzędzie.
Jeśli budujesz swój własny, trzymaj decyzję wyniku na serwerze. Klient, który samodzielnie decyduje, czy wolno mu odblokowywać jakichkolwiek samochód, może zostać nadużyty z menu mod.
Nie możesz prowadzić własnego samochodu
Przejdź przez te przyczyny w kolejności:
Lista kluczy została utracona. Restart skryptu, awaria lub refresh; restart zasobu kluczy opróżnia listę opartą na pamięci. Ponownie się połącz, lub wyzwól własne odświeżenie skryptu.
Tablica się zmieniła. Tablica jest przechowywana w trzech miejscach: pojazd w grze, lista kluczy lub element klucza, i wiersz bazy danych. Jeśli skrypt zmienia jedno z nich (zmieniacza tablicy, fałszywego elementu tablicy, skryptu tuningu), inne przestają pasować. Porównaj tablicę na ekranie z tą w tabeli:
SELECT owner, plate FROM owned_vehicles WHERE plate LIKE '%MIC%';Tablice różnią się również w białych znakach. MIC 001 i MIC001 to dwie różne tablice dla większości skryptów, więc przycnij i porównaj w tym samym formacie wszędzie.
Zły właściciel. Wiersz ma stary identyfikator lub citizenid, więc sprawdzenie właściciela nie powiodło się. To ta sama przyczyna co brakujący samochód w garażu.
Samochód został spawniętny przez inny skrypt. Wszystko utworzone bez wezwania klucza jest zablokowane dla wszystkich. Dodaj wezwanie kluczy, gdzie jest spawniętny.
Dwa zasoby kluczy. Uruchamianie dwóch skryptów kluczy, które zarówno blokują samochód, powoduje, że przełącza się między stanami. Utrzymaj jeden.
Szybko testuj w grze
Gdy wątpisz sam stan blokady, przeczytaj to z klienta:
RegisterCommand('lockstate', function()
local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)
if vehicle == 0 then return end
print('lock status', GetVehicleDoorLockStatus(vehicle), GetVehicleNumberPlateText(vehicle))
end, false)Wypisuje stan i tablicę. Jeśli stan to 1 a wciąż nie możesz prowadzić, skrypt kluczy blokuje silnik, a nie blokadę.
Lista kontrolna
| Objaw | Naprawa |
|---|---|
| Zamknięty po restarcie | Lista kluczy jest w pamięci: ponownie się połącz lub pozwól skryptowi przebudować go ze spawniętych pojazdów |
| Spawniętny samochód jest dla ciebie zablokowany | Wołaj eksport lub zdarzenie zasobu kluczy z tablicą po SetVehicleNumberPlateText |
| Samochód kupiony ale bez kluczy | Przydziel klucze w momencie zakupu i przechowuj tę samą tablicę w bazie danych |
| Klucze przestały działać po zmianie tablicy | Zaktualizuj tablicę w grze, liście kluczy i bazie danych razem |
| Tablica wygląda dobrze ale nie pasuje | Sprawdź spacje i wielkość liter, użyj jednego formatu wszędzie |
Stan drzwi to 1 ale silnik pozostaje wyłączony |
Skrypt kluczy blokuje silnik: sprawdź jego listę, nie blokadę |
| Samochód przełącza się między zablokowanym a odblokowanym | Dwa skrypty kluczy działają: usuń jeden |
Szybkie odpowiedzi
Dlaczego nie mogę jeździć moim własnym samochodem po restarcie?
Większość skryptów kluczy przechowuje listę kluczy w pamięci. Po restarcie lub restarcie skryptu lista jest pusta, więc samochód jest zablokowany lub silnik odmawia uruchomienia. Skrypt musi przebudować listę ze swoich posiadanych pojazdów, gdy się ładujesz.
Jak dać klucze do samochodu, który spawniłem za pomocą mojego własnego skryptu?
Wołaj eksport lub zdarzenie zasobu kluczy za pomocą tablicy, po ustawieniu tablicy. Każdy skrypt kluczy nazwę to wezwanie inaczej, więc przeczytaj jego dokumentację zamiast kopiowania wezwania z innego serwera.
Czy zmiana tablicy łamie moje klucze?
Tak, w każdym systemie, który dopasowuje klucze po tablicy. Jeśli tablica zmienia się w grze, ale nie na liście kluczy i w bazie danych, pojazd nie pasuje już do klucza. Zmień wszystkie trzy razem.
Skrypty bez tego problemu
Advanced BoostingBoosting pojazdów z tabletu: kontrakty od klasy D do S+, ekipy i kolejka na żywo.Zobacz skrypt →
Car BombPodkładaj, wykrywaj i rozbrajaj bomby w autach — z telefonem-detonatorem i minigrą C4.Zobacz skrypt →
Chameleon Paints82 lakiery kameleon zmieniające kolor, w jednym menu — klik i gotowe.Zobacz skrypt →