Sincronização em tempo real FiveM
Este tutorial guiará você pela criação de um script FiveM que sincroniza o relógio do jogo com o tempo do mundo real. Isso garante que o ambiente do jogo reflita o tempo real, aumentando o realismo para os jogadores.
Abordaremos scripts do lado do servidor e do lado do cliente, adicionando funcionalidades para iniciar e parar a sincronização e configurando o recurso para seu servidor FiveM.
Índice
Pré-requisitos
Antes de começar, certifique-se de ter o seguinte:
- Acesso ao servidor FiveM: Você precisa de acesso administrativo ao seu servidor FiveM para adicionar scripts.
- Conhecimento básico de Lua: A familiaridade com o script Lua ajudará você a entender e personalizar o script.
- Editor de texto: Software como Visual Studio Code, Sublime Text ou Notepad++ para editar arquivos de script.
Configurando a pasta de recursos
- Navegue até o seu diretório de recursos:Localize o
recursos
pasta no diretório do seu servidor FiveM. Isso normalmente é encontrado em:bashCode copierensua-pasta-do-servidor-fivem/recursos/
- Criar uma nova pasta de recursos:Dentro do
recursos
pasta, crie uma nova pasta chamadaem tempo real
.bashCode copiarsua-pasta-do-servidor-fivem/recursos/tempo-real/
- Navegue até o
em tempo real
Pasta:Esta pasta conterá todos os scripts e arquivos de configuração necessários para a sincronização em tempo real.
Criando o script do lado do servidor (servidor.lua
)
- Criar
servidor.lua
:Dentro doem tempo real
pasta, crie um novo arquivo chamadoservidor.lua
. - Adicione o seguinte código a
servidor.lua
:luaCode copiarRegisterNetEvent("realtime:event") AddEventHandler("realtime:event", function() hora local = tonumber(os.date("%H")) minuto local = tonumber(os.date("%M")) segundo local = tonumber(os.date("%S")) TriggerClientEvent("realtime:event", fonte, hora, minuto, segundo) fim)
Explicação:- RegistrarNetEvent: Registra um evento de rede denominado
tempo real:evento
. - Adicionar manipulador de eventos:Define o que acontece quando o
tempo real:evento
é acionado. - os.data: Recupera a hora atual do sistema (hora, minuto, segundo).
- Evento de gatilhoCliente: Envia os dados de tempo para o cliente que disparou o evento.
- RegistrarNetEvent: Registra um evento de rede denominado
Criando o script do lado do cliente (cliente.lua
)
- Criar
cliente.lua
:Dentro doem tempo real
pasta, crie um novo arquivo chamadocliente.lua
. - Adicione o seguinte código a
cliente.lua
:luaCode copiar-- Define a duração de um minuto no jogo em milissegundos SetMillisecondsPerGameMinute(60000) -- 60.000 ms = 1 minuto do mundo real RegisterNetEvent("realtime:event") AddEventHandler("realtime:event", function(hour, minute, second) NetworkOverrideClockTime(hour, minute, second) end) -- Aciona o evento do servidor para iniciar a sincronização TriggerServerEvent("realtime:event")
Explicação:- DefinirMilissegundosPorMinutoDeJogo: Define quanto tempo dura um minuto no jogo. Configurando para
60000
faz com que 1 minuto no jogo seja igual a 1 minuto no mundo real. - RegisterNetEvent e AdicionarEventHandler:Escuta o
tempo real:evento
do servidor e atualiza o relógio do jogo de acordo. - NetworkOverrideClockTime: Substitui o relógio do jogo para corresponder ao horário real recebido do servidor.
- Evento do TriggerServer: Inicia a sincronização acionando o evento do servidor.
- DefinirMilissegundosPorMinutoDeJogo: Define quanto tempo dura um minuto no jogo. Configurando para
Adicionando uma funcionalidade de parada
Para permitir a ativação e desativação da sincronização em tempo real, adicionaremos funções para iniciar e interromper a sincronização.
- Atualizar
cliente.lua
com funcionalidade de parada:luaCode copiarlocal syncActive = true local syncThread = nil -- Função para iniciar a sincronização function StartRealTimeSync() if not syncActive then syncActive = true syncThread = CreateThread(function() while syncActive do TriggerServerEvent("realtime:event") Wait(60000) -- Aguarde 1 minuto antes do próximo fim da sincronização end) end end -- Função para parar a sincronização function StopRealTimeSync() if syncActive then syncActive = false if syncThread then -- Em Lua, não há uma maneira direta de matar uma thread. -- Usar um sinalizador para sair do loop efetivamente interrompe a 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) -- Inicia a sincronização no início do recurso StartRealTimeSync() -- Exemplo: Comando para alternar a sincronização RegisterCommand("toggleTimeSync", function() if syncActive then StopRealTimeSync() print("Sincronização em tempo real interrompida.") else StartRealTimeSync() print("Sincronização em tempo real iniciada.") end end, false)
Explicação:- sincronizarAtivo: Um sinalizador para determinar se a sincronização está ativa.
- IniciarRealTimeSync: Inicia um loop que solicita atualizações de tempo do servidor a cada minuto.
- PararRealTimeSync: Interrompe a sincronização definindo o sinalizador como falso.
- RegistrarComando: Adiciona um comando (
/toggleSincronização de tempo
) que os jogadores podem usar para ativar ou desativar a sincronização.
Criando o manifesto de recursos (fxmanifest.lua
)
Cada recurso FiveM requer um arquivo de manifesto que define seus metadados e dependências.
- Criar
fxmanifest.lua
:Dentro doem tempo real
pasta, crie um novo arquivo chamadofxmanifest.lua
. - Adicione o seguinte código a
fxmanifest.lua
:fx_version 'cerulean' jogo 'gta5' autor 'YourName' descrição 'Script de sincronização em tempo real para FiveM' versão '1.0.0' server_script 'server.lua' client_script 'client.lua'
- Explicação:
- versão_fx: Especifica a versão do manifesto FiveM.
cerúleo
é a mais recente até o momento em que este artigo foi escrito. - jogo: Indica o jogo para o qual o recurso é destinado (
gta5
). - autor, descrição, versão: Metadados sobre seu recurso.
- script_do_servidor e script_do_cliente: Especifica os scripts do servidor e do cliente a serem carregados.
- versão_fx: Especifica a versão do manifesto FiveM.
Iniciando o recurso no seu servidor
- Edite a configuração do seu servidor:Abra o arquivo de configuração do seu servidor, normalmente chamado
servidor.cfg
. - Adicione o recurso à configuração:Adicione a seguinte linha para garantir que
em tempo real
recurso começa com o servidor:rubyCode copiagarantir tempo real
Observação:Se você estiver usandocomeçar
em vez degarantir
, você pode usar:começar em tempo real
- Salve e reinicie seu servidor:Depois de salvar as alterações em
servidor.cfg
, reinicie seu servidor FiveM para carregar o novo recurso.
Download completo do recurso
Para sua conveniência, aqui está o conjunto completo de arquivos que você precisa criar para o em tempo real
recurso.
1. servidor.lua
RegisterNetEvent("realtime:event") AddEventHandler("realtime:event", function() hora local = tonumber(os.date("%H")) minuto local = tonumber(os.date("%M")) segundo local = tonumber(os.date("%S")) TriggerClientEvent("realtime:event", fonte, hora, minuto, segundo) fim)
2. cliente.lua
local syncActive = true local syncThread = nil -- Função para iniciar a sincronização function StartRealTimeSync() if not syncActive then syncActive = true syncThread = CreateThread(function() while syncActive do TriggerServerEvent("realtime:event") Wait(60000) -- Aguarde 1 minuto antes do próximo fim da sincronização end) end end -- Função para parar a sincronização function StopRealTimeSync() if syncActive then syncActive = false if syncThread then -- Em Lua, threads são cooperativas; definir syncActive como false interromperá o loop syncThread = nil end end end RegisterNetEvent("realtime:event") AddEventHandler("realtime:event", function(hour, minute, second) if syncActive then NetworkOverrideClockTime(hour, minute, second) end end) -- Inicia a sincronização no início do recurso StartRealTimeSync() -- Exemplo: Comando para alternar a sincronização RegisterCommand("toggleTimeSync", function() if syncActive then StopRealTimeSync() print("Sincronização em tempo real interrompida.") else StartRealTimeSync() print("Sincronização em tempo real iniciada.") end end, false)
3. fxmanifest.lua
fx_version 'cerulean' jogo 'gta5' autor 'YourName' descrição 'Script de sincronização em tempo real para FiveM' versão '1.0.0' server_script 'server.lua' client_script 'client.lua'
Roteiro completo
Aqui você pode baixar o script que acabamos de criar:
https://github.com/HiFiveM/fivem-realtime/archive/refs/heads/main.zip
Você criou com sucesso um recurso FiveM que sincroniza o relógio do jogo com o tempo do mundo real. Este script aprimora a experiência de jogo ao garantir que o ambiente do jogo reflita o tempo real, adicionando uma camada de realismo para os jogadores.
Você pode personalizar ainda mais o script ajustando intervalos de sincronização, adicionando mais comandos ou integrando-o com outros recursos do servidor.
Sinta-se à vontade para expandir essa base para atender às necessidades específicas do seu servidor!