Clés de véhicule FiveM : ne peut pas conduire votre propre voiture ou la verrouiller ? Corrigez-le

Comment les systèmes de clés de véhicule FiveM fonctionnent : listes de plaques, donner des clés après un spawn ou un achat, verrouiller avec SetVehicleDoorsLocked, et pourquoi vous perdez l'accès à votre propre voiture.

Symptômes typiques :

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.

Une voiture qui marchait hier et qui est maintenant verrouillée pour son propriétaire est presque toujours un problème de liste de clés, pas un bug du jeu. Cet article explique comment les systèmes de clés fonctionnent, comment donner des clés après un spawn ou un achat, et quoi vérifier quand vous ne pouvez pas conduire votre propre véhicule.

Comment fonctionne un système de clés

Le jeu lui-même n'a pas de clés. Il a seulement un état de verrouillage sur chaque véhicule. Une resource de clés ajoute le reste par-dessus :

  1. Elle stocke laquelle plaques chaque joueur a une clé pour. La plaque est l'identité de la voiture, car la poignée d'entité change à chaque fois que la voiture est générée.
  2. Elle verrouille ou déverrouille le véhicule avec des natives.
  3. Elle bloque le moteur, ou la porte, pour les joueurs qui ne sont pas sur la liste.

Le native de verrouillage est côté client :

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

local status = GetVehicleDoorLockStatus(vehicle)
print(status)

SetVehicleDoorsLocked définit l'état et GetVehicleDoorLockStatus le relit. Au-delà de 1 et 2, il y a d'autres états, comme celui qui verrouille la voiture uniquement pour le joueur. Pour un verrouillage et un déverrouillage simples, vous n'avez besoin que de ces deux.

Conseil : verrouiller une voiture n'empêche pas un joueur de casser une vitre ou de retirer le conducteur d'une voiture NPC déverrouillée. Tout au-delà de l'état de verrouillage dépend du script de clés.

Qui est propriétaire de la liste

Où la liste vit décide de ce qui casse après un redémarrage :

  • Mémoire uniquement. La liste est reconstruite quand un joueur rejoint, à partir des véhicules qu'il possède dans la base de données. Si le script redémarre pendant que vous jouez, la liste est vide jusqu'à ce que vous vous reconnectiez.
  • Basée sur la base de données ou les articles. Les clés sont des articles dans l'inventaire, avec la plaque dans les métadonnées de l'article. La clé survit à un redémarrage, mais une plaque modifiée la casse.
  • Vérification du propriétaire. Le script compare l'identifiant du joueur avec le propriétaire de la plaque dans owned_vehicles (ESX) ou player_vehicles (QBCore et QBox). Aucune liste séparée n'existe.

Découvrez laquelle votre resource utilise avant de déboguer. L'article sur enregistrement des véhicules possédés dans la base de données couvre les tables que la plupart des scripts de clés lisent.

Donner des clés après un spawn ou un achat

Chaque fois que votre propre script crée un véhicule pour un joueur, la resource de clés ne le sait pas. Vous devez le lui dire, dans cet ordre :

  1. Créez le véhicule.
  2. Définissez la plaque avec SetVehicleNumberPlateText.
  3. Appelez l'export ou l'événement de la resource de clés avec cette plaque.
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 et GiveKeys sont des espaces réservés. Le vrai nom est dans la documentation de la resource que vous utilisez. Si c'est un événement, la même règle s'applique : passez la plaque, pas la poignée d'entité.

Pour un achat, la plaque doit être stockée avec la nouvelle ligne dans la base de données, et les clés données au même moment, ou l'acheteur sort de la concessionnaire avec une voiture qui ne correspond plus à rien. Voir génération de véhicules pour la gestion de la plaque.

Crochetage et démarrage à chaud

Ce sont des fonctionnalités du script de clés, pas du jeu. La logique habituelle est :

  • Un joueur qui n'est pas sur la liste des clés tente d'entrer dans une voiture verrouillée. Le script exécute une vérification de compétence ou une barre de progression.
  • En cas de succès, il déverrouille la voiture avec SetVehicleDoorsLocked(vehicle, 1). Pour le démarrage à chaud, il permet aussi au moteur de démarrer pour cette session, généralement en se souvenant de la plaque dans une liste temporaire.
  • En cas d'échec, il peut alerter la police ou casser l'outil.

Si vous construisez la vôtre, gardez la décision de résultat sur le serveur. Un client qui décide seul s'il est autorisé à déverrouiller n'importe quelle voiture peut être abusé avec un menu mod.

Ne peut pas conduire votre propre voiture

Travaillez à travers ces causes dans l'ordre :

La liste des clés a été perdue. Un redémarrage de script, un crash ou un refresh; restart de la resource de clés vide une liste basée en mémoire. Reconnectez-vous, ou déclenchez le propre refresh du script.

La plaque a changé. Une plaque est stockée en trois endroits : le véhicule dans le jeu, la liste des clés ou l'article de clé, et la ligne de base de données. Si un script change l'un d'eux (un changeur de plaque, un article de fausse plaque, un script de tuning), les autres cessent de correspondre. Comparez la plaque à l'écran avec celle dans votre table :

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

Les plaques diffèrent aussi dans les espaces. MIC 001 et MIC001 sont deux plaques différentes pour la plupart des scripts, donc trim et compare dans le même format partout.

Le mauvais propriétaire. La ligne a un ancien identifiant ou citizenid, donc la vérification du propriétaire échoue. C'est la même cause qu'une voiture manquante du garage.

La voiture a été générée par un autre script. Tout ce qui est créé sans un appel de clé est verrouillé pour tout le monde. Ajoutez l'appel de clés où il est généré.

Deux resources de clés. Exécuter deux scripts de clés qui verrouillent tous les deux la voiture la fait basculer entre les états. Gardez-en un.

Testez rapidement dans le jeu

Quand vous doutez de l'état du verrouillage lui-même, lisez-le depuis le 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)

Il imprime l'état et la plaque. Si l'état est 1 et vous ne pouvez toujours pas conduire, le script de clés bloque le moteur, pas le verrouillage.

Liste de contrôle

Symptôme Correction
Enfermé après un redémarrage La liste des clés est en mémoire : reconnectez-vous ou laissez le script la reconstruire à partir des véhicules possédés
Voiture générée verrouillée pour vous Appelez l'export ou l'événement de la resource de clés avec la plaque après SetVehicleNumberPlateText
Voiture achetée mais pas de clés Donner des clés au moment de l'achat et stocker la même plaque dans la base de données
Les clés ont arrêté de fonctionner après un changement de plaque Mettre à jour la plaque dans le jeu, la liste des clés et la base de données ensemble
La plaque semble correcte mais ne correspond pas Vérifiez les espaces et la casse des lettres, utilisez un format partout
L'état de la porte est 1 mais le moteur reste éteint Le script de clés bloque le moteur : vérifiez sa liste, pas le verrouillage
La voiture bascule entre verrouillée et déverrouillée Deux scripts de clés fonctionnent : supprimez-en un

Réponses rapides

Pourquoi ne puis-je pas conduire ma propre voiture après un redémarrage ?

La plupart des scripts de clés gardent la liste des clés en mémoire. Après un redémarrage ou un redémarrage de script, la liste est vide, donc la voiture est verrouillée ou le moteur refuse de démarrer. Le script doit reconstruire la liste à partir de vos véhicules possédés quand vous vous connectez.

Comment donner des clés à une voiture que j'ai générée avec mon propre script ?

Appelez l'export ou l'événement de votre resource de clés avec la plaque, après avoir défini la plaque. Chaque script de clés nomme cet appel différemment, donc lisez sa documentation au lieu de copier un appel d'un autre serveur.

Changer la plaque casse-t-il mes clés ?

Oui, sur n'importe quel système qui correspond aux clés par plaque. Si la plaque change dans le jeu mais pas dans la liste des clés et la base de données, le véhicule ne correspond plus à une clé. Changez les trois ensemble.

Des scripts sans ce problème

Advanced BoostingDu boosting de véhicules piloté par tablette : contrats de classe D à S+, crews et file d’attente en direct.Voir le script →Car BombPosez, détectez et désamorcez des bombes sur les véhicules — avec téléphone détonateur et mini-jeu de C4.Voir le script →Chameleon Paints82 peintures caméléon à reflets changeants, dans un menu à appliquer en un clic.Voir le script →

À lire aussi