Dieser Leitfaden führt dich durch die Erstellung eines FiveM-Skripts, das die Ingame-Uhr mit der realen Weltzeit synchronisiert. Dadurch wird sichergestellt, dass die Spielumgebung die tatsächliche Zeit widerspiegelt, was die Realität für die Spieler erhöht.
Wir behandeln sowohl serverseitige als auch clientseitige Skripting, fügen Funktionen zum Starten und Stoppen der Synchronisation hinzu und richten die Ressource für deinen FiveM-Server ein.
Voraussetzungen
Bevor du beginnst, stelle sicher, dass du Folgendes hast:
- FiveM-Serverzugriff: Du benötigst administrative Zugriffsrechte für deinen FiveM-Server zum Hinzufügen von Skripten.
- Grundkenntnisse in Lua: Kenntnisse in Lua-Skripting helfen dir, das Skript zu verstehen und anzupassen.
- Texteditor: Software wie Visual Studio Code, Sublime Text oder Notepad++ zum Bearbeiten von Skriptdateien.
Einrichten des Ressourcenordners
- Navigiere zu deinem Ressourcenverzeichnis:Lokaliere die
RessourcenOrdner in deinem FiveM-Serververzeichnis. Dieser befindet sich normalerweise unter:bashCode kopierenIhr-fivem-Server-Ordner/Ressourcen/ - Einen neuen Ressourcenordner erstellen:Im Inneren des
RessourcenOrdner, erstelle einen neuen Ordner mit dem NamenEchtzeit.bashCode kopierenIhr fivem-Serverordner/Ressourcen/Echtzeit/ - Navigiere zu den
EchtzeitOrdner:Dieser Ordner enthält alle erforderlichen Skripte und Konfigurationsdateien für die Echtzeitsynchronisierung.
Erstellen des serverseitigen Skripts (server.lua)
- Erstellen
server.lua:Im Inneren desEchtzeitOrdner, erstelle eine neue Datei mit dem Namenserver.lua. - Füge den folgenden Code zu
server.lua:luaCode kopierenRegisterNetEvent("Echtzeit:Ereignis") AddEventHandler("Echtzeit:Ereignis", Funktion() lokale Stunde = bisZahl(os.date("%H")) lokale Minute = bisZahl(os.date("%M")) lokale Sekunde = bisZahl(os.date("%S")) TriggerClientEvent("Echtzeit:Ereignis", Quelle, Stunde, Minute, Sekunde) Ende)Erläuterung:- RegisterNetEvent: Registriert ein Netzwerkereignis namens
Echtzeit: Ereignis. - Ereignishandler hinzufügen: Definiert, was passiert, wenn der
Echtzeit: Ereigniswird ausgelöst. - os.date: Ruft die aktuelle Systemzeit (Stunde, Minute, Sekunde) ab.
- TriggerClientEvent: Sendet die Zeitdaten an den Client, der das Ereignis ausgelöst hat.
- RegisterNetEvent: Registriert ein Netzwerkereignis namens
Erstellen des clientseitigen Skripts (client.lua)
- Erstellen
client.lua:Im Inneren desEchtzeitOrdner, erstelle eine neue Datei mit dem Namenclient.lua. - Füge den folgenden Code zu
client.lua:luaCode kopieren-- Legt die Dauer einer Spielminute in Millisekunden fest. SetMillisecondsPerGameMinute(60000) -- 60.000 ms = 1 Minute in der realen Welt. RegisterNetEvent("realtime:event") AddEventHandler("realtime:event", function(hour, minute, second) NetworkOverrideClockTime(hour, minute, second) end) -- Löst das Serverereignis aus, um die Synchronisierung zu starten. TriggerServerEvent("realtime:event")Erläuterung:- SetzeMillisekundenProSpielMinute: Definiert, wie lange eine In-Game-Minute dauert. Setze es auf
60000macht 1 Spielminute gleich 1 Minute in der realen Welt. - RegisterNetEvent und AddEventHandler: Hört auf die
Echtzeit: Ereignisvom Server und aktualisiert die Uhr im Spiel entsprechend. - NetzwerküberschreibungUhrzeit: Überschreibt die Uhr im Spiel, um sie an die vom Server empfangene Echtzeit anzupassen.
- TriggerServerEvent: Initiiert die Synchronisierung durch Auslösen des Serverereignisses.
- SetzeMillisekundenProSpielMinute: Definiert, wie lange eine In-Game-Minute dauert. Setze es auf
Hinzufügen einer Stoppfunktion
Um das Ein- und Ausschalten der Echtzeitsynchronisierung zu ermöglichen, fügen wir Funktionen zum Starten und Stoppen der Synchronisierung hinzu.
- Aktualisieren
client.luamit Stop-Funktionalität:luaCode kopierenlocal syncActive = true local syncThread = nil – Funktion zum Starten der Synchronisierungsfunktion StartRealTimeSync(), wenn nicht syncActive, dann syncActive = true syncThread = CreateThread(function(), während syncActive TriggerServerEvent("realtime:event") ausführt. Wait(60000) – 1 Minute vor dem nächsten Synchronisierungsende warten (Ende, Ende) Ende (Ende, Ende) – Funktion zum Stoppen der Synchronisierungsfunktion StopRealTimeSync(), wenn syncActive, dann syncActive = false, wenn syncThread, dann – In Lua gibt es keine direkte Möglichkeit, einen Thread zu beenden. – Die Verwendung eines Flags zum Verlassen der Schleife stoppt den Thread effektiv. syncThread = nil end end end RegisterNetEvent("realtime:event") AddEventHandler("realtime:event", function(hour, minute, second) if syncActive then NetworkOverrideClockTime(hour, minute, second) end end) -- Synchronisierung beim Ressourcenstart starten StartRealTimeSync() -- Beispiel: Befehl zum Umschalten der Synchronisierung RegisterCommand("toggleTimeSync", function() if syncActive then StopRealTimeSync() print("Echtzeitsynchronisierung gestoppt.") else StartRealTimeSync() print("Echtzeitsynchronisierung gestartet.") end end, false)Erläuterung:- synchronisierenAktiv: Ein Flag, um zu bestimmen, ob die Synchronisierung aktiv ist.
- StartRealTimeSync: Initiiert eine Schleife, die jede Minute Zeitaktualisierungen vom Server anfordert.
- StopRealTimeSync: Stoppt die Synchronisierung, indem das Flag auf „False“ gesetzt wird.
- RegisterCommand: Fügt einen Befehl hinzu (
/Zeitsynchronisierung umschalten), mit dem Spieler die Synchronisierung ein- oder ausschalten können.
Erstellen des Ressourcenmanifests (fxmanifest.lua)
Jede FiveM-Ressource erfordert eine Manifestdatei, die ihre Metadaten und Abhängigkeiten definiert.
- Erstellen
fxmanifest.lua:Im Inneren desEchtzeitOrdner, erstelle eine neue Datei mit dem Namenfxmanifest.lua. - Füge den folgenden Code zu
fxmanifest.lua:fx_version „cerulean“ Spiel „gta5“ Autor „IhrName“ Beschreibung „Echtzeit-Synchronisierungsskript für FiveM“ Version „1.0.0“ Server-Skript „server.lua“ Client-Skript „client.lua“ - Erläuterung:
- fx_version: Gibt die Version des FiveM-Manifests an.
himmelblauist der neueste Stand zum Zeitpunkt des Schreibens. - Spiel: Gibt an, für welches Spiel die Ressource bestimmt ist (
gta5). - Autor, Beschreibung, Version: Metadaten über deine Ressource.
- Server-Skript und Client-Skript: Gibt die zu ladenden Server- und Client-Skripte an.
- fx_version: Gibt die Version des FiveM-Manifests an.
Starten des Ressourcen auf deinem Server
- Bearbeite deine Serverkonfiguration:Öffne die Konfigurationsdatei deines Servers, die typischerweise den Namen
server.cfg. - Hinzufügen der Ressource zur Konfiguration: Füge die folgende Zeile hinzu, um sicherzustellen, dass
EchtzeitRessource beginnt mit dem Server:rubyCode kopierenEchtzeit gewährleistenNotiz: Wenn duStartanstattsicherstellen, kannst du Folgendes verwenden:in Echtzeit starten - Speichere und starte deinen Server neu:Nach dem Speichern der Änderungen an
server.cfg, starte deinen FiveM-Server neu, um die neue Ressource zu laden.
Vollständige Ressourcen zum Download
Für deine Bequemlichkeit, hier ist der vollständige Satz an Dateien, die du für die Erstellung benötigst. Echtzeit Ressource.
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
-- Funktion zum Starten der Synchronisation
function StartRealTimeSync()
if not syncActive then
syncActive = true
syncThread = CreateThread(function()
while syncActive do
TriggerServerEvent("realtime:event")
Wait(60000) -- Warte 1 Minute vor der nächsten Synchronisation
end
end)
end
end
-- Funktion zum Stoppen der Synchronisation
function StopRealTimeSync()
if syncActive then
syncActive = false
if syncThread then
-- In Lua sind Threads kooperativ; das Setzen von syncActive auf false stoppt die Schleife
syncThread = nil
end
end
end
RegisterNetEvent("realtime:event")
AddEventHandler("realtime:event", function(hour, minute, second)
if syncActive then
NetworkOverrideClockTime(hour, minute, second)
end
end)
-- Synchronisation beim Ressourcenstart starten
StartRealTimeSync()
-- Beispiel: Befehl zum Umschalten der Synchronisation
RegisterCommand("toggleTimeSync", function()
if syncActive then
StopRealTimeSync()
print("Echtzeit-Synchronisation gestoppt.")
else
StartRealTimeSync()
print("Echtzeit-Synchronisation gestartet.")
end
end, false)
3. fxmanifest.lua
fx_version „cerulean“ Spiel „gta5“ Autor „IhrName“ Beschreibung „Echtzeit-Synchronisierungsskript für FiveM“ Version „1.0.0“ Server-Skript „server.lua“ Client-Skript „client.lua“
Vollständiges Skript
Hier kannst du das Skript herunterladen, das wir gerade erstellt haben:
https://github.com/HiFiveM/fivem-realtime/archive/refs/heads/main.zip
Du hast erfolgreich eine FiveM-Ressource erstellt, die die In-Game-Uhr mit der realen Weltzeit synchronisiert. Dieses Skript fügt einen Gameplay-Bereich hinzu, indem es sicherstellt, dass die Spielumgebung die tatsächliche Zeit widerspiegelt und so eine zusätzliche Realitätsebene für die Spieler schafft.
Du kannst das Skript weiter anpassen, indem du Synchronisationsintervalle anpasst, mehr Befehle hinzufügst oder es mit anderen Serverfunktionen integrierst.
Fühl dich frei, diese Grundlage nach deinen Bedürfnissen zu erweitern!