Diese kleine Entwicklungsressource sorgt dafür, dass jeder verbundene Client die UTC-Zeit des FXServer-Hosts anzeigt. Verwende sie nur, wenn sie der alleinige Besitzer der Spieluhr ist. Wenn dein Framework bereits Zeit und Wetter verwaltet, konfiguriere oder erweitere stattdessen diese Ressource, anstatt zwei Uhrensysteme zu betreiben.
Dieses Beispiel erfordert State-Awareness-Unterstützung für GlobalState. Stoppe andere Zeit-/Wettersynchronisationsressourcen auf der Testinstanz, damit ein Controller die Uhr besitzt. Es zeigt UTC an, nicht die lokale Zeitzone des Server-Hosts.
Die hier gezeigten Konfigurations- und Codebeispiele beziehen sich auf FiveM für GTA V Legacy. Enhanced hat andere Laufzeit- und Kompatibilitätsregeln; überprüfe die Legacy-zu-Enhanced-Änderungen von Cfx.re bevor du sie auf einen Enhanced-Server anwendest.
Bereite den Test vor
Überprüfe, ob die Host-Uhr genau ist. Sichere die bestehende Zeitressourcenkonfiguration und verwende einen isolierten Server. Erstelle resources/[local]/utc_clock mit den drei untenstehenden Dateien. Der Server veröffentlicht die Zeit; Clients können keine GlobalState-Werte auf dem Server setzen.
1. Deklariere die Ressource
Speichere dies als fxmanifest.lua:
fx_version 'cerulean'
game 'gta5'
server_script 'server.lua'
client_script 'client.lua'
2. Veröffentliche UTC vom Server
Speichere dies als server.lua. Das vorangestellte Ausrufezeichen in os.date wählt UTC anstelle der lokalen Zeitzone des Hosts:
CreateThread(function()
while true do
local now = os.date('!*t')
GlobalState.tutorialUtcClock = {
hour = now.hour, minute = now.min, second = now.sec
}
Wait(1000)
end
end)
AddEventHandler('onResourceStop', function(name)
if name == GetCurrentResourceName() then
GlobalState.tutorialUtcClock = nil
end
end)
3. Zeige die gemeinsame Uhr an
Speichere dies als client.lua:
CreateThread(function()
while true do
local clock = GlobalState.tutorialUtcClock
if clock then
NetworkOverrideClockTime(clock.hour, clock.minute, clock.second)
end
Wait(1000)
end
end)
AddEventHandler('onResourceStop', function(name)
if name == GetCurrentResourceName() then
NetworkClearClockTimeOverride()
end
end)
Starten, prüfen und stoppen
- Füge ensure utc_clock zu server.cfg hinzu, nachdem du den konkurrierenden Taktgeber auf dem Testserver deaktiviert hast.
- Führe in der Serverkonsole refresh und ensure utc_clock aus. Verbinde dich mit zwei Clients und vergleiche deren angezeigte Spielzeit mit der aktuellen UTC.
- Verbinde einen Client erneut, starte die Ressource neu und wiederhole den Vergleich. Überprüfe sowohl F8- als auch Server-Logs.
- Führe stop utc_clock in der Serverkonsole aus, um diese Überschreibung aufzuheben. Um dein vorheriges Zeitsystem wiederherzustellen, entferne die neue ensure-Zeile und starte die ursprüngliche Zeitressource oder den Server neu.
Kenne die Grenzen
Dieses Beispiel folgt einem echten 24-Stunden-UTC-Tag; es beschleunigt weder das Tageslicht noch wählt es eine regionale Sommerzeit aus. Netzwerk- und Planungsverzögerungen bedeuten, dass es keine präzise Wanduhranzeige ist. Es synchronisiert das Wetter nicht.
Lies die Dokumentation zu Cfx.re-State-Bags und zum Native zum Überschreiben der Uhrzeit, bevor du das Muster in eine größere Ressource integrierst.