İçeriğe geç

Metin2 account Tablosu: Hesap Durumu, Ban ve Diğer Alanlar

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

Kısaca: account tablosu her oyun hesabının satırıdır ve auth çekirdeği tarafından her girişte okunur. Kalıcı ban için status 'BLOCK', süreli ban için availDt ileri bir tarih yapılır; ikisi de oyuncunun bir sonraki girişinde geçerli olur, oyundaki oyuncu ayrıca GM komutuyla düşürülür. social_id karakter silme kodudur, *_expire sütunları süreli bonusların bitiş zamanlarıdır, password ise parolanın kendisini değil tuzsuz bir özetini tutar.
İçindekiler
  1. account tablosunun sütunları
  2. Hesap durumu: status ve availDt
  3. Metin2'de ban nasıl atılır?
  4. Karakter silme kodu: social_id
  5. Süreli bonuslar: *_expire sütunları
  6. cash: bakiye
  7. Parola alanı nasıl tutulur?
  8. Hesapla bağlantılı diğer tablolar

account veritabanındaki account tablosu her oyun hesabının satırıdır. Auth çekirdeği oyuncu giriş yaptığında bu satırı okur: parolanın özetini, hesap durumunu (status) ve süreli kapatmayı (availDt) denetler, süreli bonusların bitiş zamanlarını oyuna taşır. Ban, süreli kapatma, karakter silme kodu ve süreli bonuslar bu tabloda değiştirilir. Satır db önbelleğine girmediği için değişiklik oyuncunun bir sonraki girişinde geçerli olur.

Sütunlar sunucu paketinin account.sql şemasından, kullanımları auth ve db çekirdeklerinin kodundan gelir; tabloyu değiştirmemiş sunucularda aynıdır. Girişin bütün adımları ve hata iletileri giriş akışı yazısında, beş veritabanının genel tanıtımı Metin2 veritabanları yazısında.

account tablosunun sütunları

Sütun Tür Ne işe yarar
id int, otomatik Hesap numarası: player_index.id, player.account_id, safebox.account_id ve depo eşyalarının owner_id'si
login varchar(16), benzersiz Hesap adı; girişte küçük harfe çevrilir, en az 2 karakter, yalnız harf ve rakam
password varchar(42) Parolanın özeti
social_id varchar(7) Karakter silme kodu
status varchar(8), varsayılan OK Hesap durumu
availDt datetime Bu tarihten önce hesap kullanılamaz
create_time datetime Oluşturma zamanı; CONFIG'deki BLOCK_LOGIN tarihiyle karşılaştırılır
last_play datetime Her başarılı girişte güncellenir
silver_expire ... money_drop_rate_expire datetime Süreli bonusların bitiş zamanları
cash int Bakiye
email, real_name, question1-answer2 Web sitesi alanları; oyun okumaz
securitycode varchar(192) Eski matris kart güvenliği; özel sunucularda boş kalır

Kodda hesap adı için 30 karakter ayrılmıştır, ama sütun 16 karakterdir; web sitesinin kayıt formu 16'yı geçmemeli ve yalnız harf ile rakam kabul etmelidir. Oyun da harf ve rakam dışında karakter içeren ya da 2 karakterden kısa bir adla girişi en baştan reddeder.

Hesap durumu: status ve availDt

status OK değilse giriş reddedilir ve sütundaki değer istemciye gönderilir. BLOCK için istemci "Bu hesap engellendi." yazar; istemcinin tanımadığı bir değer yazılırsa ileti "Bilinmeyen bir nedenle kaydolamadınız." ile başlar ve sonuna değerin kendisi eklenir. Sütun 8 karakterdir, daha uzun bir değer yazılmamalıdır.

availDt ileri bir tarihse oyuncu "Bu hesap kullanılamıyor." iletisini görür; tarih geçince hesap kendiliğinden açılır. Süreli ban bu yüzden availDt ile atılır ve kaldırmak için kimsenin bir şey yapması gerekmez.

Denetim sırası şöyledir: parola, availDt, hesabın zaten bağlı olup olmadığı, status. Parola önce denetlendiği için engelli bir hesaba yanlış şifreyle girmeye çalışan oyuncu engel iletisini değil "Hesap ismi veya şifre yanlış." iletisini görür. İki sütun da oyundaki bir oyuncuyu düşürmez.

Metin2'de ban nasıl atılır?

İstenen Yol
Hesabı kalıcı kapatmak status = 'BLOCK'
Hesabı belli bir süre kapatmak availDt sütununa bitiş zamanı
Oyundaki oyuncuyu hemen düşürmek GM komutu /dc KarakterAdi (karakter aynı çekirdekteyse)
Yalnız sohbeti yasaklamak /block_chat KarakterAdi 1h (HIGH_WIZARD); hesaba değil karaktere işler
Bir IP'yi ya da IP aralığını kapatmak Auth klasöründeki BANIP dosyası
Ülke bazlı IP engeli iptocountry tablosu, muaf hesaplar için block_exception

Ban hesaba işler; hesabın bütün karakterleri girişini kaybeder. Engelli ve süreli kapalı hesapları listelemek ve banı kaldırmak:

SELECT id, login, status, availDt FROM account.account
WHERE status <> 'OK' OR availDt > NOW();

UPDATE account.account SET status = 'OK', availDt = NOW()
WHERE login = 'hesapadi' LIMIT 1;

Ban atan sorgular ve karakter adından hesabı bulup banlamak MySQL ile sık yapılan işlemler yazısında. Tabloda banın sebebini tutacak bir sütun yoktur; kimin, ne zaman ve neden kapatıldığını ayrı bir yerde kayda geçirmek sonradan gelecek itirazlarda işe yarar. GM komutlarının seviyeleri GM komutları sayfasında.

BANIP dosyası MySQL'de değil, auth çekirdeğinin klasöründedir ve yalnız auth açılırken okunur. Her satır tek bir IP ya da sekmeyle ayrılmış bir başlangıç ve bitiş IP'sidir; son satır da satır sonuyla bitmelidir. Listedeki adreslerden gelen bağlantıyı auth hiçbir şey sormadan kapatır.

Karakter silme kodu: social_id

Oyuncu bir karakteri silerken yazdığı kod, social_id sütununun son 7 karakteriyle karşılaştırılır. social_id 7 karakterden kısaysa, örneğin kayıtta boş bırakılmışsa, o hesapta hiçbir karakter silinemez; web sitesinin kayıt formu bu alanı mutlaka doldurmalıdır. Silme ayrıca db'nin conf.txt'sindeki seviye sınırına bağlıdır (db conf.txt).

Oyuncu kodunu unuttuysa yeni kod SQL ile yazılır, ama yalnız hesabın gerçekten ona ait olduğu doğrulandıktan sonra. Oyuncu tarafındaki adımlar karakter silme yazısında.

CONFIG'deki SHUTDOWN_ENABLE satırı Kore'ye özgü bir yaş denetimini açar. Açıkken social_id 13 haneli bir kimlik numarası gibi denetlenir ve 7 karakterlik kodu olan hesaplar giriş yapamaz; özel sunucuda bu satır kapalı kalmalıdır.

Süreli bonuslar: *_expire sütunları

Sütun Oyundaki etkisi
silver_expire Canavarlardan gelen tecrübe %50 fazla
gold_expire Eşya düşme şansı iki katı
safebox_expire Depo 3 sayfa açılır
autoloot_expire Düşen Yang kendiliğinden toplanır
fish_mind_expire Balıkçılıkta daha değerli balık çıkma şansı artar
marriage_fast_expire Evlilikte sevgi puanı daha hızlı artar
money_drop_rate_expire Yang düşme şansı iki katı

Adlar yanıltıcıdır: silver_expire tecrübe, gold_expire eşya düşmesi içindir. Değerler girişte okunur; bitiş zamanı geçmişse ya da sıfır tarihse bonus yoktur, oyuncu oyundayken değiştirilen süre bir sonraki girişte geçerli olur. Otomatik Yang toplamayı herkese açan derlemelerde (ENABLE_GOLD_REWARD_RENEWAL) autoloot_expire etkisizdir. Etkinliklerde oranları değiştiren bayrakların bu bonuslu oyuncular için ayrı _buyer sürümleri vardır (oranlar ayarı).

UPDATE account.account SET silver_expire = DATE_ADD(NOW(), INTERVAL 7 DAY)
WHERE login = 'hesapadi' LIMIT 1;

cash: bakiye

cash oyun çekirdeğinin okumadığı bir bakiyedir; web sitesindeki nesne marketi ya da yönetim paneli kullanır. Oyundan yalnız pc.charge_cash(miktar) quest fonksiyonu bu sütunu artırır; fonksiyon tek seferde 1 ile 50.000 arasını kabul eder. İkinci parametreye "mileage" yazılırsa tabloda olmayan bir sütuna yazmaya çalışır ve sorgu hata verir.

Parola alanı nasıl tutulur?

password sütununda parolanın kendisi değil özeti durur: başında yıldız olan 41 karakter. Bu, MySQL 4.1'in eski PASSWORD() biçimidir, yani parolanın SHA1 özetinin bir kez daha SHA1 özeti. Auth giriş sırasında oyuncunun yazdığı parolanın özetini kendisi hesaplar ve sütundakiyle karşılaştırır; bu yüzden MySQL sürümünde PASSWORD() fonksiyonunun bulunup bulunmaması önemli değildir. Auth parolanın yalnız ilk 16 karakterini kullanır, kayıt formu da 16 karakterden uzun parolayı kabul etmemelidir; aksi halde oyuncu hiç giriş yapamaz.

Bu biçim tuzsuz ve hızlıdır: aynı parolayı kullanan iki hesabın özeti aynıdır ve sızan bir veritabanında zayıf parolalar kısa sürede bulunur. Biçimi değiştirmek auth'un giriş sorgusunu değiştiren bir kaynak kod işidir. O yapılana kadar alınabilecek önlemler:

  • Kayıtta ve parola değiştirmede en az 10 karakterlik, harf ve rakam karışık parola iste (16'ya kadar).
  • Parolayı hiçbir yerde düz metin saklama, e-postayla gönderme, günlüğe yazdırma; özeti sunucu tarafında üret.
  • account veritabanına yalnız oyunun kullanıcısı ve yerelden bağlanan yönetici erişsin. Yedekleri ve sunucu günlüklerini de gizli tut; auth'un giriş sorgusu bazı durumlarda günlüğe düşer (log veritabanı).
  • Bir sızıntıdan şüphelenirsen bütün oyunculardan parolalarını değiştirmelerini iste.

Depo şifresi farklıdır: player.safebox.password 6 karakterlik ve düz metindir, boşsa 000000 geçerli sayılır. Bu yüzden player veritabanı da hesap verisi kadar gizli tutulmalıdır. Oyunculara verilecek şifre önerileri hesap güvenliği yazısında.

Hesapla bağlantılı diğer tablolar

Tablo Veritabanı Görevi
player_index player Hesabın karakter yuvaları ve krallığı; ilk girişte açılır (player tablosu)
safebox player Depo sayfa sayısı ve depo şifresi
item (SAFEBOX, MALL) player Depo eşyaları; owner_id = account.id
item_award player Hesaba gönderilen eşyalar; hesap adıyla eşleşir
gmlist common GM'ler; mAccount hesap adıdır (GM yapma)
block_exception, iptocountry account Ülke IP engeli ve ondan muaf hesaplar
GameTime, GameTimeIP, GameTimeLog account Eski ücretli oyun süresi sistemi, kullanılmaz

Sık sorulan sorular

Metin2'de ban nasıl atılır?
Kalıcı ban için account tablosunda hesabın status değeri BLOCK yapılır, süreli ban için availDt sütununa bitiş zamanı yazılır. İkisi de oyuncunun bir sonraki girişinde geçerli olur; oyuncu o sırada oyundaysa bir GM'in /dc ile bağlantısını kesmesi gerekir. Ban hesaba işler, hesabın bütün karakterleri girişini kaybeder.
Metin2'de ban nasıl kaldırılır?
status değeri yeniden OK, availDt ise şimdiki zaman ya da geçmiş bir tarih yapılır: UPDATE account.account SET status = 'OK', availDt = NOW() WHERE login = 'hesapadi' LIMIT 1. Değişiklik bir sonraki girişte geçerli olur, sunucuyu yeniden başlatmak gerekmez.
Karakter silme kodu unutulursa ne yapılır?
Kod account tablosunun social_id sütunundadır ve oyuncunun yazdığı kod bu sütunun son 7 karakteriyle karşılaştırılır. Hesabın gerçekten o oyuncuya ait olduğu doğrulandıktan sonra social_id'ye 7 karakterlik yeni bir kod yazılır.
Metin2 hesap şifresi veritabanında düz metin mi tutulur?
Hayır. password sütunu parolanın MySQL'in eski PASSWORD() biçimindeki özetini tutar: yıldızla başlayan 41 karakter. Ancak bu özet tuzsuz ve hızlıdır, sızan bir veritabanında zayıf parolalar kolayca bulunur. Depo şifresi ise player veritabanında düz metin durur.

İlgili sayfalar

Kategori: Server Kurma Server Kurulumu mysql sunucu yönetimi hesap güvenliği account tablosu ban

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.