Metin2 yeni harita ekleme işi, ilk bakışta sandığından çok daha fazla "muhasebe" işidir: birkaç dosyayı kopyalamak yeterli değil, server (game core) ve client tarafının aynı index numarasında ve aynı koordinatlarda mutabık kalması gerekir. Bu mutabakat bir tık kayarsa oyuncu haritaya ışınlandığı anda bağlantı düşer veya client çöker. Bu rehberde yeni bir haritayı sıfırdan, iki tarafı da senkron tutarak nasıl tanıttığını adım adım anlatıyorum.
Mantığı kavramak: harita aslında ne?
Metin2'de bir "harita" tek bir dosya değil, bir klasördür. İçinde zemini tanımlayan height ve tile verileri, su/ortam ayarları, çevre nesneleri ve sunucu davranışını belirleyen birkaç metin dosyası bulunur. Sunucu bu klasörü bir index numarası üzerinden tanır; client ise aynı klasörü dünya koordinatları üzerinden konumlandırır. Yani iki taraf da aynı haritadan bahsediyor ama farklı "anahtarlar" kullanıyor. Senkronizasyonun kalbi tam burada: index ve koordinatlar her iki tarafta birebir aynı olmalı.
Boş bir index seç
İlk kural: çakışma yaratmamak. Mevcut haritaların index'lerini görmek için server'ın veri dizinindeki map_index dosyasına bak. Format basittir; her satır bir sekme ile ayrılmış index ve klasör adından oluşur:
1 metin2_map_a1
2 metin2_map_a3
3 metin2_map_b1
...
61 metin2_map_yeniharita
Kullanılmayan, yüksek bir numara (örneğin 61) seçmek en güvenlisidir; düşük numaralar resmî haritalara ayrılmıştır ve quest'ler, item'ler veya guild savaşı gibi sistemler bunlara gömülü referanslar tutabilir. Klasör adını da anlamlı ve küçük harfli tut: metin2_map_yeniharita.
Server tarafı: klasör ve metin dosyaları
Seçtiğin haritayı sunucunun harita veri dizinine kopyala. Bir haritanın sunucuda düzgün açılması için kritik metin dosyaları şunlardır:
- Setting.txt — Haritanın boyutunu belirleyen
MapSize, ortam ayarları ve PvP/güvenli bölge bayrakları gibi temel parametreleri taşır. Boyut, atlasinfo'daki genişlik/yükseklik ile tutarlı olmalı. - Town.txt — Üç imparatorluğun ve genel ışınlanma noktasının (Goto) koordinatlarını tanımlar. Yanlış bir koordinat oyuncuyu haritanın dışına, "void" alanına atar ve düşürür.
- regen / *.txt — Mob ve metin taşı spawn'larını yöneten regen dosyaları. Yeni haritada başta boş bırakıp sonra doldurabilirsin.
Bu dosyaların hepsi haritanın klasörü içinde durur. Eksik veya bozuk bir Setting.txt, core'un harita yüklenirken sessizce o haritayı atlamasına neden olur.
Server'ın merkezi kayıtları: map_index ve atlasinfo
Klasör hazırsa iki merkezî kaydı güncelle. Önce yukarıda gösterdiğim map_index dosyasına yeni satırını ekle. Ardından atlasinfo.txt dosyasına haritanın dünya üzerindeki yerleşimini tanımlayan satırı ekle:
metin2_map_yeniharita 409600 896000 4 4 0
Sütunlar sırasıyla: klasör adı, dünyadaki X taban koordinatı, Y taban koordinatı, genişlik ve yükseklik (sektör bloğu cinsinden) ile bir ayrılmış alandır. Buradaki genişlik ve yükseklik, Setting.txt'teki MapSize ile aynı olmalı; aksi halde haritanın bir bölümü "yok" sayılır. Ayrıca yeni haritanın koordinat bloğunun mevcut haritalarla çakışmadığından emin ol — atlasinfo, tüm dünyayı tek bir ızgara üzerine yerleştirir ve iki harita aynı hücreyi paylaşamaz.
Channel'a haritayı tanıt: CONFIG ve map_allow
Sunucu birden çok kanaldan (channel) ve çekirdekten oluşur. Her çekirdeğin CONFIG dosyasında, o sürecin hangi haritalardan sorumlu olduğunu söyleyen bir map_allow (bazı emülatörlerde %env/map_allow) satırı vardır. Yeni index'i ilgili kanalın izin listesine eklemezsen, harita sunucuda var olsa bile hiçbir süreç onu yüklemez ve oyuncu giremez:
map_allow: 1 3 21 61
Değişiklikten sonra ilgili kanalı yeniden başlat. Logları izle: çekirdek açılırken yüklediği harita index'lerini yazar; listede 61'i görmen gerekir.
Client tarafı: aynı bilgiyi ayna gibi yansıt
Server tek başına yeterli değil. Client'ın da aynı haritayı tanıması gerekir ve buradaki dosyalar server'dakilerle tutarlı olmak zorundadır:
- Harita klasörü — Zemin, doku ve nesne verileriyle birlikte client'ın
packarşivine (geneldemapdizini altına) ekle. - atlasinfo.txt — Client kök dizinindeki bu dosya, server'daki satırla birebir aynı koordinatları içermeli. En sık yapılan hata budur: server'da güncelleyip client'ta unutmak.
- Dünya haritası ve minimap —
icon/worldmapgörselleri ile minimap parçalarını ekle ki oyuncu M tuşuna bastığında siyah ekran görmesin.
Index numaralarının client'ta ayrıca tanımlanmadığını, eşleşmenin klasör adı ve koordinatlar üzerinden yapıldığını unutma. Bu yüzden klasör adı iki tarafta da harf harf aynı olmalı.
Test et: ışınlan ve logları oku
Her şey yerindeyse oyuna gir ve GM yetkisiyle haritaya ışınlan. Çoğu emülatörde /goto ya da bir warp komutu Town.txt'teki Goto koordinatına götürür. Doğru noktaya düşüyorsan, etrafı geziyorsan ve M ile harita açılıyorsa senkron tamamdır. Sorun çıkarsa neredeyse her zaman üç şüpheliden biridir: atlasinfo koordinat çakışması, server/client koordinat uyuşmazlığı veya map_allow'a eklenmemiş index. Bu durumda hem syserr loglarına hem de client tarafındaki hata dosyasına bakmak teşhisi hızlandırır.
Sık Sorulan Sorular
Harita server'da var ama girince bağlantı düşüyor, neden?
En yaygın sebep, server ve client atlasinfo.txt dosyalarındaki koordinat veya boyut uyuşmazlığıdır. İki dosyadaki satırın birebir aynı olduğundan ve Setting.txt'teki MapSize ile uyuştuğundan emin ol. İkinci sebep, index'in ilgili kanalın map_allow listesinde olmamasıdır.
Hangi index numarasını seçmeliyim?
Mevcut map_index dosyasında kullanılmayan, yüksek bir numara seç. Düşük numaralar resmî haritalara ve onlara gömülü sistem referanslarına ayrılmıştır; bunları kullanmak beklenmedik çakışmalara yol açar.
Sadece client'a eklesem yeterli olur mu?
Hayır. Harita iki tarafta da tanımlanmalı. Yalnızca client'a eklersen oyuncu haritayı çizebilir ama server o bölgeyi yönetmediği için karaktere giriş yaptırılamaz veya anında düşürülür.
Yeni haritanı sorunsuz canlıya almak ister misin? Server map index'ten client atlasinfo'ya kadar tüm senkronizasyonu, regen ve quest entegrasyonunu birlikte kurabiliriz. Benimle iletişime geç ve projeni konuşalım.