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:

text
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:

  1. 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.
  2. Blokuje lub odblokowuje pojazd za pomocą natives.
  3. Blokuje silnik, lub drzwi, dla graczy, którzy nie są na liście.

Native blokady jest po stronie klienta:

lua
-- 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) lub player_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:

  1. Utwórz pojazd.
  2. Ustaw tablicę za pomocą SetVehicleNumberPlateText.
  3. Wołaj eksport lub zdarzenie zasobu kluczy z tą tablicą.
lua
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:

sql
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:

lua
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 →

Czytaj dalej