İçeriğe geç

Metin2 player Tablosu: Sütunlar ve Anlamları

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

Kısaca: player tablosu her karakter için bir satır tutar: hesap numarası, ad, ırk, konum, seviye, tecrübe, Yang, statüler, beceri seviyeleri, hızlı erişim çubuğu, derece, at bilgisi ve oyun süresi. db çekirdeği satırı karakter oyuna girerken okur ve aralıklarla yazar; sub_skill_point ve part_main girişte yeniden hesaplanır, skill_level ve quickslot ikili veridir. Yang, tecrübe, statü puanı ve konum gibi sütunlar oyuncu çevrim dışıyken ve önbellek boşken değiştirilebilir; seviyeyi SQL ile değiştirmek statü puanı ve rastgele HP vermez.
İçindekiler
  1. Kimlik ve hesap sütunları
  2. Konum sütunları
  3. Seviye, tecrübe ve oyun süresi
  4. HP, SP ve dayanıklılık
  5. Statü sütunları
  6. Beceri sütunları ve hızlı erişim
  7. Görünüm, derece, Yang ve at
  8. Diğer sütunlar
  9. Hangi sütunlar elle değiştirilebilir?
  10. player_index ve player_deleted
  11. İlgili kod yerleri

player veritabanındaki player tablosu her karakter için bir satır tutar: kimin hesabına ait olduğu, ırkı, konumu, seviyesi, tecrübesi, Yang'ı, statüleri, beceri seviyeleri, hızlı erişim çubuğu, at bilgisi ve oyun süresi. db çekirdeği bu satırı karakter oyuna girerken okur, oyun sırasında da aralıklarla yazar. Sütunların hepsi aynı muameleyi görmez: bazıları girişte yeniden hesaplanır, bazıları yalnız yazılır, ikisi ikili veri tutar. Elle düzenlemeden önce hangisinin hangisi olduğunu bilmek gerekir.

Sütunlar sunucu paketinin player.sql şemasından, okuma ve yazma kuralları db ve oyun çekirdeklerinin kodundan gelir; tabloyu değiştirmemiş sunucularda aynıdır. Satırın ne zaman güvenle değiştirilebileceği Metin2'de MySQL nedir yazısında, beş veritabanının genel tanıtımı Metin2 veritabanları yazısında.

Kimlik ve hesap sütunları

Sütun Tür Anlamı
id int, otomatik Karakter numarası (PID). item.owner_id, quest.dwPID, affect.dwPID ve günlüklerdeki who bu numaradır
account_id int Hesabın account.id değeri; karakter seçim ekranındaki liste bu sütunla çekilir
name varchar(24) Karakter adı
job tinyint Irk ve cinsiyet (aşağıdaki tablo)
voice tinyint Karakter yaratılırken seçilen ses
change_name tinyint 1 ise oyuncu bu karakterle girmeden önce yeni ad seçmek zorundadır

job sütunu adının aksine sınıfı değil ırkı tutar, cinsiyet de içindedir:

job Karakter job Karakter
0 Savaşçı, erkek 4 Savaşçı, kadın
1 Ninja, kadın 5 Ninja, erkek
2 Sura, erkek 6 Sura, kadın
3 Şaman, kadın 7 Şaman, erkek
8 Lycan (Lycan açık derlemelerde)

Türkiye yerel ayarında karakter adı en az iki karakterdir ve yalnız İngiliz alfabesinin harfleriyle rakamlardan oluşur; yasaklı kelimeler ve canavar adları da reddedilir. Şemadaki MakeCharacter tetikleyicisi harf ve rakam dışında karakter içeren adı NULL yapar, bu yüzden böyle bir satır tabloya hiç eklenemez. Adı UPDATE ile değiştirmek yerine change_name sütununu 1 yapmak daha güvenlidir: oyun yeni adı kendi kurallarıyla ve başka bir karakterde kullanılıp kullanılmadığına bakarak denetler. Oyuncu tarafındaki ad değiştirme isim, krallık ve cinsiyet değiştirme yazısında.

Konum sütunları

x, y ve z karakterin konumu, map_index bulunduğu haritanın numarası, dir baktığı yöndür (0-7). x ve y harita içi konum değil dünya koordinatıdır: haritanın başlangıç noktasına (haritanın Setting.txt dosyasındaki BasePosition) harita içi konumun 100 katı eklenir. Shinsoo'nun başlangıç noktası olan 469300, 964200, BasePosition'ı 409600, 896000 olan Yongan Bölgesi'nde harita içi 597, 682'ye karşılık gelir.

exit_x, exit_y ve exit_map_index dönüş noktasıdır. map_index 10.000 ya da üstüyse karakter bir zindan kopyasında çıkmıştır ve oyun ona girişte bu dönüş noktasına ışınlar. Karakterin haritası bağlandığı kanalda açık değilse oyun onu krallığının başlangıç köyüne gönderir:

Krallık map_index x y
Shinsoo 1, Yongan Bölgesi 469300 964200
Chunjo 21, Joan Bölgesi 55700 157900
Jinno 41, Pyungmoo Bölgesi 969600 278400

Sıkışan bir karakteri köye almak için altı konum sütunu birlikte değiştirilir; sorgusu MySQL ile sık yapılan işlemler yazısında.

Seviye, tecrübe ve oyun süresi

Sütun Anlamı
level Seviye. Üst sınır CONFIG'deki MAX_LEVEL'dır; satır yoksa 99, yaygın paketlerin ortak ayar dosyasında 120
level_step Seviye içindeki çeyrek, 0-3. Tecrübe barının her çeyreğinde bir artar ve 1 statü puanı verir; dördüncü çeyrekte seviye atlanır ve sıfırlanır
exp Bulunulan seviyedeki tecrübe; seviye başına gereken miktar EXP tablosu sayfasında
playtime Toplam oyun süresi, dakika
last_play Son kaydın zamanı; oyun girişte karakterin ne kadar süredir çevrim dışı olduğunu buradan hesaplar

Çeyreklerin statü puanı vermesi, seviye CONFIG'deki STATUS_POINT_GET_LEVEL_LIMIT'i aşmadıkça sürer. Satır yazılmamışsa bu sınır 90'dır; yaygın paketlerin ortak ayar dosyasında 120 yazılıdır.

HP, SP ve dayanıklılık

hp ve mp karakterin o anki HP ve SP'sidir; SP'nin sütun adı mp'dir. Temel azami HP bu satırda tutulmaz, her girişte hesaplanır: sınıfın taban HP'si, random_hp ve Canlılık başına 40 HP; eşya ve efsun bonusları bunun üstüne eklenir. random_hp ve random_sp her seviye atlamada sınıfın aralığından eklenen rastgele artışların toplamıdır; varsayılan sınıf tablosunda bu aralık seviye başına 36-44 HP ve 18-22 SP'dir. stamina koşu dayanıklılığıdır.

Seviye SQL ile değiştirildiğinde random_hp ve random_sp kendiliğinden artmaz. 1. seviyeden 99'a SQL ile çıkarılan bir karakter, aynı seviyeye oynayarak gelmiş birine göre ortalama 98 × 40, yani yaklaşık 3.900 HP eksik kalır. Statülerin HP'ye ve saldırıya etkisi statü puanları yazısında.

Statü sütunları

Sütun Anlamı
st Güç
ht Canlılık
dx Çeviklik
iq Zeka
stat_point Dağıtılmamış statü puanı
stat_reset_count Dağıtılmış puanı geri alma hakkı; Kan Hapı bir artırır, her geri alma bir azaltır

Statü sütunları sınıfın başlangıç değeriyle dağıtılmış puanların toplamını tutar; eşyadan ve efsundan gelen bonus burada görünmez. Elle yazarken CONFIG'deki STATUS_POINT_SET_MAX_VALUE sınırına (varsayılan 90) uymak gerekir. Oyun karakteri yüklerken bu sınırı denetlemez, yalnız oyuncunun puan dağıtırken aşmasını engeller; 90'ın üstüne yazılan değer olduğu gibi geçerli olur.

Beceri sütunları ve hızlı erişim

Sütun Anlamı
skill_group Seçilen beceri yolu: 0 seçilmedi, 1 ya da 2
skill_point Dağıtılmamış beceri puanı
sub_skill_point Destek becerileri puanı; girişte yeniden hesaplanır
horse_skill_point At becerileri puanı
skill_level Bütün becerilerin seviyeleri, ikili veri
quickslot Hızlı erişim çubuğunun 36 yuvası, ikili veri

sub_skill_point elle değiştirilse de işe yaramaz. db karakteri yüklerken bu değeri baştan hesaplar: 9. seviyenin üstündeki her seviye için bir puan, eksi Liderlik, Madencilik, At Çağırma ve iki ek destek becerisine verilmiş puanlar. Hesapta bu becerilerin her biri en çok 20, At Çağırma en çok 10 puan sayılır.

skill_level her beceri için üç bilgi tutar: ustalık türü (normal, M, G, P), seviye ve bir sonraki beceri kitabının okunabileceği zaman. Kitap okuma bekleme süresi bu yüzden karakterle birlikte saklanır. Sütun ikili olduğu için tek bir beceriyi SQL ile değiştirmek pratik değildir; beceri seviyesi oyunda GM komutuyla ya da quest ile değiştirilir. Seviye düzeni beceri seviyeleri yazısında. quickslot da her yuva için tür ve konum tutan ikili bir alandır.

Görünüm, derece, Yang ve at

Sütun Anlamı
part_main Zırh görünümü; kaydedilir ama girişte okunmaz, giyilen zırhtan yeniden hesaplanır
part_base Karakter yaratılırken seçilen görünüm (0 ya da 1)
part_hair Saç görünümü
part_acce Kuşak görünümü; kuşak sistemini kuran güncellemeyle eklenir
alignment Derece puanı, 10 katı olarak: 120000 oyunda 12.000 (Kahraman) görünür
gold Yang
horse_level At seviyesi; 0 at yok, en çok 30
horse_riding 1 ise karakter atın üstündeyken kaydedilmiştir
horse_hp, horse_stamina, horse_hp_droptime Atın canı, dayanıklılığı ve canının azalmasıyla ilgili zaman

Bir karakter en çok 1.999.999.999 Yang taşıyabilir. Toplamı 2.000.000.000'a ulaştıracak her artış reddedilir ve log veritabanına OVERFLOW_GOLD kaydı düşer. gold sütunu bu sınırın üstünde bir değer alabilir, ama karakter o andan sonra hiç Yang kazanamaz. Derece puanının anlamı derece puanı, at seviyeleri at sistemi yazısında. Atın adı ayrı horse_name tablosunda, karakter numarasıyla tutulur.

Diğer sütunlar

ip karakterin en son bağlandığı IP adresidir; oyun her kayıtta yazar ama girişte okumaz. Kişisel veri olduğu için bu sütunu içeren dökümler paylaşılmamalıdır. mobile eski SMS sisteminden kalmıştır: okunur ama yazılmaz ve özel sunucularda boş kalır.

Hangi sütunlar elle değiştirilebilir?

Aşağıdaki tablo, oyuncu çevrim dışıyken ve db önbelleği boşken (çıkıştan 10 dakika sonra ya da sunucu kapalıyken) geçerlidir.

Sütun Elle değişir mi? Dikkat
gold, exp, stat_point, skill_point Evet Yang 1.999.999.999'u geçmesin; exp bulunulan seviyenin ihtiyacından küçük olsun
alignment Evet 10 katı yazılır
map_index, x, y, exit_* Evet Altısı birlikte
change_name Evet Adı değiştirmenin güvenli yolu
st, ht, dx, iq Evet 90 sınırı ve dağıtılmış puan dengesi
horse_level Evet 0-30
level Dikkatle Statü puanı, beceri puanı ve rastgele HP-SP gelmez
sub_skill_point Hayır Girişte yeniden hesaplanır
part_main Hayır Giyilen zırhtan gelir
skill_level, quickslot Hayır İkili veri
id, account_id Hayır player_index ile birlikte anlam taşır
name Doğrudan değil change_name kullanılır
ip, last_play, playtime Gerek yok Oyun her kayıtta yazar

Seviyeyi puanlarıyla birlikte yükseltmenin yolları ve hazır sorgular da MySQL ile sık yapılan işlemler yazısında.

player_index ve player_deleted

player_index hesap başına bir satırdır: id hesap numarası, pid1-pid5 karakter yuvaları, empire seçilen krallık (1 Shinsoo, 2 Chunjo, 3 Jinno, 0 henüz seçilmedi). Satırı db hesabın ilk girişinde kendisi açar; beşinci yuva sonradan gelen bir güncellemeyle eklenir. Karakter listesi player.account_id ile, seçilen karakterin yüklenmesi ise pidN ile yapılır. Bu yüzden bir karakteri elle başka bir hesaba taşımak iki tabloyu birlikte değiştirmeyi gerektirir ve önerilmez.

player_deleted silinen karakterlerin satırlarını saklar. Karakter silinince satır INSERT INTO player_deleted SELECT * FROM player ile buraya kopyalanır; envanter, ekipman, simya ve kemer eşyaları ise silinir, görev ve etki kayıtları da gider. Bu yüzden player'a eklenen her sütun player_deleted'a da eklenmelidir, yoksa karakter silme başarısız olur. Oyuncu tarafı karakter silme yazısında, karakterin eşyalarını tutan tablo item tablosu yazısında.

İlgili kod yerleri

  • Yükleme sorgusu ve sütun sırası: db/src/ClientManagerPlayer.cpp, QUERY_PLAYER_LOAD ve CreatePlayerTableFromRes. sub_skill_point hesabı da buradadır.
  • Kayıt sorgusu: aynı dosyada CreatePlayerSaveQuery. Hangi sütunun yazılıp hangisinin yazılmadığı buradan görülür.
  • Önbellek ve yazma aralıkları: db/src/Cache.cpp ve db/src/Main.cpp.
  • Oyun tarafı: game/src/char.cpp içinde CreatePlayerProto kaydedilecek değerleri toplar, SetPlayerProto yüklenen değerleri karaktere işler.
  • Tabloya yeni sütun eklenirken bu yerler, common/tables.h'deki TPlayerTable yapısı ve player_deleted tablosu birlikte değişir.

Sık sorulan sorular

Metin2 player tablosunda karakter adı nasıl değiştirilir?
Adı doğrudan UPDATE ile değiştirmek yerine karakterin change_name sütunu 1 yapılır. Oyuncu bu karakterle girmeden önce karakter seçim ekranında yeni bir ad seçmek zorunda kalır; oyun adı harf ve rakam kuralına, yasaklı kelimelere ve başka karakterde kullanılıp kullanılmadığına göre kendisi denetler.
SQL ile seviyeyi yükselttim ama statü puanı gelmedi, neden?
Statü puanı, beceri puanı ve rastgele HP-SP artışı seviye atlanırken oyun tarafından verilir; level sütununu değiştirmek bunların hiçbirini yapmaz. Oyuncu oyundayken IMPLEMENTOR GM'in /set ile tecrübe vermesi seviye atlamalarını oyunun kendisine yaptırır; SQL ile yükseltilecekse stat_point, skill_point ve random_hp ayrıca ayarlanır.
player tablosundaki ip sütunu ne işe yarar?
Karakterin en son bağlandığı IP adresini tutar. Oyun her kayıtta yazar ama girişte okumaz; oyun mekaniğinde bir etkisi yoktur. Kişisel veri olduğu için bu sütunu içeren dökümler paylaşılmamalıdır.

İlgili sayfalar

Kategori: Server Kurma Server Kurulumu veritabanı mysql sunucu yönetimi karakter player tablosu

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.