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

Metin2 Kostüm Sistemi: Kurulum ve Yeni Kostüm Tanımlama

Metin2 kostüm sistemi, oyuncuların zırhlarının ve silahlarının istatistiklerini koruyarak görünümlerini değiştirmesine olanak tanıyan, modern bir Metin2 sunucusunda neredeyse vazgeçilmez hale gelmiş bir özelliktir. Mantık basittir: ayrı bir kostüm slotuna giyilen item, karakterin modelini değiştirir ama bonus vermez; gerçek bonuslar hâlâ alttaki zırhtan gelir. Bu yazıda sistemi sunucu tarafında nasıl açacağınızı, item_proto ayarlarını ve sıfırdan yeni bir body veya silah kostümü tanımlamayı adım adım göreceğiz.

Kostüm sistemi nasıl çalışır?

Kostümler client ve server'da ayrı bir item tipi ve giyim slotu üzerinden yönetilir. Temel yapı taşları şunlardır:

  • Item tipi: ITEM_COSTUME — kostüm itemları normal zırh (ITEM_ARMOR) yerine bu tiple işaretlenir.
  • Alt tip (SubType): COSTUME_BODY (vücut/zırh görünümü) ve COSTUME_WEAPON (silah görünümü). Çoğu kaynakta saç (COSTUME_HAIR) ve binek (COSTUME_MOUNT) alt tipleri de aynı enum içinde bulunur.
  • Giyim slotu: karakterin ekipman penceresinde ayrı bir WEAR_COSTUME / WEAR_COSTUME_WEAPON pozisyonu vardır.

Oyuncu kostümü giydiğinde server, karakterin görünüm değerini kostümün value alanından okur ve civardaki oyunculara modelin değiştiğini bildirir. Bonus hesaplaması zırh slotundan bağımsızdır; bu yüzden kostümün value alanlarına bonus koymanız önerilmez.

Sunucu kaynağında sistemi etkinleştirme

Çoğu Metin2 kaynağında kostüm sistemi bir derleme bayrağıyla kontrol edilir. common/service.h dosyasında ilgili define'ı açın:

// common/service.h
#define ENABLE_COSTUME_SYSTEM

Define'ı açtıktan sonra hem game hem de db (ve client kullanıyorsa) yeniden derlenmelidir. Eğer kaynağınız zaten kostüm desteğiyle geliyorsa bu adım atlanabilir; grep -r "COSTUME_BODY" common/ komutu ile sistemin halihazırda var olup olmadığını hızlıca kontrol edebilirsiniz.

cd /usr/metin2/server/source
grep -rn "COSTUME_BODY" common/length.h common/item.h

item_proto: kostüm itemını tanımlama

Yeni bir body kostümü, normal bir zırhla neredeyse aynı şekilde tanımlanır; fark item tipinde ve giyilebilirlik bayraklarındadır. Bir SQL satırını (ya da item_proto.txt kaynağını derliyorsanız metin satırını) şu mantıkla doldurun:

  • type = ITEM_COSTUME
  • subtype = COSTUME_BODY (silah için COSTUME_WEAPON)
  • antiflag: cinsiyet/sınıf kısıtı gerekiyorsa ANTI_MUSA, ANTI_FEMALE gibi bayrakları ekleyin — örneğin bir model yalnızca dişi karakter için yapıldıysa erkek sınıflarını anti olarak işaretleyin.
  • wearflag = WEARABLE_COSTUME — bu, itemın doğru slota gitmesini sağlar.
  • value0 = body için karakterin bürüneceği model/şekil değeri (kullandığınız client'taki .gr2 set numarasına karşılık gelir).
  • limittype / limitvalue: süreli kostüm istiyorsanız LIMIT_REAL_TIME ile saniye cinsinden süre verin.

Veritabanı üzerinden ekleyecekseniz örnek bir sorgu şu şekildedir (vnum ve isim kendi içeriğinize göre):

INSERT INTO player.item_proto
  (vnum, name, type, subtype, weapon, wearflag, antiflag, value0)
VALUES
  (85000, 'Kostüm Zırhı (Kırmızı)', 27, 0, 0, 16384, 0, 101);

Burada type=27 kaynağınızdaki ITEM_COSTUME sabitine, subtype=0 ise COSTUME_BODY'ye denk gelir. Bu sayısal karşılıkları kendi item.h dosyanızdan doğrulayın — sürümler arasında enum sıralaması değişebilir, varsayım yapmayın.

Client tarafı: model ve item bağlantısı

Server itemı tanısa bile, client'ta görünüm dosyaları olmadan kostüm görünmez. İhtiyacınız olanlar:

  • item_proto (client): server proto'su ile aynı vnum, type ve subtype değerleri client paketinde de bulunmalı.
  • item_list.txt: kostümün ikon ve model yolu burada eşleştirilir.
  • Model dosyaları: body kostümü için karakterin .gr2 mesh/motion seti, silah kostümü için ilgili silah modeli pack içine konur.

Body kostümünde value0 değeri, client'ın hangi karakter modelini yükleyeceğini belirler; bu yüzden client ve server'daki bu değer birebir uyuşmalıdır. Uyuşmazlık olursa oyuncu kostümü giyer ama görünüm değişmez ya da yanlış model yüklenir.

Test etme ve sık karşılaşılan hatalar

Yeni kostümü ekledikten sonra item_proto'yu yeniden derleyip (veya DB cache'ini yenileyip) test karakterinizde deneyin:

/item 85000

GM komutuyla itemı çantanıza alın, kostüm slotuna sürükleyin ve görünümün değiştiğini doğrulayın. En sık karşılaşılan sorunlar:

  • Item kostüm slotuna gitmiyor: wearflag yanlış. WEARABLE_COSTUME bayrağının doğru biti set edilmiş mi kontrol edin.
  • Giyiliyor ama görünüm değişmiyor: value0 client ile uyuşmuyor veya ENABLE_COSTUME_SYSTEM define'ı açık değil.
  • Yanlış cinsiyette giyilebiliyor: antiflag eksik. Modeli olmayan sınıflar için anti bayraklarını ekleyin.
  • Bonus zırhtan gelmiyor: kostüm itemına yanlışlıkla bonus koymuşsunuzdur; bonuslar alt zırhtan gelir, kostüm yalnızca görünüm sağlamalıdır.

Sık Sorulan Sorular

Kostüm sistemi her Metin2 kaynağında var mı?

Yeni nesil kaynakların çoğunda hazır gelir, ancak eski "vanilla" kaynaklarda elle eklenmesi gerekebilir. common/item.h içinde ITEM_COSTUME ve COSTUME_BODY sabitlerini aratarak hızlıca kontrol edebilirsiniz.

Kostüme bonus eklenir mi?

Teknik olarak value alanlarına bonus girilebilir ama tavsiye edilmez. Kostümün amacı sadece görünüm sağlamaktır; bonusları zırhta tutmak hem denge hem de oyuncu beklentisi açısından doğrudur. Bonuslu kostüm istiyorsanız bunu ayrı, bilinçli bir tasarım kararı olarak ele alın.

Süreli (kiralık) kostüm nasıl yapılır?

limittype alanına LIMIT_REAL_TIME verip limitvalue'ya saniye cinsinden süreyi yazarsanız kostüm belirtilen süre sonunda kullanılamaz hale gelir. Bu, item shop kiralık kostümleri için yaygın bir yöntemdir.

Kostüm sistemini kendi sunucunuza sorunsuz entegre etmek mi istiyorsunuz? Metin2 server kaynağı düzenleme, item ve sistem geliştirme konularında yardıma ihtiyacınız varsa benimle iletişime geçin — projenize uygun bir çözüm birlikte planlayalım.

Devamı için