Présentation
NC Parking Meter
NC Parking Meter est un système complet de stationnement payant pour FiveM.
Il permet de créer des zones de stationnement avec leurs propres règles, tarifs et horaires. Les joueurs peuvent payer leur stationnement tandis que les services de police peuvent contrôler directement si un véhicule possède un stationnement valide.
Fonctionnalités principales
- Zones de stationnement configurables
- Tarifs personnalisables
- Horaires payants et périodes gratuites
- Paiement du stationnement par véhicule
- Durées de stationnement configurables
- Expiration automatique
- Notifications joueur
- Vérification du stationnement par la police
- Persistance des stationnements en base de données
Présentation
NC Parking Meter V2 est un système de stationnement payant pour ESX Legacy avec interface NUI de parcmètre, zones tarifaires, périodes gratuites, paiement espèces/banque et contrôle par les forces de l’ordre.
Fonctionnalités
- Parcmètres GTA détectés automatiquement
- Zones avec tarifs et limites de durée indépendants
- Horaires gratuits configurables par zone
- Paiement en espèces et/ou banque
- Saisie manuelle de plaque optionnelle
- Contrôle via
/checkparking - Export serveur pour les intégrations
- Nettoyage automatique des anciens stationnements
Installation
Les fichiers à utiliser sont ceux présents dans le dossier nc_parking_meter.
1. Base de données
Importez sql/install.sql. Pour une ancienne installation mise à jour vers la V2.0.2, utilisez si nécessaire sql/migration_v2.0.2_compat.sql.
2. Dépendances
es_extendedox_liboxmysqlox_targetrecommandé mais optionnelokokNotifyoptionnel
3. server.cfg
ensure oxmysql
ensure ox_lib
ensure es_extended
ensure ox_target
ensure nc_parking_meterSi vous n’utilisez pas ox_target, retirez sa ligne et réglez Config.UseOxTarget = false.
Configuration
Tous les paramètres modifiables par le propriétaire du serveur se trouvent dans nc_parking_meter/config.lua. Ce fichier est inclus dans escrow_ignore et reste donc modifiable.
Réglages généraux
Config.Debug = false
Config.Locale = 'fr'
Config.Currency = '$'Config.Debug: active/désactive le mode debug.Config.Locale: langue configurée pour la ressource.Config.Currency: symbole monétaire affiché dans l’interface.
Où régler chaque fonctionnalité ?
- Notifications →
Config.Notify - Interaction ox_target / touche E →
Config.UseOxTargetetConfig.InteractionDistance - Objets parcmètres →
Config.MeterModels - Détection du véhicule →
Config.VehicleSearchRadius - Saisie manuelle de plaque →
Config.AllowManualPlate - Boutons de durée →
Config.DurationButtons - Zone par défaut →
Config.DefaultZone - Zones spécifiques →
Config.Zones - Moyens de paiement →
Config.PaymentMethods - Compte société →
Config.Society - Nettoyage BDD →
Config.Cleanup - Jobs de contrôle →
Config.EnforcementJobs
Zones de stationnement
Zones de stationnement
Le script permet de gérer plusieurs zones indépendantes. Chaque zone peut avoir ses propres règles afin d'adapter le stationnement à chaque quartier.
Exemples
- Centre-ville
- Hôpital
- Mairie
- Zone commerciale
- Garage
- Parking public
Les coordonnées et paramètres doivent être adaptés à votre mapping.
Interactions et parcmètres
Ces réglages se font dans config.lua.
Utiliser ox_target
Config.UseOxTarget = true
Config.InteractionDistance = 2.0Avec true, le script utilise ox_target s’il est démarré. Avec false, NC Parking Meter utilise son système de proximité avec la touche E.
Modèles reconnus
Config.MeterModels = {
`prop_parknmeter_01`,
`prop_parknmeter_02`
}Ajoutez ici d’autres modèles de parcmètres si votre mapping en utilise.
Détection du véhicule
Config.VehicleSearchRadius = 12.0
Config.AllowManualPlate = trueVehicleSearchRadius définit le rayon de recherche du véhicule autour du parcmètre. AllowManualPlate autorise ou interdit la saisie manuelle d’une plaque dans l’interface.
Tarifs et durées
Tarifs et durées
Les prix peuvent être adaptés à l'économie de votre serveur. Vous pouvez proposer plusieurs durées de stationnement selon la configuration de votre version.
Exemple de grille
- 30 minutes
- 1 heure
- 2 heures
- 4 heures
Ces durées sont des exemples : utilisez les valeurs réellement définies dans votre configuration.
Zones et tarifs
Les zones se règlent dans Config.DefaultZone et Config.Zones dans config.lua.
Zone par défaut
Config.DefaultZone = {
id = 'los_santos',
label = 'Ville de Los Santos',
hourlyRate = 8.0,
minMinutes = 15,
maxMinutes = 240,
freeSchedule = { enabled = true, startHour = 20, endHour = 8 }
}Elle est utilisée lorsqu’aucune zone spécifique ne correspond à la position du parcmètre.
Ajouter une zone
{
id = 'legion',
label = 'Legion Square',
center = vec3(215.76, -810.12, 30.73),
radius = 180.0,
hourlyRate = 10.0,
minMinutes = 15,
maxMinutes = 180,
freeSchedule = { enabled = true, startHour = 20, endHour = 8 }
}center: centre de la zone.radius: rayon en mètres.hourlyRate: tarif pour 60 minutes.minMinutes/maxMinutes: durée minimale et maximale acceptée.
Le prix est calculé proportionnellement au tarif horaire.
Horaires payants
Horaires payants et périodes gratuites
Une zone peut être payante uniquement pendant les horaires configurés. En dehors de cette période, le stationnement est considéré comme gratuit.
Exemple
08:00 → début du stationnement payant
20:00 → fin du stationnement payant
20:00 → 08:00 : stationnement gratuitAdaptez les horaires dans la configuration du script.
Durées
Les boutons proposés dans l’interface se règlent dans Config.DurationButtons dans config.lua.
Config.DurationButtons = { 15, 30, 60, 120 }Les valeurs sont exprimées en minutes. Vous pouvez par exemple utiliser :
Config.DurationButtons = { 30, 60, 120, 240 }Attention : une durée doit également respecter minMinutes et maxMinutes de la zone utilisée. Si vous ajoutez un bouton de 240 minutes dans une zone limitée à 180 minutes, le serveur refusera cette durée.
Paiement du stationnement
Paiement du stationnement
Le joueur utilise le système de stationnement, sélectionne une durée puis valide le paiement. Le stationnement est associé au véhicule concerné jusqu'à son expiration.
- Stationner le véhicule dans une zone.
- Utiliser le parcmètre ou l'interaction prévue.
- Sélectionner la durée.
- Vérifier le prix.
- Valider le paiement.
- Le véhicule passe au statut payé jusqu'à l'expiration.
Horaires gratuits
Les périodes gratuites se règlent pour chaque zone dans son bloc freeSchedule.
freeSchedule = {
enabled = true,
startHour = 20,
endHour = 8
}enabled = true: active la période gratuite.enabled = false: le stationnement reste payant en permanence.startHour = 20: début de la gratuité à 20 h.endHour = 8: fin de la gratuité à 8 h.
Le script gère les plages traversant minuit. Avec l’exemple ci-dessus, le stationnement est gratuit de 20:00 à 08:00.
L’heure est calculée côté serveur. Si les horaires semblent décalés, vérifiez l’heure et le fuseau horaire de la machine qui héberge FXServer.
Statuts du véhicule
Statuts du stationnement
Payé
Le véhicule possède un stationnement valide.
Expiré
La durée achetée est terminée.
Non payé
Le véhicule se trouve dans une zone payante sans stationnement valide.
Gratuit
La zone est actuellement dans une période gratuite.
Hors zone
Le véhicule n'est pas concerné par une zone gérée par NC Parking Meter.
Paiements
Les moyens de paiement disponibles se règlent dans Config.PaymentMethods.
Config.PaymentMethods = {
cash = true,
bank = true
}Passez une méthode à false pour la désactiver.
Versement sur un compte société
Le réglage se trouve dans Config.Society.
Config.Society = {
enabled = false,
account = 'society_city',
percent = 100
}enabled: active le versement.account: nom du compte partagé ESX.percent: pourcentage du paiement reversé, de 0 à 100.
Cette option utilise l’événement de compte partagé ESX. Le compte indiqué doit donc exister sur votre serveur.
Notifications
Les notifications se règlent dans Config.Notify dans config.lua.
Config.Notify = {
useOkokNotify = true,
title = 'Parking',
position = 'top-left',
duration = 4500
}useOkokNotify: utilise okokNotify lorsqu’il est démarré.title: titre des notifications.position: position utilisée par le système de notification de secours.duration: durée d’affichage en millisecondes.
Si okokNotify est désactivé ou absent, le script utilise les notifications ox_lib.
Vérification Police
Vérification Police
Les forces de l'ordre peuvent contrôler le statut du stationnement d'un véhicule via l'intégration prévue par le serveur.
Informations de contrôle
- Plaque du véhicule
- Zone concernée
- Statut du paiement
- Validité du stationnement
- Temps restant lorsque disponible
Si vous utilisez l'intégration esx_policejob, vérifiez que les modifications fournies avec votre version du script sont installées.
Contrôle Police
Les métiers autorisés à contrôler le stationnement se règlent dans Config.EnforcementJobs.
Config.EnforcementJobs = {
police = 0,
sheriff = 0
}La clé correspond au nom ESX du job et la valeur au grade minimum. Par exemple police = 2 autorise uniquement les policiers de grade 2 ou supérieur.
Commande
/checkparkingL’agent doit se placer près du véhicule. Le script lit sa plaque puis indique si le stationnement est valide et, lorsqu’il l’est, le nombre de minutes restantes.
Intégration dans un menu police
Pour une intégration personnalisée, vous pouvez utiliser l’export serveur décrit dans le chapitre « Exports et intégrations ».
Exports et intégrations
Export serveur : vérifier une plaque
local status = exports['nc_parking_meter']:GetParkingStatus('ABC123')
if status.active then
print(status.remaining)
endLe résultat peut contenir active, plate, zone_id, paid_at, expires_at, price, payment_method et remaining.
Export client : ouvrir le parcmètre
exports['nc_parking_meter']:OpenParkingMeter()Cet export permet d’ouvrir l’interface depuis une autre ressource côté client.
Le nom utilisé dans exports[...] doit correspondre au nom réel du dossier de la ressource sur votre serveur.Base de données
La table utilisée est nc_parking_sessions. Elle est créée par sql/install.sql.
Données enregistrées
identifier: identifiant du joueur ayant payé.plate: plaque du véhicule.zone_id: zone concernée.paid_at: date du paiement.expires_at: date d’expiration.price: montant payé.payment_method:cashoubank.
Nettoyage automatique
Réglage dans Config.Cleanup :
Config.Cleanup = {
enabled = true,
keepExpiredHours = 48
}Avec cette configuration, les sessions expirées depuis plus de 48 heures sont supprimées automatiquement. Le nettoyage est exécuté périodiquement par le serveur.
Personnalisation
Personnalisation
NC Parking Meter peut être adapté à l'économie et au fonctionnement de votre serveur RP.
- Zones
- Tarifs
- Durées
- Horaires
- Périodes gratuites
- Notifications
- Blips
- Interactions
- Contrôles de stationnement
Les options exactes disponibles dépendent de la version installée.
Dépannage
Le parcmètre ne s’ouvre pas
Vérifiez Config.UseOxTarget. Si la valeur est true, assurez-vous que ox_target est démarré avant NC Parking Meter. Vérifiez aussi que le modèle utilisé est présent dans Config.MeterModels.
Aucun véhicule n’est détecté
Augmentez Config.VehicleSearchRadius dans config.lua ou activez Config.AllowManualPlate.
Une zone n’utilise pas le bon tarif
Vérifiez center et radius dans Config.Zones. Si aucune zone spécifique ne correspond, Config.DefaultZone est utilisée.
Le stationnement est toujours gratuit
Contrôlez freeSchedule.enabled, startHour, endHour et l’heure du serveur.
Erreur SQL « Unknown column zone_id »
Votre table provient probablement d’une ancienne version. Utilisez sql/migration_v2.0.2_compat.sql ou réinstallez la structure avec le SQL correspondant à votre version après sauvegarde des données.
/checkparking refuse l’accès
Vérifiez le nom du métier et le grade minimum dans Config.EnforcementJobs.
Support
Si le problème persiste, ouvrez un ticket depuis votre espace client NightCode.
À fournir au support
- Version du script : NC Parking Meter V2.0.2
- Version ESX Legacy
- Erreur complète de la console client ou serveur
- Étapes permettant de reproduire le problème
- Partie concernée de votre
config.luasans informations sensibles
Ne transmettez jamais de mot de passe, token, clé API ou accès serveur dans un canal public.
