0
← Toutes les documentations
NC Parking Meter — documentation NightCode
DOCUMENTATION NIGHTCODE

Documentation — NC Parking Meter

Transformez les parcmètres de Los Santos en véritable système de stationnement RP.

01 · PRÉSENTATION

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
02 · PRÉSENTATION

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
03 · INSTALLATION

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_extended
  • ox_lib
  • oxmysql
  • ox_target recommandé mais optionnel
  • okokNotify optionnel

3. server.cfg

ensure oxmysql
ensure ox_lib
ensure es_extended
ensure ox_target
ensure nc_parking_meter

Si vous n’utilisez pas ox_target, retirez sa ligne et réglez Config.UseOxTarget = false.

04 · CONFIGURATION

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.UseOxTarget et Config.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
05 · ZONES DE STATIONNEMENT

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.

06 · INTERACTIONS ET PARCMÈTRES

Interactions et parcmètres

Ces réglages se font dans config.lua.

Utiliser ox_target

Config.UseOxTarget = true
Config.InteractionDistance = 2.0

Avec 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 = true

VehicleSearchRadius 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.

07 · TARIFS ET DURÉES

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.
08 · ZONES ET TARIFS

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.

09 · HORAIRES PAYANTS

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 gratuit

Adaptez les horaires dans la configuration du script.

10 · DURÉES

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.

11 · PAIEMENT DU STATIONNEMENT

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.

  1. Stationner le véhicule dans une zone.
  2. Utiliser le parcmètre ou l'interaction prévue.
  3. Sélectionner la durée.
  4. Vérifier le prix.
  5. Valider le paiement.
  6. Le véhicule passe au statut payé jusqu'à l'expiration.
12 · HORAIRES GRATUITS

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.
13 · STATUTS DU VÉHICULE

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.

14 · PAIEMENTS

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.

15 · NOTIFICATIONS

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.

16 · VÉRIFICATION POLICE

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.

17 · CONTRÔLE POLICE

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

/checkparking

L’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 ».

18 · 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)
end

Le 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.
19 · BASE DE DONNÉES

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 : cash ou bank.

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.

20 · PERSONNALISATION

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.

21 · DÉPANNAGE

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.

22 · SUPPORT

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.lua sans informations sensibles
Ne transmettez jamais de mot de passe, token, clé API ou accès serveur dans un canal public.