Metin2 player Tablosu: Sütunlar ve Anlamları
Hazırlayan: Metin2VIP Editörleri Yayın: 7 dk okuma
İçindekiler
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_LOADveCreatePlayerTableFromRes.sub_skill_pointhesabı 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.cppvedb/src/Main.cpp. - Oyun tarafı:
game/src/char.cppiçindeCreatePlayerProtokaydedilecek değerleri toplar,SetPlayerProtoyüklenen değerleri karaktere işler. - Tabloya yeni sütun eklenirken bu yerler,
common/tables.h'dekiTPlayerTableyapısı veplayer_deletedtablosu 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
- Metin2 At Sistemi: At Seviyeleri, Bonuslar, Besleme ve Ehliyet (Wiki)
- Metin2 Beceri Seviyeleri: Normal, M, G ve P Nasıl Yükselir? (Wiki)
- Metin2 Derece Puanı: Nasıl Artar, Nasıl Düşer, Dereceler Neler? (Wiki)
- Metin2'de İsim, Krallık ve Cinsiyet Nasıl Değiştirilir? (Rehber)
- Metin2 Karakter Silme Kodu Nedir? Karakter Nasıl Silinir (Rehber)
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?