Metin2 CONFIG Ayarları: Game Çekirdeği Seçenekleri ve Anlamları
Hazırlayan: Metin2VIP Editörleri Yayın: Son güncelleme: 10 dk okuma
İçindekiler
- CONFIG dosyası nerede durur, ne zaman okunur?
- Yazım kuralları ve sık yapılan hatalar
- Çekirdeğin açılması için hangi satırlar zorunlu?
- Auth, kanal ve ch99 için örnek CONFIG
- GENERAL_CONFIG ile bütün çekirdeklere ortak ayar
- Oyun kurallarını değiştiren ayarlar
- Güvenlikle ilgili ayarlar
- Günlük ayarları: DB_LOG_LEVEL ve LOG_KEEP_DAYS
- Etkisiz, tehlikeli ya da Kore'ye özgü satırlar
- Çekirdek klasöründeki diğer dosyalar
CONFIG, her game çekirdeğinin kendi klasöründe duran ve çekirdek açılırken okunan düz metin ayar dosyasıdır. Her satır ANAHTAR: değer biçimindedir; çekirdeğin açılabilmesi için HOSTNAME, CHANNEL, COMMON_SQL, PLAYER_SQL ve LOG_SQL satırları ile sıfır olmayan bir DB_PORT gerekir. Hangi portların dinleneceği, hangi haritaların açılacağı ve seviye sınırından bağırma seviyesine kadar oyun kurallarının bir bölümü de bu dosyadan ya da locale klasöründeki GENERAL_CONFIG'ten değişir.
Aşağıdaki davranışlar game çekirdeğinin kaynak kodundan çıkarıldı. Anahtarların bir kısmı incelenen kaynağa sonradan eklenmiş topluluk ayarlarıdır; farklı bir derlemede bulunmayabilir ya da başka varsayılanla gelebilir. Her anahtarın tek tek açıklaması CONFIG ayarları listesinde.
CONFIG dosyası nerede durur, ne zaman okunur?
Sunucu klasöründe her çekirdeğin ayrı bir klasörü vardır: giriş çekirdeği auth, kanal çekirdekleri chan/ch1/core1, chan/ch1/core2 gibi, ortak kanal chan/ch99/core99. Her klasörde çekirdeğin çalıştırılabilir dosyası, CONFIG ve birkaç küçük yardımcı dosya bulunur. Klasör düzeninin tamamı sunucu dosyaları yazısında.
Dosya yalnız çekirdek açılırken okunur. Çalışan bir çekirdekte CONFIG'i değiştirmek hiçbir şeyi etkilemez, değişiklik için o çekirdeği yeniden başlatmak gerekir. Çekirdek -n ad seçeneğiyle başlatılırsa CONFIG yerine CONFIG.ad dosyası aranır.
Okuma üç geçişte yapılır: önce veritabanı bilgileri, kanal ve çekirdek adı; sonra portlar, haritalar ve auth satırı; en son geri kalan genel ayarlar. Bu ayrım önemlidir, çünkü locale klasöründeki GENERAL_CONFIG dosyaları yalnız üçüncü gruptaki genel ayarları okur.
Yazım kuralları ve sık yapılan hatalar
CONFIG'in ayrıştırıcısı çok basittir ve hata bildirmez. Satırın iki noktaya kadar olan kısmını boşlukları atarak anahtar sayar, iki noktadan sonraki tek karakteri atlar ve kalanını değer olarak alır. Bunun pratik sonuçları:
- İki noktadan sonra tam bir boşluk bırakılmalı. Atlanan karakter boşluk varsayılır;
PORT:30003yazılırsa değerin ilk rakamı yutulur ve çekirdek 3 numaralı portu dinlemeye çalışır. - Anahtarlarda büyük-küçük harf fark etmez;
port: 30003da çalışır. - Yorum işareti yoktur. Tanınmayan her satır sessizce yok sayılır. Satırın başına
#koymak ayarı fiilen kapatır, ama yanlış yazılmış bir anahtar da aynı sessizlikle yok sayılır. - Bir satır en fazla 255 karakter olabilir. Uzun bir harita listesini iki MAP_ALLOW satırına bölebilirsin, numaralar birikir.
- Bazı anahtarlar yalnız satırın varlığına bakar: NO_REGEN, NO_WANDER, SHUTDOWNED, TRAFFIC_PROFILE ve DISABLE_ ya da ENABLE_ ile başlayan bazı ek ayarlar. Bunlar yazıldığı anda açılır;
NO_REGEN: 0da regen'i kapatır. Kapatmak için satırı silmek gerekir. - Aynı anahtar iki kez yazılırsa çoğunda sonraki geçerli olur. MAP_ALLOW, ADMINPAGE_IP ve QUEST_OBJECT_DIR ise birikir; aynı harita numarası iki kez geçerse çekirdek "multiple MAP_ALLOW setting" hatasıyla kapanır.
Çekirdeğin açılması için hangi satırlar zorunlu?
| Satır | Yoksa ya da hatalıysa |
|---|---|
| HOSTNAME | "HOSTNAME must be configured." diyerek kapanır |
| CHANNEL | Eksik ya da 0 ise "CHANNEL not configured" |
| COMMON_SQL | LOAD_COMMON_SQL_INFO_FAILURE |
| PLAYER_SQL | LOAD_PLAYER_SQL_INFO_FAILURE |
| LOG_SQL | Log veritabanına bağlanamayınca "LogSQL.ConnectError" (auth dahil) |
| DB_PORT | Varsayılan 30000; 0 yazılırsa "DB_PORT not configured" |
| DB_ADDR | Varsayılanı boştur; boş kalırsa çekirdek db'ye bağlanamaz |
Çekirdek kendine bir genel IP adresi de bulmak zorundadır. Ağ arayüzlerinde 192.168.x ve 10.x dışında bir adres yoksa iç adres kullanılır; hiç adres bulunamazsa "Can not get public ip address" hatası gelir ve BIND_IP satırı gerekir.
Üç SQL satırının biçimi aynıdır: sunucu, kullanıcı, parola, veritabanı ve isteğe bağlı port.
COMMON_SQL: <sunucu> <kullanıcı> <parola> common 3306
Değerler boşlukla ayrıldığı için parolada boşluk olamaz. db çekirdeğinin conf.txt dosyasında aynı bilgilerin sırası farklıdır, veritabanı adı ikinci sıradadır; ayrıntısı db conf.txt yazısında.
Auth çekirdeğinde PLAYER_SQL, player veritabanını değil account veritabanını göstermelidir, çünkü auth girişleri bu bağlantı üzerinden account tablosunda doğrular. LOG_SQL auth'ta da gerekir: kod log bağlantısını "auth değilse" koşuluyla kurar, ama bu koşul AUTH_SERVER satırı henüz okunmadan değerlendirildiği için auth çekirdeği de log veritabanına bağlanmaya çalışır.
Auth, kanal ve ch99 için örnek CONFIG
İncelenen sunucu paketindeki CONFIG dosyalarının her biri on satır. Oyun kurallarının hiçbiri bu dosyalarda değil, GENERAL_CONFIG'te duruyor. Aşağıdaki örnekler o düzeni izliyor; port numaraları örnektir, kendi planını kanal ve port yapısı yazısındaki kurallara göre seçebilirsin.
Auth çekirdeği:
DB_ADDR: 127.0.0.1
DB_PORT: 30000
COMMON_SQL: <sunucu> <kullanıcı> <parola> common 3306
LOG_SQL: <sunucu> <kullanıcı> <parola> log 3306
PLAYER_SQL: <sunucu> <kullanıcı> <parola> account 3306
AUTH_SERVER: master
HOSTNAME: srv1-auth
CHANNEL: 1
PORT: 30001
P2P_PORT: 30002
Kanal 1'in ilk çekirdeği:
DB_ADDR: 127.0.0.1
DB_PORT: 30000
COMMON_SQL: <sunucu> <kullanıcı> <parola> common 3306
LOG_SQL: <sunucu> <kullanıcı> <parola> log 3306
PLAYER_SQL: <sunucu> <kullanıcı> <parola> player 3306
HOSTNAME: srv1-ch1-core1
CHANNEL: 1
MAP_ALLOW: 1 3 4 21 23 24 41 43 44
PORT: 30003
P2P_PORT: 30004
Ortak kanal (ch99) çekirdeğinde yalnız son beş satır değişir:
HOSTNAME: srv1-ch99-core99
CHANNEL: 99
MAP_ALLOW: 81 110 113
PORT: 30009
P2P_PORT: 30010
Auth çekirdeği AUTH_SERVER satırıyla ayrılır: BANIP dosyasını okur, MAP_ALLOW'u yok sayar ve hiçbir harita açmaz. master yerine <IP> <port> yazılırsa çekirdek, ana auth'un P2P portuna bağlanan yardımcı auth olur; tek auth kullanan sunucuda buna gerek yoktur.
Kanal çekirdeğinde MAP_ALLOW, çekirdeğin açacağı haritaların numaralarıdır ve numaralar locale/turkey/map/index dosyasından gelir. Örnekteki 1, 3, 21, 23, 41 ve 43 krallıkların birinci ve ikinci köyleri, 4, 24 ve 44 ise Jungrang, Waryong ve Imha haritaları. Bir çekirdeğe en fazla 32 harita verilebilir. ch99 çekirdeği CHANNEL: 99 ile ortak kanala girer; örnekte Düğün Köyü (81), Lonca Savaşı Bölgesi (110) ve OX yarışması (113) haritalarını açıyor.
GENERAL_CONFIG ile bütün çekirdeklere ortak ayar
İncelenen kaynakta GENERAL_CONFIG desteği açık. Çekirdek kendi CONFIG'ini okuduktan sonra locale/turkey/conf/ klasöründe şu dosyaları sırayla arar ve bulduklarını okur:
GENERAL_CONFIG: bütün çekirdekler.GENERAL_CONFIG_CHANNEL_1: yalnız CHANNEL değeri 1 olan çekirdekler.GENERAL_CONFIG_CHANNEL_1_HOSTNAME_srv1-ch1-core1: yalnız o çekirdek.
Sonra okunan önce okunanı ezer. Bir değeri bütün sunucu için GENERAL_CONFIG'e yazıp tek bir kanalda farklılaştırmak böyle yapılır. Bu dosyalarda yalnız genel ayarlar çalışır: PORT, P2P_PORT, MAP_ALLOW, AUTH_SERVER, HOSTNAME, CHANNEL ve SQL satırları burada okunmaz, her çekirdeğin kendi CONFIG'inde kalmalıdır.
İncelenen paketteki GENERAL_CONFIG'in oyun ayarları şunlar (yönetim satırları çıkarıldı):
MAX_LEVEL: 120
STATUS_POINT_GET_LEVEL_LIMIT: 120
STATUS_POINT_SET_MAX_VALUE: 90
SHOUT_LIMIT_LEVEL: 15
DB_LOG_LEVEL: 1
TEST_SERVER: 0
GENERAL_CONFIG tek yerden yönetim sağlar, ama CONFIG'te yazdığın bir değeri sessizce ezebilir. Bir ayar beklendiği gibi çalışmıyorsa önce bu üç dosyaya bakmak gerekir.
Oyun kurallarını değiştiren ayarlar
| Anahtar | Varsayılan | Ne yapar |
|---|---|---|
| MAX_LEVEL | 99 | En yüksek seviye; 1 ile kaynaktaki PLAYER_MAX_LEVEL_CONST (incelenen kaynakta 250) arasına kırpılır |
| STATUS_POINT_GET_LEVEL_LIMIT | 90 | Statü puanı kazanılan son seviye |
| STATUS_POINT_SET_MAX_VALUE | 90 | Bir statünün puan dağıtılarak ulaşabileceği en yüksek değer |
| PK_PROTECT_LEVEL | 15 | Altındaki karakterler koruma modunda kalır, PK modu seçemez |
| SHOUT_LIMIT_LEVEL | 15 | Bağırma için en düşük seviye; iki bağırma arası 15 saniye kodda sabit |
| ITEM_COUNT_LIMIT | 200 | Bir yuvada üst üste binen en fazla eşya; en çok 255 |
| ITEM_DESTROY_TIME_DROPITEM | 300 | Oyuncunun yere attığı eşyanın silinme süresi (saniye) |
| ITEM_DESTROY_TIME_DROPGOLD | 150 | Oyuncunun yere attığı Yang'ın silinme süresi |
| CHANGE_ATTR_TIME_LIMIT | 0 | İki efsun değiştirme arasında beklenecek saniye |
| BLOCK_CHAR_CREATION | 0 | 1 ise yeni karakter açılamaz |
| USER_LIMIT | 32768 | O kanalın çevrimiçi sınırı (kanalın bütün çekirdekleri birlikte sayılır); aşılınca girişte "FULL" |
| GUILD_INFINITE_MEMBERS | 0 | Lonca üye sınırını kaldırır |
| PROTECT_NORMAL_PLAYER | 0 | Derecesi eksi olan oyuncu, barış modundaki dereceli oyuncuya saldıramaz |
MAX_LEVEL'i yükseltirken EXP tablosunun da yeni seviyeye kadar dolu olması gerekir; tablo common veritabanındaki exp_table'dan okunur (EXP tablosu). Statü sınırlarının oyuncu tarafındaki etkisi statü puanları yazısında anlatılıyor.
CHANGE_ATTR_TIME_LIMIT'te küçük bir tuzak var: oyun içindeki uyarı süreyi dakika diye gösterir, ama kod değeri saniye olarak karşılaştırır. 600 yazılırsa bekleme 10 dakika olur, uyarı ise "600 dakika" der. Canavarların düşürdüğü eşyalar da ITEM_DESTROY_TIME ayarlarından bağımsız olarak 300 saniyede silinir; bu ayarlar yalnız oyuncunun attığı ya da envanter dolu olduğu için yere bırakılan eşyalar içindir.
Bu kaynakta orijinalden farklı gelen varsayılanlar
İncelenen kaynakta dört davranışın varsayılanı orijinal oyundan farklı. Orijinal davranış istenirse şu satırlar eklenir:
GLOBAL_SHOUT: 0
EMPIRE_LANGUAGE_CHECK: 1
PRISM_ITEM_REQUIRE: 1
EMOTION_MASK_REQUIRE: 1
GLOBAL_SHOUT: 0 bağırmaları yalnız kendi krallığına gönderir. Bu ayar açıkken krallık dili bozması da tamamen kapalıdır; yani EMPIRE_LANGUAGE_CHECK: 1 tek başına yetmez, başka krallığın yazısının dil becerisine göre bozulması için ikisi birlikte gerekir. PRISM_ITEM_REQUIRE: 1 sohbete eklenen her eşya bağlantısı için bir İçgörü Küresi harcatır. EMOTION_MASK_REQUIRE: 1 duygu hareketlerini Duygu Maskesi takılı olmaya bağlar; Düğün Köyü'nde şart aranmaz.
Başka krallığın NPC marketindeki 3 kat fiyat ise varsayılan olarak açıktır, kapatmak için SHOP_PRICE_3X_TAX: 0 yazılır. BOOTARY_CHECK: 1 pazar kurmayı krallıkların birinci ve ikinci köyleriyle sınırlar.
Güvenlikle ilgili ayarlar
Çekirdeğin oyun portu, oyuncu paketlerinin yanında düz metin yönetim komutlarını da kabul eder: kullanıcı sayısı sorgusu, duyuru, kapatma gibi. ADMINPAGE_IP (ve ADMINPAGE_IP1, IP2, IP3) bu komutları gönderebilecek adresleri, ADMINPAGE_PASSWORD yönetici moduna geçiş parolasını belirler. İncelenen kaynakta liste boşsa bütün metin komutları reddedilir, ama her derleme böyle davranmaz. Kaynak koddaki varsayılan parola herkesçe bilinir; bu özelliği kullanacaksan listeye yalnız kendi yönetim adresini yaz ve parolayı değiştir.
Saldırı hızı ve kombo denetimleri ENABLE_HACK_CHECK: 1 olmadan hiç çalışmaz. CHECK_MULTIHACK yalnız bu denetimi çağıran anahtardır, varsayılan değeri açık olsa da tek başına bir şey yapmaz. İstemci saatinin hızlandırılmasını yakalayan zaman denetimi ise bu ayardan bağımsız olarak her zaman çalışır. Kaynak koddaki geliştirici notu da denetimin canlıda açık tutulmasını istiyor. SPEEDHACK_LIMIT_BONUS denetimin toleransıdır (varsayılan 80, büyüdükçe gevşer). Açmadan önce hızlı silahlar, binekler ve saldırı hızı eşyalarıyla haksız kayıt düşüp düşmediği kontrol edilmeli.
CHECK_VERSION_SERVER açıkken (varsayılan) çekirdek, istemcinin oyuna girerken gönderdiği sürüm dizesini CHECK_VERSION_VALUE ile karşılaştırır ve tutmayan istemciyi düşürür. Kaynak istemci bu dizeyi sabit olarak gönderir; eski istemcileri dışarıda bırakmak için istemcideki sabit ile bu değerin birlikte değiştirilmesi gerekir. Çekirdek klasöründeki VERSION dosyası bu kaynakta okunmuyor.
GM_HOST_CHECK: 1 GM yetkisini gmlist tablosunda kayıtlı IP'ye bağlar; kapalıyken hesap adının eşleşmesi yeter. GM ekleme adımları GM yapma yazısında. WEB_AUTH ise Kore'ye özgü web tabanlı giriş içindir ve ayarlandığında auth çekirdeğinin giriş doğrulaması değişir; özel sunucuda bu satır kullanılmamalı.
P2P_PORT ve db portu bağlanan tarafın kimliğini denetlemez; bu derlemede yalnız adres süzgeci vardır (P2P portu çekirdeğin kendi adresinden, db portu 127.0.0.1, 192.168.x ve 10.x adreslerinden bağlantı kabul eder). Bu yüzden bütün çekirdeklerin aynı makinede ya da aynı iç ağda olması gerekir. Hangi portların dışarıya açık, hangilerinin kapalı olacağı kanal ve port yazısındaki güvenlik duvarı bölümünde.
Günlük ayarları: DB_LOG_LEVEL ve LOG_KEEP_DAYS
DB_LOG_LEVEL, log veritabanına hangi kayıtların yazılacağını belirler:
| Değer | log veritabanına yazılanlar |
|---|---|
| 0 | Hiçbir şey |
| 1 | Eşya, karakter, giriş, GM komutu, artı basma, bağırma, seviye ve açılış kayıtları |
| 2 | 1'e ek olarak hile, istemci CRC, küp, hız hilesi ve ayrıntılı giriş kayıtları |
| 3 (varsayılan) | 2'ye ek olarak Yang hareketleri, balıkçılık, görev ödülü ve kalan kayıtlar |
İncelenen paket 1 kullanıyor; bu seviyede hile kayıtları da tutulmaz. Hile şikâyetlerini incelemek için en az 2 gerekir. LOG_KEEP_DAYS (1-90, varsayılan 2) yalnız çekirdek açılırken günlük klasöründeki eski kayıtların temizliğinde kullanılır; çekirdek çalışırken eski günlükler 3 günde kendiliğinden silinir ve bu ayar o süreyi uzatmaz.
Etkisiz, tehlikeli ya da Kore'ye özgü satırlar
PASSES_PER_SEC, zamanlayıcıların bir saniyeyi kaç nabız saydığıdır ve 25 kalmalıdır. Çekirdek döngüsü kodda sabit 25 nabızla kurulur; CONFIG'teki değer değiştirilirse döngü hızlanmaz, yalnız bütün süreler orantısız kayar.
Okunan ama incelenen kaynakta hiçbir etkisi olmayan satırlar:
- SYS_LOG_LEVEL, ENABLE_SHOUT_ADDON, ENABLE_ALL_MOUNT_ATTACK: değişkenleri hiçbir yerde kullanılmıyor.
- SKILLBOOK_NEXTREAD_MIN ve MAX: ruh taşı okumasından sonra bir bekleme zamanı yazılır, ama ruh taşı bekleme denetimi kodda yorum satırına alınmış. Normal beceri kitabı bekleme süresi ise kodda sabittir (18-30 saat).
- SPAM_BLOCK_RELOAD_CYCLE: spam kelime tablosu yalnız açılışta okunuyor, yeniden okuma kapalı derlenmiş.
- SPEED_SERVER: EXP bonusu satırı yorumda; yalnız questlerdeki
is_speed_server()sonucunu değiştirir.
HACKSHIELD_ENABLE ve XTRAP_ENABLE harici hile koruma modülleri içindir ve bu modüller derlemeye dahil değildir. HackShield açılırsa denetim paketine yanıt vermeyen istemciler oyundan atılabilir. BILLING, TEEN_ADDR, TEEN_PORT, SHUTDOWN_ENABLE, SHUTDOWN_AGE ve WEB_AUTH Kore'ye, CHINA_EVENT_SERVER Çin'e özgü sistemlerdir. DISTRIBUTION_TEST_SERVER ise EXP'yi ve çoğu eşya düşme şansını üç katına çıkaran bir test bayrağıdır; oranlara etkisi EXP, drop ve Yang oranı yazısında.
Çekirdek klasöründeki diğer dosyalar
CMD dosyası GM komutlarının yetki seviyesini değiştirir. Her satır <komut> <seviye> biçimindedir; seviye PLAYER, LOW_WIZARD, WIZARD, HIGH_WIZARD, GOD, IMPLEMENTOR ya da DISABLE olabilir ve tanınmayan bir seviye adı çekirdeği kapatır. Komutların kendisi GM komutları rehberinde.
state_user_count iki sayı içerir: "dolu" ve "yoğun" eşiği (varsayılan 500 ve 10). Kanal listesindeki durum beş dakikada bir bu eşiklere göre hesaplanır; sayılan, o kanalın çekirdeklerindeki çevrimiçi oyuncudur. Dosya boş kalırsa 10 kişiyi geçen her kanal "yoğun" görünür; /reload u komutu dosyayı yeniden okur.
BANIP yalnız auth çekirdeğinde okunur. Her satırda bir IP ya da sekmeyle ayrılmış başlangıç ve bitiş IP'si bulunur; son satır da satır sonuyla bitmelidir, okuyucu satır sonu olmayan satırda çöker. CRC ve VERSION dosyaları incelenen kaynakta okunmuyor ya da okunduğu hâlde hiçbir denetimde kullanılmıyor.
Sık sorulan sorular
- CONFIG dosyasına yorum satırı yazılabilir mi?
- Ayrı bir yorum işareti yoktur; tanınmayan her satır sessizce yok sayılır. Satırın başına # koymak o ayarı fiilen kapatır, ama yanlış yazılmış bir anahtar da aynı sessizlikle yok sayıldığı için hata bildirimi beklememek gerekir.
- MAX_LEVEL kaça kadar çıkarılabilir?
- Değer 1 ile kaynak koddaki PLAYER_MAX_LEVEL_CONST sabiti arasına kırpılır; incelenen kaynakta bu sabit 250'dir. EXP tablosunun da yeni seviyeye kadar dolu olması gerekir.
- CONFIG'i değiştirince çekirdeği yeniden başlatmak gerekir mi?
- Evet. CONFIG ve GENERAL_CONFIG yalnız çekirdek açılırken okunur; çalışan çekirdeğe sonradan uygulanmaz.
- TEST_SERVER açık kalırsa ne olur?
- Oyuna giren her karakter en yüksek GM yetkisini alır, beceri kitabı bekleme süresi ve efsun değiştirme sınırı kalkar. Canlı sunucuda bu satır 0 olmalı ya da hiç bulunmamalı.
İlgili sayfalar
- Metin2 db conf.txt Ayarları: SQL Satırları, BIND_PORT ve ITEM_ID_RANGE (Server kurma)
- Metin2 GM Komutları: En Çok Kullanılan Komutlar ve Yetki Seviyeleri (Server kurma)
- Metin2 GM Nasıl Yapılır? gmlist Tablosu ve GM Yetki Seviyeleri (Server kurma)
- Metin2 Kanal ve Port Yapısı: auth, ch1, ch99 ve P2P (Server kurma)
- Metin2 EXP, Drop ve Yang Oranı Nasıl Ayarlanır? (Server kurma)
Kategori: Server Kurma Yapılandırma config yapılandırma game çekirdeği sunucu kurulumu
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?