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

Metin2 Pet Sistemi: Evcil Hayvan Ekleme Rehberi

Metin2 pet sistemi, karakterin yanında dolaşan, ona pasif bonuslar veren ve seviye atlayabilen evcil hayvanları yönetmenin yoludur. Klasik sunucularda pet yalnızca süs niteliğindeyken, modern pet sistemi beslenme, seviye, bonus ve hatta yetenekler getirir. Bu rehberde sistemin nasıl çalıştığını, pet bonuslarının nereden geldiğini, beslenme mekaniğini ve sunucuna sıfırdan yeni bir pet modeli eklemenin adımlarını anlatıyorum.

Pet sistemi nasıl çalışır?

Metin2'de bir pet, aslında özel bir mob kaydıdır. Karakter, envanterindeki bir çağırma eşyası (yumurta, düdük veya tasma) ile peti aktif eder; bu eşya bir USE tipi item'dır ve kullanıldığında oyuncuya bağlı geçici bir varlık doğurur. Pet yere düşman olarak değil, sahibini takip eden bir NPC olarak yaratılır.

  • Çağırma eşyasıitem_proto içinde tanımlı, genelde type = USE ve sub_type = USE_PET benzeri bir alt tip.
  • Pet modelimob_proto içinde bir vnum'a karşılık gelir; görseli istemci tarafındaki .gr2 model dosyasından gelir.
  • Davranış — peti yaratan kod, onu sahibine kilitler; saldırı yapmaz, sadece yanında durur (savaş peti varyantları hariç).

Yeni nesil pet sistemlerinde (yaygın olarak "pet system" olarak anılan ek) bu temel yapının üzerine seviye, açlık çubuğu, süre ve bonus katmanları eklenir. Bu katmanlar çoğunlukla quest motoruyla (Lua) ve birkaç ek tabloyla yönetilir.

Pet bonusları nereden gelir?

Pet bonusları, peti taşıyan oyuncuya uygulanan geçici stat artışlarıdır. Bunları iki ana yöntemle bağlayabilirsin:

  • Item bonusları — çağırma eşyasına doğrudan item_proto üzerinden bonus tanımlamak (örneğin APPLY_MAX_HP, APPLY_ATT_SPEED). Pet aktifken bu bonuslar uygulanır.
  • Quest tabanlı bonuslar — pet seviyesine göre dinamik bonus vermek istiyorsan, bonusu Lua quest içinden apply_bonus benzeri çağrılarla eklemek daha esnektir.

Aşağıdaki örnek, pet çağrıldığında oyuncuya seviyesine bağlı bir saldırı değeri bonusu veren basitleştirilmiş bir quest mantığıdır:

quest pet_bonus begin
    state start begin
        when 53001.use begin
            local lvl = pc.getqf("pet_level")
            -- seviye basina +5 saldiri degeri
            apply.apply("ATT_GRADE_BONUS", lvl * 5, 60 * 30)
            chat("Pet'in seni guclendiriyor!")
        end
    end
end

Burada önemli olan: bonus süresini pet süresine bağlamak ve pet çağrıldığında/geri çağrıldığında bonusu tutarlı şekilde yeniden uygulamaktır. Aksi halde oyuncu peti yeniden çağırarak bonusu sömürebilir.

Beslenme mekaniği

Beslenme, pet sisteminin oyuncuyu meşgul eden kısmıdır. Mantık şudur: petin bir açlık/doyum değeri vardır, zamanla azalır ve oyuncu özel pet yemi eşyasıyla bu değeri doldurur. Doyum sıfıra inerse pet bonus vermeyi durdurur veya kaybolur.

  • Doyum değerini oyuncu üzerinde bir quest flag'inde tut: pc.setqf("pet_food", 100).
  • Bir zamanlayıcıyla (quest when … with timer) değeri düzenli azalt.
  • Pet yemi eşyası kullanıldığında değeri artır ve üst sınırı (örn. 100) aşmasını engelle.
quest pet_feed begin
    state start begin
        when 53010.use begin
            local food = pc.getqf("pet_food")
            food = math.min(food + 25, 100)
            pc.setqf("pet_food", food)
            item.remove()
            chat("Pet doyumu: "..food.."/100")
        end
    end
end

Beslenmeyi seviye sistemiyle birleştirebilirsin: pet beslendikçe küçük bir pet_exp değeri kazanır, belirli eşiklerde seviye atlar ve bonusları büyür. Bu döngü, oyuncunun pete düzenli ilgi göstermesini sağlar.

Yeni pet modeli ekleme adımları

Sunucuna görsel olarak yeni bir pet eklemek hem istemci hem sunucu tarafında dosya gerektirir. Sıra şöyledir:

  • 1. Model dosyaları: Yeni petin .gr2 model ve animasyon dosyalarını, doku (.dds) dosyalarıyla birlikte istemcinin ilgili pack klasörüne yerleştir.
  • 2. mob_proto kaydı: Petin yeni bir vnum ile mob_proto'ya eklenmesi; tip olarak NPC/pet, sürat ve boyut değerleriyle. Sunucu bu kaydı doğru okumalı.
  • 3. İstemci tanımı: İstemci tarafındaki mob_proto (veya .txt tanımı) ve model yolunu eşleştir; vnum ile .gr2 dosyası arasındaki bağ doğru olmalı.
  • 4. Çağırma eşyası: Yeni bir item_proto kaydı oluştur; kullanıldığında bu yeni vnum'lu peti çağıran quest veya kod yoluna bağla.
  • 5. Lokalizasyon: locale dosyalarında petin ve eşyanın adını/açıklamasını ekle.

Test ederken sıralı git: önce eşya envanterde görünüyor mu, sonra kullanıldığında pet doğuyor mu, ardından model ve animasyon doğru mu, en son bonus/beslenme döngüsü çalışıyor mu. Her adımı izole etmek, hata ayıklamayı çok kolaylaştırır.

Sık karşılaşılan hatalar

  • Görünmez pet: vnum sunucuda var ama istemcide model yolu eşleşmiyor — çağrılır ama görünmez. mob_proto iki tarafta da tutarlı olmalı.
  • Bonus kalıcı kalıyor: Pet geri çağrılınca bonus temizlenmiyor. Süreyi pet ömrüne bağla ve geri çağırmada bonusu sıfırla.
  • proto uyuşmazlığı: İstemci ve sunucu item_proto/mob_proto sürümleri farklı; bu, "bilinmeyen eşya" veya çökme olarak görünür. Her zaman aynı proto'yu iki tarafa da dağıt.

Sık Sorulan Sorular

Pet karaktere zarar verebilir mi veya saldırır mı?

Standart pet sadece sahibini takip eder ve saldırmaz. "Savaş peti" istiyorsan ayrı bir davranış (mob AI) tanımlaman ve peti düşmanlara saldıracak şekilde kodlaman gerekir; bu, klasik takip petinden farklı bir geliştirme işidir.

Beslemezsem pet kaybolur mu?

Bu tamamen senin sistem tasarımına bağlıdır. Yaygın yaklaşım, doyum sıfıra inince petin bonus vermeyi durdurması; bazı sunucularda ise pet tamamen geri çağrılır. Mantığı Lua quest'inde sen belirlersin.

Pet seviye sistemi şart mı?

Hayır. Süs amaçlı sade bir pet için sadece çağırma eşyası ve model yeterlidir. Seviye, beslenme ve bonus katmanları oyuncu bağlılığını artırmak için eklenen isteğe bağlı özelliklerdir.

Sunucun için sağlam, sömürüye kapalı bir pet sistemi mi istiyorsun? Pet modeli ekleme, beslenme ve bonus mekaniğini baştan sona kurup test edebilirim. Projeni konuşmak için benimle iletişime geç.

Devamı için