Metin2 Client Klasör Yapısı: Hangi Dosya Ne İşe Yarar?
Hazırlayan: Metin2VIP Editörleri Yayın: 7 dk okuma
İçindekiler
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ş
.pycdosyaları,encodingsvexmlklasö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 vesyserr.txt'ye "wrong size" ya da "wrong crc32" yazar. - miles: Miles ses sisteminin eklentileri.
.asidosyaları kod çözücüdür (MP3 müziklermssmp3.asiile çalar),.m3ddosyaları 3B ses sağlayıcısı,.fltdosyası 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ğiBGM/lastplay.infdosyasına yazılır. - mark: Lonca işaretlerinin önbelleği. İstemci işaretleri sunucudan indirip
mark/10_0.tgavemark/10_indexgibi dosyalara, lonca sembollerinimark/10/<lonca numarası>.jpgolarak kaydeder. - upload: Lonca işareti yüklerken listelenen resimler. İşaret 16x12 piksel
bmp,tgaya dajpg, lonca sembolü 64x128 pikseljpgolmalıdır. - logs: İstemci çöktüğünde oluşur ve
.dmpuzantı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.
.msmdosyaları: 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 modelinpc,npc2,npc_pet,npc_mount,monstervemonster2klasö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?
loca.cfgokunur, kod sayfası ayarlanır.packaltındaki paketler kaydedilir.- Açıksa lib ve miles dosyaları denetlenir.
- Python başlatılır; exe'nin sağladığı
net,chr,player,item,appgibi modüller tanıtılır. - root paketinden
system.pyçalışır, ardındanprototype.py. prototype.pypencereyimetin2.cfg'deki çözünürlükle açar ve logo ekranına geçer.- Logodan sonra giriş ekranı (
intrologin.py) gelir, sunucu bilgisiserverinfo.py'den alınır. - 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
- Metin2 Client Dil Dosyaları: locale_game, itemdesc ve skilldesc (Server kurma)
- Metin2 Açılmıyor ve İstemci Hataları: syserr.txt Nasıl Okunur? (Rehber)
- Metin2 Config ve Oyun Ayarları: metin2.cfg, Tam Ekran, Çözünürlük ve Performans (Rehber)
- Metin2 Pack Dosyaları: EPK ve EIX Nedir? (Server kurma)
- Metin2 serverinfo.py: Client'ı Sunucuya Bağlama (Server kurma)
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?