Metin2 exp ayarları, bir sunucunun karakterini belirleyen en kritik dengelerden biridir: tecrübe eğrisi çok dikse oyuncular daha ilk haritalarda tıkanıp bırakır, çok düzse hiçbir başarı hissi kalmaz ve içerik bir günde tükenir. Bu rehberde tecrübe sisteminin parçalarını — exp.csv seviye tablosu, mob_proto'daki taban exp, seviye farkı cezası ve sunucu çarpanı — tek tek ele alıp, oynanabilir ve sürdürülebilir bir seviye eğrisini nasıl tasarladığını anlatıyorum.
exp.csv nedir ve nasıl okunur?
Sunucunun veri dizininde duran exp.csv, her seviye için bir üst seviyeye geçmek üzere gereken tecrübe miktarını tutar. Game core açılırken bu tabloyu belleğe alır; bir karakter yeterli exp'i biriktirdiğinde seviye atlar ve tablodaki bir sonraki satıra bakar. Dosya basit, tek sütunlu bir listedir; satır numarası seviyeye karşılık gelir:
1500
4000
9000
20000
36000
...
Burada ilk satır 1. seviyeden 2. seviyeye geçmek için gereken exp, ikinci satır 2'den 3'e geçiş için gereken exp ve böyle devam eder. Tablonun uzunluğu pratikte seviye sınırını da belirler: satır kalmadığında karakter daha fazla seviye atlayamaz. Bu yüzden seviye sınırını yükseltmek istiyorsan hem exp.csv'ye yeni satırlar eklemen hem de kaynaktaki PLAYER_MAX_LEVEL benzeri sabitin buna izin verdiğinden emin olman gerekir.
Seviye eğrisini tasarlamak
İyi bir eğri sayı yığını değil, bir tempo hikâyesidir. Klasik Metin2 eğrisi üsteldir: her seviye bir öncekinden belirgin biçimde daha pahalıdır. Bu, ilk seviyelerin hızlı akmasını, son seviyelerin ise gerçek bir hedef olmasını sağlar. Eğriyi tasarlarken birkaç ilkeye dikkat ederim:
- Yumuşak başlangıç: İlk 30 seviye dakikalar içinde geçmeli ki yeni oyuncu sisteme ısınsın ve oyunu erken bırakmasın.
- Kademe duvarları: Belirli seviyelerde (örneğin yeni haritaların açıldığı eşiklerde) eğriyi kasıtlı olarak sertleştirmek, oyuncuyu yeni içeriğe yönlendirir.
- Ani sıçrama yok: Bir seviyenin maliyeti bir öncekinin 5 katıysa oyuncu duvara çarptığını hisseder. Artış oranını kademeli tut.
Eğriyi elle yazmak yerine bir formülle üretmek çok daha tutarlıdır. Basit bir üstel model şöyle kurulabilir:
# Python ile exp.csv üretmek (örnek model)
taban = 1500
for seviye in range(1, 105):
gerekli = int(taban * (seviye ** 2.6))
print(gerekli)
Üssü (burada 2.6) ve tabanı değiştirerek eğrinin dikliğini ayarlarsın. Üretilen çıktıyı doğrudan exp.csv'ye yazıp test sunucusunda denemek, sayıları gözle dengelemeye çalışmaktan çok daha hızlıdır.
mob_proto: tecrübenin asıl kaynağı
Seviye tablosu "ne kadar exp gerek" sorusunu yanıtlar; "bu exp nereden gelecek" sorusunun cevabı ise mob_proto'dadır. Her canavarın satırında bir exp sütunu bulunur ve öldürüldüğünde verdiği taban tecrübe budur. Eğri ile mob exp'i birbirini tamamlamalı: çok pahalı bir eğriye düşük mob exp'i eklersen oyun grind'e döner; tam tersini yaparsan oyuncular saatler içinde maksimum seviyeye ulaşır.
Pratikte iki kaldıraçtan biriyle oynarsın: ya eğriyi (exp.csv) sabit tutup mob exp'lerini ölçeklersin, ya da mob exp'lerine dokunmadan eğriyi yumuşatırsın. İkisini aynı anda değiştirmek dengeyi takip etmeyi zorlaştırır; bir seferde tek bir değişkeni ayarlamak daha öngörülebilirdir.
Seviye farkı cezası: neden 1. seviye mob 99'a exp vermez?
Tecrübe ayarlarının görünmeyen ama çok önemli bir parçası, game core'un ödül hesaplarken uyguladığı seviye farkı cezasıdır. Çekirdek, bir canavar öldürüldüğünde verdiği tecrübeyi, saldıran karakter ile canavar arasındaki seviye farkına göre ölçekler. Kendinden çok düşük seviyeli bir mob öldürürsen taban exp'in yalnızca küçük bir kısmını alırsın; bu mekanizma düşük seviye spotlarında "powerleveling" yapılmasını ve ekonominin bozulmasını engeller.
Bu davranış sunucu kaynağında, ödül fonksiyonu içinde bir oran tablosuyla uygulanır. PServer'larda bu eğriyi yumuşatmak (örneğin geniş seviye farklarında bile makul exp vermek) sık yapılan bir değişikliktir, ama dikkatli olmak gerekir: cezayı tamamen kaldırırsan yüksek seviye oyuncuların düşük seviye arkadaşlarını dakikalar içinde uçurmasının önü açılır. Bu da seviye atlama temposuyla ilgili tüm dengeni anlamsız kılar.
Sunucu çarpanı (EXP rate) ve config
Oyuncuların "x1, x5, x50 sunucu" diye konuştuğu şey, taban tecrübenin üzerine uygulanan global çarpandır. Resmî davranış x1'dir; PServer'lar bu çarpanı genellikle kaynakta, ödül anında uygulanan bir değişkenle (ör. bir g_iExpRate türevi) ya da yapılandırma üzerinden verir. Çarpanı uygulamak teknik olarak kolaydır; asıl iş doğru oranı seçmektir:
- Düşük rate (x1–x5): Uzun ömürlü, "klasik" deneyim isteyen, oyuncusunu yavaş ama bağlı tutan sunucular için. İçerik aylarca yeter.
- Orta rate (x10–x50): En popüler aralık. Grind'i azaltır ama yine de bir ilerleme hissi bırakır.
- Yüksek rate (x100+): Hızlı PvP odaklı sunucular için. Burada seviye bir engel değil, formaliteye dönüşür; tüm denge item ve PvP tarafına kayar.
Çarpanı yalnızca sayısal değil stratejik bir karar olarak gör: rate'in, sunucunun vaat ettiği deneyimi yansıtmalı. Açılıştan sonra rate'i düşürmek topluluğu kızdırır; bu yüzden lansman öncesi test sunucusunda gerçek oyuncularla deneyip kararı erken vermek en sağlıklısıdır.
Parti, premium ve geçici bonuslar
Taban exp ve çarpanın üzerine birkaç katman daha biner. Çekirdek, parti hâlinde avlanan oyunculara üye sayısına bağlı küçük bir bonus verir ve tecrübeyi üyeler arasında dağıtır; bu, grup oynamayı teşvik eder. Premium hesaplar ve tecrübe yüzükleri gibi item'ler ayrı bir yüzde ekler. Buna bir de hafta sonu gibi dönemlerde açtığın geçici exp etkinlikleri eklenir.
Buradaki tuzak, bonusların çarpışmasıdır: x50 rate + premium + yüzük + hafta sonu etkinliği üst üste binince efektif oran tasarladığının çok üstüne çıkabilir. Eğriyi planlarken bonuslu en yüksek senaryoyu da hesaba kat; yoksa "yavaş" diye tasarladığın sunucu, etkinlik günlerinde bir saatte sona erebilir.
Sık Sorulan Sorular
exp.csv'yi düzenledim ama oyunda değişmedi, neden?
Game core bu tabloyu yalnızca açılışta okur. Dosyayı kaydettikten sonra ilgili çekirdeği/kanalı yeniden başlatman gerekir. Ayrıca dosyanın doğru veri dizininde olduğundan ve her satırda tek bir geçerli sayı bulunduğundan emin ol; bozuk bir satır tablonun o noktadan sonrasını anlamsızlaştırabilir.
Seviye sınırını exp.csv'ye satır ekleyerek yükseltebilir miyim?
Tek başına yeterli değildir. exp.csv'ye satır eklemek tabloyu uzatır, ama maksimum seviye kaynaktaki bir sabitle de sınırlanır. İkisi uyumlu olmazsa karakter belirli bir seviyede takılır. Sınırı gerçekten yükseltmek için kaynağı da güncellemen gerekebilir.
Yüksek rate sunucu daha mı çok oyuncu çeker?
Başta ilgi çeker ama tek başına tutmaz. Çok yüksek rate, seviye ilerlemesini anlamsızlaştırır ve oyuncular hızla "yapacak iş kalmadı" noktasına gelir. Sürdürülebilirlik, rate ile içerik miktarının (sistemler, PvP, etkinlikler) dengesinden gelir.
Sunucun için dengeli bir tecrübe eğrisi mi kurmak istiyorsun? exp.csv tasarımından mob_proto ölçeklemesine ve seviye farkı cezasının ayarına kadar tüm exp sistemini birlikte planlayabiliriz. Benimle iletişime geç ve sunucunun temposunu konuşalım.