aslain.dev
0%
01 Hizmetler 02 Hakkımda 03 Projeler 04 Stack 05 Blog 06 İletişim
← Tüm makaleler Metin2

Metin2 Oto Av Sistemi: Mimari ve Denge Rehberi

Bir Metin2 oto av sistemi, oyuncunun karakterini belirli bir bölgede otomatik olarak avlandıran, can/mana yönetimini üstlenen ve düşen eşyaları toplayan bir kolaylık özelliğidir. Birçok özel sunucu, oyuncuları meşgul tutmak ve "farm" döngüsünü daha az yorucu hâle getirmek için bu sistemi sunar. Ama bu özellik iki ucu keskin bir bıçaktır: yanlış kurgulandığında ekonomiyi ve oyuncu emeğinin değerini bir gecede çökertebilir. Bu yazıda hem mimariyi hem de denge kaygılarını ele alıyorum.

Oto av sistemi tam olarak ne yapar?

Temelde bir oto av modülü şu görevleri döngüsel olarak yürütür:

  • Hedef seçimi: Karakterin etrafındaki belirli yarıçap içindeki canavarları tarar ve en yakın/en uygun hedefi seçer.
  • Saldırı: Hedefe normal vuruş veya seçili yetenekleri uygular.
  • Hayatta kalma: Can belirli bir eşiğin altına düşünce iksir kullanır ya da güvenli bir noktaya döner.
  • Toplama: Yere düşen yang, eşya ve metin taşı parçalarını otomatik alır.
  • Sınırlandırma: Yalnızca tanımlı bir bölge/harita içinde çalışır; süre veya öldürme limiti dolunca durur.

Buradaki en kritik kural mimari değil felsefedir: sistem sunucu tarafında çalışmalı. İstemciye güvenen her oto av sistemi, hile programlarına davetiye çıkarır.

İstemci tarafı değil, sunucu tarafı

Metin2'nin orijinal hile sorunlarının büyük kısmı, istemciye fazla yetki verilmesinden doğar. Oto av özelliğini istemcide (Python arayüzü veya enjekte edilen kod) çalıştırırsanız, oyuncu o mantığı ele geçirip kendi lehine değiştirebilir: sonsuz menzil, anlık öldürme, ışınlanarak toplama. Doğru yaklaşım, kararların game sunucu çekirdeğinde alınmasıdır. İstemci yalnızca "oto av başlat" isteğini gönderir; geri kalan her şeyi sunucu doğrular ve yürütür.

Pratikte bu, mantığı büyük ölçüde quest sistemi (lua) ve/veya çekirdek C++ üzerinden kurmak demektir. Quest tabanlı yaklaşım, kaynak kodunu derlemeden esnek mantık yazmaya izin verdiği için topluluk sunucularında en yaygın olanıdır.

Quest tetikleyicilerle iskelet

Quest sistemi, zamanlayıcılar (timer) ve olay kancaları (örneğin when kill, when login) sunar. Bir döngüyü periyodik bir timer ile sürdürebilirsiniz. Aşağıda kavramsal bir iskelet var; gerçek bir sunucuda hedef seçimi ve saldırı için çekirdek tarafında açılmış fonksiyonlara ihtiyacınız olur:

quest auto_hunt begin
    state start begin
        -- Oyuncu komutu ile başlatılır
        when "/oto" command begin
            if pc.get_map_index() != ALLOWED_MAP then
                syschat("Bu bölgede oto av kapali.")
                return
            end
            pc.setqf("hunting", 1)
            -- 2 saniyede bir tetiklenen döngü
            server_timer("hunt_tick", 2, pc.get_player_id())
            syschat("Oto av baslatildi.")
        end

        when hunt_tick.server_timer begin
            local pid = get_server_timer_arg()
            if pc.select(pid) == false then return end
            if pc.get_map_index() != ALLOWED_MAP then
                pc.setqf("hunting", 0)
                return
            end
            -- Can dustuyse iksir/return mantigi burada
            if pc.get_hp() < pc.get_max_hp() * 0.3 then
                -- guvenli noktaya don / iksir kullan
            end
            -- Devam ettir
            if pc.getqf("hunting") == 1 then
                server_timer("hunt_tick", 2, pid)
            end
        end
    end
end

Bu örnekteki ALLOWED_MAP, sistemin yalnızca izin verilen haritalarda dönmesini sağlar. Asıl "hedef bul ve vur" adımı için ya çekirdeğe yeni bir Lua fonksiyonu eklemeniz (C++ tarafında CFuncTable üzerinden register) ya da yapay zekâya benzer bir takip/saldırı davranışını tetiklemeniz gerekir. Burada uydurma fonksiyon adı kullanmamak önemli; kendi sunucu kaynağınızdaki gerçek API'yi temel alın.

Güvenlik ve doğrulama

Sistem sunucuda çalışsa bile, istemciden gelen her isteği şüpheyle karşılayın:

  • Hız sınırı: "oto av başlat" paketinin saniyede onlarca kez gönderilmediğini kontrol edin; aksi hâlde döngü zamanlayıcılarını çoğaltarak sunucuyu boğabilirler.
  • Menzil doğrulaması: Saldırı ve toplama mesafesini her zaman sunucuda hesaplayın. İstemcinin "şu canavardayım" iddiasına güvenmeyin.
  • Durum tutarlılığı: Oyuncunun gerçekten izinli haritada, hayatta ve oturum açmış olduğunu her tick'te doğrulayın.
  • Loglama: Kazanılan yang ve item'ları ayrı bir tabloya yazın ki sonradan denetleyebilesiniz.

En kritik kısım: oyun dengesi

Teknik olarak çalışan bir sistem, oyununuzu yine de mahvedebilir. Oto av, oyuncu emeğini otomatikleştirdiği için ekonomik girdiyi (yang, eşya, taş) çarpan etkisiyle artırır. Dengeyi korumak için somut frenler koyun:

  • Günlük süre/öldürme limiti: Örneğin günde 2 saat veya 5.000 öldürme. Limit dolunca sistem kapanır.
  • Düşük drop oranı: Oto av sırasındaki drop'u manuel avın altında tutun (örn. %50). Manuel oynamak her zaman daha kârlı kalmalı.
  • Bölge kısıtı: Yalnızca alt seviye/orta seviye haritalarda izin verin; uç içerik (boss, yüksek seviye metin) manuel kalsın.
  • Çevrimiçi zorunluluğu / AFK denetimi: Düzenli aralıklarla basit bir doğrulama ya da en azından bağlantı kopunca otomatik durma ekleyin.
  • Premium kapısı dikkatli kullanın: Oto av'ı paralı yaparsanız "pay-to-farm" algısı oluşur; bu, ücretsiz oyuncuları küstürebilir.

Altın kural: oto av bir kolaylık olmalı, bir kazanç motoru değil. Manuel oynayan oyuncu her zaman daha hızlı ilerlemeli.

Test ve devreye alma

Yeni sistemi asla doğrudan canlıya koymayın. Önce yerel bir test sunucusunda, sahte ekonomi verisiyle 24-48 saat çalıştırın; üretilen yang ve eşya miktarını ölçün. Ardından sınırlı bir kapalı beta ile gerçek oyuncu davranışını gözlemleyin. Drop ve süre limitlerini config dosyasından ayarlanabilir bırakın ki sunucuyu yeniden derlemeden ince ayar yapabilesiniz.

Sık Sorulan Sorular

Oto av sistemini istemcide yapsam olmaz mı?

Olur ama tavsiye edilmez. İstemci tarafı mantık, hile programlarıyla kolayca manipüle edilir. Karar ve doğrulamayı sunucuda tutmak, hem güvenlik hem de denetlenebilirlik için şarttır.

Quest mi yoksa C++ kaynak mı kullanmalıyım?

İkisi birlikte en sağlamıdır. Akış kontrolü ve limitler için quest/Lua esnektir; hedef tarama ve saldırı gibi performans kritik işlemler için çekirdek C++ tarafı daha verimlidir.

Oto av ekonomiyi bozar mı?

Frensiz bırakılırsa kesinlikle bozar. Günlük limit, düşük drop oranı ve bölge kısıtı gibi önlemlerle bu riski yönetebilir ve sistemi sağlıklı tutabilirsiniz.

Sunucunuza dengeli bir oto av sistemi mi kurmak istiyorsunuz? Quest mimarisinden ekonomi ayarlarına kadar uçtan uca yardımcı olabilirim. Benimle iletişime geçin ve projenizi konuşalım.

Bu kategorideki tüm yazılar →

Devamı için