Çözüldü REBOTTAN SONRA 4 TAŞ KAYBOLMA SORUNU

  • Konuyu açan Konuyu açan alemji21
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 8
  • Gösterim Gösterim 2K
Bu konu çözüme ulaştırılmıştır. Çözüm için konuya yazılan tüm yorumları okumayı unutmayın. Eğer konudaki yorumlar sorununuzu çözmediyse yeni bir konu açabilirsiniz.
Çözüm
MySQL item tablosuna yeni socket sütunlarını da eklediniz mi?
Ekleme: Linkte belirttiğiniz konuda sanki eksik kodlar var gibi. Bu sistem için başka yerlerden de düzenleme yapılması gerekiyordu ama tam hatırlamıyorum. Eski filesimde ki kodlara bakmam gerek.

db/src/cache.cpp dosyasında CItemCache::OnFlush() fonksiyonu içinde şu satırı aratın;
C++:
Genişlet Daralt Kopyala
        if (isSocket)
        {
            iLen += snprintf(szColumns + iLen, sizeof(szColumns) - iLen, ", socket0, socket1, socket2");
            iValueLen += snprintf(szValues + iValueLen, sizeof(szValues) - iValueLen,
                    ", %lu, %lu, %lu", p->alSockets[0], p->alSockets[1], p->alSockets[2]);
            iUpdateLen += snprintf(szUpdate + iUpdateLen...
Ekli olan tüm itemlerden dirke 4 taş siliniyor mu yoksa taş ekleyip reboot attıktan sonra o eklediğin itemdeki taşlarmı gidiyor ?
 
MySQL item tablosuna yeni socket sütunlarını da eklediniz mi?
Ekleme: Linkte belirttiğiniz konuda sanki eksik kodlar var gibi. Bu sistem için başka yerlerden de düzenleme yapılması gerekiyordu ama tam hatırlamıyorum. Eski filesimde ki kodlara bakmam gerek.

db/src/cache.cpp dosyasında CItemCache::OnFlush() fonksiyonu içinde şu satırı aratın;
C++:
Genişlet Daralt Kopyala
        if (isSocket)
        {
            iLen += snprintf(szColumns + iLen, sizeof(szColumns) - iLen, ", socket0, socket1, socket2");
            iValueLen += snprintf(szValues + iValueLen, sizeof(szValues) - iValueLen,
                    ", %lu, %lu, %lu", p->alSockets[0], p->alSockets[1], p->alSockets[2]);
            iUpdateLen += snprintf(szUpdate + iUpdateLen, sizeof(szUpdate) - iUpdateLen,
                    ", socket0=%lu, socket1=%lu, socket2=%lu", p->alSockets[0], p->alSockets[1], p->alSockets[2]);
        }

Şu şekilde düzenleyin;
C++:
Genişlet Daralt Kopyala
        if (isSocket)
        {
            iLen += snprintf(szColumns + iLen, sizeof(szColumns) - iLen, ", socket0, socket1, socket2, socket3");
            iValueLen += snprintf(szValues + iValueLen, sizeof(szValues) - iValueLen,
                    ", %lu, %lu, %lu, %lu", p->alSockets[0], p->alSockets[1], p->alSockets[2], p->alSockets[3]);
            iUpdateLen += snprintf(szUpdate + iUpdateLen, sizeof(szUpdate) - iUpdateLen,
                    ", socket0=%lu, socket1=%lu, socket2=%lu, socket3=%lu", p->alSockets[0], p->alSockets[1], p->alSockets[2], p->alSockets[3]);
        }
Bu kodları değiştirmemizin sebebi şu. Oyuna giriş yaptığınızda veritabanından itemleriniz çekilir ve bir önbelleğe alınır. Önbellekten kayıt işlemleri belli zaman aralıklarında yapılır. İlgili konuda burayla ilgili düzenleme verilmediği için son eklenen taşın silinmesi gayet normal. :)
 
Son düzenleme:
Çözüm
MySQL item tablosuna yeni socket sütunlarını da eklediniz mi?
Ekleme: Linkte belirttiğiniz konuda sanki eksik kodlar var gibi. Bu sistem için başka yerlerden de düzenleme yapılması gerekiyordu ama tam hatırlamıyorum. Eski filesimde ki kodlara bakmam gerek.

db/src/cache.cpp dosyasında CItemCache::OnFlush() fonksiyonu içinde şu satırı aratın;
C++:
Genişlet Daralt Kopyala
        if (isSocket)
        {
            iLen += snprintf(szColumns + iLen, sizeof(szColumns) - iLen, ", socket0, socket1, socket2");
            iValueLen += snprintf(szValues + iValueLen, sizeof(szValues) - iValueLen,
                    ", %lu, %lu, %lu", p->alSockets[0], p->alSockets[1], p->alSockets[2]);
            iUpdateLen += snprintf(szUpdate + iUpdateLen, sizeof(szUpdate) - iUpdateLen,
                    ", socket0=%lu, socket1=%lu, socket2=%lu", p->alSockets[0], p->alSockets[1], p->alSockets[2]);
        }

Şu şekilde düzenleyin;
C++:
Genişlet Daralt Kopyala
        if (isSocket)
        {
            iLen += snprintf(szColumns + iLen, sizeof(szColumns) - iLen, ", socket0, socket1, socket2, socket3");
            iValueLen += snprintf(szValues + iValueLen, sizeof(szValues) - iValueLen,
                    ", %lu, %lu, %lu, %lu", p->alSockets[0], p->alSockets[1], p->alSockets[2], p->alSockets[3]);
            iUpdateLen += snprintf(szUpdate + iUpdateLen, sizeof(szUpdate) - iUpdateLen,
                    ", socket0=%lu, socket1=%lu, socket2=%lu, socket3=%lu", p->alSockets[0], p->alSockets[1], p->alSockets[2], p->alSockets[3]);
        }
Bu kodları değiştirmemizin sebebi şu. Oyuna giriş yaptığınızda veritabanından itemleriniz çekilir ve bir önbelleğe alınır. Önbellekten kayıt işlemleri belli zaman aralıklarında yapılır. İlgili konuda burayla ilgili düzenleme verilmediği için son eklenen taşın silinmesi gayet normal. :)

Oyuna girerken hata alıyorum hocam
 
Oyunu açtıktan sonra filesin syserr kayıtlarına bir bakın. Bu dbyi ilgilendirdiği için db syserrlerine bir bakın bakalım hata filan var mı?
Birde db.core filan var mı onuda kontrol edin.
 
Oyunu açtıktan sonra filesin syserr kayıtlarına bir bakın. Bu dbyi ilgilendirdiği için db syserrlerine bir bakın bakalım hata filan var mı?
Birde db.core filan var mı onuda kontrol edin.
Sorunum çözülmüştür dediğiniz gibi db/src/cache.cpp Tek düzenlemem yeterli oldu teşekkürler. SORUN ÇÖZÜLDÜ.
 
En son bir moderatör tarafından düzenlenmiş:
Sorunum çözülmüştür dediğiniz gibi db/src/cache.cpp Tek düzenlemem yeterli oldu teşekkürler. SORUN ÇÖZÜLDÜ.

Önemli değil. :) İnsanlar paylaştığı şeyleri kontrol edip paylaşsa daha sağlıklı olacak. Piyasa da hep yarım yamalak sistem kodları dönüyor. Sizin sayenizde paylaşılan konuda ki eksikliği de görmüş olduk. Başkaları da sorun yaşamaması için o konuya da bilgi mesajı eklemem gerekecek.

Bir diğer eklemem gereken bir şey daha var.
İtem kaybının olmaması için oyunu kapatırken ilk önce kanalları en son dbyi açarkende ilk dbyi en son kanalları açın. ;)
 
Üst