Dieses Tutorial führt Sie durch die Erstellung eines FiveM-Skripts, das die Spieluhr mit der realen Zeit synchronisiert. Dadurch wird sichergestellt, dass die Spielumgebung die tatsächliche Zeit widerspiegelt, was den Realismus für die Spieler erhöht.
Wir behandeln sowohl serverseitiges als auch clientseitiges Scripting, fügen Funktionen zum Starten und Stoppen der Synchronisierung hinzu und richten die Ressource für Ihren FiveM-Server ein.
Inhaltsverzeichnis
Voraussetzungen
Bevor Sie beginnen, stellen Sie sicher, dass Sie über Folgendes verfügen:
- FiveM Server-Zugriff: Sie benötigen Administratorzugriff auf Ihren FiveM-Server, um Skripte hinzuzufügen.
- Grundkenntnisse in Lua: Kenntnisse im Lua-Scripting helfen Ihnen, das Skript zu verstehen und anzupassen.
- Text-Editor: Software wie Visual Studio Code, Sublime Text oder Notepad++ zum Bearbeiten von Skriptdateien.
Einrichten des Ressourcenordners
- Navigieren Sie zu Ihrem Ressourcenverzeichnis:Suchen Sie die
Ressourcen
Ordner in Ihrem FiveM-Serververzeichnis. Dieser befindet sich normalerweise unter:bashCode kopierenIhr fivem-Serverordner/Ressourcen/
- Einen neuen Ressourcenordner erstellen:Im Inneren des
Ressourcen
erstellen Sie einen neuen Ordner mit dem NamenEchtzeit
.bashCode kopierenIhr fivem-Serverordner/Ressourcen/Echtzeit/
- Navigieren Sie zum
Echtzeit
Ordner:Dieser Ordner enthält alle erforderlichen Skripte und Konfigurationsdateien für die Echtzeitsynchronisierung.
Erstellen des serverseitigen Skripts (server.lua
)
- Erstellen
server.lua
:Im Inneren desEchtzeit
Ordner, erstellen Sie eine neue Datei mit dem Namenserver.lua
. - Fügen Sie den folgenden Code hinzu 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
. - AddEventHandler: Definiert, was passiert, wenn der
Echtzeit: Ereignis
wird 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 desEchtzeit
Ordner, erstellen Sie eine neue Datei mit dem Namenclient.lua
. - Fügen Sie den folgenden Code hinzu 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 Spielminute dauert. Wenn Sie es auf
60000
macht 1 Spielminute gleich 1 Minute in der realen Welt. - RegisterNetEvent und AddEventHandler: Hört auf die
Echtzeit: Ereignis
vom 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 Spielminute dauert. Wenn Sie 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.
- Update
client.lua
mit 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.
- Stoppen Sie RealTimeSync: 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 desEchtzeit
Ordner, erstellen Sie eine neue Datei mit dem Namenfxmanifest.lua
. - Fügen Sie den folgenden Code hinzu 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.
himmelblau
ist der neueste Stand zum Zeitpunkt des Schreibens. - Spiel: Gibt an, für welches Spiel die Ressource bestimmt ist (
gta5
). - Autor, Beschreibung, Version: Metadaten zu Ihrer 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 der Ressource auf Ihrem Server
- Bearbeiten Sie Ihre Serverkonfiguration:Öffnen Sie die Konfigurationsdatei Ihres Servers, normalerweise benannt
server.cfg
. - Hinzufügen der Ressource zur Konfiguration:Fügen Sie die folgende Zeile hinzu, um sicherzustellen, dass
Echtzeit
Ressource beginnt mit dem Server:rubyCode kopierenEchtzeit gewährleisten
Hinweis: Wenn SieStart
anstelle vonsicherstellen
können Sie Folgendes verwenden:in Echtzeit starten
- Speichern und starten Sie Ihren Server neu:Nach dem Speichern der Änderungen an
server.cfg
, starten Sie Ihren FiveM-Server neu, um die neue Ressource zu laden.
Vollständige Ressourcen zum Download
Der Einfachheit halber finden Sie hier den vollständigen Satz von Dateien, die Sie für die Echtzeit
Ressource.
1. server.lua
RegisterNetEvent("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)
2. client.lua
local syncActive = true local syncThread = nil – Funktion zum Starten der Synchronisierungsfunktion StartRealTimeSync(), wenn nicht syncActive, dann syncActive = true syncThread = CreateThread(function() while syncActive do TriggerServerEvent("realtime:event") Wait(60000) – Warten Sie 1 Minute vor dem nächsten Synchronisierungsende (Ende) Ende (Ende) – Funktion zum Stoppen der Synchronisierungsfunktion StopRealTimeSync(), wenn syncActive, dann syncActive = false, wenn syncThread, dann – In Lua sind Threads kooperativ; Wenn Sie syncActive auf „false“ setzen, wird die Schleife gestoppt. syncThread = nil end end end RegisterNetEvent("realtime:event") AddEventHandler("realtime:event", function(hour, minute, second) if syncActive then NetworkOverrideClockTime(hour, minute, second) end end) -- Starten Sie die Synchronisierung beim Start der Ressource. 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)
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 können Sie das soeben erstellte Skript herunterladen:
https://github.com/HiFiveM/fivem-realtime/archive/refs/heads/main.zip
Sie haben erfolgreich eine FiveM-Ressource erstellt, die die Uhr im Spiel mit der realen Zeit synchronisiert. Dieses Skript verbessert das Spielerlebnis, indem es sicherstellt, dass die Spielumgebung die tatsächliche Zeit widerspiegelt, was den Spielern eine Ebene des Realismus verleiht.
Sie können das Skript weiter anpassen, indem Sie die Synchronisierungsintervalle anpassen, weitere Befehle hinzufügen oder es in andere Serverfunktionen integrieren.
Sie können diese Grundlage gerne erweitern, um sie an die individuellen Anforderungen Ihres Servers anzupassen!
Kommentar hinzufügen