Bu eğitim, oyun içi saati gerçek dünya saatiyle senkronize eden bir FiveM betiği oluşturmanız için size rehberlik edecektir. Bu, oyun ortamının gerçek zamanı yansıtmasını sağlayarak oyuncular için gerçekçiliği artırır.
Hem sunucu hem de istemci tarafı betik yazmayı, senkronizasyonu başlatma ve durdurma işlevselliğini eklemeyi ve FiveM sunucunuz için kaynağı ayarlamayı ele alacağız.
Ön koşullar
Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:
- FiveM Sunucu Erişimi: Sunucunuza yönetici erişimine ihtiyacınız var FiveM sunucusuna script eklemek için.
- Lua'nın Temel Bilgileri:Lua betiğine aşinalık, betiği anlamanıza ve özelleştirmenize yardımcı olacaktır.
- Metin Editörü:Script dosyalarını düzenlemek için Visual Studio Code, Sublime Text veya Notepad++ gibi yazılımlar.
Kaynak Klasörünü Ayarlama
- Kaynaklar Dizininize gidin:Bulun
resourcesFiveM sunucu dizininizdeki klasör. Bu genellikle şu adreste bulunur:bashCode kopierenyour-fivem-server-folder/resources/ - Yeni Bir Kaynak Klasörü Oluştur:İçinde
resourcesklasör, adında yeni bir klasör oluşturunrealtime.bashCode kopyalayour-fivem-server-folder/resources/realtime/ - Şuraya gidin:
realtimeDosya:Bu klasör gerçek zamanlı senkronizasyon için gerekli tüm scriptleri ve yapılandırma dosyalarını içerecektir.
Sunucu Tarafı Komut Dosyasının Oluşturulması (server.lua)
- Yaratmak
server.lua:İçinderealtimeklasör, adında yeni bir dosya oluşturunserver.lua. - Aşağıdaki Kodu Ekleyin
server.lua:luaCode kopyalaRegisterNetEvent("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)Açıklama:- KayıtNetEtkinliği: Adlı bir ağ olayını kaydeder
realtime:event. - OlayİşleyicisiEkle: Ne zaman olacağını tanımlar
realtime:eventtetiklenir. - işletim sistemi.tarihi: Mevcut sistem saatini (saat, dakika, saniye) alır.
- TetikleyiciİstemciOlay: Olayı tetikleyen istemciye zaman verisini gönderir.
- KayıtNetEtkinliği: Adlı bir ağ olayını kaydeder
İstemci Tarafı Komut Dosyasının Oluşturulması (client.lua)
- Yaratmak
client.lua:İçinderealtimeklasör, adında yeni bir dosya oluşturunclient.lua. - Aşağıdaki Kodu Ekleyin
client.lua:luaCode kopyala-- 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")Açıklama:- OyunDakikasıBaşınaMilisaniyeAyarla: Oyun içi bir dakikanın ne kadar süreceğini tanımlar. Bunu
60000Oyun içindeki 1 dakikayı gerçek dünyadaki 1 dakikaya eşitler. - RegisterNetEvent ve AddEventHandler: Dinler
realtime:eventsunucudan alır ve oyun içi saati buna göre günceller. - AğGeçersizKılmaSaatiZamanı: Sunucudan alınan gerçek dünya saatiyle eşleşmesi için oyun içi saati geçersiz kılar.
- TetikleyiciSunucuOlay: Sunucu olayını tetikleyerek senkronizasyonu başlatır.
- OyunDakikasıBaşınaMilisaniyeAyarla: Oyun içi bir dakikanın ne kadar süreceğini tanımlar. Bunu
Durdurma İşlevi Ekleme
Gerçek zamanlı senkronizasyonun açılıp kapatılmasına olanak sağlamak için senkronizasyonu başlatıp durduran işlevler ekleyeceğiz.
- Güncelleme
client.luaDurdurma İşlevi ile:luaCode kopyalalocal 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)Açıklama:- senkronizeAktif: Senkronizasyonun etkin olup olmadığını belirleyen bir bayrak.
- GerçekZamanlıEşitlemeyiBaşlat: Sunucudan her dakika zaman güncellemeleri isteyen bir döngü başlatır.
- GerçekZamanlıEşitleme'yi Durdur: Bayrağı false olarak ayarlayarak senkronizasyonu durdurur.
- KayıtKomutu: Bir komut ekler (
/toggleTimeSync) oyuncuların senkronizasyonu açıp kapatmak için kullanabilecekleri bir özelliktir.
Kaynak Beyannamesinin Oluşturulması (fxmanifest.lua)
Her FiveM kaynağı, meta verilerini ve bağımlılıklarını tanımlayan bir bildirim dosyası gerektirir.
- Yaratmak
fxmanifest.lua:İçinderealtimeklasör, adında yeni bir dosya oluşturunfxmanifest.lua. - Aşağıdaki Kodu Ekleyin
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' - Açıklama:
- fx_sürümü: FiveM bildiriminin sürümünü belirtir.
ceruleanyazının yazıldığı tarih itibariyle en son durum. - oyun: Kaynağın hangi oyun için olduğunu gösterir (
gta5). - yazar, açıklama, sürüm: Kaynağınız hakkında meta veriler.
- sunucu_komut_komutu ve istemci_komut_komutu: Yüklenecek sunucu ve istemci betiklerini belirtir.
- fx_sürümü: FiveM bildiriminin sürümünü belirtir.
Kaynağı Sunucunuzda Başlatma
- Sunucu Yapılandırmanızı Düzenleyin:Sunucunuzun yapılandırma dosyasını açın, genellikle şu şekilde adlandırılır:
server.cfg. - Kaynağı Yapılandırmaya Ekle: Aşağıdaki satırı ekleyerek şunları sağlayın:
realtimekaynak sunucuyla başlar:rubyCode kopierenensure realtimeNot: Eğer kullanıyorsanızstartyerineensure, şunları kullanabilirsiniz:start realtime - Sunucunuzu Kaydedin ve Yeniden Başlatın:Değişiklikleri kaydettikten sonra
server.cfgYeni kaynağı yüklemek için FiveM sunucunuzu yeniden başlatın.
Tam Kaynak İndirme
Kolaylık olması açısından, oluşturmanız gereken dosyaların tam seti aşağıdadır realtime kaynak.
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'
Tam Metin
Buradan az önce oluşturduğumuz scripti indirebilirsiniz:
https://github.com/HiFiveM/fivem-realtime/archive/refs/heads/main.zip
You’ve successfully created a FiveM kaynağını başarıyla oluşturdunuz. Bu kaynak, oyun içi saati gerçek dünya zamanıyla senkronize eder. Bu betik, oyun ortamının gerçek zamanı yansıtmasını sağlayarak bir oyun alanı ekler ve oyuncular için bir gerçekçilik katmanı oluşturur.
Senkronizasyon aralıklarını ayarlayarak, daha fazla komut ekleyerek veya diğer sunucu özellikleriyle entegre ederek betiği daha da özelleştirebilirsiniz.
Sunucunuzun özel ihtiyaçlarına uyacak şekilde bu temeli genişletmekten çekinmeyin!
