siradan_biri
Yeni Üye
1. Dosya Konumu
Lua betikleri genelliklescripts/ klasöründe saklanır. Yeni bir event.lua dosyası oluşturun ve dosya izinlerini 644 yapın; bu, sunucu tarafından okunabilir, ancak değiştirilemez olmasını sağlar.2. Basit Örnek Betik
Kod:
-- event.lua
function OnPlayerJoin(session)
local character = session:character()
if character ~= nil then
-- 24 saat sonra ödül vermek için zamanlayıcı
local timer = session:bindTimer(86400000, 1, function()
character:giveItem(2001, 1) -- Örnek eşya ID ve miktar
character:sendMessage("Gizli etkinliğe katıldığın için tebrikler!")
end)
end
end
-- Sunucu başlatıldığında bu fonksiyonu kaydet
OnSERVERSTART = function()
-- Her oyuncu katıldığında OnPlayerJoin çağrılır
RegisterHook("PlayerJoin", OnPlayerJoin)
end
OnSERVERSTART ve RegisterHook fonksiyonları, Metin2’nin olay sistemine betiği bağlar.3. Yeniden Yükleme
Betiği ekledikten sonra sunucuyu yeniden başlatın:systemctl restart metin2 veya konsol komutu reload.4. Sık Yapılan Hatalar
- Dosya yolu yanlış:
scripts/yerinescript/yazarak betik bulunamaz. - Söz dizimi hatası: Eksik tırnak, parantez veya noktalı virgül hatalara yol açar; betiği test ederken
lua -l event.lua; bunu yapmak hata bulmayı kolaylaştırır. - İzin problemi: Betik dosyasına
chmod 644verilmemişse sunucu betiği çalıştıramaz. - Paylaşılan değişken adı çakışması:
sessiongibi yaygın adlar başka betikte de kullanılabiliyorsa isim çakışmasına neden olur; adlarıevent_sessiongibi özgün yapın. - Veritabanı kullanmadığı için kalıcı durum kaybı: Tek seferlik ödüller için yeterli, fakat çoklu katılımcı etkinliklerde
passwordstablosuna kayıt eklemek gerekir.
5. Test ve Yedekleme
Yeni betiği canlı ortama geçirmeden önce test sunucusunda çalıştırın vescripts/ klasörünü yedekleyin. Böylece hatalı betik yüzünden sunucu kapanma riskini azaltırsınız.Metin2’de gizli bir etkinlik eklerken yukarıdaki adımları takip ederek hem fonksiyonel hem de güvenli bir yapı oluşturabilirsiniz.
Soru: Lua betiği içerisinde zamanlayıcıları kullanırken hangi durumlarda
bindTimer yerine setTimer tercih edersiniz?