Usar cupón WELCOME para guardar 20%

€ EUR
  • $ USD
  • € EUR
  • £ GBP
  • $ AUD
  • R$ BRL
  • CHF CHF
  • ¥ yenes
Sincronización en tiempo real de FiveM – Mods gratuitos de FiveM

Cómo sincronizar el reloj del juego de FiveM con UTC

Este pequeño recurso de desarrollo hace que cada cliente conectado muestre la hora UTC del host de FXServer. Úsalo solo cuando sea el único propietario del reloj del juego. Si tu framework ya gestiona la hora y el clima, configura o extiende ese recurso en lugar de ejecutar dos sistemas de reloj.

Este ejemplo requiere soporte de estado para GlobalState. Detén otros recursos de sincronización de tiempo/clima en la instancia de prueba para que un controlador sea el dueño del reloj. Muestra UTC, no la zona horaria local del host del servidor.

Los ejemplos de configuración y código aquí están dirigidos a FiveM para GTA V Legacy. Enhanced tiene diferentes reglas de tiempo de ejecución y compatibilidad; consulta los cambios de Legacy a Enhanced de Cfx.re antes de aplicarlos a un servidor Enhanced.

Prepara la prueba

Verifica que el reloj del host sea preciso. Haz una copia de seguridad de la configuración del recurso de tiempo existente y usa un servidor aislado. Crea resources/[local]/utc_clock con los tres archivos siguientes. El servidor publica la hora; los clientes no pueden establecer valores de GlobalState en el servidor.

1. Declara el recurso

Guarda esto como fxmanifest.lua:

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

2. Publica UTC desde el servidor

Guarda esto como server.lua. El signo de exclamación inicial en os.date selecciona UTC en lugar de la zona horaria local del host:

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. Muestra el reloj compartido

Guarda esto como 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)

Inicia, comprueba y detén

  1. Añade ensure utc_clock a server.cfg después de deshabilitar el controlador de reloj competidor en el servidor de prueba.
  2. En la consola del servidor, ejecuta refresh y ensure utc_clock. Únete con dos clientes y compara la hora del juego mostrada con la UTC actual.
  3. Vuelve a conectar un cliente, reinicia el recurso y repite la comparación. Inspecciona tanto los registros F8 como los del servidor.
  4. Ejecuta stop utc_clock en la consola del servidor para liberar esta anulación. Para restaurar tu sistema de tiempo anterior, elimina la nueva línea ensure y reinicia el recurso de tiempo original o el servidor.

Conoce los límites

Este ejemplo sigue un día UTC real de 24 horas; no acelera la luz del día ni selecciona una zona horaria regional de horario de verano. Los retrasos de red y de programación significan que no es una representación exacta de la hora real. No sincroniza el clima.

Consulta la documentación de state bags de Cfx.re y la función nativa para sobrescribir el reloj antes de integrar este patrón en un recurso más amplio.

Documentación de referencia

Fuente: lua.org

Deja una respuesta