Synchronisation en temps réel FiveM
Ce tutoriel vous guidera dans la création d'un script FiveM qui synchronise l'horloge du jeu avec l'heure réelle. Cela garantit que l'environnement de jeu reflète l'heure réelle, améliorant ainsi le réalisme pour les joueurs.
Nous aborderons les scripts côté serveur et côté client, en ajoutant des fonctionnalités pour démarrer et arrêter la synchronisation et en configurant la ressource pour votre serveur FiveM.
Table des matières
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
- Accès au serveur FiveM:Vous avez besoin d'un accès administrateur à votre serveur FiveM pour ajouter des scripts.
- Connaissances de base de Lua:La familiarité avec les scripts Lua vous aidera à comprendre et à personnaliser le script.
- Éditeur de texte:Des logiciels comme Visual Studio Code, Sublime Text ou Notepad++ pour éditer des fichiers de script.
Configuration du dossier de ressources
- Accédez à votre répertoire de ressources:Localisez le
ressources
dossier dans le répertoire de votre serveur FiveM. Il se trouve généralement à l'adresse suivante :bashCode copiervotre-dossier-serveur-fivem/ressources/
- Créer un nouveau dossier de ressources:À l'intérieur du
ressources
dossier, créez un nouveau dossier nomméen temps réel
Copier le code .bashvotre-dossier-serveur-fivem/ressources/temps-réel/
- Accédez au
en temps réel
Dossier:Ce dossier contiendra tous les scripts et fichiers de configuration nécessaires à la synchronisation en temps réel.
Création du script côté serveur (serveur.lua
)
- Créer
serveur.lua
:À l'intérieur duen temps réel
dossier, créez un nouveau fichier nomméserveur.lua
. - Ajoutez le code suivant à
serveur.lua
:Copier le code luaRegisterNetEvent("realtime:event") AddEventHandler("realtime:event", function() heure locale = tonumber(os.date("%H")) minute locale = tonumber(os.date("%M")) seconde locale = tonumber(os.date("%S")) TriggerClientEvent("realtime:event", source, heure, minute, seconde) fin)
Explication:- Inscrivez-vous à NetEvent: Enregistre un événement réseau nommé
temps réel:événement
. - Ajouter un gestionnaire d'événements: Définit ce qui se passe lorsque le
temps réel:événement
est déclenché. - os.date: Récupère l'heure système actuelle (heure, minute, seconde).
- TriggerClientEvent: Envoie les données temporelles au client qui a déclenché l'événement.
- Inscrivez-vous à NetEvent: Enregistre un événement réseau nommé
Création du script côté client (client.lua
)
- Créer
client.lua
:À l'intérieur duen temps réel
dossier, créez un nouveau fichier nomméclient.lua
. - Ajoutez le code suivant à
client.lua
:Copier le code lua-- Définir la durée d'une minute de jeu en millisecondes SetMillisecondsPerGameMinute(60000) -- 60 000 ms = 1 minute réelle RegisterNetEvent("realtime:event") AddEventHandler("realtime:event", function(hour, minute, second) NetworkOverrideClockTime(hour, minute, second) end) -- Déclencher l'événement du serveur pour lancer la synchronisation TriggerServerEvent("realtime:event")
Explication:- DéfinirMillisecondesParMinuteDeJeu: Définit la durée d'une minute de jeu. Le réglage sur
60000
rend 1 minute de jeu égale 1 minute dans le monde réel. - RegisterNetEvent et AddEventHandler:Écoute le
temps réel:événement
depuis le serveur et met à jour l'horloge du jeu en conséquence. - NetworkOverrideClockTime: Remplace l'horloge du jeu pour correspondre à l'heure réelle reçue du serveur.
- Déclencheur d'événement du serveur:Initie la synchronisation en déclenchant l'événement serveur.
- DéfinirMillisecondesParMinuteDeJeu: Définit la durée d'une minute de jeu. Le réglage sur
Ajout d'une fonctionnalité d'arrêt
Pour permettre d'activer et de désactiver la synchronisation en temps réel, nous ajouterons des fonctions pour démarrer et arrêter la synchronisation.
- Mise à jour
client.lua
avec fonctionnalité d'arrêt:Copier le code lualocal syncActive = true local syncThread = nil -- Fonction pour démarrer la synchronisation function StartRealTimeSync() if not syncActive then syncActive = true syncThread = CreateThread(function() while syncActive do TriggerServerEvent("realtime:event") Wait(60000) -- Attendre 1 minute avant la prochaine synchronisation end end) end end -- Fonction pour arrêter la synchronisation function StopRealTimeSync() if syncActive then syncActive = false if syncThread then -- En Lua, il n'existe aucun moyen direct de tuer un thread. -- L'utilisation d'un indicateur pour quitter la boucle arrête effectivement le thread. syncThread = nil end end end RegisterNetEvent("realtime:event") AddEventHandler("realtime:event", function(hour, minute, second) if syncActive then NetworkOverrideClockTime(hour, minute, second) end end) -- Démarrer la synchronisation au démarrage de la ressource StartRealTimeSync() -- Exemple : Commande pour activer/désactiver la synchronisation RegisterCommand("toggleTimeSync", function() if syncActive then StopRealTimeSync() print("Synchronisation en temps réel arrêtée.") else StartRealTimeSync() print("Synchronisation en temps réel démarrée.") end end, false)
Explication:- syncActive:Un indicateur pour déterminer si la synchronisation est active.
- DémarrerRealTimeSync: Lance une boucle qui demande des mises à jour de l'heure au serveur toutes les minutes.
- ArrêterRealTimeSync:Arrête la synchronisation en définissant l'indicateur sur faux.
- Commande d'enregistrement: Ajoute une commande (
/toggleTimeSync
) que les joueurs peuvent utiliser pour activer ou désactiver la synchronisation.
Création du manifeste de ressources (fxmanifest.lua
)
Chaque ressource FiveM nécessite un fichier manifeste qui définit ses métadonnées et ses dépendances.
- Créer
fxmanifest.lua
:À l'intérieur duen temps réel
dossier, créez un nouveau fichier nomméfxmanifest.lua
. - Ajoutez le code suivant à
fxmanifest.lua
:fx_version 'cerulean' jeu 'gta5' auteur 'VotreNom' description 'Script de synchronisation en temps réel pour FiveM' version '1.0.0' server_script 'server.lua' client_script 'client.lua'
- Explication:
- version_fx:Spécifie la version du manifeste FiveM.
azuré
est le dernier en date au moment de la rédaction. - jeu: Indique le jeu auquel la ressource est destinée (
gta5
). - auteur, description, version: Métadonnées sur votre ressource.
- script_serveur et script_client:Spécifie les scripts serveur et client à charger.
- version_fx:Spécifie la version du manifeste FiveM.
Démarrer la ressource sur votre serveur
- Modifier la configuration de votre serveur:Ouvrez le fichier de configuration de votre serveur, généralement nommé
serveur.cfg
. - Ajouter la ressource à la configuration:Ajoutez la ligne suivante pour garantir la
en temps réel
la ressource commence par le serveur : rubyCode copierassurer en temps réel
Note:Si vous utilisezcommencer
au lieu deassurer
, vous pouvez utiliser :démarrer en temps réel
- Enregistrez et redémarrez votre serveur:Après avoir enregistré les modifications apportées à
serveur.cfg
, redémarrez votre serveur FiveM pour charger la nouvelle ressource.
Téléchargement complet de la ressource
Pour plus de commodité, voici l'ensemble complet des fichiers que vous devez créer pour le en temps réel
ressource.
1. serveur.lua
RegisterNetEvent("realtime:event") AddEventHandler("realtime:event", function() heure locale = tonumber(os.date("%H")) minute locale = tonumber(os.date("%M")) seconde locale = tonumber(os.date("%S")) TriggerClientEvent("realtime:event", source, heure, minute, seconde) fin)
2. client.lua
local syncActive = true local syncThread = nil -- Fonction pour démarrer la synchronisation function StartRealTimeSync() if not syncActive then syncActive = true syncThread = CreateThread(function() while syncActive do TriggerServerEvent("realtime:event") Wait(60000) -- Attendre 1 minute avant la prochaine synchronisation end end) end end -- Fonction pour arrêter la synchronisation function StopRealTimeSync() if syncActive then syncActive = false if syncThread then -- En Lua, les threads sont coopératifs ; définir syncActive sur false arrêtera la boucle syncThread = nil end end end RegisterNetEvent("realtime:event") AddEventHandler("realtime:event", function(hour, minute, second) if syncActive then NetworkOverrideClockTime(hour, minute, second) end end) -- Démarrer la synchronisation au démarrage de la ressource StartRealTimeSync() -- Exemple : Commande pour activer/désactiver la synchronisation RegisterCommand("toggleTimeSync", function() if syncActive then StopRealTimeSync() print("Synchronisation en temps réel arrêtée.") else StartRealTimeSync() print("Synchronisation en temps réel démarrée.") end end, false)
3. fxmanifest.lua
fx_version 'cerulean' jeu 'gta5' auteur 'VotreNom' description 'Script de synchronisation en temps réel pour FiveM' version '1.0.0' server_script 'server.lua' client_script 'client.lua'
Scénario complet
Ici vous pouvez télécharger le script que nous venons de créer :
https://github.com/HiFiveM/fivem-realtime/archive/refs/heads/main.zip
Vous avez créé avec succès une ressource FiveM qui synchronise l'horloge du jeu avec l'heure réelle. Ce script améliore l'expérience de jeu en garantissant que l'environnement de jeu reflète l'heure réelle, ajoutant ainsi une couche de réalisme pour les joueurs.
Vous pouvez personnaliser davantage le script en ajustant les intervalles de synchronisation, en ajoutant des commandes supplémentaires ou en l'intégrant à d'autres fonctionnalités du serveur.
N'hésitez pas à développer cette base pour l'adapter aux besoins uniques de votre serveur !