Questo tutorial ti guiderà nella creazione di uno script FiveM che sincronizza l'orologio di gioco con l'ora reale. Questo garantisce che l'ambiente di gioco rifletta l'ora reale, aumentando il realismo per i giocatori.
Tratteremo sia la scrittura di script lato server che lato client, aggiungendo funzionalità per avviare e arrestare la sincronizzazione e configurando le risorse per il tuo server FiveM.
Prerequisiti
Prima di iniziare, assicurati di avere quanto segue:
- Accesso al server FiveM: Devi avere accesso amministrativo al tuo server FiveM per aggiungere script.
- Conoscenza di base di Lua: La familiarità con la programmazione Lua ti aiuterà a comprendere e personalizzare lo script.
- Editor di testo: Software come Visual Studio Code, Sublime Text o Notepad++ per la modifica dei file di script.
Impostazione della cartella delle risorse
- Vai alla directory delle tue risorse:Individuare il
resourcescartella nella directory del server FiveM. In genere si trova in: bashCode copiayour-fivem-server-folder/resources/ - Crea una nuova cartella di risorse:All'interno del
resourcescartella, crea una nuova cartella denominatarealtimeCopia .bashCodeyour-fivem-server-folder/resources/realtime/ - Vai a
realtimeCartella:Questa cartella conterrà tutti gli script e i file di configurazione necessari per la sincronizzazione in tempo reale.
Creazione dello script lato server (server.lua)
- Creare
server.lua:All'interno delrealtimecartella, crea un nuovo file denominatoserver.lua. - Aggiungere il seguente codice a
server.lua:luaCodice copiatoRegisterNetEvent("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)Spiegazione:- RegisterNetEvent: Registra un evento di rete denominato
realtime:event. - Aggiungi gestore eventi: Definisce cosa succede quando il
realtime:eventviene attivato. - os.date: Recupera l'ora corrente del sistema (ora, minuto, secondo).
- TriggerClientEvent: Invia i dati temporali al client che ha attivato l'evento.
- RegisterNetEvent: Registra un evento di rete denominato
Creazione dello script lato client (client.lua)
- Creare
client.lua:All'interno delrealtimecartella, crea un nuovo file denominatoclient.lua. - Aggiungere il seguente codice a
client.lua:luaCodice copiato-- 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")Spiegazione:- Imposta millisecondi per minuto di partita: Definisce la durata di un minuto di gioco. Impostandolo su
60000fa sì che 1 minuto di gioco equivalga a 1 minuto nel mondo reale. - RegisterNetEvent e AddEventHandler: Ascolta il
realtime:eventdal server e aggiorna di conseguenza l'orologio di gioco. - NetworkOverrideClockTime: Sostituisce l'orologio di gioco con l'ora reale ricevuta dal server.
- TriggerServerEvent: Avvia la sincronizzazione attivando l'evento del server.
- Imposta millisecondi per minuto di partita: Definisce la durata di un minuto di gioco. Impostandolo su
Aggiunta di una funzionalità di arresto
Per consentire l'attivazione e la disattivazione della sincronizzazione in tempo reale, aggiungeremo funzioni per avviare e arrestare la sincronizzazione.
- Aggiornamento
client.luacon funzionalità di arresto:luaCodice copiatolocal 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)Spiegazione:- sincronizzazioneAttiva: Flag per determinare se la sincronizzazione è attiva.
- Avvia sincronizzazione in tempo reale: Avvia un ciclo che richiede aggiornamenti orari al server ogni minuto.
- Arresta la sincronizzazione in tempo reale: Interrompe la sincronizzazione impostando il flag su false.
- RegisterCommand: Aggiunge un comando (
/toggleTimeSync) che i giocatori possono utilizzare per attivare o disattivare la sincronizzazione.
Creazione del manifesto delle risorse (fxmanifest.lua)
Ogni risorsa FiveM richiede un file manifest che ne definisce i metadati e le dipendenze.
- Creare
fxmanifest.lua:All'interno delrealtimecartella, crea un nuovo file denominatofxmanifest.lua. - Aggiungere il seguente codice 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' - Spiegazione:
- versione fx: Specifica la versione del manifesto FiveM.
ceruleanè l'ultima disponibile al momento della scrittura. - gioco: Indica il gioco a cui è destinata la risorsa (
gta5). - autore, descrizione, versione: Metadati sulla tua risorsa.
- script_server e script_client: Specifica gli script del server e del client da caricare.
- versione fx: Specifica la versione del manifesto FiveM.
Avvio della risorsa sul server
- Modifica la configurazione del tuo server:Apri il file di configurazione del tuo server, in genere denominato
server.cfg. - Aggiungere la risorsa alla configurazione:Aggiungere la seguente riga per garantire che
realtimela risorsa inizia con il server:rubyCode copiaensure realtimeNota: Se stai usandostartinvece diensure, puoi usare:start realtime - Salva e riavvia il tuo server:Dopo aver salvato le modifiche a
server.cfg, riavvia il server FiveM per caricare la nuova risorsa.
Scarica la risorsa completa
Per comodità, ecco il set completo dei file che devi creare per il realtime risorsa.
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'
Script completo
Qui puoi scaricare lo script che abbiamo appena creato:
https://github.com/HiFiveM/fivem-realtime/archive/refs/heads/main.zip
Hai creato con successo una risorsa FiveM che sincronizza l'orologio di gioco con l'ora reale. Questo script aggiunge un'area di gioco assicurando che l'ambiente di gioco rifletta l'ora attuale, aggiungendo un livello di realismo per i giocatori.
È possibile personalizzare ulteriormente lo script regolando gli intervalli di sincronizzazione, aggiungendo altri comandi o integrandolo con altre funzionalità del server.
Sentiti libero di ampliare questa base per adattarla alle esigenze specifiche del tuo server!
