Usar cupom WELCOME para salvar 20%

$ USD
  • $ USD
  • € EUR
  • £ GBP
  • $ AUD
  • R$ BRL
  • Franco suíço Franco suíço
  • ¥ ienes
Moeda
$ USD
  • $ USD
  • € EUR
  • £ GBP
  • $ AUD
  • R$ BRL
  • Franco suíço Franco suíço
  • ¥ ienes
Sincronização em tempo real do FiveM – Mods gratuitos para FiveM

Como Sincronizar o Relógio do Jogo FiveM com UTC

Este pequeno recurso de desenvolvimento faz com que cada cliente conectado exiba a hora UTC do host do FXServer. Use-o apenas quando for o único recurso que controla o relógio do jogo. Se o seu framework já gerencia tempo e clima, configure ou estenda esse recurso em vez de executar dois sistemas de relógio.

Este exemplo requer suporte a estado para GlobalState. Pare outros recursos de sincronização de tempo/clima na instância de teste para que apenas um controlador gerencie o relógio. Ele exibe UTC, não o fuso horário local do host do servidor.

A configuração e os exemplos de código aqui são voltados ao FiveM para GTA V Legacy. O Enhanced tem regras diferentes de runtime e de compatibilidade; verifique as alterações de Legacy para Enhanced do Cfx.re antes de aplicá-las a um servidor Enhanced.

Prepare o teste

Verifique se o relógio do host está preciso. Faça backup da configuração existente do recurso de tempo e use um servidor isolado. Crie resources/[local]/utc_clock com os três arquivos abaixo. O servidor publica a hora; os clientes não podem definir valores de GlobalState no servidor.

1. Declare o recurso

Salve isso como fxmanifest.lua:

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

2. Publique UTC do servidor

Salve isso como server.lua. O ponto de exclamação inicial em os.date seleciona UTC em vez do fuso horário local do 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. Exiba o relógio compartilhado

Salve isso 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)

Iniciar, verificar e parar

  1. Adicione ensure utc_clock ao server.cfg após desabilitar o controlador de relógio concorrente no servidor de teste.
  2. No console do servidor, execute refresh e ensure utc_clock. Conecte-se com dois clientes e compare o tempo de jogo exibido com o UTC atual.
  3. Reconecte um cliente, reinicie o recurso e repita a comparação. Inspecione os logs do F8 e do servidor.
  4. Execute stop utc_clock no console do servidor para liberar esta substituição. Para restaurar seu sistema de tempo anterior, remova a nova linha ensure e reinicie o recurso de tempo original ou o servidor.

Conheça os limites

Este exemplo segue um dia UTC real de 24 horas; ele não acelera a luz do dia nem seleciona um fuso horário regional de horário de verão. Atrasos de rede e agendamento significam que não é uma indicação precisa do horário real. Ele não sincroniza o clima.

Consulte as state bags da Cfx.re e a função nativa de substituição do relógio antes de integrar esse padrão a um recurso maior.

Documentação de referência

Fonte: lua.org

Deixe um comentário