Este tutorial te guiará en la creación de un script FiveM que sincroniza el reloj del juego con la hora real. Esto garantiza que el entorno del juego refleje la hora real, lo que mejora 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.
Índice
Requisitos previos
Antes de comenzar, asegúrese de tener lo siguiente:
- Acceso al servidor FiveM:Necesita acceso administrativo a su 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:Ubica el
recursos
carpeta en el directorio del servidor FiveM. Normalmente se encuentra en:bashCode copiarsu-carpeta-servidor-fivem/recursos/
- Crear una nueva carpeta de recursos:Dentro de la
recursos
cree una nueva carpeta llamadatiempo real
Copiar .bashCodesu-carpeta-servidor-fivem/recursos/tiempo-real/
- Navegue hasta el
tiempo real
Carpeta: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 (servidor.lua
)
- Crear
servidor.lua
:Dentro de latiempo real
carpeta, crea un nuevo archivo llamadoservidor.lua
. - Agregue el siguiente 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", origen, hora, minuto, segundo) fin)
Explicación:- RegistrarseNetEvent:Registra un evento de red llamado
tiempo real:evento
. - AddEventHandler:Define lo que sucede cuando el
tiempo real:evento
se activa - fecha del sistema operativo:Recupera la hora actual del sistema (hora, minuto, segundo).
- DisparadorClienteEvento:Envía los datos de tiempo al cliente que activó el evento.
- RegistrarseNetEvent:Registra un evento de red llamado
Creación del script del lado del cliente (cliente.lua
)
- Crear
cliente.lua
:Dentro de latiempo real
carpeta, crea un nuevo archivo llamadocliente.lua
. - Agregue el siguiente código a
cliente.lua
:luaCode copiar-- Establece la duración de un minuto del juego en milisegundos SetMillisecondsPerGameMinute(60000) -- 60 000 ms = 1 minuto del mundo real RegisterNetEvent("realtime:event") AddEventHandler("realtime:event", function(hour, minute, second) NetworkOverrideClockTime(hour, minute, second) end) -- Activa el evento del servidor para iniciar la sincronización TriggerServerEvent("realtime:event")
Explicación:- Establecer milisegundos por minuto de juego: Define cuánto dura un minuto de juego. Si se configura en
60000
hace que 1 minuto de juego sea igual a 1 minuto del mundo real. - RegisterNetEvent y AddEventHandler:Escucha el
tiempo real:evento
desde el servidor y actualiza el reloj del juego en consecuencia. - Hora 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 cuánto dura un minuto de juego. Si se configura en
Agregar una función de parada
Para permitir activar y desactivar la sincronización en tiempo real, agregaremos funciones para iniciar y detener la sincronización.
- Actualización
cliente.lua
con funcionalidad de parada:luaCode copiarlocal syncActive = true local syncThread = nil -- Función para iniciar la sincronización function StartRealTimeSync() if not syncActive then syncActive = true syncThread = CreateThread(function() while syncActive do TriggerServerEvent("realtime:event") Wait(60000) -- Espera 1 minuto antes de la próxima sincronización end end) end end -- Función para detener la sincronización function StopRealTimeSync() if syncActive then syncActive = false if syncThread then -- En Lua, no hay una forma directa de matar un hilo. -- El uso de una bandera para salir del bucle detiene efectivamente el hilo. syncThread = nil end end end RegisterNetEvent("realtime:event") AddEventHandler("realtime:event", function(hour, minute, second) if syncActive then NetworkOverrideClockTime(hour, minute, second) end end) -- Iniciar sincronización al iniciar el recurso StartRealTimeSync() -- Ejemplo: Comando para alternar la sincronización RegisterCommand("toggleTimeSync", function() if syncActive then StopRealTimeSync() print("La sincronización en tiempo real se detuvo.") else StartRealTimeSync() print("La sincronización en tiempo real se inició.") 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.
- Comando de registro:Agrega un comando (
/cambiar sincronización horaria
) que los jugadores pueden usar para activar o desactivar la sincronización.
Creando el manifiesto de recursos (fxmanifest.lua
)
Cada recurso FiveM requiere un archivo de manifiesto que define sus metadatos y dependencias.
- Crear
fxmanifest.lua
:Dentro de latiempo real
carpeta, crea un nuevo archivo llamadofxmanifest.lua
. - Agregue el siguiente código a
fxmanifest.lua
:fx_version 'cerulean' juego 'gta5' autor 'YourName' descripción 'Script de sincronización en tiempo real para FiveM' versión '1.0.0' server_script 'server.lua' client_script 'client.lua'
- Explicación:
- fx_version: Especifica la versión del manifiesto FiveM.
azul claro
Es lo último en el momento de escribir este artículo. - juego: Indica el juego al que pertenece el recurso (
GTA 5
). - autor, descripción, versión:Metadatos sobre su recurso.
- script_servidor y script_cliente:Especifica los scripts del servidor y del cliente que se cargarán.
- fx_version: Especifica la versión del manifiesto FiveM.
Iniciando el recurso en su servidor
- Editar la configuración de su servidor:Abra el archivo de configuración de su servidor, normalmente llamado
servidor.cfg
. - Agregar el recurso a la configuración:Agregue la siguiente línea para garantizar que
tiempo real
El recurso comienza con el servidor: rubyCode copiargarantizar tiempo real
Nota:Si estás usandoiniciar
en lugar deasegurar
, puedes utilizar:empezar en tiempo real
- Guarde y reinicie su servidor:Después de guardar los cambios en
servidor.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 tiempo 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", origen, hora, minuto, segundo) fin)
2. cliente.lua
local syncActive = true local syncThread = nil -- Función para iniciar la función de sincronización StartRealTimeSync() if not syncActive then syncActive = true syncThread = CreateThread(function() while syncActive do TriggerServerEvent("realtime:event") Wait(60000) -- Espera 1 minuto antes de la próxima sincronización end end) end end -- Función para detener la función de sincronización StopRealTimeSync() if syncActive then syncActive = false if syncThread then -- En Lua, los hilos son cooperativos; establecer syncActive en falso detendrá el bucle syncThread = nil end end end RegisterNetEvent("realtime:event") AddEventHandler("realtime:event", function(hour, minute, second) if syncActive then NetworkOverrideClockTime(hour, minute, second) end end) -- Iniciar la sincronización al iniciar el recurso StartRealTimeSync() -- Ejemplo: Comando para alternar la sincronización RegisterCommand("toggleTimeSync", function() if syncActive then StopRealTimeSync() print("La sincronización en tiempo real se detuvo.") else StartRealTimeSync() print("La sincronización en tiempo real se inició.") end end, false)
3. fxmanifest.lua
fx_version 'cerulean' juego 'gta5' autor 'YourName' descripción 'Script de sincronización en tiempo real para FiveM' versión '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 con éxito un recurso FiveM que sincroniza el reloj del juego con la hora real. Este script mejora la experiencia de juego al garantizar que el entorno del juego refleje la hora real, lo que añade 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!
Añadir un comentario