Deze tutorial begeleidt je bij het maken van een FiveM-script dat de in-game klok synchroniseert met de echte tijd. Dit zorgt ervoor dat de game-omgeving de werkelijke tijd weerspiegelt, wat het realisme voor spelers vergroot.
We behandelen zowel server-side als client-side scripting, voegen functionaliteit toe om de synchronisatie te starten en te stoppen en stellen de resource in voor uw FiveM-server.
Inhoudsopgave
Vereisten
Voordat u begint, moet u ervoor zorgen dat u het volgende bij de hand hebt:
- FiveM-servertoegang: U hebt beheerdersrechten voor uw FiveM-server nodig om scripts toe te voegen.
- Basiskennis van Lua:Als u bekend bent met Lua-scripting, kunt u het script beter begrijpen en aanpassen.
- Teksteditor: Software zoals Visual Studio Code, Sublime Text of Notepad++ voor het bewerken van scriptbestanden.
De resourcemap instellen
- Navigeer naar uw bronnendirectory:Zoek de
middelen
map in uw FiveM server directory. Deze is meestal te vinden op: bashCode kopiërenuw-fivem-servermap/resources/
- Een nieuwe resourcemap maken:Binnen de
middelen
map, maak een nieuwe map met de naamrealtime
.bashCode kopiërenuw-fivem-servermap/resources/realtime/
- Navigeer naar de
realtime
Map:Deze map bevat alle benodigde scripts en configuratiebestanden voor de realtime synchronisatie.
Het server-side script maken (server.lua
)
- Creëren
server.lua
:Binnen derealtime
map, maak een nieuw bestand met de naamserver.lua
. - Voeg de volgende code toe aan
server.lua
:luaCode kopiërenRegisterNetEvent("realtime:event") AddEventHandler("realtime:event", function() lokaal uur = tonumber(os.date("%H")) lokale minuut = tonumber(os.date("%M")) lokale seconde = tonumber(os.date("%S")) TriggerClientEvent("realtime:event", bron, uur, minuut, seconde) end)
Uitleg:- RegisterNetEvent: Registreert een netwerkgebeurtenis met de naam
realtime:gebeurtenis
. - AddEventHandler: Definieert wat er gebeurt als de
realtime:gebeurtenis
wordt geactiveerd. - os.datum: Haalt de huidige systeemtijd op (uur, minuut, seconde).
- TriggerClientEvent: Stuurt de tijdgegevens naar de client die de gebeurtenis heeft geactiveerd.
- RegisterNetEvent: Registreert een netwerkgebeurtenis met de naam
Het client-side script maken (client.lua
)
- Creëren
client.lua
:Binnen derealtime
map, maak een nieuw bestand met de naamclient.lua
. - Voeg de volgende code toe aan
client.lua
:luaCode kopiëren-- Stel de duur van één in-game minuut in milliseconden in SetMillisecondsPerGameMinute(60000) -- 60.000 ms = 1 echte minuut RegisterNetEvent("realtime:event") AddEventHandler("realtime:event", function(hour, minute, second) NetworkOverrideClockTime(hour, minute, second) end) -- Activeer de servergebeurtenis om de synchronisatie te starten TriggerServerEvent("realtime:event")
Uitleg:- Stel milliseconden per spelminuut in: Definieert hoe lang een in-game minuut duurt. Instellen op
60000
maakt 1 minuut in het spel gelijk aan 1 minuut in de echte wereld. - RegisterNetEvent en AddEventHandler: Luistert naar de
realtime:gebeurtenis
van de server en past de in-game klok dienovereenkomstig aan. - NetwerkOverrideKlokTijd: Overschrijft de klok in het spel zodat deze overeenkomt met de werkelijke tijd die van de server wordt ontvangen.
- TriggerServerEvent: Start de synchronisatie door de servergebeurtenis te activeren.
- Stel milliseconden per spelminuut in: Definieert hoe lang een in-game minuut duurt. Instellen op
Een stopfunctionaliteit toevoegen
Om realtime synchronisatie in en uit te kunnen schakelen, voegen we functies toe om de synchronisatie te starten en te stoppen.
- Update
client.lua
met Stop-functionaliteit:luaCode kopiërenlocal syncActive = true local syncThread = nil -- Functie om de synchronisatiefunctie te starten StartRealTimeSync() if not syncActive then syncActive = true syncThread = CreateThread(function() while syncActive do TriggerServerEvent("realtime:event") Wait(60000) -- Wacht 1 minuut voor de volgende synchronisatie end end) end end -- Functie om de synchronisatiefunctie te stoppen StopRealTimeSync() if syncActive then syncActive = false if syncThread then -- In Lua is er geen directe manier om een thread te beëindigen. -- Het gebruiken van een vlag om de lus te verlaten, stopt de thread effectief. syncThread = nil end end end RegisterNetEvent("realtime:event") AddEventHandler("realtime:event", function(uur, minuut, seconde) if syncActive then NetworkOverrideClockTime(uur, minuut, seconde) end end) -- Start synchronisatie bij resource start StartRealTimeSync() -- Voorbeeld: Opdracht om synchronisatie in of uit te schakelen RegisterCommand("toggleTimeSync", function() if syncActive then StopRealTimeSync() print("Realtime synchronisatie gestopt.") else StartRealTimeSync() print("Realtime synchronisatie gestart.") end end, false)
Uitleg:- syncActief: Een vlag om te bepalen of synchronisatie actief is.
- StartRealTimeSync: Start een lus die elke minuut tijdupdates van de server opvraagt.
- StopRealTimeSync: Stopt de synchronisatie door de vlag op false te zetten.
- RegisterCommand: Voegt een opdracht toe (
/toggleTijdSync
) waarmee spelers de synchronisatie kunnen in- of uitschakelen.
Het resourcemanifest maken (fxmanifest.lua
)
Voor elke FiveM-resource is een manifestbestand nodig waarin de metagegevens en afhankelijkheden zijn gedefinieerd.
- Creëren
fxmanifest.lua
:Binnen derealtime
map, maak een nieuw bestand met de naamfxmanifest.lua
. - Voeg de volgende code toe aan
fxmanifest.lua
:fx_version 'cerulean' spel 'gta5' auteur 'UwNaam' beschrijving 'Real-Time Synchronisatie Script voor FiveM' versie '1.0.0' server_script 'server.lua' client_script 'client.lua'
- Uitleg:
- fx_versie: Geeft de versie van het FiveM-manifest op.
hemelsblauw
is het laatste op het moment van schrijven. - spel: Geeft aan voor welk spel de bron is (
gta5
). - auteur, beschrijving, versie: Metagegevens over uw bron.
- server_script en client_script: Geeft aan welke server- en clientscripts moeten worden geladen.
- fx_versie: Geeft de versie van het FiveM-manifest op.
De resource op uw server starten
- Bewerk uw serverconfiguratie:Open het configuratiebestand van uw server, meestal met de naam
server.cfg
. - Voeg de resource toe aan de configuratie:Voeg de volgende regel toe om ervoor te zorgen dat de
realtime
resource start met de server:rubyCode kopiërenrealtime garanderen
Opmerking: Als je gebruiktstart
in plaats vanzorgen voor
, kunt u gebruiken:start realtime
- Opslaan en uw server opnieuw opstarten:Nadat u de wijzigingen hebt opgeslagen in
server.cfg
, start uw FiveM-server opnieuw op om de nieuwe resource te laden.
Volledige bron downloaden
Voor het gemak vindt u hier de complete set bestanden die u nodig hebt om te maken voor de realtime
hulpbron.
1. server.lua
RegisterNetEvent("realtime:event") AddEventHandler("realtime:event", function() lokaal uur = tonumber(os.date("%H")) lokale minuut = tonumber(os.date("%M")) lokale seconde = tonumber(os.date("%S")) TriggerClientEvent("realtime:event", bron, uur, minuut, seconde) end)
2. client.lua
local syncActive = true local syncThread = nil -- Functie om de synchronisatiefunctie te starten StartRealTimeSync() if not syncActive then syncActive = true syncThread = CreateThread(function() while syncActive do TriggerServerEvent("realtime:event") Wait(60000) -- Wacht 1 minuut voordat de volgende synchronisatie eindigt end) end end -- Functie om de synchronisatiefunctie te stoppen StopRealTimeSync() if syncActive then syncActive = false if syncThread then -- In Lua werken threads samen; als u syncActive op false instelt, wordt de lus gestopt 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 synchronisatie bij resource start StartRealTimeSync() -- Voorbeeld: Opdracht om synchronisatie in of uit te schakelen RegisterCommand("toggleTimeSync", function() if syncActive then StopRealTimeSync() print("Realtime synchronisatie gestopt.") else StartRealTimeSync() print("Realtime synchronisatie gestart.") end end, false)
3. fxmanifest.lua
fx_version 'cerulean' spel 'gta5' auteur 'UwNaam' beschrijving 'Real-Time Synchronisatie Script voor FiveM' versie '1.0.0' server_script 'server.lua' client_script 'client.lua'
Volledig script
Hier kunt u het script downloaden dat we zojuist hebben gemaakt:
https://github.com/HiFiveM/fivem-realtime/archive/refs/heads/main.zip
Je hebt met succes een FiveM-resource gemaakt die de in-game klok synchroniseert met de echte tijd. Dit script verbetert de game-ervaring door ervoor te zorgen dat de game-omgeving de werkelijke tijd weerspiegelt, wat een laag realisme toevoegt voor spelers.
U kunt het script verder aanpassen door synchronisatie-intervallen aan te passen, meer opdrachten toe te voegen of het te integreren met andere serverfuncties.
U kunt deze basis gerust uitbreiden om aan de unieke behoeften van uw server te voldoen!