{"id":158437,"date":"2024-09-26T14:01:24","date_gmt":"2024-09-26T12:01:24","guid":{"rendered":"https:\/\/hifivem.com\/?p=158437"},"modified":"2026-07-24T12:46:18","modified_gmt":"2026-07-24T10:46:18","slug":"sincronizacao-em-tempo-real-fivem","status":"publish","type":"post","link":"https:\/\/fivemx.com\/pt\/sincronizacao-em-tempo-real-fivem\/","title":{"rendered":"Sincroniza\u00e7\u00e3o em tempo real FiveM"},"content":{"rendered":"<p class=\"wp-block-paragraph\">Este tutorial guiar\u00e1 voc\u00ea pela cria\u00e7\u00e3o de um script FiveM que sincroniza o rel\u00f3gio 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.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Abordaremos scripts do lado do servidor e do lado do cliente, adicionando funcionalidades para iniciar e parar a sincroniza\u00e7\u00e3o e configurando o recurso para seu servidor FiveM.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"prerequisites\">Pr\u00e9-requisitos<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Antes de come\u00e7ar, certifique-se de ter o seguinte:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Acesso ao servidor FiveM<\/strong>:Voc\u00ea precisa de acesso administrativo ao seu <a href=\"https:\/\/fivemx.com\/pt\/convertendo-scripts-fivem\/\" title=\"Convertendo scripts FiveM \u2013 ESX, QBCore, QBOX (Guia de Framework)\" data-wpil-monitor-id=\"1661\">Servidor FiveM para adicionar scripts<\/a>.<\/li>\n\n\n\n<li><strong>Conhecimento b\u00e1sico de Lua<\/strong>: A familiaridade com o script Lua ajudar\u00e1 voc\u00ea a entender e personalizar o script.<\/li>\n\n\n\n<li><strong>Editor de texto<\/strong>: Software como Visual Studio Code, Sublime Text ou Notepad++ para editar arquivos de script.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"setting-up-the-resource-folder\">Configurando a pasta de recursos<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Navegue at\u00e9 o seu diret\u00f3rio de recursos<\/strong>:Localize o <code>recursos<\/code> pasta no diret\u00f3rio do seu servidor FiveM. Isso normalmente \u00e9 encontrado em:bashCode copieren<code>sua-pasta-do-servidor-fivem\/recursos\/<\/code><\/li>\n\n\n\n<li><strong>Criar uma nova pasta de recursos<\/strong>:Dentro do <code>recursos<\/code> pasta, crie uma nova pasta chamada <code>em tempo real<\/code>.bashCode copiar<code>sua-pasta-do-servidor-fivem\/recursos\/tempo-real\/<\/code><\/li>\n\n\n\n<li><strong>Navegue at\u00e9 o <code>em tempo real<\/code> Pasta<\/strong>:Esta pasta conter\u00e1 todos os scripts e arquivos de configura\u00e7\u00e3o necess\u00e1rios para a sincroniza\u00e7\u00e3o em tempo real.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"creating-the-server-side-script-server-lua\">Criando o script do lado do servidor (<code>servidor.lua<\/code>)<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Criar <code>servidor.lua<\/code><\/strong>:Dentro do <code>em tempo real<\/code> pasta, crie um novo arquivo chamado <code>servidor.lua<\/code>.<\/li>\n\n\n\n<li><strong>Adicione o seguinte c\u00f3digo a <code>servidor.lua<\/code><\/strong>:luaCode copiar<code>RegisterNetEvent(&quot;realtime:event&quot;) AddEventHandler(&quot;realtime:event&quot;, function() hora local = tonumber(os.date(&quot;%H&quot;)) minuto local = tonumber(os.date(&quot;%M&quot;)) segundo local = tonumber(os.date(&quot;%S&quot;)) TriggerClientEvent(&quot;realtime:event&quot;, fonte, hora, minuto, segundo) fim) <\/code><strong>Explica\u00e7\u00e3o<\/strong>:\n<ul class=\"wp-block-list\">\n<li><strong>RegistrarNetEvent<\/strong>: Registra um evento de rede denominado <code>tempo real:evento<\/code>.<\/li>\n\n\n\n<li><strong>Adicionar manipulador de eventos<\/strong>:Define o que acontece quando o <code>tempo real:evento<\/code> \u00e9 acionado.<\/li>\n\n\n\n<li><strong>os.data<\/strong>: Recupera a hora atual do sistema (hora, minuto, segundo).<\/li>\n\n\n\n<li><strong>Evento de gatilhoCliente<\/strong>: Envia os dados de tempo para o cliente que disparou o evento.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"creating-the-client-side-script-client-lua\">Criando o script do lado do cliente (<code>cliente.lua<\/code>)<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Criar <code>cliente.lua<\/code><\/strong>:Dentro do <code>em tempo real<\/code> pasta, crie um novo arquivo chamado <code>cliente.lua<\/code>.<\/li>\n\n\n\n<li><strong>Adicione o seguinte c\u00f3digo a <code>cliente.lua<\/code><\/strong>:luaCode copiar<code>-- Define a dura\u00e7\u00e3o de um minuto no jogo em milissegundos SetMillisecondsPerGameMinute(60000) -- 60.000 ms = 1 minuto do mundo real RegisterNetEvent(&quot;realtime:event&quot;) AddEventHandler(&quot;realtime:event&quot;, function(hour, minute, second) NetworkOverrideClockTime(hour, minute, second) end) -- Aciona o evento do servidor para iniciar a sincroniza\u00e7\u00e3o TriggerServerEvent(&quot;realtime:event&quot;) <\/code><strong>Explica\u00e7\u00e3o<\/strong>:\n<ul class=\"wp-block-list\">\n<li><strong>DefinirMilissegundosPorMinutoDeJogo<\/strong>: Define quanto tempo dura um minuto no jogo. Configurando para <code>60000<\/code> faz com que 1 minuto no jogo seja igual a 1 minuto no mundo real.<\/li>\n\n\n\n<li><strong>RegisterNetEvent e AdicionarEventHandler<\/strong>:Escuta o <code>tempo real:evento<\/code> do servidor e atualiza o rel\u00f3gio do jogo de acordo.<\/li>\n\n\n\n<li><strong>NetworkOverrideClockTime<\/strong>: Substitui o rel\u00f3gio do jogo para corresponder ao hor\u00e1rio real recebido do servidor.<\/li>\n\n\n\n<li><strong>Evento do TriggerServer<\/strong>: Inicia a sincroniza\u00e7\u00e3o acionando o evento do servidor.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"adding-a-stop-functionality\">Adicionando uma funcionalidade de parada<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para permitir a ativa\u00e7\u00e3o e desativa\u00e7\u00e3o da sincroniza\u00e7\u00e3o em tempo real, adicionaremos fun\u00e7\u00f5es para iniciar e parar a sincroniza\u00e7\u00e3o.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Atualizar <code>cliente.lua<\/code> com funcionalidade de parada<\/strong>:luaCode copiar<code>local syncActive = true local syncThread = nil -- Fun\u00e7\u00e3o para iniciar a sincroniza\u00e7\u00e3o function StartRealTimeSync() if not syncActive then syncActive = true syncThread = CreateThread(function() while syncActive do TriggerServerEvent(&quot;realtime:event&quot;) Wait(60000) -- Aguarde 1 minuto antes do pr\u00f3ximo fim da sincroniza\u00e7\u00e3o end) end end -- Fun\u00e7\u00e3o para parar a sincroniza\u00e7\u00e3o function StopRealTimeSync() if syncActive then syncActive = false if syncThread then -- Em Lua, n\u00e3o h\u00e1 uma maneira direta de matar uma thread. -- Usar um sinalizador para sair do loop efetivamente interrompe a thread. syncThread = nil end end end RegisterNetEvent(&quot;realtime:event&quot;) AddEventHandler(&quot;realtime:event&quot;, function(hour, minute, second) if syncActive then NetworkOverrideClockTime(hour, minute, second) end end) -- Inicia a sincroniza\u00e7\u00e3o no in\u00edcio do recurso StartRealTimeSync() -- Exemplo: Comando para alternar a sincroniza\u00e7\u00e3o RegisterCommand(&quot;toggleTimeSync&quot;, function() if syncActive then StopRealTimeSync() print(&quot;Sincroniza\u00e7\u00e3o em tempo real interrompida.&quot;) else StartRealTimeSync() print(&quot;Sincroniza\u00e7\u00e3o em tempo real iniciada.&quot;) end end, false) <\/code><strong>Explica\u00e7\u00e3o<\/strong>:\n<ul class=\"wp-block-list\">\n<li><strong>sincronizarAtivo<\/strong>: Um sinalizador para determinar se a sincroniza\u00e7\u00e3o est\u00e1 ativa.<\/li>\n\n\n\n<li><strong>IniciarRealTimeSync<\/strong>: Inicia um loop que solicita atualiza\u00e7\u00f5es de tempo do servidor a cada minuto.<\/li>\n\n\n\n<li><strong>PararRealTimeSync<\/strong>: Interrompe a sincroniza\u00e7\u00e3o definindo o sinalizador como falso.<\/li>\n\n\n\n<li><strong>RegistrarComando<\/strong>: Adiciona um comando (<code>\/toggleSincroniza\u00e7\u00e3o de tempo<\/code>) que os jogadores podem usar para ativar ou desativar a sincroniza\u00e7\u00e3o.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"creating-the-resource-manifest-fxmanifest-lua\">Criando o manifesto de recursos (<code>fxmanifest.lua<\/code>)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cada recurso FiveM requer um arquivo de manifesto que define seus metadados e depend\u00eancias.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Criar <code>fxmanifest.lua<\/code><\/strong>:Dentro do <code>em tempo real<\/code> pasta, crie um novo arquivo chamado <code>fxmanifest.lua<\/code>.<\/li>\n\n\n\n<li><strong>Adicione o seguinte c\u00f3digo a <code>fxmanifest.lua<\/code><\/strong>: <code>fx_version &#039;cerulean&#039; jogo &#039;gta5&#039; autor &#039;YourName&#039; descri\u00e7\u00e3o &#039;Script de sincroniza\u00e7\u00e3o em tempo real para FiveM&#039; vers\u00e3o &#039;1.0.0&#039; server_script &#039;server.lua&#039; client_script &#039;client.lua&#039;<\/code><\/li>\n\n\n\n<li><strong>Explica\u00e7\u00e3o<\/strong>:\n<ul class=\"wp-block-list\">\n<li><strong>vers\u00e3o_fx<\/strong>: Especifica a vers\u00e3o do manifesto FiveM. <code>cer\u00faleo<\/code> \u00e9 a mais recente at\u00e9 o momento em que este artigo foi escrito.<\/li>\n\n\n\n<li><strong>jogo<\/strong>: Indica o jogo para o qual o recurso \u00e9 destinado (<code>gta5<\/code>).<\/li>\n\n\n\n<li><strong>autor, descri\u00e7\u00e3o, vers\u00e3o<\/strong>: Metadados sobre seu recurso.<\/li>\n\n\n\n<li><strong>script_do_servidor e script_do_cliente<\/strong>: Especifica os scripts do servidor e do cliente a serem carregados.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"starting-the-resource-on-your-server\">Iniciando o recurso no seu servidor<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Edite a configura\u00e7\u00e3o do seu servidor<\/strong>:Abra o arquivo de configura\u00e7\u00e3o do seu servidor, normalmente chamado <code>servidor.cfg<\/code>.<\/li>\n\n\n\n<li><strong>Adicione o recurso \u00e0 configura\u00e7\u00e3o<\/strong>:Adicione a seguinte linha para garantir que <code>em tempo real<\/code> recurso come\u00e7a com o servidor:rubyCode copia<code>garantir tempo real <\/code><strong>Observa\u00e7\u00e3o<\/strong>:Se voc\u00ea estiver usando <code>come\u00e7ar<\/code> em vez de <code>garantir<\/code>, voc\u00ea pode usar: <code>come\u00e7ar em tempo real<\/code><\/li>\n\n\n\n<li><strong>Salve e reinicie seu servidor<\/strong>:Depois de salvar as altera\u00e7\u00f5es em <code>servidor.cfg<\/code>, reinicie seu servidor FiveM para carregar o novo recurso.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"full-resource-download\">Download completo do recurso<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para sua conveni\u00eancia, aqui est\u00e1 o conjunto completo de arquivos que voc\u00ea precisa criar para o <code>em tempo real<\/code> recurso.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"1-server-lua\">1. <code>servidor.lua<\/code><\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"lua\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">RegisterNetEvent(\"realtime:event\")\nAddEventHandler(\"realtime:event\", function()\n local hour = tonumber(os.date(\"%H\"))\n local minute = tonumber(os.date(\"%M\"))\n local second = tonumber(os.date(\"%S\"))\n TriggerClientEvent(\"realtime:event\", source, hour, minute, second)\nend)\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"2-client-lua\">2. <code>cliente.lua<\/code><\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"lua\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">local syncActive = true\nlocal syncThread = nil\n\n-- Fun\u00e7\u00e3o para iniciar a sincroniza\u00e7\u00e3o\nfunction StartRealTimeSync()\n if not syncActive then\n syncActive = true\n syncThread = CreateThread(function()\n while syncActive do\n TriggerServerEvent(\"realtime:event\")\n Wait(60000) -- Aguarda 1 minuto antes da pr\u00f3xima sincroniza\u00e7\u00e3o\n end\n end)\n end\nend\n\n-- Fun\u00e7\u00e3o para parar a sincroniza\u00e7\u00e3o\nfunction StopRealTimeSync()\n if syncActive then\n syncActive = false\n if syncThread then\n -- Em Lua, as threads s\u00e3o cooperativas; definir syncActive como false interromper\u00e1 o loop\n syncThread = nil\n end\n end\nend\n\nRegisterNetEvent(\"realtime:event\")\nAddEventHandler(\"realtime:event\", function(hour, minute, second)\n if syncActive then\n NetworkOverrideClockTime(hour, minute, second)\n end\nend)\n\n-- Iniciar sincroniza\u00e7\u00e3o ao iniciar o recurso\nStartRealTimeSync()\n\n-- Exemplo: Comando para alternar a sincroniza\u00e7\u00e3o\nRegisterCommand(\"toggleTimeSync\", function()\n if syncActive then\n StopRealTimeSync()\n print(\"Sincroniza\u00e7\u00e3o em tempo real interrompida.\")\n else\n StartRealTimeSync()\n print(\"Sincroniza\u00e7\u00e3o em tempo real iniciada.\")\n end\nend, false)\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"3-fxmanifest-lua\">3. <code>fxmanifest.lua<\/code><\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"lua\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">fx_version &#039;cerulean&#039; jogo &#039;gta5&#039; autor &#039;YourName&#039; descri\u00e7\u00e3o &#039;Script de sincroniza\u00e7\u00e3o em tempo real para FiveM&#039; vers\u00e3o &#039;1.0.0&#039; server_script &#039;server.lua&#039; client_script &#039;client.lua&#039;\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"conclusion\">Roteiro completo<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Aqui voc\u00ea pode baixar o script que acabamos de criar:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/codeload.github.com\/HiFiveM\/fivem-realtime\/zip\/refs\/heads\/main\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">https:\/\/github.com\/HiFiveM\/fivem-realtime\/archive\/refs\/heads\/main.zip<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/HiFiveM\/fivem-realtime\/tree\/main\/fivem-realtime\" target=\"_blank\" data-type=\"link\" data-id=\"https:\/\/github.com\/HiFiveM\/fivem-realtime\/tree\/main\/fivem-realtime\" rel=\"noreferrer noopener nofollow\">Github<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Voc\u00ea criou com sucesso um recurso FiveM que sincroniza o rel\u00f3gio do jogo com o hor\u00e1rio do mundo real. Este script adiciona uma \u00e1rea de jogo ao garantir que o ambiente do jogo reflita o hor\u00e1rio real, adicionando uma camada de realismo para os jogadores.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Voc\u00ea pode personalizar ainda mais o script ajustando intervalos de sincroniza\u00e7\u00e3o, adicionando mais comandos ou integrando-o com outros recursos do servidor.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sinta-se \u00e0 vontade para expandir essa base para atender \u00e0s necessidades espec\u00edficas do seu servidor!<\/p>","protected":false},"excerpt":{"rendered":"<p>O FiveM Real Time Sync mant\u00e9m o rel\u00f3gio do jogo alinhado com o tempo real e inclui controles de in\u00edcio e parada.<\/p>","protected":false},"author":1,"featured_media":193436,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2297,2298,2340],"tags":[3001,2928,3000],"class_list":["post-158437","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-free","category-scripts","category-lua-scripting","tag-fivem-script","tag-free","tag-free-script"],"_links":{"self":[{"href":"https:\/\/fivemx.com\/pt\/wp-json\/wp\/v2\/posts\/158437","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fivemx.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fivemx.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fivemx.com\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fivemx.com\/pt\/wp-json\/wp\/v2\/comments?post=158437"}],"version-history":[{"count":3,"href":"https:\/\/fivemx.com\/pt\/wp-json\/wp\/v2\/posts\/158437\/revisions"}],"predecessor-version":[{"id":212559,"href":"https:\/\/fivemx.com\/pt\/wp-json\/wp\/v2\/posts\/158437\/revisions\/212559"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fivemx.com\/pt\/wp-json\/wp\/v2\/media\/193436"}],"wp:attachment":[{"href":"https:\/\/fivemx.com\/pt\/wp-json\/wp\/v2\/media?parent=158437"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fivemx.com\/pt\/wp-json\/wp\/v2\/categories?post=158437"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fivemx.com\/pt\/wp-json\/wp\/v2\/tags?post=158437"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}