Metin2 Giriş Akışı: auth, db ve game; Giriş Hataları
Hazırlayan: Metin2VIP Editörleri Yayın: 7 dk okuma
İçindekiler
Metin2'de bir oyuncunun girişi üç çekirdekten geçer. Auth hesabı account tablosunda doğrular ve istemciye bir giriş anahtarı verir. db bu anahtarı, hangi hesabın oyunda olduğunu ve karakter listesini tutar. Kanal çekirdeği anahtarla gelen istemciyi kabul eder, karakter listesini gösterir ve seçilen karakteri oyuna sokar. Ekrandaki her hata iletisi bu adımlardan birinde üretilir; sebebi o adımı yürüten çekirdeğin syslog ve syserr dosyasında yazar.
Akış ve denetimler resmî koddan gelir, iletiler istemcinin Türkçe metinleridir; ayarlar sunucuya göre değişebilir. İstemci tarafındaki adres ve port ayarı serverinfo, çekirdeklerin port düzeni kanal ve portlar yazısında.
Giriş adım adım
- Auth'a bağlanma. Oyuncu kanal seçip kullanıcı adı ve şifresini yazınca istemci auth çekirdeğinin PORT'una bağlanır. Bir çekirdeğin auth olması CONFIG'teki
AUTH_SERVER: mastersatırına bağlıdır. - Auth denetimleri. Auth kullanıcı adını küçük harfe çevirir ve şu sırayla bakar: ad geçerli mi, auth kapanıyor mu, aynı hesap o anda auth'ta giriş yapıyor mu. Sonra account tablosunu sorgular: satır yoksa, şifre tutmuyorsa,
availDtileri bir tarihse,statusOKdeğilse ya da hesap CONFIG'tekiBLOCK_LOGINtarihinden sonra açılmışsa girişi reddeder. Sütunların anlamı veritabanları yazısında. - Giriş anahtarı. Denetimler geçerse auth
last_play'i günceller, db'ye bu hesap için bir giriş kaydı açtırır ve anahtarı istemciye verir. İstemci auth bağlantısını kapatır. - Kanal çekirdeğine giriş. İstemci seçtiği kanalın PORT'una bağlanıp anahtarla giriş ister. Çekirdek önce kendi durumuna (kapanıyor mu, kişi sınırı doldu mu) ve ülke IP engeline bakar, sonra anahtarı db'ye sorar. db anahtarı bulamazsa, hesap oyundaysa ya da player_index sorgusu hata verirse giriş reddedilir. Başarılı girişte db
player_indexsatırını okur (yoksa açar) ve karakter listesiniplayertablosundan döner. - Krallık ve karakter.
player_index.empire0 ise istemci krallık seçimini açar. Krallık yalnız hesapta hiç karakter yokken değiştirilebilir; karakteri olan bir hesabın seçimi sunucuda reddedilir. Karakter oluşturmada ad kuralları veBLOCK_CHAR_CREATIONayarı devreye girer. - Karakter seçimi ve oyuna giriş. Listede her karakterin yanında, o karakterin haritasını açan çekirdeğin adresi bulunur. Oyuncu karakteri seçince istemci bu adrese bağlanır, anahtarla yeniden giriş yapar ve doğrudan yükleme ekranına geçer. db karakteri yükler, oyun çekirdeği konumu denetler; ardından etkiler ve quest'ler yüklenir, giriş olayı çalışır.
Her adım günlüğe iz bırakır. Auth syslog'unda QID_AUTH_LOGIN: START satırının altında reddin kodu ( WRONGPWD, NOTAVAIL, STATUS: BLOCK gibi), başarılı girişte SendAuthLogin <hesap> key ... görünür. db syslog'unda LOGIN_BY_KEY success, LOGIN_BY_KEY key not exist ya da LOGIN_BY_KEY already login satırları, ardından RESULT_LOGIN: login success <hesap> rows: <karakter sayısı> bulunur.
Hangi ileti hangi adımda çıkar?
| İleti | Adım | Koşul | Günlükte |
|---|---|---|---|
| Hesap ismi veya şifre yanlış. | Auth | Ad 2 karakterden kısa ya da harf ve rakam dışında karakter içeriyor | IS_NOT_VALID_LOGIN_STRING |
| Hesap ismi veya şifre yanlış. | Auth | account'ta satır yok ya da sorgu hata verdi | NOID; hata varsa syserr'de AsyncSQL: query failed |
| Hesap ismi veya şifre yanlış. | Auth | Şifre tutmuyor | WRONGPWD |
| Hesap ismi veya şifre yanlış. | Kanal | Anahtar db'de yok ya da player_index sorgusu hata verdi | db'de LOGIN_BY_KEY key not exist ya da AsyncSQL: query failed |
| Bu hesap kullanılamıyor. | Auth | availDt ileri bir tarih |
NOTAVAIL |
| Bu hesap engellendi. | Auth | status = BLOCK |
STATUS: BLOCK |
| Kapalı sunucu: Lütfen başka server seç! | Auth | Hesabın create_time'ı BLOCK_LOGIN tarihinde ya da sonrasında |
BLKLOGIN |
| Hesabın zaten bağlı. | Auth ya da kanal | Hesap auth'ta başka bir girişin ortasında ya da db onu oyunda görüyor | db'de LOGIN_BY_KEY already login |
| Sunucu henüz açılmadı. | Auth ya da kanal | O çekirdekte shutdowned var, /shutdown geri sayımı bitti ya da çekirdek kapanıyor |
|
| Çok fazla kullanıcı bağlı olduğu için bağlanamazsınız. | Kanal | Kanal çekirdeklerindeki oyuncu sayısı USER_LIMIT'e ulaştı |
|
| Kayıt problemi | Auth | db aynı anahtarla açık bir kayıt buldu | db syserr'de LoginData already exist key |
| Bilinmeyen bir nedenle kaydolamadınız. + kod | Auth | status istemcinin tanımadığı bir değer |
STATUS: <değer> |
status sütunundaki değer istemciye olduğu gibi gönderilir ve istemci onu kendi ileti sözlüğünde arar. Yönetim için kullanışlı olanlar BLOCK, REPAIR ("Bu hesap için şu an nesneler yenileniyor.") ve WEBBLK'tır ("Web sitesine erişiminiz engellendi..."); sözlükte olmayan bir değer yazılırsa ileti boşluksuz eklenmiş kodla çıkar: BAN için "Bilinmeyen bir nedenle kaydolamadınız.BAN". Denetim sırası da önemlidir: şifre status'tan önce denetlendiği için engelli bir hesaba yanlış şifreyle girmeye çalışan oyuncu engel iletisini değil "Hesap ismi veya şifre yanlış."ı görür.
BLOCK_LOGIN auth'un CONFIG'inde YYYYAAGG biçiminde bir tarihtir; varsayılanı 3000 yılıdır. Belli bir tarihten sonra açılan hesapları, örneğin kapasitesi dolmuş bir sunucuda yeni kayıtları, girişten kesmek için kullanılır. Diğer CONFIG satırları CONFIG ayarları yazısında.
"Hesabın zaten bağlı" neden ikinci denemede geçer?
db oyundaki her hesabı, hesabın bağlı olduğu çekirdekle birlikte bir listede tutar. Kanal çekirdeği anahtarla girişi db'ye sorduğunda hesap bu listedeyse db "zaten bağlı" yanıtını verir. Kanal çekirdeği girişi reddederken eski oturumu da kapatır: eski oturum aynı çekirdekteyse doğrudan, başka çekirdekteyse P2P üzerinden. Eski oturum oyundaysa karakter "Biri hesabınıza giriş yaptı. Bağlantınız kesilecek." iletisini alır ve 5 saniye sonra düşer. Kayıt silinince bir sonraki deneme geçer.
Bir oyun çekirdeği çökerse db onunla bağlantısı koptuğu anda o çekirdeğe bağlı hesapları listeden siler; oyuncuların çökme sonrasında sürekli "zaten bağlı" görmesi bu yüzden beklenmez. Sürekli görülüyorsa çekirdek çökmemiş ama takılmış olabilir: db onunla bağlantıyı açık gördüğü sürece kayıt silinmez.
Bakım, dolu kanal ve sürüm
"Sunucu henüz açılmadı." iletisini hangi çekirdeğin verdiği önemlidir. Auth'un CONFIG'ine shutdowned yazılırsa bütün girişler auth adımında durur; tek bir kanalın CONFIG'ine yazılırsa yalnız o kanal giriş almaz, oyuncular başka kanala girebilir. Auth adımında GM ayrımı yoktur.
USER_LIMIT kanalın toplam oyuncu sayısını sınırlar; ayrıca her çekirdek koda gömülü MAX_ALLOW_USER (4.096) bağlantıdan fazlasını kabul etmez ve syserr'e max connection reached. MAX_ALLOW_USER = 4096 yazar. Bu sınır ileti göstermez, bağlantı açıldığı anda kapanır. Auth'un BANIP dosyasındaki adresler de aynı şekilde, bağlanır bağlanmaz kesilir. İstemci sürümü ve kanal durumu da serverinfo yazısında anlatılıyor.
Ülke engeli de ileti göstermez. account.iptocountry tablosundaki her satır engelli bir IP aralığıdır; oyuncunun adresi bir aralığa düşerse kanal çekirdeği bağlantıyı sessizce kapatır ve syslog'a BLOCK_COUNTRY_IP (<ip>) yazar. block_exception tablosundaki hesaplar muaftır. Aralıklar noktalı adres olarak değil, adresin onluk sayı karşılığı olarak okunur; 85.100.0.0 diye yazılmış bir satır yalnız 85 diye okunur ve gerçek bir adresi kapsamaz. Paketteki tabloda tek bir 0.0.0.0 satırı vardır ve kimseyi engellemez; bu tabloya hazır bir "IP'den ülkeye" listesinin tamamını yüklemek, listedeki her adresi engellemek demektir.
Krallık, karakter ve konum
Karakter oluştururken çıkan "Karakteri yaratamazsın." iletisi ad kuralına uymayan bir ad, BLOCK_CHAR_CREATION: 1 ya da ad 12 karakterden uzun olduğunda gelir. Ad kuralları nick önerileri yazısında. Hesap adıyla aynı ad ise yanıltıcı biçimde "Bu ismi zaten başka bir karakter kullanıyor." iletisiyle reddedilir.
Karakter listesindeki adres, karakterin kayıtlı koordinatındaki haritayı hangi çekirdeğin açtığına göre bulunur. Hiçbir çekirdek o haritayı açmıyorsa oyun çekirdeği syserr'e location error name <karakter> ... yazar ve karakteri listede krallığının başlangıç noktasına alır; başlangıç haritası da açık değilse cannot find server for mapindex yazılır ve o karakterle girilemez. Bu kaynakta açık olan ENABLE_GOHOME_IF_MAP_NOT_EXIST, karakter yüklenirken konum geçersiz çıkarsa da onu başlangıç noktasına gönderir; bayrağı olmayan derlemelerde bu durumda bağlantı kapanır ve syserr'e cannot find valid location düşer.
Sık kurulum hataları
| Belirti | Neden | Ne yapılır |
|---|---|---|
| Herkes "Hesap ismi veya şifre yanlış." alıyor | Auth'un PLAYER_SQL satırı account yerine player veritabanını gösteriyor |
Auth syserr'inde Table 'player.account' doesn't exist aranır, satır düzeltilir |
| Şifre doğru, yine "Hesap ismi veya şifre yanlış." | updates/player__updates.sql yüklenmedi; player_index.pid5 yok |
db syserr'inde Unknown column 'pid5'; güncelleme dosyası yüklenir |
| Giriş başarılı ama karakter listesi boş | acce_system/db.player.player.sql yüklenmedi; player.part_acce yok |
db syserr'inde Unknown column 'part_acce' |
| Hesap adında nokta ya da alt çizgi olanlar giremiyor | Bu derlemede hesap adı yalnız harf ve rakam olabilir | Web kayıt formu aynı kurala göre kısıtlanır |
| Şifresinde tırnak ya da ters eğik çizgi olan hesap giremiyor | Şifre karşılaştırmadan önce SQL için kaçışlanıyor ve bu karakterler eşleşmeyi bozuyor | Kayıt formu bu karakterleri kabul etmez |
| "Giriş işlemi yapılıyor..." penceresinde kalıyor | Hesabın securitycode sütunu dolu; auth eski matris kartı sorusunu gönderiyor, bu istemcide o pencere yok |
securitycode boş bırakılır |
Birkaç saniye bekleyip bağlantı kopuyor, oyun çekirdeği syserr'inde CInputAuth class is not for game server |
serverinfo'daki auth portu bir kanal çekirdeğini gösteriyor ya da auth CONFIG'inde AUTH_SERVER: master yok |
Port ve CONFIG satırı düzeltilir |
| Auth geçiyor, kanalda bağlantı sessizce kapanıyor | Ülke engeli ya da kanal çekirdeği kapalı | Kanal syslog'unda BLOCK_COUNTRY_IP aranır |
Şemaların yükleme sırası server kurulumu yazısındaki ilk adımda, syserr satırlarının genel anlamı syserr mesajları yazısında. Oyuncunun kendi bilgisayarından kaynaklanan sorunlar ise istemci hataları yazısında toplanıyor.
Sık sorulan sorular
- Şifre doğru olduğu hâlde "Hesap ismi veya şifre yanlış." çıkıyor. Neden?
- İleti beş ayrı durumda çıkar: hesap adında harf ve rakam dışında karakter olması, account tablosunda satır bulunmaması ya da auth sorgusunun hata vermesi, şifrenin tutmaması, kanal çekirdeğinin giriş anahtarını db'de bulamaması ve db'nin player_index sorgusunun hata vermesi. Kurulumdan hemen sonra görülüyorsa en sık neden auth'un PLAYER_SQL satırının account veritabanını göstermemesi ya da güncelleme SQL'lerinin yüklenmemesidir.
- "Hesabın zaten bağlı." çıkıyor, ikinci denemede giriyorum. Bu normal mi?
- Evet. db hesabı hâlâ oyunda gördüğünde kanal çekirdeği girişi reddeder ama aynı anda eski oturumu kapatır: eski oturum oyundaysa 5 saniye sonra "Biri hesabınıza giriş yaptı. Bağlantınız kesilecek." iletisiyle düşer. Eski oturum kapanınca yeni giriş kabul edilir.
- Bakım sırasında oyuncuların girişini nasıl kapatırım?
- Auth çekirdeğinin CONFIG dosyasına shutdowned satırı yazılıp auth yeniden başlatılırsa bütün girişler auth adımında "Sunucu henüz açılmadı." iletisiyle reddedilir. Bu adımda GM ayrımı yoktur, yönetici hesapları da giremez.
İlgili sayfalar
- Metin2 CONFIG Ayarları: Game Çekirdeği Seçenekleri ve Anlamları (Server kurma)
- Metin2 Açılmıyor ve İstemci Hataları: syserr.txt Nasıl Okunur? (Rehber)
- Metin2 Kanal ve Port Yapısı: auth, ch1, ch99 ve P2P (Server kurma)
- Metin2 Nick Önerileri: Savaşçı, Ninja, Sura, Şaman ve Lonca İsimleri (Blog)
- Metin2 Server Nasıl Kurulur? Adım Adım PvP Server Kurulumu (Server kurma)
Kategori: Server Kurma Server Kurulumu giriş auth db kurulum hata
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?