İçeriğe geç

Metin2 Giriş Akışı: auth, db ve game; Giriş Hataları

Hazırlayan: Metin2VIP Editörleri Yayın: 7 dk okuma

Kısaca: Metin2'de giriş üç çekirdekten geçer: auth hesabı account tablosunda doğrulayıp istemciye bir giriş anahtarı verir, db bu anahtarı ve oyundaki hesapları tutar, kanal çekirdeği anahtarla gelen istemciyi kabul edip karakter listesini ve seçilen karakteri yükler. "Hesap ismi veya şifre yanlış." iletisi hem auth'ta hem kanal adımında çıkabilir; hangisi olduğunu iki çekirdeğin syslog'u gösterir.
İçindekiler
  1. Giriş adım adım
  2. Hangi ileti hangi adımda çıkar?
  3. "Hesabın zaten bağlı" neden ikinci denemede geçer?
  4. Bakım, dolu kanal ve sürüm
  5. Krallık, karakter ve konum
  6. Sık kurulum hataları

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

  1. 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: master satırına bağlıdır.
  2. 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, availDt ileri bir tarihse, status OK değilse ya da hesap CONFIG'teki BLOCK_LOGIN tarihinden sonra açılmışsa girişi reddeder. Sütunların anlamı veritabanları yazısında.
  3. 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.
  4. 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_index satırını okur (yoksa açar) ve karakter listesini player tablosundan döner.
  5. Krallık ve karakter. player_index.empire 0 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ı ve BLOCK_CHAR_CREATION ayarı devreye girer.
  6. 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

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?

Bu sayfa işine yaradı mı?

Giriş yap, oy ver ya da sayfayı kaydet. Okumak için üyelik gerekmez. WhatsApp X'te paylaş
Yanlış ya da eksik bir bilgi mi gördün? Bildir
Neyin yanlış olduğunu, doğrusunun ne olduğunu ve bunu nereden bildiğini yaz. Mesajın editörlere gider; yazı, kontrol edildikten sonra düzeltilir.
Yalnız editör görür.

Tartışma

Kurallar

Henüz yorum yok. Bu konuda bir deneyimin ya da sorun varsa ilk yorumu sen yaz.

Giriş yap ya da kayıt ol, sonra yorum yaz. Metin2VIP üyeliği hiçbir oyun sunucusunun hesabı değildir.