xranzei 1
xranzei
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Vahsi Uzman 1
Vahsi Uzman
Hikaye Ekle

Cevaplandı player.item

  • Konuyu başlatan Konuyu başlatan zalo25252
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 5
  • Görüntüleme Görüntüleme 149

HERAKLES Otomatik Avlı kalıcı sunucu. 19 Haziran'da açılıyor. Atius & Wizard güvencesiyle hemen kayıt ol, ön kayıt ödülleri aktif. HEMEN TIKLA!

Oyun içerisinde envantere gelen veya giden itemler kaç dk sonra veritabanına yazılıyor?
 
Çözüm
Bu sürenin uzeltilmasi veya kısaltılması ne gibi sorunlara yol açar

1. Süreyi Kısaltırsan (Örneğin: 5 dakikadan 30 saniyeye)


Avantajlar:​


  • Veri kaybı riski azalır. Sunucu çökse bile son işlemler büyük ihtimalle kayıtlı olur.
  • Hilecilerin hızlı item çekip çıkma taktiklerini engellemeye yardımcı olabilir.
  • Özellikle PVP sunucularda oyuncuların yaptığı ticaret/loglar daha güvenli olur.

Dezavantajlar:​


  • MySQL'e aşırı yük biner. Her karakter için 30 saniyede bir veritabanına yazmak, oyuncu sayısı fazlaysa performansı düşürür.
  • Disk I/O artar → SSD kullanmıyorsan sunucu yavaşlar.
  • Sunucunun gecikme sürelerinde artış olabilir (özellikle yüksek oyunculu ortamlarda)...
db/cache.cpp de bulunuyor CItemTable olması gerekli burada yazar delayi
CPlayerTableCache::CPlayerTableCache()
{
m_expireTime = MIN(1800, g_iPlayerCacheFlushSeconds);
}

CPlayerTableCache::~CPlayerTableCache()
{
} tam olarak kaç dakika burada ki 1800 hangi format saniye mi

saniye olarak varsayarsak 30 dakika olarak gösteriyor. Ben şöyle birşey yaptım benim tablo yapıları MylSAM ben İnnoDB yaptım ve bu süre 6 dakikya kadar düşmüş oldu ne tür sorunlara yol açabilir
 
Oyun içerisinde envantere gelen veya giden itemler kaç dk sonra veritabanına yazılıyor?
  1. game/src/char.cpp veya char_manager.cpp içinde:
    cpp
    KopyalaDüzenle
    void CHARACTER::Save()
    ve
    cpp
    KopyalaDüzenle
    void CCharManager::Update(int iPulse)
    fonksiyonlarına bakılır. Burada her x milisaniyede bir çağrılan Update() fonksiyonu içinde karakter bilgisi veritabanına yazılır.
  2. Pulse Zamanı (örnek):
    cpp
    KopyalaDüzenle
    #define PASSES_P#define 25
    Bu, saniyede 25 tick demek. Yani Update() fonksiyonu her 10 saniyede bir çağrılıyorsa:
    cpp
    KopyalaDüzenle
    if (++m_iUpdateCounter >= 250) // 250 / 25 = 10 saniye
    {
    // Save character
    }



📁 Nerede Tanımlıdır?​


  • C++ Kaynak Kodları: char.cpp, char_manager.cpp, desc.cpp, item.cpp
  • game binary ile build edilmiş olduğundan, kod erişimin yoksa bu ayar doğrudan değiştirilemez.
  • Ancak paketlenmiş sunucularda bu kayıt sıklığı genellikle 10-15 saniyede bir olarak bırakılır.
 
  1. game/src/char.cpp veya char_manager.cpp içinde:
    cpp
    KopyalaDüzenle
    void CHARACTER::Save()
    ve
    cpp
    KopyalaDüzenle
    void CCharManager::Update(int iPulse)
    fonksiyonlarına bakılır. Burada her x milisaniyede bir çağrılan Update() fonksiyonu içinde karakter bilgisi veritabanına yazılır.
  2. Pulse Zamanı (örnek):
    cpp
    KopyalaDüzenle
    #define PASSES_P#define 25
    Bu, saniyede 25 tick demek. Yani Update() fonksiyonu her 10 saniyede bir çağrılıyorsa:
    cpp
    KopyalaDüzenle
    if (++m_iUpdateCounter >= 250) // 250 / 25 = 10 saniye
    {
    // Save character
    }



📁 Nerede Tanımlıdır?​


  • C++ Kaynak Kodları: char.cpp, char_manager.cpp, desc.cpp, item.cpp
  • game binary ile build edilmiş olduğundan, kod erişimin yoksa bu ayar doğrudan değiştirilemez.
  • Ancak paketlenmiş sunucularda bu kayıt sıklığı genellikle 10-15 saniyede bir olarak bırakılır.
Bu sürenin uzeltilmasi veya kısaltılması ne gibi sorunlara yol açar
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst