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ü) veCOSTUME_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_WEAPONpozisyonu 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_COSTUMEsubtype=COSTUME_BODY(silah içinCOSTUME_WEAPON)antiflag: cinsiyet/sınıf kısıtı gerekiyorsaANTI_MUSA,ANTI_FEMALEgibi 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.gr2set numarasına karşılık gelir).limittype/limitvalue: süreli kostüm istiyorsanızLIMIT_REAL_TIMEile 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
.gr2mesh/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:
wearflagyanlış.WEARABLE_COSTUMEbayrağının doğru biti set edilmiş mi kontrol edin. - Giyiliyor ama görünüm değişmiyor:
value0client ile uyuşmuyor veyaENABLE_COSTUME_SYSTEMdefine'ı açık değil. - Yanlış cinsiyette giyilebiliyor:
antiflageksik. 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.