
- ESX
- QBCore
- vRP
Par Luke

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.
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.
Enregistrez ceci sous le nom fxmanifest.lua :
fx_version 'cerulean'
game 'gta5'
server_script 'server.lua'
client_script 'client.lua'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)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)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.
Voir les state bags de Cfx.re et l' la fonction native de redéfinition de l’horloge avant d'intégrer le modèle dans une ressource plus grande.





