Este tutorial te guiará en la creación de un script de FiveM que sincroniza el reloj del juego con la hora real. Esto garantiza que el entorno de juego refleje la hora real, mejorando el realismo para los jugadores.
Cubriremos los scripts del lado del servidor y del lado del cliente, agregando funcionalidad para iniciar y detener la sincronización y configurando el recurso para su servidor FiveM.
Prerrequisitos
Antes de comenzar, asegúrese de tener lo siguiente:
- Acceso al servidor FiveM: Necesitas acceso administrativo a tu servidor FiveM para agregar scripts.
- Conocimientos básicos de Lua:La familiaridad con los scripts de Lua le ayudará a comprender y personalizar el script.
- Editor de texto:Software como Visual Studio Code, Sublime Text o Notepad++ para editar archivos de script.
Configuración de la carpeta de recursos
- Navegar a su directorio de recursos:Localizar el
resourcesCarpeta en el directorio de su servidor FiveM. Normalmente se encuentra en: bashCode copiaryour-fivem-server-folder/resources/ - Crear una nueva carpeta de recursos:Dentro de la
resourcescarpeta, crea una nueva carpeta llamadarealtimeCopiar .bashCodeyour-fivem-server-folder/resources/realtime/ - Navegar hasta el
realtimeCarpeta:Esta carpeta contendrá todos los scripts y archivos de configuración necesarios para la sincronización en tiempo real.
Creación del script del lado del servidor (server.lua)
- Crear
server.lua:Dentro de larealtimecarpeta, crea un nuevo archivo llamadoserver.lua. - Agregue el siguiente código a
server.luaCopiar código luaRegisterNetEvent("realtime:event") AddEventHandler("realtime:event", function() local hour = tonumber(os.date("%H")) local minute = tonumber(os.date("%M")) local second = tonumber(os.date("%S")) TriggerClientEvent("realtime:event", source, hour, minute, second) end)Explicación:- RegisterNetEvent:Registra un evento de red llamado
realtime:event. - AddEventHandler:Define lo que sucede cuando el
realtime:eventse activa. - fecha del sistema operativo:Recupera la hora actual del sistema (hora, minuto, segundo).
- TriggerClientEvent:Envía los datos de tiempo al cliente que activó el evento.
- RegisterNetEvent:Registra un evento de red llamado
Creación del script del lado del cliente (client.lua)
- Crear
client.lua:Dentro de larealtimecarpeta, crea un nuevo archivo llamadoclient.lua. - Agregue el siguiente código a
client.luaCopiar código lua-- Set the duration of one in-game minute in milliseconds SetMillisecondsPerGameMinute(60000) -- 60,000 ms = 1 real-world minute RegisterNetEvent("realtime:event") AddEventHandler("realtime:event", function(hour, minute, second) NetworkOverrideClockTime(hour, minute, second) end) -- Trigger the server event to initiate synchronization TriggerServerEvent("realtime:event")Explicación:- Establecer milisegundos por minuto de juego: Define la duración de un minuto de juego. Al configurarlo en
60000hace que 1 minuto de juego sea igual a 1 minuto del mundo real. - RegisterNetEvent & AddEventHandler:Escucha el
realtime:eventdesde el servidor y actualiza el reloj del juego en consecuencia. - Tiempo de reloj de anulación de red:Anula el reloj del juego para que coincida con la hora real recibida del servidor.
- TriggerServerEvent:Inicia la sincronización activando el evento del servidor.
- Establecer milisegundos por minuto de juego: Define la duración de un minuto de juego. Al configurarlo en
Agregar una funcionalidad de parada
Para permitir activar y desactivar la sincronización en tiempo real, agregaremos funciones para iniciar y detener la sincronización.
- Actualizar
client.luacon funcionalidad de paradaCopiar código lualocal syncActive = true local syncThread = nil -- Function to start synchronization function StartRealTimeSync() if not syncActive then syncActive = true syncThread = CreateThread(function() while syncActive do TriggerServerEvent("realtime:event") Wait(60000) -- Wait for 1 minute before next sync end end) end end -- Function to stop synchronization function StopRealTimeSync() if syncActive then syncActive = false if syncThread then -- In Lua, there's no direct way to kill a thread. -- Using a flag to exit the loop effectively stops the 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) -- Start synchronization on resource start StartRealTimeSync() -- Example: Command to toggle synchronization RegisterCommand("toggleTimeSync", function() if syncActive then StopRealTimeSync() print("Real-time synchronization stopped.") else StartRealTimeSync() print("Real-time synchronization started.") end end, false)Explicación:- sincronización activa:Una bandera para determinar si la sincronización está activa.
- Iniciar sincronización en tiempo real:Inicia un bucle que solicita actualizaciones de tiempo del servidor cada minuto.
- Detener la sincronización en tiempo real:Detiene la sincronización estableciendo el indicador en falso.
- RegisterCommand:Agrega un comando (
/toggleTimeSync) que los jugadores pueden usar para activar o desactivar la sincronización.
Creación del manifiesto de recursos (fxmanifest.lua)
Cada recurso de FiveM requiere un archivo de manifiesto que define sus metadatos y dependencias.
- Crear
fxmanifest.lua:Dentro de larealtimecarpeta, crea un nuevo archivo llamadofxmanifest.lua. - Agregue el siguiente código a
fxmanifest.lua:fx_version 'cerulean' game 'gta5' author 'YourName' description 'Real-Time Synchronization Script for FiveM' version '1.0.0' server_script 'server.lua' client_script 'client.lua' - Explicación:
- versión fx: Especifica la versión del manifiesto de FiveM.
ceruleanEs la última versión en el momento de escribir este artículo. - juego: Indica para qué juego es el recurso (
gta5). - autor, descripción, versión:Metadatos sobre su recurso.
- script_del_servidor y script_del_cliente:Especifica los scripts del servidor y del cliente que se cargarán.
- versión fx: Especifica la versión del manifiesto de FiveM.
Iniciar el recurso en su servidor
- Editar la configuración de su servidor:Abra el archivo de configuración de su servidor, normalmente llamado
server.cfg. - Agregar el recurso a la configuración:Agregue la siguiente línea para garantizar que
realtimeEl recurso comienza con el servidor: rubyCode copiarensure realtimeNota:Si estás usandostarten lugar deensure, puedes utilizar:start realtime - Guardar y reiniciar su servidor:Después de guardar los cambios en
server.cfg, reinicie su servidor FiveM para cargar el nuevo recurso.
Descarga completa de recursos
Para su comodidad, aquí encontrará el conjunto completo de archivos que necesita crear para el realtime recurso.
1. server.lua
RegisterNetEvent("realtime:event")
AddEventHandler("realtime:event", function()
local hour = tonumber(os.date("%H"))
local minute = tonumber(os.date("%M"))
local second = tonumber(os.date("%S"))
TriggerClientEvent("realtime:event", source, hour, minute, second)
end)
2. client.lua
local syncActive = true
local syncThread = nil
-- Function to start synchronization
function StartRealTimeSync()
if not syncActive then
syncActive = true
syncThread = CreateThread(function()
while syncActive do
TriggerServerEvent("realtime:event")
Wait(60000) -- Wait for 1 minute before next sync
end
end)
end
end
-- Function to stop synchronization
function StopRealTimeSync()
if syncActive then
syncActive = false
if syncThread then
-- In Lua, threads are cooperative; setting syncActive to false will stop the 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)
-- Start synchronization on resource start
StartRealTimeSync()
-- Example: Command to toggle synchronization
RegisterCommand("toggleTimeSync", function()
if syncActive then
StopRealTimeSync()
print("Real-time synchronization stopped.")
else
StartRealTimeSync()
print("Real-time synchronization started.")
end
end, false)
3. fxmanifest.lua
fx_version 'cerulean' game 'gta5' author 'YourName' description 'Real-Time Synchronization Script for FiveM' version '1.0.0' server_script 'server.lua' client_script 'client.lua'
Guión completo
Aquí puedes descargar el script que acabamos de crear:
https://github.com/HiFiveM/fivem-realtime/archive/refs/heads/main.zip
Has creado exitosamente un recurso FiveM que sincroniza el reloj del juego con la hora del mundo real. Este script añade un área de juego al asegurar que el entorno del juego refleje la hora real, agregando una capa de realismo para los jugadores.
Puede personalizar aún más el script ajustando los intervalos de sincronización, agregando más comandos o integrándolo con otras funciones del servidor.
¡Siéntete libre de ampliar esta base para adaptarla a las necesidades únicas de tu servidor!
