FiveM Synchronizacja czasu rzeczywistego – Darmowe mody FiveM

FiveM Synchronizacja w czasie rzeczywistym

Ten poradnik przeprowadzi Cię przez tworzenie skryptu FiveM, który synchronizuje zegar w grze z rzeczywistym czasem. Dzięki temu środowisko gry będzie odzwierciedlać aktualny czas, zwiększając realizm dla graczy.

Omówimy zarówno skrypty po stronie serwera, jak i klienta, dodając funkcjonalność uruchamiania i zatrzymywania synchronizacji oraz konfigurację zasobu dla Twojego serwera FiveM.


Wymagania wstępne

Przed rozpoczęciem upewnij się, że posiadasz następujące rzeczy:

  • Dostęp do serwera FiveM: Wymagany jest dostęp administracyjny do Twojego serwera FiveM, aby dodawać skrypty.
  • Podstawowa znajomość Lua: Znajomość skryptów Lua pomoże Ci zrozumieć i dostosować skrypt.
  • Edytor tekstu: Oprogramowanie takie jak Visual Studio Code, Sublime Text lub Notepad++ do edycji plików skryptów.

Konfigurowanie folderu zasobów

  1. Przejdź do katalogu Resources:Znajdź resources folder w katalogu Twojego serwera FiveM. Zazwyczaj znajduje się on pod adresem:bashCode kopierenyour-fivem-server-folder/resources/
  2. Utwórz nowy folder zasobu:Wewnątrz folderu resources , utwórz nowy folder o nazwie realtime.bashCode kopierenyour-fivem-server-folder/resources/realtime/
  3. Przejdź do realtime Folder:Ten folder będzie zawierać wszystkie niezbędne skrypty i pliki konfiguracyjne do synchronizacji czasu rzeczywistego.

Tworzenie skryptu po stronie serwera (server.lua)

  1. Tworzyć server.lua:Wewnątrz folderu realtime folder, utwórz nowy plik o nazwie server.lua.
  2. Dodaj następujący kod do 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) Wyjaśnienie:
    • RegisterNetEvent: Rejestruje zdarzenie sieciowe o nazwie realtime:event.
    • AddEventHandler: Określa, co się dzieje, gdy realtime:event jest wyzwolone.
    • os.date: Pobiera bieżący czas systemowy (godzina, minuta, sekunda).
    • TriggerClientEvent: Wysyła dane czasu do klienta, który wywołał zdarzenie.

Tworzenie skryptu po stronie klienta (client.lua)

  1. Tworzyć client.lua:Wewnątrz folderu realtime folder, utwórz nowy plik o nazwie client.lua.
  2. Dodaj następujący kod do 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") Wyjaśnienie:
    • SetMillisecondsPerGameMinute: Określa, jak długo trwa jedna minuta w grze. Ustawienie go na 60000 sprawia, że 1 minuta w grze równa się 1 minucie czasu rzeczywistego.
    • RegisterNetEvent & AddEventHandler: Nasłuchuje zdarzenia realtime:event z serwera i odpowiednio aktualizuje zegar w grze.
    • NetworkOverrideClockTime: Zastępuje zegar w grze, aby dopasować go do czasu rzeczywistego otrzymanego z serwera.
    • TriggerServerEvent: Inicjuje synchronizację poprzez wywołanie zdarzenia serwera.

Dodawanie funkcjonalności zatrzymania

Aby umożliwić włączanie i wyłączanie synchronizacji czasu rzeczywistego, dodamy funkcje uruchamiania i zatrzymywania synchronizacji.

  1. Aktualizacja client.lua z funkcjonalnością zatrzymania: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) Wyjaśnienie:
    • syncActive: Flaga określająca, czy synchronizacja jest aktywna.
    • StartRealTimeSync: Inicjuje pętlę, która co minutę żąda aktualizacji czasu z serwera.
    • StopRealTimeSync: Zatrzymuje synchronizację poprzez ustawienie flagi na false.
    • RegisterCommand: Dodaje komendę (/toggleTimeSync) którą gracze mogą użyć do włączania lub wyłączania synchronizacji.

Tworzenie manifestu zasobu (fxmanifest.lua)

Każdy zasób FiveM wymaga pliku manifestu, który definiuje jego metadane i zależności.

  1. Tworzyć fxmanifest.lua:Wewnątrz folderu realtime folder, utwórz nowy plik o nazwie fxmanifest.lua.
  2. Dodaj następujący kod do 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'
  3. Wyjaśnienie:
    • fx_version: Określa wersję manifestu FiveM. cerulean jest najnowsza w momencie pisania.
    • gra: Wskazuje grę, dla której jest zasób (gta5).
    • autor, opis, wersja: Metadane dotyczące twojego zasobu.
    • server_script & client_script: Określa skrypty serwera i klienta do załadowania.

Uruchamianie zasobu na twoim serwerze

  1. Edytuj konfigurację serwera:Otwórz plik konfiguracyjny serwera, zazwyczaj nazwany server.cfg.
  2. Dodaj zasób do konfiguracji:Dodaj następującą linię, aby upewnić się, że realtime zasób zaczyna się od serwera:rubyCode kopierenensure realtime Uwaga: Jeśli używasz start zamiast ensure, możesz użyć: start realtime
  3. Zapisz i uruchom ponownie swój serwer:Po zapisaniu zmian w server.cfg, uruchom ponownie swój serwer FiveM, aby załadować nowy zasób.

Pełne pobranie zasobu

Dla wygody, oto kompletny zestaw plików, które musisz utworzyć dla realtime zasobu.

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'

Pełny skrypt

Tutaj możesz pobrać skrypt, który właśnie utworzyliśmy:

https://github.com/HiFiveM/fivem-realtime/archive/refs/heads/main.zip

GitHub

Pomyślnie utworzyłeś zasób FiveM, który synchronizuje zegar w grze z czasem rzeczywistym. Ten skrypt dodaje obszar rozgrywki, zapewniając, że środowisko gry odzwierciedla rzeczywisty czas, dodając warstwę realizmu dla graczy.

Możesz dalej dostosowywać skrypt, zmieniając interwały synchronizacji, dodając więcej komend lub integrując go z innymi funkcjami serwera.

Śmiało rozwijaj tę podstawę, aby dostosować ją do unikalnych potrzeb swojego serwera!

Dodaj komentarz