Metin2 account Tablosu: Hesap Durumu, Ban ve Diğer Alanlar
Hazırlayan: Metin2VIP Editörleri Yayın: 6 dk okuma
İçindekiler
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
- Metin2 db conf.txt Ayarları: SQL Satırları, BIND_PORT ve ITEM_ID_RANGE (Server kurma)
- Metin2 Giriş Akışı: auth, db ve game; Giriş Hataları (Server kurma)
- Metin2 GM Nasıl Yapılır? gmlist Tablosu ve GM Yetki Seviyeleri (Server kurma)
- Metin2 Karakter Silme Kodu Nedir? Karakter Nasıl Silinir (Rehber)
- Metin2 EXP, Drop ve Yang Oranı Nasıl Ayarlanır? (Server kurma)
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?