SMD dosyası nedir ve nasıl çalışır?

Tengri

Moderatör
Merhaba, bu konumuzda Server dosyalarının içerisinde bulunan 1298 sürümünden şuana kadar gördüğünüz SMD dosyasının açıklamasını yapacağım.

Eğer ki sorularınız veyahut eklenmesi gereken bir şey olursa konu altına yorum içerisinde beni etiketleyerek bildiriniz.


  • 1) SMD nedir?SMD aslında bir kısaltmadır. Peki neyin kısaltmasıdır ondan bahsedelim.SMD baş harflerinden bir araya gelerek oluşan Server Map Data kısaltmasıdır.Türkçe olarak Sunucu Harita Verisi demektir yada çoğul olarak da alabilirsiniz Server Harita Verileri gibi.
  • 2) Server dosyaları SMD dosyasına nereden erişim sağlar?

    Server dosyaları veritabanınız içerisindeki ZONE_INFO tablosunda bulunan strZoneName sütunundaki dosya ismiyle Server dosyalarınız içerisinde MAP klasörüyle eşleştirir ve oradan okumaya çalışır.

    3) SMD ne işe yarar?
  • SMD dosyası 1298 Orijinal Server dosyalarından beri gördüğünüz bir dosya yapısıdır.
    Server işleriyle az uz uğraşmış birisi genellikle SMD dosyalarını görür veyahut Server dosyalarını çalıştırırken .smd tarzı hatalar almıştır.

    SMD dosyası binary olarak tutulmuş verilerden oluşmaktadır.
    İçerisinde ZONE_INFO tablosundan eşleştirildiği haritaya uygulanacak olan verileri tutar.
    Bu veriler harita boyutu, harita üzerindeki objelerin bilgileri, harita üzerindeki gatelerin warp listesi, haritanın tüm yükseklik değerleri, haritanın tüm collision değerleri tutulmaktadır.
    Yükseklik ve Collision değerlerinin herhangi bir işlevi Server dosyalarında yoktur.

    Eğer ki AIServer birleştirme işlemini yapmadıysanız SMD dosyalarını hem AIServer hem GameServer okumaktadır.
    Her haritanın SMD dosyası farklıdır çünkü en belirgin özellik olarak her haritanın boyutunu bir değildir buradan neden farklı olduğunu anlayabilirsiniz.

    4) SMD dosya yapısı nasıldır?

    İlk öncelikle 4 byte olarak yani integer olarak haritanın boyutunu tutmaktadır.
    Bu boyutu ise (haritanın gerçek boyutu / 4) + 1 olarak almaktadır.
    Örnek verelim Luferson Castle haritasının SMD yapısına bakıyoruz.
    Luferson Castle haritasının gerçek harita boyutu 2048 olarak ayarlanmıştır. 2048 değerini 4 ile böldüğümüzde 512 değerini ve buna + 1 değerini eklediğimizde 513 sonucuna ulaşıyoruz.

    Bir sonraki değerimiz ise float olarak tutulan UnitDistance diye bir değer aslında yukarıdaki 4 sayısını burada tutuyor. Tamamen saçmalıktan ibaret bir değer tutumu o yüzden hiç düşünmeden geçiyoruz.

    3. sıradaki değerimize yada daha doğrusu değerlerimize diyelim.
    Burada ise ilk değerimiz olan harita boyutunu ele alalım yani 513 örneğimizi ele alıyoruz.
    513 * 513 olarak haritanın yükseklikleri tutulmaktadır.
    Ama herhangi bir işlevi Server tarafında yoktur.

    4. sıradaki tutulan bilgimiz ise haritanın Collision bilgileridir.
    Bunlar objelerin içlerinden geçilip geçilmemesini sağlayan bölümdür.
    Bildiğiniz Client ile aynı işlevi görür ama Server tarafında herhangi bir işlevi yoktur sadece verileri tutuluyor.

    5. sıraya geldik burada ise Object bilgileri yani oyun içerisindeki gördüğünüz Lever, Gate, Anvil gibi objelerin bilgileri burada tutulmaktadır.

    6. sırada tile sistemi gelmektedir. Yine harita boyutu kadar tutulmaktadır ve 2 byte olarak her tile belirtilmiştir. Veritabanı içerisindeki EVENT tablosu ile eşleştirilerek hazırlanır. Eslant veyahut Lunar Savaşlarına ışınlanma yerleri buralardan ayarlanır.

    7. sırada ise Regene yani Respawn noktaları bulunmaktadır. Luferson Castle haritasında town gatenin yanında bulunan bind noktası burada tutuluyor.

    8. sırada ise Teleport Gate içerisindeki Warp listesi tutulmaktadır.

    Benim görüşlerim;
    Eğer ki bilginiz varsa SMD dosyasını Server dosyalarında kullanmanıza gerek yok çünkü içerisinde bulunan yükseklik ve collision değerlerini zaten kullanmıyorsunuz ve boşu boşuna RAM şişiriyorsunuz.
    Tamamen SMD dosyasını kaldırın ZONE_INFO tablosundan yükseklik değerlerini ve ZONE_ABILITY tablosundan da zoneFlag değerlerini tutun.
 
T.C.K 20.ci Madde ve 5651 Sayılı Kanun'un 4.cü maddesinin (2).ci fıkrasına göre TÜM ÜYELERİMİZ Yaptıkları paylaşımlardan kendileri sorumludur!
Geri
Üst Alt