Utiliser le coupon WELCOME pour économiser 20 %

$ USD
  • $ USD
  • € EUR
  • £ GBP
  • $ AUD
  • R$ BRL
  • CHF CHF
  • ¥ JPY
Synchronisation en temps réel FiveM – Mods FiveM gratuits

Comment synchroniser l'horloge de jeu FiveM avec l'UTC

Cette petite ressource de développement permet à chaque client connecté d'afficher l'heure UTC de l'hôte FXServer. Utilisez-la uniquement si elle est la seule ressource à gérer l’horloge du jeu. Si votre framework gère déjà l'heure et la météo, configurez ou étendez cette ressource au lieu d'exécuter deux systèmes d'horloge.

Cet exemple nécessite la prise en charge de l'état pour GlobalState. Arrêtez les autres ressources de synchronisation de l'heure/météo sur l'instance de test afin qu'un seul contrôleur gère l'horloge. Il affiche l'UTC, et non le fuseau horaire local de l'hôte du serveur.

Les exemples de configuration et de code ici ciblent FiveM pour GTA V Legacy. Enhanced a des règles d'exécution et de compatibilité différentes ; vérifiez les changements Legacy-to-Enhanced de Cfx.re avant de les appliquer à un serveur Enhanced.

Préparer le test

Vérifiez que l'horloge de l'hôte est précise. Sauvegardez la configuration existante de la ressource temporelle et utilisez un serveur isolé. Créez resources/[local]/utc_clock avec les trois fichiers ci-dessous. Le serveur publie l'heure ; les clients ne peuvent pas définir les valeurs GlobalState sur le serveur.

1. Déclarer la ressource

Enregistrez ceci sous le nom fxmanifest.lua :

fx_version 'cerulean'
game 'gta5'
server_script 'server.lua'
client_script 'client.lua'

2. Publier l'UTC depuis le serveur

Enregistrez ceci sous le nom server.lua. Le point d'exclamation initial dans os.date sélectionne l'UTC plutôt que le fuseau horaire local de l'hôte :

CreateThread(function()
    while true do
        local now = os.date('!*t')
        GlobalState.tutorialUtcClock = {
            hour = now.hour, minute = now.min, second = now.sec
        }
        Wait(1000)
    end
end)

AddEventHandler('onResourceStop', function(name)
    if name == GetCurrentResourceName() then
        GlobalState.tutorialUtcClock = nil
    end
end)

3. Afficher l'horloge partagée

Enregistrez ceci sous le nom client.lua :

CreateThread(function()
    while true do
        local clock = GlobalState.tutorialUtcClock
        if clock then
            NetworkOverrideClockTime(clock.hour, clock.minute, clock.second)
        end
        Wait(1000)
    end
end)

AddEventHandler('onResourceStop', function(name)
    if name == GetCurrentResourceName() then
        NetworkClearClockTimeOverride()
    end
end)

Démarrer, vérifier et arrêter

  1. Ajoutez ensure utc_clock à server.cfg après avoir désactivé le contrôleur d'horloge concurrent sur le serveur de test.
  2. Dans la console du serveur, exécutez refresh et ensure utc_clock. Connectez-vous avec deux clients et comparez leur heure de jeu affichée avec l'UTC actuelle.
  3. Reconnectez un client, redémarrez la ressource et répétez la comparaison. Inspectez les journaux F8 et du serveur.
  4. Exécutez stop utc_clock dans la console du serveur pour annuler cette redéfinition de l’horloge. Pour restaurer votre système horaire précédent, supprimez la nouvelle ligne ensure et redémarrez la ressource horaire d’origine ou le serveur.

Connaître les limites

Cet exemple suit une journée UTC réelle de 24 heures ; il n’accélère pas le cycle du jour et n’applique pas de fuseau horaire régional avec changement d’heure. Les délais du réseau et de l’ordonnanceur l’empêchent d’afficher l’heure réelle avec une précision parfaite. Il ne synchronise pas la météo.

Consultez les state bags de Cfx.re et la fonction native de remplacement de l’heure avant d’intégrer ce modèle à une ressource plus importante.

Documentation de référence

Source : lua.org

Laisser un commentaire