Deze tutorial leidt u door het maken van een FiveM-script dat de in-game klok synchroniseert met de echte tijd. Dit zorgt ervoor dat de spelomgeving de werkelijke tijd weerspiegelt, wat de realisme voor spelers vergroot.
We behandelen zowel server-side als client-side scripting, het toevoegen van functionaliteit om de synchronisatie te starten en stoppen, en het instellen van de resource voor uw FiveM-server.
Voorwaarden
Voordat je begint, zorg ervoor dat je het volgende hebt:
- FiveM-server toegang: U heeft administratieve toegang nodig tot uw FiveM-server om scripts toe te voegen.
- Basiskennis van Lua: Bekendheid met Lua-scripting helpt u het script te begrijpen en aan te passen.
- Teksteditor: Software zoals Visual Studio Code, Sublime Text of Notepad++ voor het bewerken van scriptbestanden.
De resource-map instellen
- Navigeer naar uw Resources-map:Zoek de
resourcesmap in uw FiveM-serverdirectory. Deze bevindt zich meestal op:bashCode kopierenyour-fivem-server-folder/resources/ - Maak een nieuwe Resource-map:In de
resourcesmap, maak een nieuwe map met de naamrealtime.bashCode kopierenyour-fivem-server-folder/resources/realtime/ - Navigeer naar de
realtimeMap:Deze map bevat alle benodigde scripts en configuratiebestanden voor de real-time synchronisatie.
Het maken van het server-side script (server.lua)
- Creëren
server.lua:In derealtimemap, maak een nieuw bestand met de naamserver.lua. - Voeg de volgende code toe aan
server.lua:luaCode kopierenRegisterNetEvent("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)Uitleg:- RegisterNetEvent: Registreert een netwerkevenement genaamd "realtime:event" dat de huidige echte tijd naar de client stuurt wanneer geactiveerd.
realtime:event. - AddEventHandler: Definieert wat er gebeurt wanneer de
realtime:eventwordt geactiveerd. - os.date: Haalt de huidige systeemtijd op (uur, minuut, seconde).
- TriggerClientEvent: Stuurt de tijdgegevens naar de client die de gebeurtenis heeft geactiveerd.
- RegisterNetEvent: Registreert een netwerkevenement genaamd "realtime:event" dat de huidige echte tijd naar de client stuurt wanneer geactiveerd.
Het maken van het client-side script (client.lua)
- Creëren
client.lua:In derealtimemap, maak een nieuw bestand met de naamclient.lua. - Voeg de volgende code toe aan
client.lua:luaCode kopieren-- 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")Uitleg:- SetMillisecondsPerGameMinute: Definieert hoe lang een in-game minuut duurt. Door het in te stellen op
60000wordt 1 in-game minuut gelijk aan 1 echte minuut. - RegisterNetEvent & AddEventHandler: Luistert naar de
realtime:eventvan de server en werkt de in-game klok dienovereenkomstig bij. - NetworkOverrideClockTime: Overschrijft de in-game klok om overeen te komen met de echte tijd ontvangen van de server.
- TriggerServerEvent: Start de synchronisatie door de servergebeurtenis te activeren.
- SetMillisecondsPerGameMinute: Definieert hoe lang een in-game minuut duurt. Door het in te stellen op
Een stopfunctionaliteit toevoegen
Om het in- en uitschakelen van de real-time synchronisatie mogelijk te maken, voegen we functies toe om de synchronisatie te starten en stoppen.
- Update
client.luamet stopfunctionaliteit:luaCode kopierenlocal 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)Uitleg:- syncActive: Een vlag om te bepalen of synchronisatie actief is.
- StartRealTimeSync: Start een lus die elke minuut tijdupdates van de server aanvraagt.
- StopRealTimeSync: Stopt de synchronisatie door de vlag op false te zetten.
- RegisterCommand: Voegt een commando toe (
/toggleTimeSync) dat spelers kunnen gebruiken om synchronisatie aan of uit te zetten.
Het maken van het Resource Manifest (fxmanifest.lua)
Elke FiveM-resource vereist een manifestbestand dat de metadata en afhankelijkheden definieert.
- Creëren
fxmanifest.lua:In derealtimemap, maak een nieuw bestand met de naamfxmanifest.lua. - Voeg de volgende code toe aan
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' - Uitleg:
- fx_version: Specificeert de versie van het FiveM-manifest.
ceruleanis de nieuwste op het moment van schrijven. - spel: Geeft aan voor welk spel de resource is (
gta5). - author, description, version: Metadata over uw resource.
- server_script & client_script: Specificeert de server- en clientscripts die moeten worden geladen.
- fx_version: Specificeert de versie van het FiveM-manifest.
De Resource starten op uw server
- Bewerk uw serverconfiguratie:Open het configuratiebestand van uw server, meestal genaamd
server.cfg. - Voeg de Resource toe aan de configuratie:Voeg de volgende regel toe om ervoor te zorgen dat de
realtimeresource start met de server:rubyCode kopierenensure realtimeNotitie: Als u gebruikmaakt vanstartin plaats vanensure, kunt u gebruiken:start realtime - Sla uw server op en herstart deze:Na het opslaan van de wijzigingen in
server.cfg, herstart u uw FiveM-server om de nieuwe resource te laden.
Volledige resource download
Voor het gemak vindt u hier de volledige set bestanden die u moet maken voor de realtime resource.
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'
Volledig script
Hier kunt u het script downloaden dat we zojuist hebben gemaakt:
https://github.com/HiFiveM/fivem-realtime/archive/refs/heads/main.zip
U heeft succesvol een FiveM-resource gemaakt die de in-game klok synchroniseert met de echte tijd. Dit script voegt een speelgebied toe doordat 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 commando's toe te voegen of het te integreren met andere serverfuncties.
Voel u vrij om op deze basis voort te bouwen om aan de unieke behoeften van uw server te voldoen!
