Metin2 Sunucusunda Lua ile Gizli Etkinlik (Event) Oluşturmanın Adımları

siradan_biri

Yeni Üye
Katılım
Eyl 2026
Konular
1
Mesajlar
1
Tepki puanı
0
Görüntülenme
0

1. Dosya Konumu​

Lua betikleri genellikle scripts/ 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
Burada 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/ yerine script/ 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 644 verilmemişse sunucu betiği çalıştıramaz.
  • Paylaşılan değişken adı çakışması: session gibi yaygın adlar başka betikte de kullanılabiliyorsa isim çakışmasına neden olur; adları event_session gibi ö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 passwords tablosuna kayıt eklemek gerekir.

5. Test ve Yedekleme​

Yeni betiği canlı ortama geçirmeden önce test sunucusunda çalıştırın ve scripts/ 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?

İlgili konular​

 
Geri
En Üst