Chiavi dei veicoli FiveM: non puoi guidare la tua auto o bloccarla? Riparalo

Come funzionano i sistemi di chiavi dei veicoli FiveM: liste delle targhe, concessione di chiavi dopo uno spawn o un acquisto, blocco con SetVehicleDoorsLocked, e perché perdi accesso alla tua auto.

Sintomi tipici:

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.

Un'auto che funzionava ieri e ora è bloccata al suo proprietario è quasi sempre un problema di elenco di chiavi, non un bug di gioco. Questo articolo spiega come funzionano i sistemi di chiavi, come dare le chiavi dopo uno spawn o un acquisto, e cosa controllare quando non riesci a guidare il tuo veicolo.

Come funziona un sistema di chiavi

Il gioco stesso non ha chiavi. Ha solo uno stato di blocco su ogni veicolo. Una risorsa di chiavi aggiunge il resto sopra:

  1. Memorizza quali targhe ogni giocatore ha una chiave per. La targa è l'identità dell'auto, poiché l'handle dell'entità cambia ogni volta che l'auto viene generata.
  2. Blocca o sblocca il veicolo con i nativi.
  3. Blocca il motore, o la porta, per i giocatori che non sono nell'elenco.

Il nativo di blocco è lato client:

lua
-- 1 = unlocked, 2 = locked
SetVehicleDoorsLocked(vehicle, 2)

local status = GetVehicleDoorLockStatus(vehicle)
print(status)

SetVehicleDoorsLocked imposta lo stato e GetVehicleDoorLockStatus lo legge di nuovo. Oltre a 1 e 2 ci sono altri stati, come uno che blocca l'auto solo per il giocatore. Per un semplice blocco e sblocco hai bisogno solo di questi due.

Consiglio: bloccare un'auto non impedisce a un giocatore di rompere un finestrino o tirare il conducente fuori da un'auto NPC sbloccata. Tutto ciò che va oltre lo stato di blocco dipende dallo script di chiavi.

Chi possiede l'elenco

Dove vive l'elenco decide cosa si rompe dopo un riavvio:

  • Solo memoria. L'elenco viene ricostruito quando un giocatore si unisce, dai veicoli che possiede nel database. Se lo script si riavvia mentre giochi, l'elenco è vuoto fino a quando non ti riconnetti.
  • Basato su database o articolo. Le chiavi sono articoli nell'inventario, con la targa nei metadati dell'articolo. La chiave sopravvive a un riavvio, ma una targa modificata la rompe.
  • Controllo proprietario. Lo script confronta l'identificatore del giocatore con il proprietario della targa in owned_vehicles (ESX) o player_vehicles (QBCore e QBox). Nessun elenco separato esiste.

Scopri quale usa la tua risorsa prima di fare il debug. L'articolo su saving owned vehicles in the database copre le tabelle che la maggior parte degli script di chiavi leggono.

Dare chiavi dopo uno spawn o un acquisto

Ogni volta che il tuo script crea un veicolo per un giocatore, la risorsa di chiavi non lo sa. Devi dirlo, in questo ordine:

  1. Crea il veicolo.
  2. Imposta la targa con SetVehicleNumberPlateText.
  3. Chiama l'export o l'evento della risorsa di chiavi con quella targa.
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 e GiveKeys sono segnaposti. Il nome vero è nella documentazione della risorsa che usi. Se è un evento, la stessa regola si applica: passa la targa, non l'handle dell'entità.

Per un acquisto la targa deve essere memorizzata con la nuova riga nel database, e le chiavi date nello stesso momento, oppure l'acquirente esce dal concessionario con un'auto che non corrisponde più a nulla. Vedi spawning vehicles per la gestione della targa.

Scasso e avvio del cablaggio

Queste sono caratteristiche dello script di chiavi, non del gioco. La logica usuale è:

  • Un giocatore che non è nell'elenco delle chiavi tenta di entrare in un'auto bloccata. Lo script esegue un controllo di abilità o una barra di progresso.
  • In caso di successo, sblocca l'auto con SetVehicleDoorsLocked(vehicle, 1). Per l'avvio del cablaggio consente anche l'avvio del motore per quella sessione, in genere ricordando la targa in un elenco temporaneo.
  • In caso di fallimento può avvisare la polizia o rompere lo strumento.

Se costruisci il tuo, mantieni la decisione del risultato sul server. Un client che decide da solo se è autorizzato a sbloccare qualsiasi auto può essere abusato con un menu mod.

Non riesco a guidare la mia auto

Esamina queste cause in ordine:

L'elenco di chiavi è stato perso. Un riavvio dello script, un arresto anomalo o un refresh; restart della risorsa di chiavi svuota un elenco basato sulla memoria. Riconnettiti, o attiva l'aggiornamento dello script.

La targa è cambiata. Una targa è memorizzata in tre posti: il veicolo nel gioco, l'elenco di chiavi o l'articolo di chiave, e la riga del database. Se uno script cambia uno di loro (un cambiatarga, un articolo con targa falsa, uno script di tuning) gli altri smettono di corrispondere. Confronta la targa sullo schermo con quella nella tua tabella:

sql
SELECT owner, plate FROM owned_vehicles WHERE plate LIKE '%MIC%';

Le targhe differiscono anche negli spazi. MIC 001 e MIC001 sono due targhe diverse per la maggior parte degli script, quindi ritaglia e confronta nello stesso formato dappertutto.

Il proprietario sbagliato. La riga ha un vecchio identificatore o citizenid, quindi il controllo del proprietario fallisce. Questa è la stessa causa di un'auto mancante dal garage.

L'auto è stata generata da un altro script. Qualsiasi cosa creata senza una chiamata di chiave è bloccata per tutti. Aggiungi la chiamata di chiavi dove viene generata.

Due risorse di chiavi. Eseguire due script di chiavi che entrambi bloccano l'auto la fa passare tra gli stati. Mantieni uno.

Test veloce nel gioco

Quando dubiti dello stato di blocco stesso, leggilo dal client:

lua
RegisterCommand('lockstate', function()
    local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)
    if vehicle == 0 then return end
    print('lock status', GetVehicleDoorLockStatus(vehicle), GetVehicleNumberPlateText(vehicle))
end, false)

Stampa lo stato e la targa. Se lo stato è 1 e ancora non puoi guidare, lo script di chiavi blocca il motore, non il blocco.

Elenco di controllo

Sintomo Correzione
Bloccato fuori dopo un riavvio L'elenco di chiavi è in memoria: riconnettiti o lascia che lo script lo ricostruisca da veicoli di proprietà
L'auto generata è bloccata per te Chiama l'export o l'evento della risorsa di chiavi con la targa dopo SetVehicleNumberPlateText
Auto acquistata ma nessuna chiave Dai le chiavi al momento dell'acquisto e memorizza la stessa targa nel database
Le chiavi hanno smesso di funzionare dopo un cambio di targa Aggiorna la targa nel gioco, l'elenco di chiavi e il database insieme
La targa sembra corretta ma non corrisponde Controlla spazi e maiuscole, usa un formato dappertutto
Lo stato della porta è 1 ma il motore rimane spento Lo script di chiavi blocca il motore: controlla il suo elenco, non il blocco
L'auto oscilla tra bloccato e sbloccato Due script di chiavi sono in esecuzione: rimuovine uno

Risposte rapide

Perché non posso guidare la mia auto dopo un riavvio?

La maggior parte degli script di chiavi mantiene l'elenco delle chiavi in memoria. Dopo un riavvio o un riavvio dello script l'elenco è vuoto, quindi l'auto è bloccata o il motore si rifiuta di avviarsi. Lo script deve ricostruire l'elenco dai tuoi veicoli di proprietà quando ti carica.

Come do le chiavi a un'auto che ho generato con il mio script?

Chiama l'export o l'evento della tua risorsa di chiavi con la targa, dopo aver impostato la targa. Ogni script di chiavi chiama questo in modo diverso, quindi leggi la sua documentazione invece di copiare una chiamata da un altro server.

Cambiare la targa rompe le mie chiavi?

Sì, su qualsiasi sistema che abbina le chiavi per targa. Se la targa cambia nel gioco ma non nell'elenco delle chiavi e nel database, il veicolo non corrisponde più a una chiave. Cambia tutti e tre insieme.

Script senza questo problema

Advanced BoostingBoosting di veicoli dal tablet: contratti dalla classe D alla S+, crew e coda in tempo reale.Vedi script →Car BombPiazza, individua e disinnesca bombe sui veicoli — con telefono detonatore e minigioco del C4.Vedi script →Chameleon Paints82 vernici camaleonte che cambiano colore, in un menu da applicare con un clic.Vedi script →

Continua a leggere