İçeriğe geç

Metin2 Client Klasör Yapısı: Hangi Dosya Ne İşe Yarar?

Hazırlayan: Metin2VIP Editörleri Yayın: 7 dk okuma

Kısaca: Metin2 istemcisi bir exe, onun kullandığı birkaç DLL (Python 2.7, Granny, DevIL, SpeedTree, Miles) ve bütün oyun verisini taşıyan pack klasöründen oluşur. Modeller, haritalar, Python arayüz betikleri ve Türkçe metinler pack içindeki paketlerdedir; ana klasördeki metin2.cfg, loca.cfg, mouse.cfg ve channel.inf gibi küçük dosyalar oyuncunun ayarlarını saklar.
İçindekiler
  1. Ana klasörde hangi dosyalar var?
    1. metin2.cfg ne saklar?
    2. loca.cfg ve dil seçimi
    3. mouse.cfg ve channel.inf
  2. Klasörler ne işe yarar?
  3. pack klasöründe hangi paketler var?
  4. root paketi neden ayrı tutulur?
  5. İstemci açılırken sırayla ne yapar?
  6. Debug ve Release derlemesi arasındaki fark
  7. Sık karşılaşılan durumlar

Bir Metin2 istemcisi üç parçadan oluşur: oyunun motoru olan exe, bu exe'nin kullandığı birkaç DLL ve bütün oyun verisini taşıyan pack klasörü. Modeller, haritalar, Python arayüz betikleri ve Türkçe metinler pack içindeki paketlerde durur. Ana klasördeki küçük dosyalar ise çözünürlük, dil, fare tuşları ve son seçilen sunucu gibi oyuncu tercihlerini saklar.

Aşağıdaki anlatım, kaynak koduyla birlikte gelen tam bir istemci ve istemcinin C++ kaynak kodu üzerinden hazırlandı. Dosya adları sunucudan sunucuya değişebilir; görevleri aynıdır.

Ana klasörde hangi dosyalar var?

Dosya Görevi
TurkmmoSF_Release.exe Oyunun kendisi. Kaynak koddaki UserInterface projesinin çıktısıdır; adı projedeki hedef adından gelir. Kaynakta kalan izlere göre orijinal adı metin2client'tır.
TurkmmoSF_Debug.exe Aynı istemcinin hata ayıklama derlemesi. Konsol penceresi açar, dosyaları önce diskte arar.
python27.dll Arayüzü ve oyun akışını yöneten Python 2.7 yorumlayıcısı.
granny2.dll .gr2 uzantılı modelleri ve animasyonları açan Granny kütüphanesi.
devil.dll Görüntü dosyalarını yükleyen DevIL kütüphanesi.
SpeedTreeRT.dll Haritalardaki ağaçları (.spt) çizen SpeedTree kütüphanesi.
MSS32.DLL Sesin çekirdeği olan Miles Sound System.
config.exe, config.ini Ayarlar programı ve onun düğme metinleri.
metin2.cfg Çözünürlük, pencere modu, ses, gölge ve görüş mesafesi ayarları.
loca.cfg Dil seçimi. Bu pakette yok; varsa ilk satırı 1254 tr biçimindedir.
locale_list.txt Ayarlar programının gösterdiği dil listesi.
channel.inf Giriş ekranında son seçilen sunucu.
mouse.cfg Sol ve sağ fare tuşunun görevi.
syserr.txt Hata günlüğü. Bir sorun çözülürken ilk bakılacak dosya.

config.exe'nin kaynak kodu pakette yok. Dosyanın içindeki metinlerden config.ini, metin2.cfg, locale_list.txt ve loca.cfg ile çalıştığı anlaşılıyor. config.ini UTF-16 kodlu tek bir [Button] bölümünden ibarettir ve yalnız ayar penceresindeki yazıları tutar; oyuna etkisi yoktur.

metin2.cfg ne saklar?

İstemci açılırken metin2.cfg'yi satır satır okur, her satır bir anahtar ve bir değerdir. Oyun içinde değiştirilen ayarlar dosyaya istemci düzgün kapatılırken yazılır; oyun çökerse ya da görev yöneticisinden kapatılırsa o oturumdaki değişiklikler kaydedilmez.

WIDTH						1366
HEIGHT						768
BPP						32
FREQUENCY					60
VISIBILITY					3
MUSIC_VOLUME				0.000
WINDOWED				1
SHADOW_LEVEL			3

Pencere modunda genişlik ya da yükseklik ekranı aşıyorsa istemci değeri ekran boyutuna indirir. Anahtarların oyuncu açısından anlamı Metin2 oyun ayarları yazısında ayrıca anlatılıyor.

loca.cfg ve dil seçimi

İstemci açılışta loca.cfg'nin ilk satırını "kod sayfası + dil kodu" olarak okur ve dil klasörünü locale/<kod> diye kurar. Dosya yoksa derlenirken yazılmış varsayılan kullanılır; bu kaynakta varsayılan Türkçe, yani locale/tr ve 1254 kod sayfasıdır.

Bu istemcinin giriş ekranındaki bayrak düğmeleri de loca.cfg'ye 1252 en, 1252 de gibi satırlar yazıp istemciyi kapatır. Pakette yalnız locale/tr klasörü olduğu için başka bir dil seçilirse istemci bir sonraki açılışta dil dosyasını bulamaz ve durur. Yeni bir dil eklemek, önce o dilin klasörünü locale paketine koymak demektir; ayrıntılar istemci dil dosyaları yazısında.

mouse.cfg ve channel.inf

mouse.cfg sekmeyle ayrılmış iki sayıdır: önce sol, sonra sağ tuş. 0 hareket, 1 saldırı, 2 hareket ve saldırı, 3 kamera, 4 beceri, 5 otomatik anlamına gelir. Dosya bozuksa istemci sol tuşa 2, sağ tuşa 3 verir.

channel.inf "sunucu kanal bölge" sırasıyla üç sayı tutar (1 1 0). Bu istemcinin giriş ekranı dosyayı yalnız sunucu listesinde seçimi göstermek için okur; kanal olarak her açılışta CH1'i seçer.

Klasörler ne işe yarar?

  • pack: Bütün oyun verisi. Ayrıntısı aşağıda.
  • lib: Python 2.7 standart kütüphanesinin derlenmiş .pyc dosyaları, encodings ve xml klasörleri. İstemcinin Python arama yolu yalnız bu klasördür. Bu kaynakta açık olan bir denetim, lib dosyalarının boyutunu ve CRC değerini exe'nin içindeki tabloyla karşılaştırır; bir dosya değişirse istemci açılmaz ve syserr.txt'ye "wrong size" ya da "wrong crc32" yazar.
  • miles: Miles ses sisteminin eklentileri. .asi dosyaları kod çözücüdür (MP3 müzikler mssmp3.asi ile çalar), .m3d dosyaları 3B ses sağlayıcısı, .flt dosyası ses filtresidir. Benzer bir denetim burada da var: tanınmayan bir eklenti dosyası bulunursa istemci açılmaz.
  • BGM: Arka plan müzikleri (.mp3). Müzik paketten değil, diskten akış olarak çalınır; bu yüzden BGM bir klasör olarak kalmalıdır. Son çalan alan müziği BGM/lastplay.inf dosyasına yazılır.
  • mark: Lonca işaretlerinin önbelleği. İstemci işaretleri sunucudan indirip mark/10_0.tga ve mark/10_index gibi dosyalara, lonca sembollerini mark/10/<lonca numarası>.jpg olarak kaydeder.
  • upload: Lonca işareti yüklerken listelenen resimler. İşaret 16x12 piksel bmp, tga ya da jpg, lonca sembolü 64x128 piksel jpg olmalıdır.
  • logs: İstemci çöktüğünde oluşur ve .dmp uzantılı bir döküm dosyası içerir.
  • lib/savedaccounts: Bu istemcinin giriş ekranındaki hesap kaydetme düğmelerine ait klasör. Standart Metin2 istemcisinde bulunmaz.

pack klasöründe hangi paketler var?

Yayınlanan bir istemcide her paket iki dosyadır: dosya listesini tutan .eix ve verinin kendisini tutan .epk. Biçim, sıkıştırma türleri ve paket listesinin nasıl okunduğu Metin2 pack dosyaları yazısında anlatılıyor. Kaynakla gelen bu istemcide paketler açılmış hâlde, her biri bir klasör olarak duruyor; yayın exe'si dosyaları .eix/.epk çiftlerinden beklediği için oyuncuya dağıtılmadan önce paketlenmeleri gerekir.

Paket İçerik İstemcinin kullandığı yol
root Python betikleri, uiscript arayüz düzenleri, ırk model betikleri (.msm), npclist.txt, atlasinfo.txt, serverinfo.py klasörsüz ad: system.py, uiscript/loginwindow.py
locale Dil dosyaları, istemcinin item_proto ve mob_proto kopyaları locale/tr/..., locale/common/...
icon Eşya, beceri, yüz ve saç simgeleri icon/item/00010.tga
item Silah ve zırh modelleri d:/ymir work/item/...
pc Savaşçı (erkek), Ninja (kadın), Sura (erkek), Şaman (kadın) d:/ymir work/pc/...
pc2 Savaşçı (kadın), Ninja (erkek), Sura (kadın), Şaman (erkek) d:/ymir work/pc2/...
pc3 Lycan d:/ymir work/pc3/...
monster Canavar modelleri d:/ymir work/monster/..., monster2
npc NPC, binek ve pet modelleri d:/ymir work/npc/..., npc2, npc_mount, npc_pet
effect Efektler (.mse) d:/ymir work/effect/...
etc Arayüz görselleri, ortam ayarları, lonca dosyaları d:/ymir work/ui/...
zone Arazi dokuları, ağaçlar, harita nesneleri d:/ymir work/zone/..., tree, terrainmaps
maps Harita verisi: yükseklik, doku, nitelik, su, mini harita metin2_map_a1/...
property Harita nesnelerinin tanımları (.prb bina, .prt ağaç, .prd zindan bloğu, .pre efekt, .pra ortam sesi) property/...
textureset Arazi doku setleri textureset/metin2_a1.txt
sound Ses efektleri (.wav) ve ses zamanlama betikleri (.mss) sound/...

İstemcinin kodunda bunlara ek olarak bgm ve season adlı iki paket daha kayıtlıdır; bu istemcide yoklar ve olmayan paket sessizce atlanır. Boyutun büyük kısmını haritalar ve karakter modelleri tutar: bu pakette maps yaklaşık 464 MB, pc 398 MB, pc2 359 MB, zone 313 MB, monster 266 MB.

d:/ymir work yolu, Ymir'in geliştirme bilgisayarındaki klasörden kalan bir addır. Paketlerin içindeki dosyalar bu adla kayıtlıdır; oyuncunun bilgisayarında D sürücüsü olması gerekmez.

root paketi neden ayrı tutulur?

İstemcinin ilk çalıştırdığı Python dosyası system.py root paketindedir. Yolunda klasör adı geçmeyen her dosya root paketten aranır. Bu pakette 76 .py dosyası, 81 arayüz düzeni (uiscript) ve 9 ırk model betiği var. Sunucu adresinin yazıldığı serverinfo.py da buradadır; nasıl düzenlendiği serverinfo.py yazısında.

  • .msm dosyaları: Her sınıf ve cinsiyet için temel model, saç modelleri ve zırh görünümlerinin listesi (warrior_m.msm, shaman_w.msm ...).
  • npclist.txt: Canavar ve NPC numarasını model klasörüne bağlar (101 stray_dog). Başında 0 olan satırlar bir model adını başka bir klasöre yönlendirir. İstemci modeli npc, npc2, npc_pet, npc_mount, monster ve monster2 klasörlerinde arar.
  • atlasinfo.txt: Her haritanın adı, dünyadaki başlangıç koordinatı ve boyutu. İstemci sunucunun bildirdiği konumdan hangi haritada olduğunu bu listeyle bulur.

system.py Python'un open fonksiyonunu pakete yönlendirir: istenen dosya pakette varsa oradan okunur, yoksa diske bakılır. Diske doğrudan yazmak gereken yerlerde (örneğin mouse.cfg) old_open kullanılır. import de aynı şekilde önce root paketteki .py dosyasına, bulamazsa lib klasörüne bakar.

İstemci açılırken sırayla ne yapar?

  1. loca.cfg okunur, kod sayfası ayarlanır.
  2. pack altındaki paketler kaydedilir.
  3. Açıksa lib ve miles dosyaları denetlenir.
  4. Python başlatılır; exe'nin sağladığı net, chr, player, item, app gibi modüller tanıtılır.
  5. root paketinden system.py çalışır, ardından prototype.py.
  6. prototype.py pencereyi metin2.cfg'deki çözünürlükle açar ve logo ekranına geçer.
  7. Logodan sonra giriş ekranı (intrologin.py) gelir, sunucu bilgisi serverinfo.py'den alınır.
  8. Karakter seçim ekranına geçilirken dil verisi yüklenir: item_proto, mob_proto, itemdesc, skilldesc, skilltable ve diğerleri.

Bu sıradaki C++ tarafının hangi kaynak klasörlerinde durduğu Metin2 source yapısı yazısında modül modül anlatılıyor.

Debug ve Release derlemesi arasındaki fark

Release derlemesi bir dosyayı önce paketlerde, bulamazsa diskte arar. Debug derlemesi bunun tersini yapar: önce diske bakar, sonra pakete. Bu yüzden geliştirme sırasında Debug exe ile paketi yeniden oluşturmadan tek bir dosyayı diskte değiştirip denemek mümkündür. Debug derlemesi ayrıca bir konsol penceresi açar ve syserr.txt'ye ek olarak log.txt yazar.

Release derlemesinde de pakette bulunmayan bir dosya diskten okunabilir. Paketteki bir dosyanın aynısını diske koymak Release'te hiçbir şeyi değiştirmez, çünkü önce paket okunur.

Sık karşılaşılan durumlar

Belirti Olası neden
İstemci açılmadan kapanıyor, syserr'de "wrong crc32" lib ya da miles içindeki bir dosya değişmiş ya da fazladan dosya eklenmiş.
Açılışta "LoadLocaleError" kutusu loca.cfg'deki dilin klasörü locale paketinde yok.
Müzik çalmıyor Dosya BGM klasöründe değil ya da pakete konmuş.
Yeni bir NPC ya da canavar görünmüyor npclist.txt'de numarayı model klasörüne bağlayan satır ya da modelin kendisi eksik.
Yeni eşyanın simgesi Boş Şişe görünüyor icon/item/ altında beş haneli numarayla (01234.tga) simge yok; istemci önce aynı adlı eşyanın, sonra numaranın onluk tabanının simgesine, en son Boş Şişe'ye düşer.
Pencere çok küçük açılıyor metin2.cfg'deki boyut ekranı aşmış ve pencere moduna göre kırpılmış.

Bağlantı ve oyun içi hataların oyuncu tarafındaki çözümleri için istemci hataları yazısına bakılabilir.

Sık sorulan sorular

Metin2 client hangi DLL dosyalarına ihtiyaç duyar?
Kaynak koddaki bağlantılara göre python27.dll (Python 2.7), granny2.dll (modeller ve animasyonlar), devil.dll (görüntüler), SpeedTreeRT.dll (ağaçlar) ve MSS32.DLL (ses) gerekir. miles klasöründeki eklentiler de sesin parçasıdır.
loca.cfg silinirse ne olur?
İstemci derlenirken yazılmış varsayılan dili kullanır. Bu kaynakta varsayılan Türkçe, yani locale/tr klasörü ve 1254 kod sayfasıdır.
BGM klasörü pack içine konabilir mi?
Konmamalı. Müzik dosyaları paketten değil, diskteki BGM klasöründen akış olarak çalınır. Pakete konan mp3 dosyası çalmaz.
d:/ymir work yolu neden her yerde geçiyor?
Bu, Ymir'in geliştirme bilgisayarındaki klasörden kalan sanal bir yoldur. Paketlerin içindeki dosyalar bu adla kayıtlıdır; oyuncunun bilgisayarında D sürücüsü olması gerekmez.

İlgili sayfalar

Kategori: Server Kurma Client (İstemci) istemci geliştirici client pack metin2.cfg

Bu sayfadaki bilgiler Metin2'nin sunucu yazılımındaki hesaplamalara ve standart oyun dosyalarına dayanır. Oyun dosyalarını değiştiren sunucularda değerler farklı olabilir. İçerikleri nasıl hazırlıyoruz?

Bu sayfa işine yaradı mı?

Giriş yap, oy ver ya da sayfayı kaydet. Okumak için üyelik gerekmez. WhatsApp X'te paylaş
Yanlış ya da eksik bir bilgi mi gördün? Bildir
Neyin yanlış olduğunu, doğrusunun ne olduğunu ve bunu nereden bildiğini yaz. Mesajın editörlere gider; yazı, kontrol edildikten sonra düzeltilir.
Yalnız editör görür.

Tartışma

Kurallar

Henüz yorum yok. Bu konuda bir deneyimin ya da sorun varsa ilk yorumu sen yaz.

Giriş yap ya da kayıt ol, sonra yorum yaz. Metin2VIP üyeliği hiçbir oyun sunucusunun hesabı değildir.