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_protoiçinde tanımlı, geneldetype = USEvesub_type = USE_PETbenzeri bir alt tip. - Pet modeli —
mob_protoiçinde birvnum'a karşılık gelir; görseli istemci tarafındaki.gr2model 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ğinAPPLY_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_bonusbenzeri ç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
.gr2model ve animasyon dosyalarını, doku (.dds) dosyalarıyla birlikte istemcinin ilgilipackklasörüne yerleştir. - 2. mob_proto kaydı: Petin yeni bir
vnumilemob_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.txttanımı) ve model yolunu eşleştir;vnumile.gr2dosyası arasındaki bağ doğru olmalı. - 4. Çağırma eşyası: Yeni bir
item_protokaydı oluştur; kullanıldığında bu yenivnum'lu peti çağıran quest veya kod yoluna bağla. - 5. Lokalizasyon:
localedosyaları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:
vnumsunucuda var ama istemcide model yolu eşleşmiyor — çağrılır ama görünmez.mob_protoiki 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_protosü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ç.