İlan
04 Haz 2026 19 çevrimiçi üye Duyurular
Ana Sayfa C++ / C# / Python
Ana Sayfa Forum C++ / C# / Python Bilgi İşlem Alanının İhtiyaçları: - db Cache ve C...
İlan Yan banner placeholder

Bilgi İşlem Alanının İhtiyaçları: - db Cache ve Clientmager fmt format çevirelim ve işlemler daha kolay olsun

Flamma 13.03.2026 03:53 566 görüntüleme 29 cevap
Son Mesaj
Flamma
Üye
Üye
Katılım06 Şub 2026
Konular8
Mesajlar81
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
08.05.2026 00:39 #23
Bu arada mariadb geçince log.cpp içerisindeki REPLACE INTO yazan yerleri INSERT INTO ile değiştirin yoksa game içerisinde hiçbir logu kaydetmez sürekli failed replcae into log command log gibi yazılar çıkar
Flamma
Üye
Üye
Katılım06 Şub 2026
Konular8
Mesajlar81
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
08.05.2026 00:39 #24
N2playdede mevcut ama n2play heryeri farkli kutuphane tabi konudaki az başka yerlerde olabilir
olabilir göz atmadım ama ben sadece item.sql için gördüm ve sorun yoktu hızlı kayıt yapıyordu başka yerler içinde olabilir mesela offline shop için veyada mail box yada ne ekli ise BABA sql ler için yapılırsa daha iyi olur
MyZiFiR
Üye
Üye
Katılım18 Mar 2026
Konular7
Mesajlar54
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
08.05.2026 00:39 #25
N2playdede mevcut ama n2play heryeri farkli kutuphane tabi konudaki az başka yerlerde olabilir
N2play spdlog kullanıyor bu yüzden onlar fmtye spdlog üzerinden erişiyor. Spdlog ise log yazma işleri için fmtyi kullanıyor

Ayrıca fmt kullanmak isteyenler 10.x öncesi sürümleri kullanmalı yoksa FMT_COMPILE kullanımında hata ile karşılaşır. Ek olarak ise FMT_COMPILE gibi derleme zamanı macrosu kullanmak isterseniz ve hızlı derleme olsun gecikme yaşanmasın istiyorsanız statik olarak fmt libini kullanmalısınız.
Flamma
Üye
Üye
Katılım06 Şub 2026
Konular8
Mesajlar81
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
08.05.2026 00:39 #26
MariaDb için

cache.cpp içerisine
#i#includesstream>
#i#includefmt/fmt.h> ekle

void CItemCache::OnFlush()
Onflush:
void CItemCache::OnFlush()
{
    if (m_data.vnum == 0)
    {
        char szQuery[QUERY_MAX_LEN];
        snprintf(szQuery, sizeof(szQuery), "DELETE FROM item%s WHERE id=%u", GetTablePostfix(), m_data.id);
        CDBManager::instance().ReturnQuery(szQuery, QID_ITEM_DESTROY, 0, NULL);

        if (g_test_server)
            sys_log(0, "ItemCache::Flush : DELETE %u %s", m_data.id, szQuery);
    }
    else
    {
        TPlayerItem *p = &m_data;
        const auto setQuery = fmt::format(FMT_COMPILE("id={}, owner_id={}, `window`={}, pos={}, count={}, vnum={}, transmutation={}, socket0={}, socket1={}, socket2={}, "
                                                        "attrtype0={}, attrvalue0={}, "
                                                        "attrtype1={}, attrvalue1={}, "
                                                        "attrtype2={}, attrvalue2={}, "
                                                        "attrtype3={}, attrvalue3={}, "
                                                        "attrtype4={}, attrvalue4={}, "
                                                        "attrtype5={}, attrvalue5={}, "
                                                        "attrtype6={}, attrvalue6={}, "
                                                        "`refine_element_apply_type`={}"
                                                        ", `refine_element_grade`={}"
                                                        ", `refine_element_value0`={}, `refine_element_value1`={}, `refine_element_value2`={}"
                                                        ", `refine_element_bonus_value0`={}, `refine_element_bonus_value1`={}, `refine_element_bonus_value2`={}"
                                                        )
                                                        , p->id,
                                                        p->owner,
                                                        p->window,
                                                        p->pos,
                                                        p->count,
                                                        p->vnum,
                                                        p->dwTransmutationVnum,
                                                        p->alSockets[0],
                                                        p->alSockets[1],
                                                        p->alSockets[2],
                                                        p->aAttr[0].bType, p->aAttr[0].sValue,
                                                        p->aAttr[1].bType, p->aAttr[1].sValue,
                                                        p->aAttr[2].bType, p->aAttr[2].sValue,
                                                        p->aAttr[3].bType, p->aAttr[3].sValue,
                                                        p->aAttr[4].bType, p->aAttr[4].sValue,
                                                        p->aAttr[5].bType, p->aAttr[5].sValue,
                                                        p->aAttr[6].bType, p->aAttr[6].sValue,
                                                        p->RefineElement.wApplyType
                                                        , p->RefineElement.bGrade
                                                        , p->RefineElement.abValue[0], p->RefineElement.abValue[1], p->RefineElement.abValue[2]
                                                        , p->RefineElement.abBonusValue[0], p->RefineElement.abBonusValue[1], p->RefineElement.abBonusValue[2]
        );

        const auto itemQuery = fmt::format(FMT_COMPILE("INSERT INTO item{} SET {} ON DUPLICATE KEY UPDATE {}"),
                                                        GetTablePostfix(), setQuery, setQuery);

        if (g_test_server)
            sys_log(0, "ItemCache::Flush :REPLACE  (%s)", itemQuery.c_str());

        CDBManager::instance().ReturnQuery(itemQuery.c_str(), QID_ITEM_SAVE, 0, NULL);

        ++g_item_count;
    }

    m_bNeedQuery = false;
}

fonksiyonunu kendine göre düzenle

sonra

ClientManager.cpp içerisinde

void CClientManager::QUERY_ITEM_SAVE(CPeer * pkPeer, const char * c_pData)

arat

void CClientManager::QUERY_ITEM_SAVE(CPeer * pkPeer, const char * c_pData):
void CClientManager::QUERY_ITEM_SAVE(CPeer * pkPeer, const char * c_pData)
{
    TPlayerItem * p = (TPlayerItem *) c_pData;

    if (p->window == SAFEBOX || p->window == MALL)
    {
        CItemCache * c = GetItemCache(p->id);

        if (c)
        {
            TItemCacheSetPtrMap::iterator it = m_map_pkItemCacheSetPtr.find(c->Get()->owner);

            if (it != m_map_pkItemCacheSetPtr.end())
            {
                if (g_test_server)
                    sys_log(0, "ITEM_CACHE: safebox owner %u id %u", c->Get()->owner, c->Get()->id);

                it->second->erase(c);
            }

            m_map_itemCache.erase(p->id);

            delete c;
        }

        const auto setQuery = fmt::format(FMT_COMPILE("id={}, owner_id={}, `window`={}, pos={}, count={}, vnum={}, transmutation={}, socket0={}, socket1={}, socket2={}, "
                                                        "attrtype0={}, attrvalue0={}, "
                                                        "attrtype1={}, attrvalue1={}, "
                                                        "attrtype2={}, attrvalue2={}, "
                                                        "attrtype3={}, attrvalue3={}, "
                                                        "attrtype4={}, attrvalue4={}, "
                                                        "attrtype5={}, attrvalue5={}, "
                                                        "attrtype6={}, attrvalue6={} "
                                                        
                                                        )
                                                        , p->id,
                                                        p->owner,
                                                        p->window,
                                                        p->pos,
                                                        p->count,
                                                        p->vnum,
                                                        p->alSockets[0],
                                                        p->alSockets[1],
                                                        p->alSockets[2],
                                                        p->aAttr[0].bType, p->aAttr[0].sValue,
                                                        p->aAttr[1].bType, p->aAttr[1].sValue,
                                                        p->aAttr[2].bType, p->aAttr[2].sValue,
                                                        p->aAttr[3].bType, p->aAttr[3].sValue,
                                                        p->aAttr[4].bType, p->aAttr[4].sValue,
                                                        p->aAttr[5].bType, p->aAttr[5].sValue,
                                                        p->aAttr[6].bType, p->aAttr[6].sValue
        );

        const auto itemQuery = fmt::format(FMT_COMPILE("INSERT INTO item{} SET {} ON DUPLICATE KEY UPDATE {}"),
                                                        GetTablePostfix(), setQuery, setQuery);

        if (g_test_server)
            sys_log(0, "QUERY_ITEM_SAVE :REPLACE  (%s)", itemQuery.c_str());
        CDBManager::instance().ReturnQuery(itemQuery.c_str(), QID_ITEM_SAVE, pkPeer->GetHandle(), NULL);
    }
    else
    {
        if (g_test_server)
            sys_log(0, "QUERY_ITEM_SAVE => PutItemCache() owner %d id %d vnum %d ", p->owner, p->id, p->vnum);

        PutItemCache(p);
    }
}

Kendinize göre düzenleyinn....

fmt kütüphanesini martysama dan alabilirsiniz.. o uzun uzun %ld %d gibi yazmak yerine artık socket1{} içerisine almış oldu işlemler fmt formatında daha hızlı ve dinamik olur

Kütüphaneyi extern/include kütüphanesine atmayı unutmayın
lastasmile
Üye
Üye
Katılım13 Ara 2025
Konular6
Mesajlar66
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
08.05.2026 00:39 #27
N2playdede mevcut ama n2play heryeri farkli kutuphane tabi konudaki az başka yerlerde olabilir
Flamma
Üye
Üye
Katılım06 Şub 2026
Konular8
Mesajlar81
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
08.05.2026 00:39 #28
Bu arada mariadb geçince log.cpp içerisindeki REPLACE INTO yazan yerleri INSERT INTO ile değiştirin yoksa game içerisinde hiçbir logu kaydetmez sürekli failed replcae into log command log gibi yazılar çıkar
Flamma
Üye
Üye
Katılım06 Şub 2026
Konular8
Mesajlar81
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
08.05.2026 00:39 #29
N2playdede mevcut ama n2play heryeri farkli kutuphane tabi konudaki az başka yerlerde olabilir
olabilir göz atmadım ama ben sadece item.sql için gördüm ve sorun yoktu hızlı kayıt yapıyordu başka yerler içinde olabilir mesela offline shop için veyada mail box yada ne ekli ise BABA sql ler için yapılırsa daha iyi olur
Bu konuyu görüntüleyenler
1 misafir
Cevap yazmak için giriş yapın.
Benzer Konular
6 cevap
2K görüntüleme
9 cevap
1.9K görüntüleme
4 cevap
1.9K görüntüleme
8 cevap
1.9K görüntüleme
İlan Yan banner placeholder